Topic : The ATARI Compendium Author : Scott Sanders / JAY Software Version : 1.25 (20/6/2003) Subject : Documentation Nodes : 1117 Index Size : 32614 HCP-Version : 6 Compiled on : Atari @charset : UTF-8 @lang : en @default : @help : %About @options : +g -i -t4 +y +z @width : 100 View Ref-File /* Example Form CPX Skeleton */ #include "skel.h" #include "skel.rsh" #include <cpxdata.h> CPXINFO *cpx_init(); BOOLEAN cpx_call(); XCPB *xcpb; CPXINFO cpxinfo; CPXINFO *cpx_init( Xcpb ) XCPB *Xcpb; { xcpb = Xcpb; appl_init(); if(xcpb->booting) { /* CPX's that do boot-time initialization do it here */ /* Returning TRUE here tells XCONTROL to retain the header * for later access by the user. If CPX is Set-Only, * return FALSE. */ return ( (CPXINFO *) TRUE ) } else { /* If you haven't already done so, fix resource tree. * * DEFINE's and variables are from an RSH file generated * by the Atari Resource Construction Set. */ if(!SkipRshFix) (*xcpb->rsh_fix)( NUM_OBS, NUM_FRSTR, NUM_FRIMG, NUM_TREE, rs_object, rs_tedinfo, rs_strings, rs_iconblk, rs_bitblk, rs_frstr, rs_frimg, s_trindex, rs_imdope ); cpxinfo.cpx_call = cpx_call; cpxinfo.cpx_draw = NULL; cpxinfo.cpx_wmove = NULL; cpxinfo.cpx_timer = NULL; cpxinfo.cpx_key = NULL; cpxinfo.cpx_button = NULL; cpxinfo.cpx_m1 = NULL; cpxinfo.cpx_m2 = NULL; cpxinfo.cpx_hook = NULL; cpxinfo.cpx_close = NULL; /* Tell XCONTROL to send generic and keyboard * messages. */ return ( &cpxinfo ); } } BOOLEAN cpx_call( rect ) GRECT *rect; { /* Put MAINFORM tree in *tree for object macros */ OBJECT *tree = (OBJECT *)rs_trindex[ MAINFORM ]; WORD button, quit = FALSE; WORD msg[8]; ObX( ROOT ) = rect->g_x; ObY( ROOT ) = rect->g_y; objc_draw( tree, ROOT, MAX_DEPTH, PTRS( rect ) ); do { button = (*xcpb->Xform_do)( tree, 0, msg ); /* Be sure and mask off double-clicks if you're * not interested in them. */ if( ( button & 0x8000 ) && ( button != 0xFFFF ) ) { button &= 0x7FFF; button &= 0x7FFF; switch( button ) { /* Check for EXIT or TOUCHEXIT resource objects */ case OK: break; case CANCEL: break; case -1: switch( msg[0] ) { case WM_REDRAW: break; case AC_CLOSE: quit = TRUE; break; case WM_CLOSED: quit = TRUE; break; case CT_KEY: break; } break; } } while( !quit ); return( FALSE ); }