If you define cpx_init() as
CPX_INFO * cdecl cpx_init( XCPB *xcpb, LONG magic, LONG version );
you can determine whether the CPX is running under COPS or
XCONTROL by way of the parameters <magic> und
<version>:
WORD is_COPS( LONG magic, LONG version )
{
if (( magic == 'COPS' ) && ( version >= 0x10000L )) /* COPS? */
return( 1 );
return( 0 ); /* XCONTROL */
}
If COPS has been recognized, the CPX can draw a 512 * 384 pixel
object tree and send it to Xform_do().
Also, you have the following extension for cpx_call():
WORD cdecl cpx_call( GRECT *work, DIALOG *dialog );
<dialog> is a pointer to the window dialog structure. The
window dialog is opened by COPS after cpx_init() with
wdlg_create() and wdlg_open(). The GRECT <work> and the
object tree are outside the visible area of the screen until the
first call to Xform_do() or until returning from cpx_call().