•  Back 
  •  CPX Flavors 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  %About 
  •  Show info about hypertext 
  •  View a new file 
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 );
}