home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / INCLUDE / CLIPAPI.H < prev    next >
C/C++ Source or Header  |  1994-06-02  |  18KB  |  585 lines

  1. ////////////////////////////////////////////////////////////////////////////////
  2. //   Clipper API ver 1.0                           Fco.Pulpón, A.Linares      //
  3. ////////////////////////////////////////////////////////////////////////////////
  4.  
  5. #ifndef _CLIPAPI_H
  6. #define _CLIPAPI_H
  7.  
  8. // Some xBase for C language!
  9. #define IF(x,y,z) ((x)?(y):(z))
  10.  
  11. #define MAX( a, b ) ( int ) (((int)(a) > (int)(b)) ? (a) : (b))
  12. #define MIN( a, b ) ( int ) (((int)(a) < (int)(b)) ? (a) : (b))
  13.  
  14. // Types for wType in generic struct CLIPVAR
  15. #define NIL             0x0000
  16. #define NUMERIC         0x0002   // DWORD
  17. #define NUM_FLOAT       0x0008
  18. #define DATE            0x0020
  19. #define LOGICAL         0x0080
  20. #define CHARACTER       0x0400
  21. #define BLOCK           0x1000
  22. #define ARRAY           0x8000
  23. #define OBJECT          ARRAY
  24.  
  25. #define BY_REF          0x2000   // Locals and Statics Ref's
  26. #define BY_REF_MEM      0x4000   // MemVars Ref's
  27.  
  28. #define ANYREF          0x6000   // Mask Any referenced type.
  29. #define ANYNUMBER       0x000A   // Mask any Numerical type. 0x0002 & 0x0008
  30. #define ALLTYPES        0xFFFF   // Mask all types.
  31.  
  32. #define CLIPPER void pascal
  33.  
  34. #ifndef __WINDOWS_H
  35.  
  36. typedef unsigned char BYTE;
  37. typedef unsigned int WORD;
  38. typedef signed long LONG;
  39. typedef unsigned long DWORD;
  40.  
  41.  
  42. typedef BYTE far  * LPBYTE;
  43. typedef char far  * LPSTR;
  44. typedef WORD * PWORD;
  45. typedef WORD far * LPWORD;
  46. typedef LONG * PLONG;
  47. typedef LONG far * LPLONG;
  48. typedef DWORD* PDWORD;
  49. typedef DWORD far * LPDWORD;
  50.  
  51.  
  52.  
  53. typedef enum{ FALSE, TRUE } BOOL;
  54.  
  55.  
  56. #endif
  57.  
  58.  
  59.  
  60.  
  61.  
  62. typedef struct
  63. {
  64.    WORD  wType;
  65.    WORD  w2;
  66.    WORD  w3;
  67.    LPBYTE pPointer1;
  68.    LPBYTE pPointer2;
  69. } CLIPVAR;              // sizeof( CLIPVAR )  --> 14 bytes
  70.  
  71.  
  72. // Una especie de herencia del struct CLIPVAR para types NUMERIC
  73. // A kind of inheritance from CLIPVAR struct for NUMERIC types
  74. typedef struct
  75. {
  76.    WORD wType;
  77.    LONG lDummy1;
  78.    LONG lnNumber;
  79.    LONG lDummy2;
  80.      
  81. } CLV_LONG;
  82.  
  83.  
  84. typedef struct
  85. {
  86.    WORD wFloat[ 4 ];
  87. } CLIP_FLOAT;
  88.  
  89.  
  90. // Una especie de herencia del struct CLIPVAR para types NUM_FLOAT
  91. // aun está por desarrollar. Son las funciones _dv.....
  92.  
  93. // A kind of inheritance from CLIPVAR struct for NUM_FLOAT types
  94. // still to be completed. They are the functions _dv......
  95.  
  96. typedef struct
  97. {
  98.    WORD wType;
  99.    LONG lDummy1;
  100.    CLIP_FLOAT fFloat;
  101.      
  102. } CLV_FLOAT;
  103.  
  104. // Estructura CLV_WORD para NUMERIC (WORD) y para los LOGICAL (BOOL).
  105. // CLV_WORD struct for NUMERIC (WORD) and for LOGICAL (BOOL).
  106.  
  107. typedef struct
  108. {
  109.     WORD wType;
  110.     LONG lDummy;
  111.     WORD wWord;         // for LOGICAL clipvars -> Casting to (BOOL)
  112.     WORD wDummy[ 3 ];
  113.  
  114. } CLV_WORD;
  115.  
  116. // Estructura VITEMCHAR para VITEM's CHAR.
  117. // VITEMCHAR struct for VITEM's CHAR.
  118.  
  119. typedef struct
  120. {
  121.     WORD wType;
  122.     WORD wLen;
  123.     WORD wDummy[ 5 ];
  124.  
  125. } CLV_CHAR;
  126.  
  127.  
  128. typedef CLIPVAR near * PCLIPVAR;
  129. typedef CLIPVAR far * LPCLIPVAR;
  130.  
  131. typedef void ( pascal * PCLIPFUNC )( void );
  132.  
  133. typedef struct
  134. {
  135.    BYTE cName[ 11 ];
  136.    BYTE cType;
  137.    LPBYTE pSymbol; // Is a LPCLIPSYMBOL. You must cast.
  138. } CLIPNAME;                      // 16 bytes
  139.  
  140. typedef CLIPNAME * PCLIPNAME;
  141. typedef CLIPNAME far * LPCLIPNAME;
  142.  
  143. typedef struct
  144. {
  145.    BYTE Dummy[ 8 ];
  146.    PCLIPNAME pName;
  147.    PCLIPFUNC pFunc;
  148. } CLIPSYMBOL;                    // 16 bytes
  149.  
  150. typedef CLIPSYMBOL * PCLIPSYMBOL;
  151. typedef CLIPSYMBOL far * LPCLIPSYMBOL;
  152.  
  153. extern PCLIPSYMBOL _SymEval;         // == _Get_Sym( "EVAL" )
  154.                                      // SymSys init
  155.  
  156.  
  157. /////////////////////////////////////////////////////////
  158. // EXTEND Module - Clipper Extend system functions     //
  159. /////////////////////////////////////////////////////////
  160.  
  161.  
  162. extern WORD  _parinfo( WORD );
  163. extern WORD  _parinfa( WORD, WORD );
  164. extern LPSTR _parc( WORD wParam, ... );
  165. extern WORD  _parclen( WORD wParam, ... );
  166. extern BOOL  _parl( WORD wParam, ... );
  167. extern int   _parni( WORD wParam, ... );
  168. extern LONG  _parnl( WORD wParam, ... );
  169. extern void  _retc( char * );
  170. extern void  _retclen( char *, WORD wLen );
  171. extern void  _retl( BOOL );
  172. extern void  _retni( WORD wNumber );
  173. extern void  _retnl( LONG lNumber );
  174. extern void  _ret( void );
  175. extern void  _reta( WORD wArrayLen );      // Creates and returns an Array
  176. extern BOOL  _storc( LPSTR, WORD wParam, ... );
  177. extern BOOL  _storclen( LPSTR, WORD wLen, WORD wParam, ... );
  178. extern BOOL  _storl( BOOL, WORD wParam, ... );
  179. extern BOOL  _storni( WORD wValue, WORD wParam, ... );
  180. extern BOOL  _stornl( LONG lValue, WORD wParam, ... );
  181. extern void  _xunlock( void );
  182. extern LPBYTE _xgrab( WORD wSize );
  183. extern void   _xfree( LPBYTE );
  184.  
  185. #define  ISCHAR( c )     ( ( _lbase + c + 1 )->wType & CHARACTER )
  186. #define  ISNUM( c )      ( ( _lbase + c + 1 )->wType & ANYNUMBER )
  187. #define  ISLOGICAL( c )  ( ( _lbase + c + 1 )->wType & LOGICAL )
  188. #define  ISARRAY( c )  ( ( _lbase + c + 1 )->wType & ARRAY )
  189. #define  ISDATE( c )  ( ( _lbase + c + 1 )->wType & DATE )
  190. #define  ISBLOCK( c )  ( ( _lbase + c + 1 )->wType & BLOCK )
  191. #define  ISBYREF( c )  ( ( _lbase + c + 1 )->wType & ANYREF )
  192.  
  193.  
  194.  
  195. // Retrieves any parameter checking type. Use ALLTYPES #define for no test.
  196. extern PCLIPVAR _param( WORD wParam, WORD wType );
  197.  
  198. // Number of parameters
  199. extern WORD _pcount;
  200.  
  201. #define PCOUNT() _parinfo(0)
  202.  
  203. typedef struct
  204. {
  205.    BYTE Red, Green, Blue, Attr;       // Four bytes
  206. } RGB;
  207.  
  208. //////////////////////////////////////////////////////
  209. // COLOR Module - Colors Control                    //
  210. //////////////////////////////////////////////////////
  211.  
  212. // General Terminal
  213. typedef struct
  214. {                         //  R   G   B   +*
  215.    RGB Fore;              //  FF  FF  FF  00
  216.    RGB Back;              //  FF  FF  FF  00
  217. } CLIPCOLOR;
  218.  
  219. extern CLIPCOLOR * _colors;       // _colors[ 5 ]
  220. extern WORD _ColorCount;      // Number of colors used ¿?
  221. void _xSetColor( PCLIPVAR );  // String dBase Colors
  222.  
  223. //////////////////////////////////////////////////////////////////
  224. // GT Module - General Terminal                                 //
  225. //////////////////////////////////////////////////////////////////
  226.  
  227. typedef struct
  228. {
  229.    WORD wTop;
  230.    WORD wLeft;
  231.    WORD wHeight;
  232.    WORD wWidth;      // so there is no conflict with Windows.h rect
  233. } gtRECT;            // así no hay conflicto con el rect de windows.h
  234.  
  235. typedef gtRECT * LPgtRECT;
  236.  
  237. typedef struct
  238. {
  239.    WORD wTop, wLeft, wHeight, wWidth;
  240.    BYTE RGBColor[ 8 ];
  241.    LONG lDummy1;
  242.    WORD wDummy2;
  243.    WORD wDummy3;
  244.    LPBYTE p34Bytes;
  245.    BYTE bDummy2[ 10 ];
  246. } WINDOW;
  247.  
  248. typedef WINDOW * gtHWND;
  249. typedef gtHWND * PgtHWND;
  250.  
  251.  
  252. WORD _gtBox( WORD, WORD, WORD, WORD, LPSTR );
  253. WORD _gtColorSelect( WORD wColor );      // __color() in 5.01
  254. WORD _gtMaxRow( void );
  255. WORD _gtMaxCol( void );
  256. WORD _gtSetColor( CLIPCOLOR * pColors );
  257. WORD _gtGetColor( CLIPCOLOR * pColors );
  258. WORD _gtSetPos( WORD wRow, WORD wCol );
  259. WORD _gtGetPos( WORD * pwRow, WORD * pwCol );
  260. WORD _gtScroll( WORD, WORD, WORD, WORD, int );
  261. WORD _gtWriteAt( WORD wRow, WORD wCol, LPSTR szText, WORD wLen );
  262. WORD _gtWrite( LPSTR szText, WORD wLen );
  263. WORD _gtWriteCon( LPSTR szText, WORD wLen );
  264. WORD _gtSave( WORD wTop, WORD wLeft, WORD wBottom, WORD wRight, LPBYTE pBuffer );
  265. WORD _gtScrDim( LPWORD pwRows, LPWORD pwCols );
  266. WORD _gtRest( WORD wTop, WORD wLeft, WORD wBottom, WORD wRight, LPBYTE pBuffer );
  267. WORD _gtRectSize( WORD wTop, WORD wLeft, WORD wBottom, WORD wRight, LPWORD wResult );
  268. WORD _gtRepChar( WORD wRow, WORD wCol, WORD wChar, WORD wTimes );
  269.  
  270. // Undocumented Windowing System !!!
  271. void _gtWCreate( LPgtRECT rctCoors, PgtHWND hWnd );
  272. void _gtWCurrent( gtHWND hWnd );
  273. BOOL _gtWVis( gtHWND hWnd, WORD wStatus );
  274. BOOL _gtWFlash( void );
  275. void _gtWApp( PgtHWND hWndApp );
  276. void _gtWPos( gtHWND hWnd, LPgtRECT rctCoors );
  277.  
  278. // Selects a color - Clipper calling conventions
  279. extern void _color( void );
  280.  
  281. // extended GT - RUNsoft
  282. void _gtShadow( WORD wTop, WORD wLeft, WORD wBottom, WORD wRight );
  283. void _gtClrReverse( WORD wColor );
  284. void _gtSayHot( WORD wRow, WORD wCol, LPSTR szText, WORD wClrNormal, WORD wClrHot );
  285. WORD _gtClrGet( WORD wColor );
  286.  
  287. //////////////////////////////////////////////////////////////////
  288. // FILESYS Module - Low level Files Management
  289. //////////////////////////////////////////////////////////////////
  290.  
  291. extern WORD _tcreat( LPSTR szFileName, WORD wMode );
  292. extern BOOL _tclose( WORD wHandle );
  293. extern WORD _topen( LPSTR szFileName, WORD wMode );
  294. extern LONG _tlseek( WORD wHandle, LONG lRecNo, WORD wPosition );
  295. extern WORD _tread( WORD wHandle, LPBYTE cBuffer, WORD wBytes );
  296. extern WORD _twrite( WORD wHandle, LPBYTE cBuffer, WORD wBytes );
  297.  
  298. ////////////////////////////////////////////////////////////////////////////
  299. // STACK and OM Module - Clipper internal stack and ClipVars management   //
  300. ////////////////////////////////////////////////////////////////////////////
  301.  
  302. // it stores the return value of a function // return ...
  303. extern PCLIPVAR _eval;
  304.  
  305. // _lbase + 1  --> Self from within Methods ! Reach it with _par...( 0, ... ) !
  306. // _lbase + 2  --> First parameter
  307. // _lbase + 3  --> Second parameter
  308. // ...
  309. extern PCLIPVAR _lbase;      // LOCAL BASE
  310.  
  311. // statics
  312. extern PCLIPVAR _sbase;    // STATIC BASE
  313.  
  314. // Clipper Stack   tos = TO S tack
  315. extern PCLIPVAR _tos;
  316.  
  317.  
  318. // They automatically update _tos.
  319. extern void _PutC( LPSTR szText );
  320. extern void _PutCL( LPSTR szText, WORD wLen );
  321. extern void _PutQ( WORD wNumber );
  322. extern void _PutLN( LONG lNumber );
  323. extern void _PutL( BOOL );
  324.  
  325. // Places any CLIPVAR at Clipper Stack.  Pass ClipVars by value.
  326. // Automatically updates _tos
  327. extern void _xPushM( LPCLIPVAR );    
  328.  
  329.  
  330. // calling Clipper from C
  331. extern void _PutSym( PCLIPSYMBOL );
  332. // ( ++_tos )->wType = NIL;               <-- We place nil at Self !!!
  333. // we place other params with _Put...
  334. extern void _xDo( WORD wParams );
  335.  
  336.  
  337. // executing CodeBlocks
  338.  
  339. // _PutSym( _symEVAL );
  340. extern void _xEval( WORD wNumberOfParameters );
  341.  
  342.                                            // eval a codeblock with no params
  343. extern void _cEval0( PCLIPVAR CodeBlock ); // evalua codeblock sin parametros.
  344. extern void _cEval1( PCLIPVAR CodeBlock, PCLIPVAR Param1 ); // idem con un parámetro.
  345.                                            // same but with one param
  346.  
  347. extern PCLIPVAR _GetGrip( PCLIPVAR ); // allocates new clipvar in high stack pos.
  348. extern void    _DropGrip( PCLIPVAR ); // free it.
  349.  
  350.  
  351. // Returns pointer to _lbase of calls stack, 0->this, 1->previous, ...
  352. extern PCLIPVAR _ActInfo( WORD wIndex );
  353.  
  354.  
  355. extern WORD  _sptoq( PCLIPVAR );   // Returns the value of a number placed at _tos
  356.                                    // By value or by ref as WORD
  357. extern LONG  _sptol( PCLIPVAR );   // IDEM as LONG
  358.  
  359.  
  360. // Copy wBytes from Source to Destination
  361. extern void _bcopy( LPBYTE pDest, LPBYTE pSource, WORD wBytes );
  362.  
  363. // Inicializes wLen Bytes with the value wValue
  364. extern void _bset( LPBYTE pStart, WORD wValue, WORD wLen );
  365.  
  366. // Retrieves an element of an array
  367. extern void _cAt( PCLIPVAR vArray, WORD wIndex, WORD wFlag, PCLIPVAR vDest );
  368.  
  369. // Changes an element of an array
  370. extern void _cAtPut( PCLIPVAR vArray, WORD wIndex, PCLIPVAR vSource );
  371.  
  372. // Stores a String into an array element
  373. extern void _cAtPutStr( PCLIPVAR vArray, WORD wIndex, LPSTR szString,
  374.                         WORD wStrLen );
  375.  
  376. // Strings
  377. // Creates a new String. Stores a CLIPVAR at _eval
  378. extern void pascal _BYTESNEW( WORD wLenBytes );
  379.  
  380. // Locks a CLIPVAR String to access its bytes
  381. // if need unlock returns TRUE
  382. extern BOOL pascal _VSTRLOCK( PCLIPVAR vString );
  383.  
  384. // Gets the LPSTR of the String. It must be locked before with _VSTRLOCK
  385. extern LPSTR pascal _VSTR( PCLIPVAR vString );
  386.  
  387. // UnLocks the String
  388. extern void pascal _VSTRUNLOCK( PCLIPVAR vString );
  389.  
  390.  
  391. extern WORD strlen( LPSTR szText );
  392. extern void strcpy( LPBYTE lpTarget, LPBYTE lpSource );
  393. extern LPBYTE strcat( LPBYTE lpTarget, LPBYTE lpSource );
  394. LPSTR _StrScan( LPSTR szSearchAt, LPSTR szSearchFor );
  395.  
  396. // Arrays
  397. // Retrieves the Len of an array
  398. extern WORD pascal _VARRAYLEN( PCLIPVAR vArray );
  399.  
  400. // Creates and returns an Array in _eval
  401. extern void pascal _ARRAYNEW( WORD wLen );
  402.  
  403.  
  404. //
  405.  
  406. // Add a new element to an array
  407. // _tos + 1  --> array
  408. // _tos + 2  --> element
  409. // _tos must be incremented
  410. extern void pascal __AADD( void );
  411.  
  412. // Resizes an Array
  413. // Parameters must be placed usign _tos
  414. // pcount must be updated
  415. extern void pascal ASIZE( void );
  416.  
  417. // Retrieves the Symbol of a String
  418. extern PCLIPSYMBOL _Get_Sym( LPSTR szName );
  419. extern PCLIPSYMBOL _Chk_Sym( LPSTR szName );
  420.  
  421. ////////////////////////////////////////////////////////
  422. // SEND Module - OOPS Management !
  423. ////////////////////////////////////////////////////////
  424.  
  425. // Creates a new Class
  426. LONG _mdCreate( WORD wMethods, PCLIPSYMBOL pClassName );
  427.  
  428. // Adds a new Method to a ClassH
  429. extern _mdAdd( LONG lClassHandle, PCLIPSYMBOL pMethodName, PCLIPFUNC pMethod );
  430.  
  431. // Gets the function address of a method
  432. // Message info must be placed at ( _lbase + 0 )->pMsg
  433. // Self must be placed at _lbase + 1
  434. extern PCLIPFUNC _isendp( void );
  435.  
  436. // Retrieves the ClassH of an Object
  437. extern LONG _VDict( PCLIPVAR );
  438.  
  439. // Changes the ClassH of an Object or Array
  440. extern void _VSetDict( PCLIPVAR, LONG lClassHandle );
  441.  
  442. void _xSend( WORD wNumberOfParameters );     // The missing xSend function
  443.  
  444. #define INSTVAR(Name,pCode) _mdAdd(ulHandle,_get_sym(Name),pCode); _mdAdd(ulHandle,_get_sym("_"Name),pCode)
  445. #define METHOD(Name,pCode) _mdAdd(ulHandle,_get_sym(Name),pCode)
  446.  
  447. /*********************************************************/
  448.  
  449.  
  450. // executes a CodeBlock
  451. // lbase + 1  --> CodeBlock
  452. // lbase + 2  --> First parameter
  453. // lbase + 3  --> ...
  454. // _pcount    --> Number of parameters
  455. // extern void _ixblock( void );   // NO DEBE USARSE SIN guardar y preparar
  456.                                    // las variables de estado de plankton.
  457.  
  458.                                    // IT MAY NOT BE USED without saving and
  459.                                    // preparing plakton state variables
  460.  
  461.  
  462. // Memory Management
  463. // Alloc wBytes (fixed ¿?)
  464. extern LPBYTE _AllocF( WORD wBytes );
  465.  
  466.  
  467. //////////////////////////////////////////////
  468. // EVENT Module - Clipper internally is event-driven !!!
  469. //////////////////////////////////////////////
  470.  
  471. typedef struct
  472. {
  473.    WORD wDymmy;
  474.    WORD wMessage;
  475. } EVENT;
  476.  
  477. typedef EVENT * PEVENT;
  478.  
  479. typedef WORD ( far * EVENTFUNCP ) ( PEVENT pEvent );
  480.  
  481. // Register a new Event Handler
  482. extern WORD _evRegReceiverFunc( EVENTFUNCP pFunc, WORD wType );
  483.  
  484. extern void _evDeRegReceiver( WORD wHandlerOrder );
  485.  
  486. extern void _evSendId( WORD wMessage, WORD wHandlerOrder ); // 0xFFFF a Todos
  487. extern WORD _evRegType( DWORD, DWORD, WORD );
  488. extern void _evPostId( WORD evId, WORD wReceiverHandle );
  489.  
  490. extern void _Break_Cycle( void );
  491.  
  492. WORD _evModalRead( void );
  493.  
  494. WORD _gtModalRead( void );
  495.  
  496. extern void ( * _evKbdEntry )( PEVENT pEvent );
  497.  
  498.  
  499. ///////////////////////////////////////////////////////////
  500. // BEEP Module - Terminal Driver Module
  501. ///////////////////////////////////////////////////////////
  502.  
  503. void _beep_( void );
  504.  
  505.  
  506. ///////////////////////////////////////////////////////////
  507. // DYNC Module - Dynamic Linking Modules
  508. ///////////////////////////////////////////////////////////
  509.  
  510. typedef struct
  511. {
  512.    WORD AX, BX, CX, DX;
  513. } DLM_PARAMS;
  514.  
  515. typedef DLM_PARAMS * PDLM_PARAMS;
  516.  
  517. typedef WORD ( far * DLMSERVER )( PDLM_PARAMS pParams, WORD wService );
  518. typedef DLMSERVER * PDLMSERVER;
  519.  
  520. void _DynLoadModule( PWORD pHandle, LPSTR szModule );
  521. WORD _DynGetNamedAddr( WORD wHandle, LPSTR szEntryModule, PDLMSERVER pServer );
  522. LONG _DynGetOrdAddr( WORD wHandle, WORD wService );
  523.  
  524. // ERROR
  525. void _ierror( WORD wError );  // generates an internal error message and quit.
  526.  
  527. /** YO ESTAS cuatro no las ponía **/
  528. /** Not sure about these **/
  529.  
  530. void _CycleF( void );
  531. WORD _osStackBase( void );
  532. void _osAllocDefSeg( WORD*, WORD*,WORD* );
  533. WORD _osAvail( void );   // Nº de parrafos disponibles.
  534.  
  535. // TB Module
  536. LPSTR _tbname( PCLIPVAR, WORD );      // Same as ProcName. 2º param no matter
  537.                                       // 1 param is _ActInfo( WORD )
  538.  
  539.  
  540. // LAS "DATE"
  541. // "DATE" ones
  542.                               // gets the date at _tos, returns
  543. extern void _year( void );    // recibe fecha en _tos, retorna
  544.                               // (CLV_LONG) año en _tos
  545.                               // (CLV_LONG) year at _tos
  546. extern void _month( void );   // idem.
  547. extern void _day( void );     // idem.
  548.  
  549. /*****
  550.  
  551.            CLIPPER MiYear()
  552.            {
  553.                // copiamos el VITEM Fecha en la primera posición libre 
  554.                // del STACK.
  555.  
  556.                // we copy the date VITEM at the STACK first free position
  557.  
  558.                _bcopy( ( FARP ) ( ++tos ),
  559.                        ( FARP ) _param( 1, DATE ),
  560.                        sizeof( CLIPVAR ) );
  561.  
  562.                _year();
  563.  
  564.                // copiamos retorno en _eval y realineamos el STACK.
  565.                // we copy the return at _eval and realign the STACK
  566.  
  567.                _bcopy( ( FARP ) _eval,
  568.                        ( FARP ) ( _tos-- ),
  569.                        sizeof( CLIPVAR ) );
  570.  
  571.            }
  572. *****/
  573.  
  574. // TERM
  575.  
  576. void pascal QOUT( void );
  577.  
  578. #endif
  579.  
  580. // Nuevas para Windows
  581. // New for Windows
  582.  
  583. WORD GetWndApp( void );      // Devuelve Handle Objeto ventana principal
  584.                              // retrieves Main Object Window handle
  585.