home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Visual Database / Visual Foxpro 6.0 (Ent. Edition) / Vf6ent Extractor.EXE / API / PRO_EXT.H < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-28  |  40.0 KB  |  1,279 lines

  1. //+--------------------------------------------------------------------------
  2. //
  3. //    File:        pro_ext.h
  4. //
  5. //    Copyright:    (c) 1998, Microsoft Corporation.
  6. //                All Rights Reserved.
  7. //                Information Contained Herein is Proprietary
  8. //                and Confidential.
  9. //
  10. //    Contents:    API Header for the Library Construction Kit
  11. //
  12. //    Notes: 
  13. //
  14. //---------------------------------------------------------------------------
  15.  
  16. #if defined(_MSC_VER)
  17. #pragma pack(push, 1)                 // Assume byte structure packing
  18. #endif
  19.  
  20. #ifdef __cplusplus
  21. extern "C" {                        // Assume C declarations for C++
  22. #endif
  23.  
  24. #ifndef PRO_EXT_INCLUDED
  25. #define PRO_EXT_INCLUDED
  26.  
  27. //
  28. // Detect the enviroment we are building:
  29. //
  30.  
  31. #if defined(__MWERKS__)
  32. //
  33. // MetroWerks CodeWarrior
  34. //
  35. #ifndef MAC_OS
  36.     #define MAC_API 1
  37.     #include <windows.h>
  38. #endif
  39.  
  40.     #pragma align=mac68k
  41.     
  42. #elif defined(__SC__)
  43. //
  44. // Symantic C++
  45. //
  46. #ifndef MAC_OS
  47.     #define MAC_API 1
  48.     #include <windows.h>
  49. #endif
  50.  
  51.     #pragma SC align 1
  52.     
  53.     #undef _HLock
  54.     #undef _NewMenu
  55.     
  56. #elif defined(_MSC_VER) && (defined(_M_M68K) || defined(_M_MPPC))
  57. //
  58. // Microsoft Visual C++
  59. //
  60.  
  61. #ifndef MAC_OS
  62.     #define MAC_API 1
  63.     
  64.     #if defined(_M_M68K) || defined(_M_MPPC)
  65.         #pragma pack(push, pro_ext1)
  66.         #include <macos\windows.h>
  67.         #pragma pack(pop, pro_ext1)
  68.     #endif
  69. #endif
  70.  
  71. #elif defined(macintosh) || defined(powerc) || defined(applec)
  72. //
  73. // Apple's MPW
  74. //
  75. #ifndef MAC_OS
  76.     #define MAC_API 1
  77.     #include <windows.h>
  78. #endif
  79.  
  80.     #undef _HLock
  81.     #undef _NewMenu
  82.  
  83. #else
  84.  
  85.     #define MAC_API 0
  86.     
  87. #endif
  88.  
  89. //
  90. //    Semi-portable way to deal with 'far' pointers 
  91. //
  92.  
  93. #ifndef FAR
  94.     #if !defined(_WIN32)
  95.         #define FAR
  96.     #endif
  97. #endif  // FAR
  98.  
  99. //
  100. // Global Defines:
  101. //
  102.  
  103. #ifndef GLOBAL_INCLUDED
  104.  
  105. #if defined(_WIN32)
  106.  
  107.     #if !defined(_MT) || !defined(_DLL) 
  108.         #error The /MD or /MDd compiler switch (Multithreaded Using DLL) is required.
  109.     #endif
  110.  
  111.  
  112. //
  113. // Microsoft C for Windows
  114. //
  115.     #pragma pack(push, pro_ext2)
  116.  
  117.     #include <windows.h>
  118.  
  119.     #pragma pack(pop, pro_ext2)
  120.  
  121.     #define _far
  122.     #define __far
  123.  
  124.  
  125.     // Fastcall calling convention
  126.     #define FASTCALL _fastcall
  127.  
  128. #else    //_WIN32
  129.  
  130.     #define FASTCALL
  131.  
  132. #endif
  133.  
  134. typedef unsigned MHANDLE;               // A memory handle.
  135. typedef long         NTI;                    // A name table index.
  136. typedef unsigned __int64 Ticks;            // A timer tick count.
  137. #define TRUE    1
  138. #define FALSE    0
  139. #define YES        1
  140. #define NO        0
  141. typedef char TEXT;
  142.  
  143. #if defined(_WIN32)
  144. #undef MAX_PATH            
  145. #define MAX_PATH 261    
  146.  
  147. #define MAXFILENAME        MAX_PATH        /* longest pathname */
  148. #elif MAC_API || MAC_OS
  149. #define MAXFILENAME     261             /* longest pathname */
  150. #else
  151. #define MAXFILENAME        130                /* longest pathname */
  152. #endif
  153.  
  154. #endif      // GLOBAL_INCLUDED
  155.  
  156. typedef unsigned long WHandle;            // A Window Handle
  157. typedef long MENUID;                    // A Menu id.
  158. typedef long MenuId;                    // A Menu id.
  159. typedef long ITEMID;                    // An item id.
  160. typedef long ItemId;                    // An item id.
  161.  
  162. typedef int         FCHAN;                    // A file I/O channel.
  163. #define SCHEMEWIDTH        11
  164. typedef char Scheme[SCHEMEWIDTH];        // A FoxPro color scheme
  165.  
  166.  
  167. #ifdef GLOBAL_INCLUDED
  168.  
  169. #define WHANDLE WHandle
  170.  
  171. #else
  172.  
  173. typedef WHandle WHANDLE;                // Users can use WHANDLE
  174.  
  175. #endif
  176.  
  177. //
  178. // FoxWindow Defines:
  179. //
  180.  
  181. #ifndef FOXWIND_INCLUDED
  182.  
  183. // _WOpen() flag values:
  184. #define WCURSOR        (1<<1)                /* Enable the cursor                        */
  185. #define ZOOM        (1<<2)                /* Permit the window to be zoomed            */
  186. #define ADJ            (1<<3)                /* Allow Window Size to be Adjusted            */
  187. #define CLOSE        (1<<4)                /* Permit Closing of System Window            */
  188. #define MOVE        (1<<5)                /* Allow the window to be moved                */
  189. #define HSCROLLBAR    (1<<6)                /* Show Horizontal Scrollbars                */
  190. #define VSCROLLBAR    (1<<7)                /* Show Vertical Scrollbars                    */
  191. #define AUTOSCROLL    (1<<8)                /* Window should Auto scroll                */
  192. #define WEVENT        (1<<10)             /* Participates in activate/deact events    */
  193. #define SHADOW        (1<<11)             /* Window will produce a shadow                */
  194. #define WMODAL        (1<<12)             /* Window is a modal window                    */
  195. #define WMINIMIZE    (1<<13)             /* Window can be minimized                    */
  196.  
  197. #endif      // FOXWIND_INCLUDED
  198.  
  199. //
  200. // FoxEvent Defines:
  201. //
  202.  
  203. #ifndef FOXEVENT_INCLUDED
  204.  
  205. //  _FindWindow() return values.
  206. #define inBorder         0                /* In the window border region            */
  207. #define inHelp             1                /* In the Help region                    */
  208. #define inContent         2                /* In the content/text region            */
  209. #define inDrag             3                /* In the Drag/Title bar region            */
  210. #define inGrow             4                /* In the grow/resize region            */
  211. #define inGoAway         5                /* In the goAway/close region            */
  212. #define inZoom             6                /* In the zoom region                    */
  213. #define inVUpArrow         7                /* In the vertical up arrow region        */
  214. #define inVDownArrow     8                /* In the vertical down arrow region    */
  215. #define inVPageUp         9                /* In the vertical page up region        */
  216. #define inVPageDown        10                /* In the vertical page down region        */
  217. #define inVThumb        11                /* In the vertical thumb region            */
  218. #define inHUpArrow        12                /* In the horizontal up arrow region    */
  219. #define inHDownArrow    13                /* In the horizontal down arrow region    */
  220. #define inHPageUp        14                /* In the horizontal page up region        */
  221. #define inHPageDown        15                /* In the horizontal page down region    */
  222. #define inHThumb        16                /* In the horizontal thumb region        */
  223. #define inMenuBar        17                /* In the menu bar                        */
  224.  
  225.  
  226. // EventRec.what values
  227. #define nullEvent                0        /* Null                            */
  228. #define activateEvent            1        /* Activate window                */
  229. #define deactivateEvent            2        /* Deactivate window            */
  230. #define showEvent                  3        /* Show window                    */
  231. #define hideEvent                4        /* Hide window                    */
  232. #define updateEvent                5        /* Redraw window                */
  233. #define sizeEvent                   6        /* Size window event            */
  234. #define moveEvent                   7        /* Move window event            */
  235. #define closeEvent                8        /* Close window                    */
  236. #define mouseDownEvent            9        /* Left mouse down                */
  237. #define mouseUpEvent           10        /* Left mouse up                */
  238. #define mMouseDownEvent           11        /* Middle mouse down event        */
  239. #define mMouseUpEvent           12        /* Middle mouse up event        */
  240. #define rMouseDownEvent           13        /* Right mouse down event        */
  241. #define rMouseUpEvent           14        /* Right mouse up event            */
  242. #define mouseMoveEvent           15        /* Mouse move event                */
  243. #define mouseWheelEvent           16        /* Mouse wheel event            */
  244. #define keyDownEvent           17        /* Key down                        */
  245. #define hotkeyEvent               18        /* An ON KEY LABEL was pressed    */
  246. #define menuInitEvent           19        /* Menu initialization event    */
  247. #define menuUpdateEvent           20        /* Menu update required. No longer used    */
  248. #define menuHitEvent           21        /* Menu hit                        */
  249. #define toolbarEvent           22        /* Toolbar button hit            */
  250. #define alarmEvent               25        /* Alarm/Timer event            */
  251.  
  252. #if defined(__WINDOWS__) || defined(_WINDLL) || MAC_API || MAC_OS
  253. #define zoomEvent              999        /* Not supported in Windows/Mac    */
  254. #else
  255. #define zoomEvent               13        /* Zoom window event (DOS)        */
  256. #endif
  257.  
  258. // EventRec.modifiers defines
  259. #define charCodeMask    0x0fff            /* Character code mask            */
  260. #define shiftCodeMask    0xf000            /* Shift key mask                */
  261.  
  262. #define shiftKey        0x1000            /* Either shift key       1 - down */
  263. #define ctrlKey            0x2000            /* Control key           1 - down */
  264. #define altKey            0x4000            /* Alternate key       1 - down */
  265. #define literalKey        0x8000            /* This key is interpreted literally */
  266.  
  267.  
  268. // EventRec.mbState code defines
  269. #define leftButton        (1<<0)            /* Left button status    1 - down */
  270. #define rightButton        (1<<1)            /* Right button status    1 - down */
  271. #define centerButton    (1<<2)            /* Center button status 1 - down */
  272.  
  273.  
  274. // EventRec.mcState code defines
  275. #define posChange        (1<<0)            /* Position change          1 - change   */
  276. #define leftPressed        (1<<1)            /* Left button pressed      1 - pressed  */
  277. #define leftReleased    (1<<2)            /* Left button released      1 - released */
  278. #define rightPressed    (1<<3)            /* Right button pressed      1 - pressed  */
  279. #define rightReleased    (1<<4)            /* Right button released  1 - released */
  280. #define centerPressed    (1<<5)            /* Center button pressed  1 - pressed  */
  281. #define centerReleased    (1<<6)            /* Center button released 1 - released */
  282.  
  283. #endif      // FOXEVENT_INCLUDED
  284.  
  285.  
  286. // Flag values for _InKey()
  287. #define SHOWCURSOR        (1<<0)
  288. #define HIDECURSOR        (1<<1)
  289. #define MOUSEACTIVE        (1<<2)
  290.  
  291. // Flag values for the _ALen() function
  292. enum {
  293.     AL_ELEMENTS,
  294.     AL_SUBSCRIPT1,
  295.     AL_SUBSCRIPT2
  296. };
  297.  
  298. // FPFI is a 32 bit pointer to a function returning an int
  299. typedef long (FAR *FPFI)();
  300.  
  301. #ifndef GLOBAL_INCLUDED
  302.  
  303. #if defined(_WIN32)
  304. typedef struct
  305. {
  306.     LONG h;
  307.     LONG v;
  308. } FoxPoint;
  309.  
  310. #define FoxRect RECT
  311.  
  312. #elif MAC_API || MAC_OS       // end of WIN32
  313.  
  314. typedef short SHORT;
  315. typedef long  LONG;
  316. typedef unsigned long ULONG;
  317. typedef int BOOL;
  318. typedef    unsigned short USHORT;
  319. typedef Point FoxPoint;
  320.  
  321. typedef struct
  322. {
  323.     SHORT top;
  324.     SHORT left;
  325.     SHORT bottom;
  326.     SHORT right;
  327. } FoxRect;
  328.  
  329. #endif          // end of MAC_OS || MAC_API
  330. #endif          // GLOBAL_INCLUDED
  331.  
  332. #if defined(_WIN32)
  333. #define Point FoxPoint
  334. #define Rect FoxRect
  335. #endif
  336.  
  337. #ifndef FOXMENU_INCLUDED
  338.  
  339. // Menu structure type entry definitions used by _NewMenu()
  340. #define MPOPUP            1                /* Menu is a POPUP type menu    */
  341. #define MPAD            2                /* Menu is a PAD type menu        */
  342. #define MBAR            3                /* Menu is a BAR type menu        */
  343.  
  344. #endif      // FOXMENU_INCLUDED
  345.  
  346.  
  347. // These are the API identifiers for the System Menu Constants.
  348. enum {
  349.     _LASTITEM = -2, _FIRSTITEM,
  350.  
  351.     _SYSMENU,
  352.     _SYSMSYSTEM, _SYSMFILE, _SYSMEDIT, _SYSMDATA, _SYSMRECORD, _SYSMPROG,
  353.     _SYSMWINDOW, _SYSMVIEW, _SYSMTOOLS, _SYSMFORMAT,
  354.  
  355.     _SYSTEM,
  356.     _SYSTEMABOUT, _SYSTEMHELP, _SYSTEMMACRO, _SYSTEMSEP100, _SYSTEMFILER,
  357.     _SYSTEMCALC, _SYSTEMDIARY, _SYSTEMSPECIAL, _SYSTEMASCII,
  358.     _SYSTEMCAPTURE, _SYSTEMPUZZLE, _SYSTEMTECHSUPPORT, _SYSTEMOFFICE, _SYSTEMSEP200, 
  359.     _SYSTEMSEP300, _SYSTEMHELPSRCH, _SYSTEMHELPHOWTO, _SYSTEMDBASE,
  360.  
  361.     _FILE,
  362.     _FILENEW, _FILEOPEN, _FILECLOSE, _FILECLOSEALL, _FILESEP100, _FILESAVE,
  363.     _FILESAVEAS, _FILEREVERT, _FILESEP200, _FILESETUP, _FILEPRINT, _FILEOSPRINT, 
  364.     _FILEPRINTONECOPY, _FILESEP300,    _FILEQUIT, _FILEPRINTPREVIEW, _FILEPAGESETUP,
  365.     _FILEIMPORT, _FILEEXPORT, _FILESEP400, _FILESEND,
  366.  
  367.     _EDIT,
  368.     _EDITUNDO, _EDITREDO, _EDITSEP100, _EDITCUT, _EDITCOPY, _EDITPASTE,
  369.     _EDITCLEAR, _EDITSEP200, _EDITSELECTALL, _EDITSEP300, _EDITGOTO,
  370.     _EDITFIND, _EDITFINDAGAIN, _EDITREPLACE, _EDITREPLACEALL, _EDITSEP400, 
  371. #if 0
  372.     _EDITBUILDEXPR,    _EDITEXECUTEBLOCK, _EDITSEP600, 
  373. #endif
  374.     _EDITPREF,
  375.  
  376.     _DATA,
  377.     _DATASETUP, _DATABROWSE, _DATASEP100, _DATAAPPEND, _DATACOPY, _DATASORT,
  378.     _DATATOTAL, _DATASEP200, _DATAAVERAGE, _DATACOUNT, _DATASUM, _DATACALCULATE,
  379.     _DATAREPORT, _DATALABEL, _DATASEP300, _DATAPACK, _DATAREINDEX,
  380.  
  381.     _RECORD,
  382.     _RECORDAPPEND, _RECORDCHANGE, _RECORDSEP100, _RECORDGOTO, _RECORDLOCATE,
  383.     _RECORDCONTINUE, _RECORDSEEK, _RECORDSEP200, _RECORDREPLACE, _RECORDDELETE,
  384.     _RECORDRECALL,
  385.  
  386.     _PROG,
  387.     _PROGDO, _PROGSEP100, _PROGCANCEL, _PROGRESUME, _PROGSEP200,
  388.     _PROGCOMPILE, _PROGGENERATE, _PROGDOCUMENT, _PROGGRAPH, _PROGSUSPEND,
  389.     _PROGFORMWIZARD,
  390.  
  391.     _WINDOW,
  392.     _WINDOWHIDE, _WINDOWHIDEALL, _WINDOWSHOWALL, _WINDOWCLEAR, _WINDOWSEP100,
  393.     _WINDOWMOVE, _WINDOWSIZE, _WINDOWZOOM, _WINDOWMINMAX, _WINDOWROTATE,
  394.     _WINDOWCOLOR, _WINDOWSEP200, _WINDOWCOMMAND, _WINDOWDEBUG, _WINDOWTRACE,
  395.     _WINDOWVIEW, _WINDOWARRANGEALL, _WINDOWTOOLBARS,
  396.  
  397.     _VIEW,
  398.  
  399.     _TOOLS,
  400.     _TOOLSWIZARDS, _TOOLSFILLER1, _TOOLSFILLER2, _TOOLSFILLER3, _TOOLSOPTIONS,
  401.     _TOOLSDEBUGGER, _TOOLSTRACE, _TOOLSWATCH, _TOOLSLOCALS, _TOOLSDBGOUT,
  402.     _TOOLSSTACK, _TOOLSFILLER4,
  403.  
  404.     _REPORT, _LABEL, 
  405.  
  406.     _BROWSE, _BROWSEMODE, _BROWSEGRID, _BROWSELINK, _BROWSECHPART,
  407.     _BROWSEFILLER1, _BROWSEFONT, _BROWSESFIELD, _BROWSEMFIELD, _BROWSEMPART,
  408.     _BROWSEFILLER2, _BROWSEGOTO, _BROWSESEEK, _BROWSEDELREC, _BROWSEAPPEND,    
  409.  
  410.     _MACRO, _DIARY, _DAFILER, _SCREEN,
  411.     
  412.     _MBLDR, 
  413.     _MBLDRGLOBAL, _MBLDRMENUOPT, _MBLDRFILLER1, _MBLDRTRYIT, _MBLDRFILLER2,
  414.      _MBLDRINSERT, _MBLDRDELETE, _MBLDRFILLER3, _MBLDRQUICK, _MBLDRGENERATE,
  415.  
  416.     _PROJECT, _RQBE,
  417.  
  418.     _EDITPASTELINK, _EDITLINK,
  419.     _EDITINSERTOBJ,    _EDITCVTSTATIC, _EDITSEP500,  _PROGSEP300,
  420.  
  421.     _TEXT,
  422.     _TEXTSPELL,
  423.  
  424.     _WIZARDLIST,
  425.     _WIZARDTABLE, _WIZARDQUERY, _WIZARDFORM, _WIZARDREPRT, _WIZARDLABEL,
  426.     _WIZARDMAIL, _WIZARDPIVOT, _WIZARDIMPORT, _WIZARDFOXDOC, _WIZARDSETUP, 
  427.     _WIZARDUPSIZING, _WIZARDALL,
  428.  
  429.     _TABLE, 
  430.     _TABLEPROPERTIES, _TABLEFILLER1, _TABLEGOTO, _TABLEAPPEND,
  431.     _TABLEDELREC, _TABLEFILLER2, _TABLEDELETE, _TABLERECALL, _TABLESFIELD,
  432.     _TABLEMFIELD, _TABLEMPART, _TABLEFILLER3, _TABLELINK, _TABLECHPART, _TABLEFILLER4,
  433.  
  434.     _EDITOBJECT, _PROGBEAUT, _SYSTEMDOCUMENTATION, _SYSTEMSAMPLEAPPS, 
  435.     _MBLDRINSERTBAR, _EDITBEAUTIFY,
  436.     _TOOLSBROWSER, 
  437.  
  438.     _WEBMENU, 
  439.     _HELPWEBVFPFREESTUFF,_HELPWEBVFPHOMEPAGE, _HELPWEBVFPFAQ,
  440.     _HELPWEBVFPONLINESUPPORT, _HELPWEBFILLER1, _HELPWEBDEVONLY, _HELPWEBVFPSENDFEEDBACK, _HELPWEBDIRECTORY,
  441.     _HELPWEBSEARCH, _HELPWEBTUTORIAL, _HELPWEBFILLER2, _HELPWEBMSFTHOMEPAGE,
  442.  
  443.     // New for 6.0 (always add new ones to the end!)
  444.     _WIZARDAPPLICATION, _WIZARDDATABASE, _WIZARDWEBPUBLISHING,
  445.     _TOOLSGALLERY, _TOOLSCOVERAGE, _TOOLSRUNACTIVEDOC,
  446.     _FILESAVEASHTML,
  447.     _SYSTEMMSDNCONTENTS, _SYSTEMMSDNINDEX, _SYSTEMMSDNSEARCH,
  448.     _HELPWEBMSDNONLINE, _HELPWEBVSPRODNEWS, 
  449.  
  450. };
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457. #if defined(_WIN32)
  458. #define _BreakPoint() __asm     \
  459. {                                \
  460.      int 3h                     \
  461. }
  462. #elif MAC_API || MAC_OS
  463. #define _BreakPoint() Debugger();
  464. #endif  // _WIN32
  465.  
  466.  
  467. // Alternate values for parmCount to modify how FoxPro treats the function
  468. #define INTERNAL        -1        /* Not callable from FoxPro                */
  469. #define CALLONLOAD        -2        /* Call when library is loaded            */
  470. #define CALLONUNLOAD    -3        /* Call when library is unloaded        */
  471.  
  472.  
  473. // The FoxInfo structure contains the descriptions of the functions
  474. // contained in the library.
  475. typedef struct {
  476.     char FAR *    funcName;        /* Function name (all caps)                */
  477.     FPFI        function;       /* Actual function address              */
  478.     short        parmCount;        /* # parameters specified or a flag value */
  479.     char FAR *    parmTypes;        /* Parameter list description            */
  480. } FoxInfo;
  481.  
  482. typedef struct _FoxTable {
  483.     struct _FoxTable FAR *nextLibrary;    /* Linked list of libraries        */
  484.     short infoCount;            /* # of functions in this library        */
  485.     FoxInfo FAR *infoPtr;        /* Function list                        */
  486. } FoxTable;
  487.  
  488.  
  489.  
  490. #if MAC_API
  491. typedef struct _LARGE_INTEGER {
  492.     unsigned long LowPart;
  493.     long  HighPart;
  494. } LARGE_INTEGER, *PLARGE_INTEGER;
  495. #endif
  496.  
  497. typedef LARGE_INTEGER CCY;
  498.  
  499. // An expression's value
  500. typedef struct {
  501.     char                ev_type;
  502.     char                ev_padding;
  503.     short                ev_width;
  504.     unsigned             ev_length;
  505.     long                ev_long;
  506.     double                ev_real;
  507.     CCY                    ev_currency;
  508.     MHANDLE                ev_handle;
  509.     unsigned long        ev_object;
  510. } Value;
  511.  
  512. // A reference to a database or memory variable
  513. typedef struct {
  514.     char        l_type;
  515.     short        l_where,        /* Database number or -1 for memory        */
  516.                 l_NTI,            /* Variable name table offset            */
  517.                 l_offset,        /* Index into database                    */
  518.                 l_subs,            /* # subscripts specified 0 <= x <= 2    */
  519.                 l_sub1, l_sub2; /* subscript integral values            */
  520. } Locator;
  521.  
  522. // A parameter to a library function.
  523. typedef union {
  524.     Value        val;
  525.     Locator        loc;            /* An 'R' in l_type means the Locator    */
  526.                                 /* part of this union is in use.        */
  527. } Parameter;
  528.  
  529. // A paramter list to a library function.
  530. typedef struct {
  531.     short         pCount;            /* Number of Parameters PASSED.            */
  532.     Parameter    p[1];            /* pCount Parameters.                    */
  533. } ParamBlk;
  534.  
  535. #if MAC_API || MAC_OS
  536. typedef WindowPtr HWND;
  537. #endif  // MAC_OS
  538.  
  539. #if MAC_API || MAC_OS
  540. #ifndef __WINDOWS__
  541. #ifndef __QUICKDRAW__
  542. typedef char *    WindowPtr;
  543. #endif
  544. #endif
  545. #endif
  546.  
  547. #if defined(_WIN32)
  548. HANDLE _GetAPIHandle(void);
  549. #endif
  550.  
  551. typedef long EDPOS;                    /* Editor text offset                    */
  552. typedef long EDLINE;                /* Editor line number                    */
  553.  
  554. #define MAXFONTNAME        64            /* Max length of a font name            */
  555.  
  556. #ifndef EDITOR_INCLUDED
  557.  
  558. #define EDCOMMAND        0
  559. #define EDSCRIP            EDCOMMAND
  560. #define EDPROGRAM        1
  561. #define EDFILE            2
  562. #define EDMEMO            3
  563. #define EDQUERY            6
  564. #define EDSCREEN        7
  565. #define EDMENU            8
  566. #define EDVIEW            9
  567. #define EDSNIP           10
  568. #define EDTEXT           11
  569. #define EDPROC           12
  570. #define EDPROJTEXT     13
  571.  
  572. #define RO_BYFILE        (0x01)        /* readOnly bits                        */
  573. #define RO_BYUSER        (0x02)
  574. #define RO_BYRECORD        (0x04)
  575.  
  576. #endif      // EDITOR_INCLUDED
  577.  
  578.  
  579. // An editor's environment.
  580. typedef struct{
  581.     char             filename[MAXFILENAME];
  582.     EDPOS            length;            /* #bytes in text                            */
  583.     unsigned short    lenLimit;        /* Max allowable length. 0 = infinite.        */
  584.     unsigned short    dirty,            /* Has the file been changed?                */
  585.                     autoIndent,        /* Auto indent?                                */
  586.                     backup,            /* Make backup files?                        */
  587.                     addLineFeeds,     /* add line feeds when saving?                */
  588.                     autoCompile,    /* Shall we auto compile this thing?        */
  589.                     addCtrlZ,        /* add end of file ctrl-z?                    */
  590.                     savePrefs,        /* save edit preferences?                    */
  591.                     dragAndDrop,    /* Allow drag-and-drop                        */
  592.                     readOnly,        /* RO_BYFILE, RO_BYUSER, RO_BYRECORD        */
  593.                     syntaxColor,    /* Syntax coloring in effect for this file? */
  594.                     status,            /* display status bar?                        */
  595.                     lockPrefs,        /* Can update the preferences ?                */
  596.                     insertMode;
  597.     short            wrap;            /* if <0, new line at Return only            */
  598.  
  599.     EDPOS            selStart;        /* Selection start                            */
  600.     EDPOS            selEnd;            /* Selection end                            */
  601.     EDPOS            selAnchor;        /* Selection anchor point                    */
  602.     short            justMode;        /* Justification                            */
  603.     short            tabWidth;        /* TAB size in spaces                        */
  604.  
  605.     char              fontName[MAXFONTNAME];
  606.     short            fontSize;
  607.     short            fontStyle;
  608.     short            kind;            /* Kind of editor session                    */
  609. } EDENV;
  610.  
  611. // Event record definitions
  612. typedef struct
  613. {    unsigned short        what;            /* Event code                    */
  614.     Ticks                when;            /* Ticks since startup            */
  615.     FoxPoint            where;            /* Mouse location                */
  616.     unsigned long        message;        /* Key/window                    */
  617.     unsigned long        misc;            /* Event dependant misc info    */
  618.     unsigned long        misc2;            /* Event dependant misc info    */
  619.     unsigned char        mbState;        /* Mouse buttons state            */
  620.     unsigned char        mcState;        /* Mouse cond activate state    */
  621.     unsigned long        modifiers;
  622. } EventRec;
  623.  
  624.  
  625. // Flags for the _DBStatus function
  626. #define DB_BOF            1        /* BOF()                                */
  627. #define DB_EOF            2        /* EOF()                                */
  628. #define DB_RLOCKED        4        /* Current record is RLOCKed            */
  629. #define DB_FLOCKED        8        /* Database is FLOCKed                    */
  630. #define DB_EXCLUSIVE    16        /* Database is open EXCLUSIVEly            */
  631. #define DB_READONLY        32        /* Database is READONLY                    */
  632.  
  633. // Flag values for _DBLock()
  634. #define DBL_RECORD        0
  635. #define DBL_FILE        1
  636.  
  637. // Flag values for the _NewVar function
  638. #define NV_PUBLIC        0
  639. #define NV_PRIVATE        1
  640.  
  641. // Mode flag values for the __FIO function
  642. #define FIO_FGETS        0
  643. #define FIO_FREAD        1
  644. #define FIO_FPUTS        2
  645. #define FIO_FWRITE        3
  646.  
  647. // Mode flag values for the _FOpen function
  648. #define FO_READONLY        0
  649. #define FO_WRITEONLY    1
  650. #define FO_READWRITE    2
  651.  
  652. // Mode flag values for the _FCreate function
  653. #define FC_NORMAL        0
  654. #define FC_READONLY        1
  655. #define FC_HIDDEN        2
  656. #define FC_SYSTEM        4
  657. #define FC_TEMPORARY    128
  658.  
  659. // Mode flag values for the _FSeek function
  660. #define FS_FROMBOF        0        /* From beginning of file        */
  661. #define FS_RELATIVE        1        /* From current position        */
  662. #define FS_FROMEOF        2        /* From end of file                */
  663.  
  664. // Mode flag values for the __WStat function
  665. #define WS_TOP            0
  666. #define WS_BOTTOM        1
  667. #define WS_LEFT            2
  668. #define WS_RIGHT        3
  669. #define WS_HEIGHT        4
  670. #define WS_WIDTH        5
  671. #define WS_SETPORT        7
  672.  
  673. // Mode flag values for the __WControl function
  674. #define WC_CLEAR        0
  675. #define WC_CLOSE        1
  676. #define WC_HIDE            2
  677. #define WC_SHOW            3
  678. #define WC_SELECT        4
  679. #define WC_SENDBEHIND    5
  680.  
  681. // Mode flag values for the __WAdjust function
  682. #define WA_MOVE            0
  683. #define WA_SIZE            1
  684. #define WA_POSCURSOR    2
  685.  
  686. // Mode flag value for the __WPort function
  687. #define WP_ONTOP        0
  688. #define WP_OUTPUT        1
  689.  
  690. // Mode flag value for the _WZoom function
  691. #define WZ_MAXIMIZED    0
  692. #define WZ_NORMAL        1
  693. #define WZ_MINIMIZED    2
  694.  
  695. // Border strings for typical window borders.
  696. #define WO_DOUBLEBOX    "\x0cd\x0cd\x0ba\x0ba\x0c9\x0bb\x0c8\x0bc\x0cd\x0cd\x0ba\x0ba\x0c9\x0bb\x0c8\x0bc"
  697. #define WO_SINGLEBOX    "\x0c4\x0c4\x0b3\x0b3\x0da\x0bf\x0c0\x0d9\x0c4\x0c4\x0b3\x0b3\x0da\x0bf\x0c0\x0d9"
  698. #define WO_PANELBORDER    "\x0db\x0db\x0db\x0db\x0db\x0db\x0db\x0db\x0db\x0db\x0db\x0db\x0db\x0db\x0db\x0db"
  699. #define WO_SYSTEMBORDER "\x020\x020\x020\x020\x0fe\x0f0\x020\x0f9\x020\x020\x020\x020\x020\x020\x020\x020"
  700.  
  701. #ifndef FOXWIND_INCLUDED
  702.  
  703. // Border string offsets.
  704. #define selectBorder        0
  705. #define deselectBorder        8
  706.  
  707. #define topEdge                0
  708. #define bottomEdge            1
  709. #define leftEdge            2
  710. #define rightEdge            3
  711. #define topLeftCorner        4
  712. #define topRightCorner        5
  713. #define bottomLeftCorner    6
  714. #define bottomRightCorner    7
  715. #define maxBorderLen       17    /* Border string length (maximum)           */
  716.  
  717. #endif      // FOXWIND_INCLUDED
  718.  
  719.  
  720. #ifndef COLORS_INCLUDED
  721.  
  722. #define BLACK_ON     0x00   /* Foreground color attributes           */
  723. #define BLUE_ON        0x01
  724. #define GREEN_ON    0x02
  725. #define CYAN_ON        0x03
  726. #define    RED_ON        0x04
  727. #define MAGENTA_ON    0x05
  728. #define BROWN_ON    0x06
  729. #define WHITE_ON    0x07
  730.  
  731. #define BLACK    (BLACK_ON << 4)    /* Background color attributes.           */
  732. #define BLUE    (BLUE_ON << 4)
  733. #define GREEN    (GREEN_ON << 4)
  734. #define CYAN    (CYAN_ON << 4)
  735. #define RED        (RED_ON << 4)
  736. #define MAGENTA (MAGENTA_ON << 4)
  737. #define BROWN    (BROWN_ON << 4)
  738. #define WHITE    (WHITE_ON << 4)
  739.  
  740. #define BRIGHT    0x08        /* Intensify foreground color            */
  741. #define BLINK    0x80        /* Blink this                    */
  742.  
  743.  
  744. // The following values are used in the WA_ISSHADOW column of the
  745. // schemes to indicate whether the window casts a shadow.
  746.  
  747. #define CASTSSHADOW (BRIGHT | BLACK_ON | BLACK)
  748. #define CASTSNOSHADOW (BRIGHT | WHITE_ON | WHITE | BLINK)
  749.  
  750.  
  751. // Color scheme numbers for use by _WOpen and others
  752. enum
  753. {
  754.     USER_SCHEME,
  755.     USERMENU_SCHEME,
  756.     MBAR_SCHEME,
  757.     POPUP_SCHEME,
  758.     DIALOG_SCHEME,
  759.     MODAL_POPUP_SCHEME,
  760.     ALERT_SCHEME,
  761.     WINDOW_SCHEME,
  762.     NONMODAL_POPUP_SCHEME,
  763.     BROWSE_SCHEME,
  764.     REPORT_SCHEME,
  765.     ALERT_POPUP_SCHEME
  766. };
  767.  
  768. // Color index numbers used by _WSetAttr() and _WAttr()
  769. enum
  770. {
  771.     WA_PENCOLOR = -1,    /* CURRENT PEN COLOR                            */
  772.  
  773.     WA_NORMAL,            /* normal text                                    */
  774.     WA_ENHANCED,        /* enhanced text                                */
  775.     WA_BORDER,            /* window border                                */
  776.     WA_FOREMOST,        /* title when foremost                            */
  777.     WA_TITLE,            /* title otherwise                                */
  778.     WA_SELECTED,        /* selected text                                */
  779.     WA_HOTKEY,            /* control hotkeys                                */
  780.     WA_SHADOW,            /* color of shadows that fall on this window.    */
  781.     WA_ENABLED,            /* enabled control                                */
  782.     WA_DISABLED,        /* disabled control                                */
  783.     WA_ISSHADOW            /* window casts a shad                            */
  784. };
  785.  
  786.  
  787. #endif      // COLORS_INCLUDED
  788.  
  789.  
  790. //
  791. // Prototypes for the API Functions
  792. //
  793.  
  794. // Streaming output routines:
  795. void FASTCALL _PutChr(int character);
  796. void FASTCALL _PutStr(char FAR *string);
  797. void FASTCALL _PutValue(Value FAR *val);
  798.  
  799. // Memory management functions:
  800. MHANDLE FASTCALL _AllocHand(ULONG size);
  801. void FASTCALL _FreeHand(MHANDLE h);
  802. void FAR * FASTCALL _HandToPtr(MHANDLE h);
  803. void FASTCALL _HLock(MHANDLE h);
  804. void FASTCALL _HUnLock(MHANDLE h);
  805. ULONG FASTCALL _GetHandSize(MHANDLE h);
  806. USHORT FASTCALL _SetHandSize(MHANDLE h, ULONG size);
  807. BOOL FASTCALL _MemAvail(ULONG bytes);
  808.  
  809. // String handling functions:
  810. int     FASTCALL _StrLen(char FAR *string);
  811. void FASTCALL _StrCpy(char FAR *dest, char FAR *src);
  812. int     FASTCALL _StrCmp(char FAR *string1, char FAR *string2);
  813.  
  814. // Memory management functions:
  815. #if _MSC_VER
  816. #define _Alloca(size) _alloca(size)
  817.  
  818. #define _MemCmp(dest, src, length) memcmp(dest, src, length)
  819. #define _MemMove(dest, src, length) memmove(dest, src, length)
  820. #define _MemFill(ptr, c, length) memset(ptr, c, length)
  821.  
  822. #if MAC_API || MAC_OS
  823.  
  824. void * __cdecl _alloca(size_t);
  825. #define _Alloca(size) _alloca(size)
  826.  
  827. #endif
  828.  
  829. #endif
  830.  
  831. // Functions to set the return value of a library functiion:
  832. void FASTCALL _RetVal(Value FAR *val);
  833. void FASTCALL _RetChar(char FAR *string);
  834. void FASTCALL _RetInt(long ival, int width);
  835. void FASTCALL _RetFloat(double flt, int width, int dec);
  836. void FASTCALL _RetDateStr(char FAR *string);
  837. void FASTCALL _RetDateTimeStr(char FAR *string);
  838. void FASTCALL _RetLogical(int);
  839. void FASTCALL _RetCurrency(CCY money,int width);
  840.  
  841. // Database Input/Output functions:
  842. long FASTCALL _DBRecNo(int workarea);
  843. long FASTCALL _DBRecCount(int workarea);
  844. int     FASTCALL _DBStatus(int workarea);
  845. int  FASTCALL _DBRead(int workarea, long record);
  846. int  FASTCALL _DBWrite(int workarea);
  847. int     FASTCALL _DBAppend(int workarea, int carryflag);
  848. long FASTCALL _DBRewind(int workarea);
  849. long FASTCALL _DBSkip(int workarea, long distance);
  850. long FASTCALL _DBUnwind(int workarea);
  851. int  FASTCALL _DBReplace(Locator FAR *fld, Value FAR *val);
  852. long FASTCALL _DBSeek(Value FAR *val);
  853. int  FASTCALL _DBLock(int workarea, int what);
  854. void FASTCALL _DBUnLock(int workarea);
  855. int  FASTCALL _DBAppendRecords(int workarea, unsigned short nrecs, char FAR *buffer);
  856.  
  857. // Memo Field Input/Output functions:
  858. FCHAN FASTCALL  _MemoChan(int workarea);
  859. long FASTCALL _AllocMemo(Locator FAR *fld, long size);
  860. long FASTCALL _FindMemo(Locator FAR *fld);
  861. long FASTCALL _MemoSize(Locator FAR *fld);
  862.  
  863. // Memory variable manipulation functions:
  864. NTI FASTCALL _NewVar(char FAR *name, Locator FAR *loc, int flag);
  865. int FASTCALL _Release(NTI nti);
  866. int FASTCALL _Store(Locator FAR *loc, Value FAR *val);
  867. int FASTCALL _Load(Locator FAR *loc, Value FAR *val);
  868. long FASTCALL _ALen(NTI nti, int mode);
  869. int FASTCALL _FindVar(NTI nti, int where, Locator FAR *loc);
  870. NTI FASTCALL _NameTableIndex(char FAR *name);
  871.  
  872. // File Input/Output:
  873.  
  874. FCHAN FASTCALL __FOpen(char FAR *filename, int mode, int create);
  875.  
  876. #define _FOpen(filename, mode)            __FOpen(filename, mode, NO)
  877. #define _FCreate(filename, mode)        __FOpen(filename, mode, YES)
  878.  
  879. int FASTCALL __FFlush(FCHAN chan, int close);
  880.  
  881. #define _FFlush(chan)    __FFlush(chan, NO)
  882. #define _FClose(chan)    __FFlush(chan, YES)
  883.  
  884. int FASTCALL __FStat(FCHAN chan, int error);
  885.  
  886. #define _FEOF(chan)        __FStat(chan, NO)
  887. #define _FError()        __FStat(0, YES)
  888.  
  889. unsigned int FASTCALL __FIO(FCHAN chan, char FAR *buffer, unsigned int maxlen, int mode);
  890.  
  891. #define _FGets(chan, buffer, maxlen)    __FIO(chan, buffer, maxlen, FIO_FGETS)
  892. #define _FRead(chan, buffer, maxlen)    __FIO(chan, buffer, maxlen, FIO_FREAD)
  893. #define _FPuts(chan, buffer)            __FIO(chan, buffer, 0,        FIO_FPUTS)
  894. #define _FWrite(chan, buffer, maxlen)    __FIO(chan, buffer, maxlen, FIO_FWRITE)
  895.  
  896. long    FASTCALL _FSeek(FCHAN chan, long position, int mode);
  897. int        FASTCALL _FCHSize(FCHAN chan, long length);
  898. int        FASTCALL _FCopy(FCHAN dchan, long dpos, FCHAN schan, long spos, long len);
  899.  
  900. #if defined(_WIN32) || MAC_API || MAC_OS
  901.  
  902. // User Interface routines:
  903.  
  904. #define PIXELMODE    0
  905. #define CHARMODE    1
  906.  
  907. unsigned FASTCALL __ActivateHandler(FPFI handler, short charmode);
  908.  
  909. #define _ActivateHandler(handler)        __ActivateHandler(handler, CHARMODE)
  910. #define _ActivateHandlerP(handler)        __ActivateHandler(handler, PIXELMODE)
  911.  
  912. void    FASTCALL _DeActivateHandler(unsigned);
  913. unsigned FASTCALL __ActivateIdle(FPFI handler, short charmode);
  914.  
  915. #define  _ActivateIdle(handler)            __ActivateIdle(handler, CHARMODE)
  916. #define  _ActivateIdleP(handler)        __ActivateIdle(handler, PIXELMODE)
  917.  
  918. void    FASTCALL _DeActivateIdle(unsigned);
  919.  
  920. int        FASTCALL __GetNextEvent(EventRec FAR *event, short charmode);
  921.  
  922. #define _GetNextEvent(event)            __GetNextEvent(event, CHARMODE)
  923. #define _GetNextEventP(event)            __GetNextEvent(event, PIXELMODE)
  924.  
  925. void    FASTCALL __DefaultProcess(EventRec FAR *event, short charmode);
  926.  
  927. #define _DefaultProcess(event)            __DefaultProcess(event, CHARMODE)
  928. #define    _DefaultProcessP(event)            __DefaultProcess(event, PIXELMODE)
  929.  
  930. #define _MousePos(pt)            __MousePos(pt, CHARMODE)
  931. #define _MousePosP(pt)            __MousePos(pt, PIXELMODE)
  932.  
  933. int        FASTCALL __MousePos(Point FAR *pt, int charmode);
  934.  
  935. // Windowing routines:
  936.  
  937. int        FASTCALL __FindWindow(WHANDLE FAR *wh, Point pt, int charmode);
  938. void    FASTCALL __GlobalToLocal(Point FAR *pt, WHANDLE wh, int charmode);
  939. WHANDLE FASTCALL __WOpen(int top, int left, int bottom, int right, int flag, int
  940.                scheme_num, Scheme FAR *scheme, char FAR *bord, int pixelmode);
  941.  
  942. #define _WOpenP(top, left, bottom, right, flag, scheme_num, scheme, bord) __WOpen(top, left, bottom, right, flag, scheme_num, scheme, bord, PIXELMODE)
  943. #define _WOpen(top, left, bottom, right, flag, scheme_num, scheme, bord) __WOpen(top, left, bottom, right, flag, scheme_num, scheme, bord, CHARMODE)
  944.  
  945. #define _GlobalToLocal(pt, wh)        __GlobalToLocal(pt, wh, CHARMODE)
  946. #define _GlobalToLocalP(pt, wh)        __GlobalToLocal(pt, wh, PIXELMODE)
  947.  
  948. #define _FindWindow(wh, pt)            __FindWindow(wh, pt, CHARMODE)
  949. #define _FindWindowP(wh, pt)        __FindWindow(wh, pt, PIXELMODE)
  950.  
  951.  
  952. #define _WTop(wh)        ((unsigned)__WStat(wh, WS_TOP, CHARMODE))
  953. #define _WBottom(wh)    ((unsigned)__WStat(wh, WS_BOTTOM, CHARMODE))
  954. #define _WLeft(wh)        ((unsigned)__WStat(wh, WS_LEFT, CHARMODE))
  955. #define _WRight(wh)        ((unsigned)__WStat(wh, WS_RIGHT, CHARMODE))
  956. #define _WHeight(wh)    ((unsigned)__WStat(wh, WS_HEIGHT, CHARMODE))
  957. #define _WWidth(wh)        ((unsigned)__WStat(wh, WS_WIDTH, CHARMODE))
  958. #define _WSetPort(wh)    ((WHANDLE)__WStat(wh, WS_SETPORT, CHARMODE))
  959.  
  960. #define _WTopP(wh)        ((unsigned)__WStat(wh, WS_TOP, PIXELMODE))
  961. #define _WBottomP(wh)    ((unsigned)__WStat(wh, WS_BOTTOM, PIXELMODE))
  962. #define _WLeftP(wh)        ((unsigned)__WStat(wh, WS_LEFT, PIXELMODE))
  963. #define _WRightP(wh)    ((unsigned)__WStat(wh, WS_RIGHT, PIXELMODE))
  964. #define _WHeightP(wh)    ((unsigned)__WStat(wh, WS_HEIGHT, PIXELMODE))
  965. #define _WWidthP(wh)    ((unsigned)__WStat(wh, WS_WIDTH, PIXELMODE))
  966.  
  967. unsigned long FASTCALL __WStat(WHANDLE wh, int mode, int pixelmode);
  968.  
  969. #define _WMove(wh, pt)            __WAdjust(wh, pt, WA_MOVE, CHARMODE)
  970. #define _WSize(wh, pt)            __WAdjust(wh, pt, WA_SIZE, CHARMODE)
  971. #define _WPosCursor(wh, pt)        __WAdjust(wh, pt, WA_POSCURSOR, CHARMODE)
  972. #define _WMoveP(wh, pt)            __WAdjust(wh, pt, WA_MOVE, PIXELMODE)
  973. #define _WSizeP(wh, pt)            __WAdjust(wh, pt, WA_SIZE, PIXELMODE)
  974. #define _WPosCursorP(wh, pt)    __WAdjust(wh, pt, WA_POSCURSOR, PIXELMODE)
  975.  
  976. void    FASTCALL __WAdjust(WHANDLE wh, Point pt, int mode, int charmode);
  977. void    FASTCALL __WScroll(WHANDLE wh, Rect r, int dv, int dh, int charmode);
  978.  
  979. #define    _WScroll(wh, r, dv, dh)        __WScroll(wh, r, dv, dh, CHARMODE)
  980. #define    _WScrollP(wh, r, dv, dh)    __WScroll(wh, r, dv, dh, PIXELMODE)
  981. #define _WClearRect(wh, r)            __WScroll(wh, r, 0, 0, CHARMODE);
  982. #define _WClearRectP(wh, r)            __WScroll(wh, r, 0, 0, PIXELMODE);
  983.  
  984. #define _WGetCursor(wh)             __WGetCursor(wh, CHARMODE)
  985. #define _WGetCursorP(wh)         __WGetCursor(wh, PIXELMODE)
  986.  
  987. Point    FASTCALL __WGetCursor(WHANDLE wh, int);
  988.  
  989. void    FASTCALL __SetMenuPoint(MenuId menuid, FoxPoint loc, int charmode);
  990.  
  991. #define _SetMenuPoint(menuid, loc)        __SetMenuPoint(menuid, loc, CHARMODE)
  992. #define _SetMenuPointP(menuid, loc)        __SetMenuPoint(menuid, loc, PIXELMODE)
  993.  
  994.  
  995. #else   // defined(_WIN32) || MAC_API
  996.  
  997. // User Interface routines:
  998.  
  999. unsigned _ActivateHandler(FPFI handler);
  1000. void     _DeActivateHandler(unsigned);
  1001. unsigned _ActivateIdle(FPFI handler);
  1002. void    _DeActivateIdle(unsigned);
  1003. int     _GetNextEvent(EventRec FAR *event);
  1004. void     _DefaultProcess(EventRec FAR *event);
  1005. int     _MousePos(Point FAR *pt);
  1006.  
  1007. // Windowing routines:
  1008.  
  1009. int     _FindWindow(WHandle FAR *wh, Point pt);
  1010. void     _GlobalToLocal(Point FAR *pt, WHandle wh);
  1011. WHandle _WOpen(int top, int left, int bottom, int right, int flag, int
  1012.            scheme_num, Scheme FAR *scheme, char FAR *bord);
  1013.  
  1014. #define _WTop(wh)        ((unsigned)__WStat(wh, WS_TOP))
  1015. #define _WBottom(wh)    ((unsigned)__WStat(wh, WS_BOTTOM))
  1016. #define _WLeft(wh)        ((unsigned)__WStat(wh, WS_LEFT))
  1017. #define _WRight(wh)        ((unsigned)__WStat(wh, WS_RIGHT))
  1018. #define _WHeight(wh)    ((unsigned)__WStat(wh, WS_HEIGHT))
  1019. #define _WWidth(wh)        ((unsigned)__WStat(wh, WS_WIDTH))
  1020. #define _WSetPort(wh)    ((WHandle)__WStat(wh, WS_SETPORT))
  1021.  
  1022. unsigned long __WStat(WHandle wh, int mode);
  1023.  
  1024. #define _WMove(wh, pt)        __WAdjust(wh, pt, WA_MOVE)
  1025. #define _WSize(wh, pt)        __WAdjust(wh, pt, WA_SIZE)
  1026. #define _WPosCursor(wh, pt)    __WAdjust(wh, pt, WA_POSCURSOR)
  1027.  
  1028. void __WAdjust(WHandle wh, FoxPoint pt, int mode);
  1029.  
  1030. void     _WScroll(WHandle wh, Rect r, int dv, int dh);
  1031. #define _WClearRect(wh, r)    _WScroll(wh, r, 0, 0);
  1032.  
  1033. Point    _WGetCursor(WHandle wh);
  1034. void    _SetMenuPoint(MenuId menuid, Point loc);
  1035.  
  1036. #endif    // __WINDOWS__ || _WINDLL
  1037.  
  1038.  
  1039. int     FASTCALL _InKey(int timeout, int flag);
  1040. void    FASTCALL _RefreshDisplay(void);
  1041. void     FASTCALL _RefreshVideo(void);
  1042.  
  1043. #define _WClear(wh)        __WControl(wh, WC_CLEAR)
  1044. #define _WClose(wh)        __WControl(wh, WC_CLOSE)
  1045. #define _WHide(wh)        __WControl(wh, WC_HIDE)
  1046. #define _WShow(wh)        __WControl(wh, WC_SHOW)
  1047. #define _WSelect(wh)    __WControl(wh, WC_SELECT)
  1048. #define _WSendBehind(w) __WControl(w, WC_SENDBEHIND)
  1049.  
  1050. void FASTCALL __WControl(WHANDLE wh, int mode);
  1051.  
  1052. #define _WOnTop()        __WPort(WP_ONTOP)
  1053. #define _WGetPort()        __WPort(WP_OUTPUT)
  1054.  
  1055. WHandle FASTCALL __WPort(int mode);
  1056.  
  1057. void    FASTCALL _WZoom(WHANDLE wh, int newstate);
  1058.  
  1059. void    FASTCALL __WSetTitle(WHANDLE wh, char FAR *text, int mode);
  1060.  
  1061. #define WT_SETFOOTER    0
  1062. #define WT_SETTITLE        1
  1063. #define WT_GETFOOTER    2
  1064. #define WT_GETTITLE        3
  1065.  
  1066. #define _WSetFooter(wh, footer) __WSetTitle(wh, footer, WT_SETFOOTER)
  1067. #define _WSetTitle(wh, title)    __WSetTitle(wh, title, WT_SETTITLE)
  1068. #define _WFooter(wh, footer)    __WSetTitle(wh, footer, WT_GETFOOTER)
  1069. #define _WTitle(wh, title)        __WSetTitle(wh, title, WT_GETTITLE)
  1070.  
  1071. int        FASTCALL _WAttr(WHANDLE wh, int color);
  1072. void    FASTCALL _WSetAttr(WHANDLE wh, int color, int attr);
  1073. void    FASTCALL _WPutChr(WHANDLE wh, int character);
  1074. void    FASTCALL _WPutStr(WHANDLE wh, char FAR *str);
  1075.  
  1076. // Functions to execute FoxPro statements and evaluate FoxPro expressions:
  1077.  
  1078. int FASTCALL _Execute(char FAR *stmt);
  1079. int FASTCALL _Evaluate(Value FAR *val, char FAR *expr);
  1080.  
  1081. // Menuing functions:
  1082.  
  1083. ITEMID    FASTCALL __MenuStat(long x, int mode);
  1084.  
  1085. #define _MenuId(literal)                __MenuStat(literal, 0)
  1086. #define _GetNewItemId(menuid)            __MenuStat(menuid, 1)
  1087. #define _CountItems(menuid)                __MenuStat(menuid, 2)
  1088. #define _GetNewMenuId()                    __MenuStat(0, 3)
  1089.  
  1090. int        FASTCALL _MenuInteract(MenuId FAR *menuid, ItemId FAR *itemid);
  1091.  
  1092. void    FASTCALL __MenuAction(MenuId menuid, int mode);
  1093.  
  1094. #define _ActivateMenu(menuid)            __MenuAction(menuid, 0)
  1095. #define _DeActivateMenu(menuid)            __MenuAction(menuid, 1)
  1096. #ifndef GLOBAL_INCLUDED
  1097. #define _DisposeMenu(menuid)            __MenuAction(menuid, 2)
  1098. #endif
  1099.  
  1100. int        FASTCALL _NewMenu(int mtype, MenuId menuid);
  1101. void    FASTCALL _SetMenuColor(MenuId menuid, int scheme);
  1102. ItemId    FASTCALL _GetItemId(MenuId menuid, long index);
  1103. int        FASTCALL _NewItem(MenuId menuid, ItemId itemid, ItemId beforeid, char FAR *prompt);
  1104. void    FASTCALL _DisposeItem(MenuId menuid, ItemId itemid);
  1105.  
  1106. void    FASTCALL __GetItemText(MenuId menuid, ItemId itemid, char FAR *text, int mode);
  1107.  
  1108. #define _GetItemText(menuid, itemid, text) __GetItemText(menuid, itemid, text, 0)
  1109. #define _GetOSPrompt(menuid, itemid, text) __GetItemText(menuid, itemid, text, 1)
  1110.  
  1111. void    FASTCALL _SetItemSubMenu(MenuId menuid, ItemId itemid, MenuId submenuid);
  1112. MenuId    FASTCALL _GetItemSubMenu(MenuId menuid, ItemId itemid);
  1113. void    FASTCALL _SetItemColor(MenuId menuid, ItemId itemid, int scheme);
  1114. void    FASTCALL _SetItemText(MenuId menuid, ItemId itemid, char FAR *text);
  1115. int        FASTCALL _GetItemCmdKey(MenuId menuid, ItemId itemid, char FAR *text);
  1116. void    FASTCALL _SetItemCmdKey(MenuId menuid, ItemId itemid, int key, char FAR *text);
  1117. void    FASTCALL _OnSelection(MenuId menuid, ItemId itemid, FPFI routine);
  1118.  
  1119. // FoxPro Dialogs:
  1120. int        FASTCALL _Dialog(int scheme, char FAR *text, char FAR *button1,
  1121.                 char FAR *button2, char FAR *button3, int def, int esc);
  1122.  
  1123.  
  1124. // Error Handling:
  1125. void    FASTCALL _Error(int code);
  1126. void    FASTCALL _UserError(char FAR *message);
  1127. int        FASTCALL _ErrorInfo(int code, char FAR *message);
  1128.  
  1129.  
  1130. #define ED_SAVENOASK    0
  1131. #define    ED_SAVEASK        1
  1132. #define ED_SAVEAS        2
  1133.  
  1134. //
  1135. // Mode flags for the editor functions:
  1136. //
  1137.  
  1138. /* Mode flag values for the __EdPos function */
  1139. #define ED_SETPOS        0
  1140. #define ED_GETLINEPOS    1
  1141. #define ED_GETLINENUM    2
  1142. #define ED_GETPOS        3
  1143.  
  1144. /* Mode flag values for the __EdScroll function */
  1145. #define ED_SCROLLTOPOS    0
  1146. #define ED_SCROLLTOSEL    1
  1147.  
  1148. /* Mode flag values for the __EdManip function */
  1149. #define ED_SENDKEY        0
  1150. #define ED_DELETE        1
  1151. #define ED_INDENT        2
  1152. #define ED_COMMENT        3
  1153. #define ED_PROPERTIES    4
  1154. #define ED_PROCLIST        5
  1155.  
  1156. /* Mode flag values for the __EdClipBrd function */
  1157. #define ED_COPY            0
  1158. #define ED_CUT            1
  1159. #define ED_PASTE        2
  1160. #define ED_UNDO            3
  1161. #define ED_REDO            4
  1162.  
  1163. /* Mode flag values for the __EdEnv function */
  1164. #define ED_SETENV        0
  1165. #define ED_GETENV        1
  1166.  
  1167. /* Mode flag values for the __EdRevert function */
  1168. #define ED_REVERT        0
  1169. #define ED_SAVE            1
  1170.  
  1171. /* Mode flag values for the __WFindTitle function */
  1172. #define WFINDTITLE     0
  1173. #define WMAINWINDOW    1
  1174. #define WFUNCTIONMASK    0x0f
  1175. #define WCLIENTFLAG        0x10
  1176.  
  1177.  
  1178. // Editor Functions:
  1179.  
  1180. WHandle FASTCALL _EdOpenFile(char FAR *filename, int mode);
  1181. int        FASTCALL _EdCloseFile(WHandle wh, int opt);
  1182. void    FASTCALL __EdRevert(WHandle wh, int mode);
  1183.  
  1184. #define _EdRevert(wh)                __EdRevert(wh, ED_REVERT)
  1185. #define _EdSave(wh)                    __EdRevert(wh, ED_SAVE)
  1186.  
  1187. #define _EdSetPos(wh, pos)            (__EdPos(wh, (EDPOS) pos, ED_SETPOS))
  1188. #define _EdGetLinePos(wh, line)        ((EDPOS)__EdPos(wh, (EDLINE) line, ED_GETLINEPOS))
  1189. #define _EdGetLineNum(wh, pos)        ((EDLINE)__EdPos(wh, (EDPOS) pos, ED_GETLINENUM))
  1190. #define _EdGetPos(wh)                ((EDPOS)__EdPos(wh, 0, ED_GETPOS))
  1191.  
  1192. EDPOS    FASTCALL __EdPos(WHandle wh, long pos, int mode);
  1193. int        FASTCALL _EdPosInView(WHandle wh, EDPOS pos);
  1194.  
  1195. #define _EdScrollToPos(wh, pos, flag)    (__EdScroll(wh, pos, flag, ED_SCROLLTOPOS))
  1196. #define _EdScrollToSel(wh, flag)        (__EdScroll(wh, 0, flag, ED_SCROLLTOSEL))
  1197.  
  1198. void    FASTCALL __EdScroll(WHandle wh, EDPOS pos, int flags, int mode);
  1199.  
  1200. #define _EdSendKey(wh, key)            __EdManip(wh, key, ED_SENDKEY)
  1201. #define    _EdDelete(wh)                __EdManip(wh, 0, ED_DELETE)
  1202. #define _EdIndent(wh, tabs)            __EdManip(wh, tabs, ED_INDENT)
  1203. #define _EdComment(wh, tabs)        __EdManip(wh, tabs, ED_COMMENT)
  1204. #define _EdProperties(wh)            __EdManip(wh, 0, ED_PROPERTIES)
  1205. #define _EdProcList(wh)                __EdManip(wh, 0, ED_PROCLIST)
  1206.  
  1207. void    FASTCALL __EdManip(WHandle wh, int n, int mode);
  1208.  
  1209. EDPOS    FASTCALL _EdSkipLines(WHandle wh, EDPOS pos, int n);
  1210. void     FASTCALL _EdInsert(WHandle wh, char FAR *str, unsigned long len);
  1211. TEXT    FASTCALL _EdGetChar(WHandle wh, EDPOS pos);
  1212. void    FASTCALL _EdGetStr(WHandle wh, EDPOS pos1, EDPOS pos2, TEXT FAR *str);
  1213.  
  1214. #define _EdCopy(wh)                    __EdClipBrd(wh, ED_COPY)
  1215. #define _EdCut(wh)                    __EdClipBrd(wh, ED_CUT)
  1216. #define _EdPaste(wh)                __EdClipBrd(wh, ED_PASTE)
  1217. #define _EdUndo(wh)                    __EdClipBrd(wh, ED_UNDO)
  1218. #define _EdRedo(wh)                    __EdClipBrd(wh, ED_REDO)
  1219.  
  1220. void     FASTCALL __EdClipBrd(WHandle wh, int mode);
  1221. void    FASTCALL _EdSelect(WHandle wh, EDPOS pos1, EDPOS pos2);
  1222. void     FASTCALL _EdUndoOn(WHandle wh, int flag);
  1223. void    FASTCALL _EdActive(WHandle wh, int flag);
  1224. int        FASTCALL _EdLastError(WHandle wh);
  1225.  
  1226. #define _EdSetEnv(wh, env)            __EdEnv(wh, env, ED_SETENV)
  1227. #define _EdGetEnv(wh, env)            __EdEnv(wh, env, ED_GETENV)
  1228.  
  1229. #define _WFindTitle(title)            __WFindTitle(title, WFINDTITLE)
  1230. #define _WFindClientTitle(title)    __WFindTitle(title, WFINDTITLE | WCLIENTFLAG)
  1231. #define _WMainWindow()                __WFindTitle(0, WMAINWINDOW)
  1232. #define _WMainClientWindow()        __WFindTitle(0, WMAINWINDOW | WCLIENTFLAG)
  1233.  
  1234.  
  1235. int        FASTCALL __EdEnv(WHandle, EDENV FAR *, int);
  1236. #if MAC_API || MAC_OS
  1237. WindowPtr _WhToHwnd(WHandle);
  1238. #else
  1239. HWND     FASTCALL _WhToHwnd(WHandle);
  1240. #endif
  1241. WHandle FASTCALL __WFindTitle(char FAR *, int);
  1242.  
  1243. // Object model extensions
  1244. #define _WGetObjectClientWindow(objct)    __WGetObjectWindow(objct, WCLIENTFLAG)
  1245. #define _WGetObjectWindow(objct)        __WGetObjectWindow(objct, 0)
  1246.  
  1247. WHandle FASTCALL __WGetObjectWindow(Value FAR *, int);
  1248.  
  1249. int    FASTCALL _SetObjectProperty(Value FAR *objct, char FAR *prop, Value FAR *val, int fadd);
  1250. int    FASTCALL _GetObjectProperty(Value FAR *val, Value FAR *objct, char FAR *prop);
  1251.  
  1252. int FASTCALL _ObjectReference(Value FAR *objct);
  1253. int FASTCALL _ObjectRelease(Value FAR *objct);
  1254. int FASTCALL _ObjectCmp(Value FAR *objct1, Value FAR *objct2);
  1255. void FASTCALL _FreeObject(Value FAR *objct);
  1256.  
  1257. //_OCXAPI will allow developers of OCXs to use the LCK
  1258. //    Sample call: _OCXAPI(AfxGetInstanceHandle(),DLL_PROCESS_ATTACH);
  1259.  
  1260. BOOL WINAPI _OCXAPI(HINSTANCE hInstance,DWORD dwReason);
  1261.  
  1262. #ifdef GLOBAL_INCLUDED
  1263. #undef    WHANDLE
  1264. #endif
  1265.  
  1266. #endif                  // PRO_EXT_INCLUDED
  1267.  
  1268. #ifdef __cplusplus
  1269. }                       // End of extern "C" {
  1270. #endif
  1271.  
  1272. #if defined(__SC__)
  1273. #pragma SC align
  1274. #elif defined(__MWERKS__)
  1275. #pragma align=reset
  1276. #elif defined(_MSC_VER)
  1277. #pragma pack(pop)          // Restore structure packing
  1278. #endif
  1279.