home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 328_02 / wtwg.h < prev    next >
C/C++ Source or Header  |  1991-04-11  |  36KB  |  1,454 lines

  1. /*
  2. HEADER:        wtwg.h
  3. TITLE:        include (header) file for window routines in wtwg library.
  4. VERSION:    1.0
  5. DATE:        5/1/90
  6.  
  7. DESCRIPTION: include (header) file for window routines.
  8.  
  9. KEYWORDS:    windows, keyboard, mouse, text, graphics, expanded memory, menus;
  10. SYSTEM:        MS-DOS v3.0, probably works with v2.0 but untested;
  11. FILENAME:    wtwg.h
  12.  
  13. WARNINGS:    
  14.  
  15. SEE-ALSO:    readme.doc, define.doc, funcs.doc    
  16.                 
  17. AUTHOR:    David Blum
  18. COMPILERS:    Turbo C v2.0, Microsoft C v5.1
  19. */
  20.  
  21.  
  22. #ifndef  WTWG_HEADER
  23.     #define  WTWG_HEADER
  24.  
  25.     #include <stdio.h>            
  26.     #include <stdlib.h>        /* required for FILE definition */
  27.     #include <time.h>        /* req'd for time_t */
  28.  
  29.  
  30. #ifdef __cplusplus
  31.     extern "C"    {
  32. #endif    /* c++ */
  33.  
  34.  
  35.  
  36. #ifndef ON
  37.     #define ON     1
  38.     #define OFF    0
  39. #endif    /* ifndef ON */
  40.  
  41.  
  42. #ifndef TRUE
  43.     #define    TRUE    1
  44.     #define FALSE     0
  45. #endif    /* ifndef TRUE */
  46.  
  47. #ifndef BLINK
  48.     #define BLINK      0x80
  49. #endif  /* BLINK */
  50.  
  51. #ifndef BRIGHT
  52.     #define BRIGHT  0x08
  53. #endif  /* BRIGHT */
  54.  
  55. /* these peculiar defines are required to prevent 'redefinitions'
  56.  * ie, conflicts with graphics.h
  57.  */
  58. #ifndef __COLORS
  59. #define __COLORS
  60.  
  61. enum COLORS {
  62.         BLACK =    0   ,
  63.         BLUE        ,
  64.         GREEN       ,
  65.         CYAN        ,
  66.         RED         ,
  67.         MAGENTA        ,
  68.         BROWN       ,
  69.         LIGHTGRAY   ,
  70.         DARKGRAY    ,
  71.         LIGHTBLUE   ,
  72.         LIGHTGREEN  ,
  73.         LIGHTCYAN   ,
  74.         LIGHTRED    ,
  75.         LIGHTMAGENTA,
  76.         YELLOW      ,
  77.     WHITE        };
  78.  
  79.  
  80. #define LIGHTGREY LIGHTGRAY
  81. #define DARKGREY  DARKGRAY
  82.  
  83. #endif  /* COLORS */
  84.  
  85.  
  86. /* keyboard symbolic definetions
  87.  */
  88. #define CTRL(L)        (L - 0x40)  /* L must be uppercase */
  89.  
  90.  
  91. /* Function keys  apply only to F1-F10. see below for F11, F12
  92.  */
  93.  
  94. #define FKEY(x)        (128+ 58 +(x))
  95. #define SHIFT_FKEY(x)    (128+ 83 +(x))
  96. #define SHIFTFKEY(x)    (128+ 83 +(x))
  97. #define CTRL_FKEY(x)    (128+ 94 +(x))
  98. #define CTRLFKEY(n)    (128+ 94 +(n))
  99.  
  100.  
  101. #define EXTENDED_KEY       00
  102. #define BACKSPACE    (0x08)
  103. #define CTRL_BACKSPACE  127
  104. #define SHIFT_BACKSPACE   8
  105.  
  106.  
  107. #define ENTER        (0x0d)
  108. #define RETURN        (0x0d)
  109. #define CTRL_ENTER    (0x0a)
  110. #define ESCAPE         (0x1b)
  111. #define CTRL_LEFTBRACKET 0x1b
  112. #define CTRL_RIGHTBRACKET 0x1c
  113. #define END         (128+ 79)
  114. #define CTRL_END    (128+ 117)
  115. #define HOME        (128+ 71)
  116. #define CTRL_HOME     (128+ 119)
  117. #define PAGE_DOWN    (128+ 81)
  118. #define PAGE_DN        (128+ 81)
  119. #define    CTRL_PgDn    (128+ 118)
  120. #define    CTRL_PAGE_DN    (128+ 118)
  121. #define    CTRL_PAGE_DOWN  (128+ 118)
  122. #define PAGE_UP         (128+ 73)
  123. #define UP_ARROW     (128+ 72)
  124. #define DOWN_ARROW    (128+ 80)
  125. #define DN_ARROW    (128+ 80)
  126. #define LEFT_ARROW    (128+ 75)
  127. #define LT_ARROW    (128+ 75)
  128. #define CTRL_LT_ARROW    (128+ 115)
  129. #define CTRL_LEFT_ARROW (128+ 115)
  130. #define RIGHT_ARROW     (128+ 77)
  131. #define RT_ARROW    (128+ 77)
  132. #define CTRL_RT_ARROW   (128+ 116)
  133. #define CTRL_RIGHT_ARROW (128+ 116)
  134. #define INSERT        (128+ 82)
  135. #define DELETE        (128+ 83)
  136. #define TAB        (9)
  137. #define    SHIFT_TAB    (128+ 15)
  138. #define    BACKTAB        (128+ 15)
  139. #define CTRL_PRTSCRN    (128+ 114)
  140. #define CTRL_MINUS    31
  141. #define CTRL_BACKSLASH  28
  142.  
  143.  
  144.  
  145.  
  146. #define MOUSE        128
  147.  
  148.  
  149.  
  150.  
  151.  
  152. /*! ALT key functions.  apply only to ALT_letter combinations
  153.  */
  154. int ALT     (int val);
  155. int unALT     (int keypress);
  156.  
  157. #define     ALTFKEY(n)    (128 +103+ (n))
  158. #define        ALT_FKEY(n)    (128 +103+ (n))
  159.  
  160.  
  161.  
  162. #define  isALT(xx)   ( (xx) >= 0x10+128  && (xx) <= 0x32+128 )
  163.  
  164.  
  165.  
  166. #define ALT_A  (0x1E+128)
  167. #define ALT_B  (0x30+128)
  168. #define ALT_C  (0x2E+128)
  169. #define ALT_D  (0x20+128)
  170. #define ALT_E  (0x12+128)
  171. #define ALT_F  (0x21+128)
  172. #define ALT_G  (0x22+128)
  173. #define ALT_H  (0x23+128)
  174. #define ALT_I  (0x17+128)
  175. #define ALT_J  (0x24+128)
  176. #define ALT_K  (0x25+128)
  177. #define ALT_L  (0x26+128)
  178. #define ALT_M  (0x32+128)
  179. #define ALT_N  (0x31+128)
  180. #define ALT_O  (0x18+128)
  181. #define ALT_P  (0x19+128)
  182. #define ALT_Q  (0x10+128)
  183. #define ALT_R  (0x13+128)
  184. #define ALT_S  (0x1F+128)
  185. #define ALT_T  (0x14+128)
  186. #define ALT_U  (0x16+128)
  187. #define ALT_V  (0x2F+128)
  188. #define ALT_W  (0x11+128)
  189. #define ALT_X  (0x2d+128)
  190. #define ALT_Y  (0x15+128)
  191. #define ALT_Z  (0x2C+128)
  192.  
  193.  
  194.  
  195.  
  196. #define ALT_1  (128+120)
  197. #define ALT_2  (128+121)
  198. #define ALT_3  (128+122)
  199. #define ALT_4  (128+123)
  200. #define ALT_5  (128+124)
  201. #define ALT_6  (128+125)
  202. #define ALT_7  (128+126)
  203. #define ALT_8  (128+127)
  204. #define ALT_9  (128+128)
  205. #define ALT_0  (128+129)
  206.  
  207.  
  208.  
  209. #define ALT_MINUS    (128+130)
  210.  
  211. #define ALT_EQ        (128+131)
  212. #define ALT_EQUAL    (128+131)
  213.  
  214. #define CTRL_PgUp    (128+132)
  215. #define CTRL_PAGE_UP    (128+132)
  216.  
  217.  
  218.  
  219. /* enhanced kbd only
  220.  */
  221. #define ALT_ESCAPE     (128+1  )
  222. #define ALT_BKSPACE    (128+14 )
  223. #define ALT_LT_BRACKET    (128+26 )
  224. #define ALT_RT_BRACKET    (128+27 )
  225. #define ALT_ENTER       (128+28 )
  226. #define ALT_SEMICOLON    (128+39 )
  227. #define ALT_QUOTE    (128+40 )
  228. #define ALT_ACCENT    (128+41 )
  229. #define ALT_BKSLASH    (128+48 )
  230. #define ALT_COMMA    (128+51 )
  231. #define ALT_PERIOD    (128+52 )
  232. #define ALT_SLASH    (128+53 )
  233. #define CTRL_UP_ARROW   (128+141)
  234. #define CTRL_DN_ARROW   (128+145)
  235. #define ALT_HOME        (128+151)
  236. #define ALT_UP_ARROW    (128+152)
  237. #define ALT_PGUP        (128+153)
  238. #define ALT_LT_ARROW    (128+155)
  239. #define ALT_RT_ARROW    (128+157)
  240. #define ALT_END         (128+159)
  241. #define ALT_DN_ARROW    (128+160)
  242. #define ALT_PGDN        (128+161)
  243. #define ALT_INSERT    (128+162)
  244. #define ALT_DEL         (128+163)
  245. #define ALT_TAB         (128+165)
  246.  
  247.     /* numpad 5 with numlock off - enh kbd only.
  248.      */
  249. #define NUMPAD_5    (128+ 76)
  250.  
  251.  
  252. /* NOTE that FKEY 11 and 12 arehandled separate from F1-10
  253.  *    enh kbd only.
  254.  */
  255. #define FKEY_11        (128+133)
  256. #define FKEY_12        (128+134)
  257. #define SHIFT_FKEY_11    (128+135)
  258. #define SHIFT_FKEY_12    (128+136)
  259. #define CTRL_FKEY_11    (128+137)
  260. #define CTRL_FKEY_12    (128+138)
  261. #define ALT_FKEY_11    (128+139)
  262. #define ALT_FKEY_12    (128+140)
  263.  
  264.  
  265.  
  266.  
  267.  
  268. /* monochrome attributes */
  269. #define WHITE_ON_BLACK 0x02  /*green*/
  270. #define BLACK_ON_WHITE 0x70
  271. #define UNDERLINE      0x01  /*blue */   /*red =x04 */
  272. #define BOLDFACE       0x0A  /* = 0x08 + green */
  273.  
  274.  
  275.  
  276.  /* timout limit for screen saver routine
  277.   *    currently set at 3 minutes 
  278.   * If you change this definition you should recompile wgetc.c
  279.   */
  280. #define WTIMEOUT_LIMIT   3*60
  281.  
  282.  
  283.  
  284. /* line-drawing characters. see wbox[]
  285.  */
  286. struct  WBOX_PATTERN
  287.         {
  288.         unsigned char nw, horiz, ne, sw, vert, se ;
  289.         };
  290.  
  291.  
  292.  
  293. /* array values for wbox[]
  294.  */
  295. #define NO_BORDER        0
  296. #define SINGLE_BORDER         1
  297. #define DOUBLE_BORDER        2
  298. #define SPECKLE_BORDER      3
  299. #define SOLID_BORDER        4
  300. #define MIXED2H1V_BORDER    5
  301. #define MIXED1H2V_BORDER    6
  302. #define HANGING_BORDER        7
  303. #define STANDUP_BORDER        8
  304.  
  305.  
  306.  
  307. /* buttons
  308.  */
  309. struct WBUTTON_STRUCT
  310.     {
  311.     struct  WBUTTON_STRUCT   *Bchain;        /* next button */
  312.     int                Bval;                    /* keyboard value */
  313.     unsigned int    Brange;                    /* range scrollbars*/
  314.  
  315.     char            *Btext;                    /* display text */
  316.     unsigned char    Bscrollval;                /* screen value of scrollbar*/
  317.  
  318.     unsigned char   Blen;                     /* len+1 of text*/
  319.     unsigned char   Bstyle;                    /* style flag     */
  320.  
  321.     unsigned char     Bx;
  322.     unsigned char      By;
  323.     unsigned char     Bxend;
  324.     unsigned char     Byend;
  325.     };
  326.  
  327.  
  328.  
  329.  
  330.  
  331. typedef struct WBUTTON_STRUCT  WBUTTON;
  332.  
  333.  
  334. /* button flags specifiable by user when calling wbutton_add()
  335.  */
  336.     #define WBTN_BOX     0x01
  337.  
  338.  
  339. /* following button flags reserved for internal use.
  340.  */
  341.     #define WBTN_ACTIVE     0x02
  342.     #define WBTN_SCROLL        0x04
  343.     #define WBTN_BUTTON     0x08
  344.  
  345.  
  346.  
  347. struct WHEAP_STRUCT
  348.     {
  349.     struct WHEAP_STRUCT     *whp_next;    /* linked lists of heap */
  350.     struct WHEAP_STRUCT     *whp_prev;
  351.  
  352.     size_t                     whp_nb;      /* number of bytes */
  353.  
  354.     char                      whp_flag;    /* type of heap element */
  355.     unsigned char             whp_priority;    /* priority        */
  356.  
  357.     /*---------- end of common part ---------- */
  358.  
  359.     void far                 *whp_ram;    /* where stored or accessed*/
  360.  
  361.     /* double linked lists  of disk blocks,
  362.      * so we can find 'holes' for new allocations
  363.      */
  364.     struct WHEAP_STRUCT     *whp_dskhi;    /* ptrs to lo/hi blocks */
  365.     struct WHEAP_STRUCT     *whp_dsklo;
  366.  
  367.     unsigned long              whp_position;    /* position in disk */
  368.  
  369.     int                         whp_handle;        /* XMS handle */
  370.     int                         whp_npages;        /* XMS number of pages */
  371.  
  372.     /* for disk type storage: append (new block), update (old block),
  373.      *    or create (new file)
  374.      */
  375.     char                      whp_typewrite;
  376.  
  377.     char                      whp_filler;        /* alignment */
  378.  
  379.  
  380.     };
  381.  
  382. typedef struct WHEAP_STRUCT  WHEAP;
  383.  
  384.  
  385.  
  386.  
  387.     /* flag values for whx_flag...tells how this blobk is stored
  388.      */
  389. #define WHP_XMS        0x01        /* expanded memory         */
  390. #define WHP_RAM        0x02        /* DOS heap ( void far * )    */
  391. #define WHP_DSK        0x04        /* disk file             */
  392.  
  393.  
  394.     /* maximum allowable allocation by heap manager
  395.      *    this is 64k -16 bytes for DOS memory mgt info.
  396.      */
  397. #define WHEAP_MAX    (65520u)
  398.  
  399.  
  400. /* priority for window save areas
  401.  */
  402. #define WIN_HP_PRIORITY     1
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409. struct _WINDOW
  410.     {
  411.     struct     _WINDOW *winchain;    /* pointer to previous window   */
  412.  
  413.     WHEAP           *winsave;    /* restore screen contents area */
  414.  
  415.     WBUTTON         *winbutton;    /* pointer to buttons, if any   */
  416.  
  417.     int                winpxmax;    /* size of window in pixels     */
  418.     int                winpymax;    /*      hihgest VALID pixel #s  */
  419.     int             winpx;      /* last graphics pos. from wopen*/
  420.     int             winpy;          /*    in window-viewport co-ords*/
  421.  
  422.     unsigned char     winpage;    /* video page # =  0...wlastpage*/
  423.     unsigned char   winputstyle;    /* FLAGS see below        */
  424.     unsigned char   winleft;          /* current window positon      */
  425.     unsigned char   wintop;
  426.     unsigned char   winxmax;    /* highest valid column        */
  427.     unsigned char   winymax;        /* highest valid row           */
  428.     unsigned char   winattr;        /* text attribute           */
  429.     unsigned char   winx;        /* current text postion        */
  430.     unsigned char   winy;         /*     range 0...winymax    */
  431.     unsigned char   winbox;            /* style of border         */
  432.     unsigned char   winboxcolor;      /* color of border         */
  433.     unsigned char     winflag;    /* internal flag         */
  434.     };
  435.  
  436.  
  437. typedef struct _WINDOW WINDOW;
  438.  
  439.  
  440.  
  441.  
  442.  
  443. /* put styles - flag values for winputstyle
  444.  */
  445. #define WPUTANSI    0x80    /* ON = use ANSI format codes
  446.                              * OFF= put IBM graphic chars instead
  447.                               */
  448. #define WPUTWRAP    0x40    /* ON = wrap text to next line at End Of Line
  449.                              * OFF= truncate text, stop output
  450.                              */
  451. #define WPUTSCROLL    0x20    /* ON = scroll window up one line
  452.                              *     when text ouptut reaches bottom
  453.                              * OFF= halt text output at lower right char.
  454.                              */
  455. #define WPUTN2RN    0x10    /* ON = translate \n into \r\n. (like ANSI C)
  456.                              * OFF= no carriage return. like TurboC cputs
  457.                              */
  458. #define WPUTALARM    0x08    /* ON = sound alarm for \a.
  459.                              * OFF= no alarm.
  460.                              */
  461. #define    WPUTATTR    0x04    /* ON = char. following \a is an attribute
  462.                              * OFF= char following \a is an ordinary char
  463.                              * ONLY enabled if WPUTALARM is OFF
  464.                              */
  465.  
  466. #define WFL_CURSOR    0x80    /* ON = (text mode only) cursor is on.
  467.                              * OFF= cursor is off.
  468.                              * ONLY set by wcursor() routine.
  469.                              * DO NOT set this yourself.
  470.                              */
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477. /* wlocation structure:
  478.  */
  479. struct WLOCATION
  480.     {
  481.     int  wloc_x;        /* x,y offsets from above location      */
  482.     int  wloc_y;
  483.     char wloc_type;     /* type of location desired - see defines */
  484.     char wloc_reserved;    /* mainains word alignment */
  485.     };
  486.  
  487.  
  488.     #define WLOC_CENTER     0
  489.     #define WLOC_ATXY       1
  490.     #define WLOC_ATWIN    2
  491.     #define WLOC_ATCUR    3
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  /* MENUS
  505.   */
  506. struct WMENU_st
  507.     {
  508.     char             *mu_entry;         /*text for menu line                 */
  509.     void             (*mu_func)(void);        /* func to do */
  510.     char             *mu_help;       /*help                                  */
  511.     struct WMENU_st    *mu_menu;       /*nested menu                        */
  512.     unsigned char     *mu_enable;        /*ptr to flag to enable this entry    */
  513.     int               mu_highlight;   /*which letter (0-n) to highlight     */
  514.     int                mu_key;            /*keypress to select this one         */
  515.     };
  516.  
  517. typedef struct WMENU_st  WMENU;
  518.  
  519.  
  520.  
  521.  
  522.  
  523. /* FORMS
  524.  */
  525. struct WFORM_st
  526.     {
  527.  
  528.     char         *wflabel;    /* identifying text */
  529.     void         *wfuser;    /* pointer to user data area */
  530.     char         **wfpick;    /* optional - pointer to picklist */
  531.  
  532.     char         *wformat;    /* % format for printf/scanf */
  533.  
  534.                      /* the next entry is a user-supplied
  535.                       * field validation function
  536.                       */
  537.     int         (*wfvalidate)(struct WFORM_st *, char *);
  538.  
  539.     unsigned char     wflen;        /* number of bytes incl. term. null*/
  540.     unsigned char   wfspecial;    /* internal - force WORD alignment */
  541.  
  542.     unsigned char     wfx;    /* x,y co-ords of start of data item */
  543.     unsigned char     wfy;
  544.  
  545.  
  546.     };
  547.  
  548. typedef struct WFORM_st WFORM;
  549.  
  550.  
  551.  
  552.     /* automatic generation of entries for string, int, float data
  553.      * assuming no user validation or pickllist functions
  554.      * and default lengths for numeric data
  555.      *
  556.      * give user-friendly names to the data elements.
  557.      *
  558.      * _S = string data, _I = int data, _F = float data,
  559.      * _DT = date, mm/dd/yy or mm/dd/yyyy MUST BE 11 bytes or more.
  560.      * _TM = time, hh:mm:ss MUST BE 9 bytes or more.
  561.      *
  562.      * all that's left to specify is x,y
  563.      */
  564. #define  WFORMENTRY_S(xx)  #xx " ",  xx, NULL, "%s", NULL,       sizeof(xx), 0
  565. #define  WFORMENTRY_I(xx)  #xx " ", &xx, NULL, "%i", NULL,       6,          0
  566. #define  WFORMENTRY_F(xx)  #xx " ", &xx, NULL, "%f", NULL,       12,         0
  567. #define  WFORMENTRY_DT(xx) #xx " ",  xx, NULL, "%s", wfvdate,    sizeof(xx), 0
  568. #define  WFORMENTRY_TM(xx) #xx " ",  xx, NULL, "%s", wfvtime,    sizeof(xx), 0
  569. #define  WFORMENTRY_END()  NULL,   NULL, NULL, NULL,wfvall,0,        0        
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576. /* wmouse
  577.  */
  578. typedef struct _WMOUSE
  579.     {
  580.     int     wms_xmickey,        /* mouse position in mickeys (internal use)*/
  581.             wms_ymickey;
  582.  
  583.     int     wms_px, wms_py;            /* pixel coords relative to window */
  584.  
  585.     int     wms_pxabs, wms_pyabs;    /* pixels in abs.screen coords*/
  586.  
  587.     int        wms_x, wms_y;            /* text-based position in window */
  588.  
  589.     int     wms_xabs, wms_yabs;     /* text-based absolute  coords*/
  590.  
  591.     /* mouse flags -- zero if false, non-zero if true.
  592.      *
  593.      *    note:
  594.      *        wms_present: if non-zero, tells number of mouse buttons
  595.      *              wms_used: see defines below to tell how mouse was used
  596.      *                but you'll never see WMS_RIGHT_PRS because it's
  597.      *                changed to ESCAPE automatically.
  598.      *
  599.      *
  600.      */
  601.     unsigned char     wms_present,    /* was a mouse detected            */
  602.             wms_used,                /* was mouse used since last call  */
  603.             wms_inwindow,            /* is mouse in current window      */
  604.             wms_internal;            /* internal use */
  605.     } WMOUSE;
  606.  
  607.  
  608.  
  609.  
  610.  
  611.     /* defined values for wmouse.wms_used
  612.      */
  613.  
  614.         /*------- recent button release ------*/
  615.  
  616.     #define    WMS_LEFT_RLS    0x01
  617.  
  618.     #define WMS_CENTER_RLS    0x02
  619.  
  620.         /*------ mouse mvt with Left or Center button held down --------*/
  621.  
  622.     #define WMS_MOVED         0x04
  623.  
  624.         /*------ recent button press --------*/
  625.  
  626.     #define WMS_LEFT_PRS    0x08
  627.  
  628.     #define WMS_CENTER_PRS     0x10
  629.  
  630.     #define WMS_RIGHT_PRS     0x20
  631.  
  632.     #define WMS_RIGHT_RLS    0x80
  633.     
  634. /* macro name table
  635.  */
  636. typedef char WMACRO_NAMES[10][9];
  637.  
  638.  
  639. #ifdef __TURBOC__
  640. /* mouse drawing
  641.  */
  642.  
  643. typedef struct
  644.     {
  645.     char    wdr_type;
  646.     char     wdr_filler;
  647.     int     wdr_linestyle;
  648.     int     wdr_thickness;
  649.     int     wdr_color;
  650.     int        wdr_x1, wdr_y1;        /* start or center co-ords (@button press)*/
  651.     int         wdr_x2, wdr_y2;        /* end co-ords               (@button release)*/
  652.     }
  653.     WOBJECT_D_ART;
  654.  
  655.     #define WDR_LINE        'l'
  656.     #define WDR_RECT        'r'
  657.     #define WDR_XHAIR       'x'
  658.     #define WDR_VERT         'v'
  659.     #define WDR_HORZ        'h'
  660.     #define WDR_SQUIGGLE     's'
  661.  
  662.  
  663.  
  664. /* wdraw lets user draw an object, 
  665.  * returns a ptr to allocated struct WOBJECT_D_ART describing the object.
  666.  * Not available in microsoft C version.
  667.  */
  668. WOBJECT_D_ART *wdraw ( char type, int color, int linestyle, int thickness );
  669.  
  670. #endif /* TurboC mouse drawing */
  671.  
  672.  
  673.  
  674.  
  675.  
  676. /*---------------------- global variables. -------------------------*
  677.  *
  678.  *  NOTE: defined in order of alignment precedence.
  679.  *      so it doesn't matter if you compile with -a on or off
  680.  *
  681.  *------------------------------------------------------------------*/
  682.  
  683.  
  684.     extern     WINDOW      *(w0);
  685.  
  686.     extern  WINDOW        *(wfullscreen);
  687.  
  688.     extern  char         *whelp_ptr;
  689.  
  690.     extern  int         wtabwidth;    /* default = 8 */
  691.  
  692.     extern     unsigned int wcurscanln;    /* cursor size - internal use only */
  693.  
  694.  
  695.     /* screen size, in characters co=ords (even in graphics modes
  696.      * the number of the first row/column is 0/0
  697.      * the number of the last row/column  is wyabsmax /wxabsmax
  698.      * loop control logic should be like this:
  699.      *    for (row=0; row <= wyabsmax; ++row) {process each row}
  700.      * the actual screen size if wxabsmax+1 by wyabsmax+1.
  701.      */
  702.     extern  int         wxabsmax, wyabsmax;
  703.  
  704.  
  705.  
  706.     /* graphics- specific values -- not used in text-mode functions.
  707.      */
  708.     extern  int         wpxabsmax, wpyabsmax; /* number of pixels */
  709.  
  710.  
  711.  
  712.  
  713.     extern struct  WLOCATION wlocation;
  714.  
  715.     extern WMOUSE wmouse;
  716.  
  717.  
  718.  
  719.     /* graphics
  720.      *     wpath_BGI = path name for BGI interface. Default is "C:\\TC"
  721.      *           change before calling winit()
  722.      */
  723.     extern  char        *wpath_BGI;    /* path to BGI drivers */
  724.     #define wpxchar        8
  725.     #define wpychar        8
  726.  
  727.     extern  char *whome_dir;    /* 'HOME directory' 
  728.                                  *  max bytes = MAXDRIVE+MAXPATH see dir.h */
  729.  
  730.  
  731.  
  732.     extern     char          wmode;        /* 'T' or 'G' */
  733.     extern  char         wmonitor;    /* 'H' 'E' 'V' or 'C' */
  734.  
  735.  
  736.  
  737.     /* page number
  738.      *     range is 0 thru wlastpage, inclusive.
  739.      */
  740.     extern  unsigned char     wlastpage;      /* constant set by winit() */
  741.     extern     unsigned char     wnextpage;      /* change prior to wopen() */
  742.  
  743.     extern  unsigned char   wneedpage;    /* internal use only */
  744.  
  745.  
  746.  
  747.  
  748.     /* colors for menus, menu box, buttons... defaults noted below.
  749.      */
  750.     extern  unsigned char     wmenuattr,         /* GREEN */
  751.                 wmenuboxattr,    /* GREEN */
  752.                 wbuttonattr,    /* WHITE<<4 */
  753.                 whelpattr;    /* CYAN<<4  */
  754.  
  755.     /* table of border characters. see defintion above
  756.      */
  757.     extern const struct WBOX_PATTERN wbox[];
  758.  
  759.  
  760.  
  761.     /* globals used by the wgetc() routines
  762.      */
  763.     extern int     wunget_buffer;
  764.  
  765.     extern int     (*wkeytrap)( int );
  766.  
  767.     extern int    (*wpipein )( void );
  768.     extern void    (*wpipeout)( int  );
  769.  
  770.  
  771.  
  772. void winit ( char newmode );        /* newmode = 'W' or 'T' in caps */
  773. void winit_pages ( char newmode );
  774. int  wdvinit (void);                /* DeskView */
  775.  
  776. int w50line (int want_50);    
  777.  
  778. void  wSysRq_install ( void (*u_func)() );    
  779. void  wSysRq_remove ( void );
  780.  
  781. void  wSysRq_ask (void);             /* sample u_func */
  782.  
  783. int w_ega_color(void);        /* ON = color, OFF=ega monochrome */
  784.  
  785.  
  786. void wclockinstall (int x, int y);    /* x,y = screen coords for clock */
  787. void wclockremove  (void);
  788.  
  789.  
  790. void wsetpalette ( unsigned char  palette[17] );
  791. void wgetpalette ( unsigned char palette[17] );
  792.  
  793.  
  794.  
  795.  
  796.  
  797.     /* wopen, wdefine - x, y give top left corner.
  798.      *         xmax, ymax speicfy number of columns, rows needed
  799.      *          once window is opened, winxmax = 1 less than xmax
  800.      *        (coords start at 0)
  801.      */
  802.  
  803. WINDOW    *wopen
  804.         (int x, int y, int xmax, int ymax,
  805.          unsigned char attr, int box, unsigned char box_attr,
  806.          unsigned char save2 );
  807.  
  808.  
  809.  
  810.     /* save modes for wopen
  811.      */
  812.     #define WSAVE2NULL    0    /* don't save window */
  813.     #define WSAVE2RAM    1    /* save to RAM     */
  814.     #define WSAVE2DISK    2    /* save to disk */
  815.  
  816. WINDOW *wdefine (int x, int y, int xmax, int ymax,
  817.          unsigned char attr, int box, unsigned char box_attr );
  818.  
  819.  
  820.  
  821. void    wabandon (void);    /* close window, no screen changes */
  822.  
  823.  
  824.  
  825. #define wclose()  ( wrestore(), wabandon() )    /* restore screen, close */
  826.  
  827.  
  828.     /* wreopen, wbury - move specified window to top of stack
  829.      *             or move current window to bottom of stack
  830.      *        no screen access takes place.
  831.      */
  832.  
  833. void     wreopen ( WINDOW *Wnew );
  834. void    wbury   ( void );
  835.  
  836. int     wrelocate (int x, int y);    /* returns 0 if OK */
  837.  
  838.  
  839.  
  840.  
  841. #define wsetlocation(LOC, X, Y)        \
  842.      wlocation.wloc_type=(LOC), \
  843.      wlocation.wloc_x   =(X),   \
  844.      wlocation.wloc_y   =(Y)
  845.  
  846.  
  847. void wlocate ( int *addr_x, int *addr_y, int xmax, int ymax );
  848.  
  849.  
  850.  
  851.  
  852. void wstrrowcol( char *text, int *rows, int *cols );/* #rows & cols in str*/
  853.  
  854.  
  855.  
  856.  
  857. /* whide() and wshow() hide current window and show current window
  858.  *    PARAMETER to wshow = ptr returned by whide().
  859.  */
  860. WHEAP  *whide ( void );
  861. void    wshow ( WHEAP *hideptr );
  862.  
  863.  
  864.  
  865. void         wframe  (int l, int t, int r, int b,
  866.              int style, unsigned char color);
  867.  
  868. #define    wtitle(title) wborderwrite ('t', 'c', (title))
  869. #define    wps(footnote) wborderwrite ('b', 'r', (footnote))
  870.  
  871.  
  872. void wborderwrite (char line, char justify, char *title);
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879. /*! wsetvisualpage () or wturnpage() changes the displayed page.
  880.  *    does not change which page wputc/wputs etc write to...
  881.  */
  882. void     wsetvisualpage (int page);
  883. #define wturnpage(newP)    wsetvisualpage( (newP) )
  884.  
  885.  
  886.  
  887.  
  888.  
  889. /* wsave saves current contents of screen indicated by window pointer
  890.  *     and stores the far * pointer to the save area in winsave.
  891.  *      NOTE if w0->winsave is not NULL on entry, wsave will use that area.
  892.  *        to hold the screen image,without checking for area size.
  893.  *
  894.  * wrestore restores the screen underlying current window.
  895.  *    Does not free the storage.
  896.  */
  897. void     wsave    (void);
  898. void     wrestore (void);
  899.  
  900.  
  901.  
  902. /*! wdrag()    move current window.
  903.  *     Parameter: keystroke = an ARROW key
  904.  *    RETURNS: non-zero (original keystroke) if move was successful.
  905.  *               0 if move was not successful, which may be because:
  906.  *            invalid keystroke, outside screen edge, or WSAVE2NULL
  907.  */
  908. int    wdrag (int  keystroke);
  909.  
  910.  
  911. /* mouse keytraps  call once at startup.
  912.  */
  913. void wmsdrag ( void );
  914. void wmspopup ( int (*func)(void) );
  915. void wpopfkey ( char **fkeylabels );
  916.  
  917.  
  918.  
  919. int     wputc        (char c);
  920. int      wputs        (char *s);
  921. void    wputfl        ( char *, int );
  922. int     wprintf         (char *format, ...);
  923.  
  924.     #define     WPRINTF_LIMIT    250
  925.  
  926. void    werror        (int errcode, char *errmsg);
  927.  
  928. #define wsetattr(x)       ( w0-> winattr = (x)  )
  929. #define wbright()       ( w0-> winattr |=  BRIGHT )
  930. #define wdim()        ( w0-> winattr &=  (0xff - BRIGHT) )
  931. #define wgetattr()      ( w0-> winattr )
  932.  
  933. #define wreverseattr(xx)  (  ( ((xx)&0x0f)<<4 ) | ( ((xx)&0xf0)>>4) )
  934.  
  935. void wclear     (void);
  936. void wclearline (void);
  937.  
  938. void wsetc ( char c );    
  939.  
  940. #define wclearln() wclearline()
  941.  
  942.  
  943.  
  944.  
  945. void     wscroll    (void);  /* insert a blank line at cur postion. scroll up */
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952. /*! wgoto() to a specified row column. either x,y =-1 --- no mvt.
  953.  */
  954. void     wgoto (int row, int col);
  955.  
  956.  
  957.  
  958. #define wherex()     ( w0-> winx )
  959. #define wherey()     ( w0-> winy )
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966. int     wgetc       (void);
  967.  
  968. int        wgets       (int nbytes, char *buffer, char behavior);
  969.     /* gets behavior flags:  _FORM entry, accept _INT only, accept _DEC pt
  970.      *                         and auto-return when buffer filled
  971.      */
  972.     #define WGETS_FORM        0x80
  973.     #define WGETS_INT        0x40
  974.     #define WGETS_DEC        0x20
  975.     #define WGETS_SKIP        0x10
  976.     #define WFM_AUTOSKIP    0x10
  977.  
  978. int     wready(void);    /* 0 if no user input avail (kbd or mouse) */
  979.  
  980.  
  981. void wflush (void);    /* flush kbd and mouse */
  982.  
  983. int  wkbd_enhanced (void);    /* RETURNS 0 if not an enhanced kbd */
  984.  
  985.  
  986. void        wcursor     (int);    /* ON or OFF, text mode only */
  987.  
  988.  
  989. int      wpipefin  ( char *filename, void (*whendone)(void) );
  990. void    wpipefout ( char *filename, int  stopcode );
  991.  
  992. void    wmacro_install  (void);
  993. int     wmacro_select    (char *message);
  994. WMACRO_NAMES *wmacro_names (void);
  995. void     wmacro_assign    (char *filename, int key);
  996.  
  997.  
  998.  
  999.  
  1000. void                wmouse_turn     (int);    /* ON/OFF, must use in pairs */
  1001.  
  1002. void            wmouse_limit    (int);    /* ON/OFF limit mouse to window */
  1003.  
  1004. void             wmouse_move       ( int x, int y );    
  1005. void             wmouse_move_pixel ( int px, int py );    
  1006.  
  1007. void            wmouse_flush (void);        /* wait until all keys RLS'd */
  1008.  
  1009. #define wpushc(xx)      wunget_buffer = (xx)
  1010.  
  1011. #define wungetc(xx)    wunget_buffer = (xx)
  1012.  
  1013.  
  1014.  
  1015.  
  1016. /*--------------------- 'BUTTON'  functions -----------------------------*
  1017.  *
  1018.  * wbutton_add ()
  1019.  *        PARAMETERS:
  1020.  *            char *text  = text to place in button.
  1021.  *                    may be longer or shorter than button
  1022.  *            int  x, y   = x,y position of button in open window.
  1023.  *            int len        = length of button, include terminal NULL.
  1024.  *            int value = keyboard bvalue of button.
  1025.  *            unsinged char style = WBTN_BOX to draw a box.
  1026.  *
  1027.  *        RETURNS: void.
  1028.  *
  1029.  *              OPTIONS for bstyle:
  1030.  *            WBTN_BOX = draw a box around button
  1031.  *
  1032.  * wbutton_mark () - places a 'mark' to left of a button
  1033.  *
  1034.  *
  1035.  * wbutton_delete()- remove specified button. & redraw screen
  1036.  *        PARAMETERS:
  1037.  *            int    value = keyboard value of button
  1038.  *                  int     how   = 0= clear screen area
  1039.  * wbutton_inactivate()    - temporarily inactivate button.
  1040.  *        PARAMETERS:
  1041.  *            int    value = button value
  1042.  *            int     how   = 0= clear screen area
  1043.  *                    1= rewrite text in current attr
  1044.  * wbutton_activate()    - reactivate the button. and redraw in wbutton_attr
  1045.  *
  1046.  * wbutton_getptr()    - returns ptr to button that matches a value
  1047.  *
  1048.  * wbutton_test()        - returns button value or 0 if not a button
  1049.  *
  1050.  *
  1051.  */
  1052. void wbutton_add (char *btext, int bx, int by, int blen,
  1053.         int bval, unsigned char bstyle );
  1054.  
  1055. void wbutton_delete (int bval, int how);
  1056.  
  1057. void wbutton_inactivate (int bval, int how);
  1058.  
  1059. void wbutton_activate (int bval);
  1060.  
  1061. void wbutton_mark ( int bval, char mark );
  1062.  
  1063. WBUTTON *wbutton_getptr ( int bval );
  1064.  
  1065. int wbutton_test ( int bval );
  1066.  
  1067.  
  1068.  
  1069.  
  1070.     /* internal button functions
  1071.      */
  1072.     void wbutton_draw ( WBUTTON *, unsigned char  );
  1073.     void wbutton_frame ( WBUTTON *, unsigned char , unsigned char );
  1074.  
  1075. /* SCROLL BAR functions.
  1076.  *     use wscrollbar_add() to create a scrollbar.
  1077.  *        CAUTIONS: y2-y1 must be >3. range >2. key must be untypable (-1,-2,etc)
  1078.  *    when wgetc() returns the scrollbar_id_key, call wscrollbar_scroll().
  1079.  *     
  1080.  */
  1081. WBUTTON *wscrollbar_add ( int scrollbar_id_key, 
  1082.             unsigned char x, unsigned char ytop, unsigned char ybottom,
  1083.             unsigned int virtual_range, unsigned int virtual_start );
  1084.             
  1085. void             wscrollbar_draw   ( WBUTTON *Bptr );
  1086. unsigned int     wscrollbar_scroll ( WBUTTON *Bptr );  /*returns virtual_val */
  1087. void             wscrollbar_reset  ( WBUTTON *Bptr, unsigned int new_val );
  1088.  
  1089.  
  1090.  
  1091.  
  1092.     /* wpromptc() - parms are: title, message, list of choices...
  1093.      *        last parm in the choices list MUST be NULL
  1094.      */
  1095. int wpromptc(char *title, char *msg, ...);
  1096.  
  1097.  
  1098.  
  1099. int wprompts ( char *title, char *msg, char *reply, int nbytes );
  1100.  
  1101.  
  1102.  
  1103.     /* wpicklist() - parms are title and list of ptrs to strings.
  1104.      *     RETURNS n= index to chosen string or index to terminal NULL
  1105.      */
  1106. int wpicklist ( char *title, char **list );
  1107.  
  1108.  
  1109.  
  1110. /*! wscanform() and wprintform()
  1111.  *    PARAMS: a title and a pointer to a WFORM table.
  1112.  *    RETURNS: ENTER or ESCAPE
  1113.  *
  1114.  * the last line terminates the table with a NULL in the wflabel position.
  1115.  *    the last line also gives the xmax and ymax for the form window
  1116.  *    (be sure to leave enough room for all data & text )
  1117.  *
  1118.  *    A validation function may be specified for the whole form.
  1119.  *     If the validation function for the whole form returns non-zero,
  1120.  *            no updating will take place.
  1121.  *
  1122.  * data items may be any type supported by printf/scanf
  1123.  *    EXCEPT: longs, doubles, long doubles and pointers are NOT supported
  1124.  *        variable lengths (%*i) is NOT supported.
  1125.  *        item count reporting (%ni) is NOT supported.
  1126.  *
  1127.  *      a picklist may be specified instead of hand-typed entry.
  1128.  *
  1129.  *      a form item may be a 'pure label' ie, only the wflabel is printed,
  1130.  *        ie, leave the wfuser field NULL.
  1131.  *
  1132.  * validation functions: Each entry in the WFORM table can call a function
  1133.  *    The pointer to the function is specified in the 'wfvalidate' entry.
  1134.  *    The function prototype MUST look like this:
  1135.  *        int func_name (WFORM *form, char *buffer)
  1136.  *    The function is called each time data is entered into the field.
  1137.  *    Parameters passed to the function:
  1138.  *        WFORM *form     ptr to the WFORM entry for this filed.
  1139.  *        char  *buffer   ptr to the string holding the new value
  1140.  *                The string is AT MOST (form->wflen) bytes.
  1141.  *
  1142.  *    should RETURN: 0 if the data is valid, non-zero if not valid.
  1143.  *        The function may optionally communicate errors to the user.
  1144.  *
  1145.  *
  1146.  *
  1147.  * you must specify the length of a temporary work-area buffer
  1148.  *    length must be enough to hold the data in string form with terminal 0
  1149.  *    length MUST include terminal NULL.
  1150.  *    for string data, length is # bytes that will be returned,
  1151.  *        incl. terminal NULL.
  1152.  *
  1153.  * the x,y positions for data items determine the screen start of the data
  1154.  *    the label is placed before the data.
  1155.  *    Be sure the label fits in the space you provided.
  1156.  *
  1157.  *CAUTION: data 'labels' should not be the first or last entry in the form tbl.
  1158.  *
  1159.  * wprintform() opens a window, draws the form, and leaves the window open
  1160.  *    with data showing. No data entry or chages to data values occur.
  1161.  *
  1162.  */
  1163. int wscanform  (char *title, WFORM *form);
  1164. void wprintform (char *title, WFORM *form);
  1165.  
  1166.     extern char  wfmatr_lbl,        /* attr for labels */
  1167.                  wfmatr_lbl_active,    /*      label indicating active data item */
  1168.                  wfmatr_border,        /*      form border */
  1169.                  wfmatr_title,
  1170.                  wfmatr_data,         /*      inactive data */
  1171.                  wfmatr_data_active;/*      active data item (while typing) */
  1172.                  
  1173.     extern int    wfm_border_type;    /* DOUBLE BORDER */    
  1174.     
  1175.     extern char wfm_autoskip;        /* next field when this on is filled in? */
  1176.                                     /* default=0, or set to WFM_AUTOSKIP     */
  1177.     
  1178.  
  1179.  
  1180.  
  1181. /* Tools for form validation functions
  1182.  *
  1183.  * When a form validation function (see above) is called, it is passed
  1184.  * a ptr to the form table for the current entry and a ptr to the char *
  1185.  * buffer holding the current value.
  1186.  *
  1187.  * Form validation functions may call the following sub-procedures
  1188.  * to simplify work.
  1189.  *
  1190.  * wform_showerror() - display an error msg undr the field
  1191.  *        If NULL is passed, a standard error message is displayed.
  1192.  *        The error msg must be 1 line and short enough to fit onscreen
  1193.  *        (it is located starting below and to the left of the data)
  1194.  *
  1195.  * wfvall() - pass the start address of the form, and buffer.
  1196.  *        This routine loops through all the fields and calls all
  1197.  *        validation routines one at a time, keeping track of errors.
  1198.  *        Use this function as all or part of the total form validation
  1199.  *        (ie, name the function on the form header line)
  1200.  *
  1201.  * wfvdate() validates date data for forms
  1202.  */
  1203.  
  1204. void wform_showerror(WFORM *form, char *errmsg);
  1205. int  wfvall (WFORM *form, char *buffer);
  1206. int  wfvdate        (WFORM *form, char *buffer);
  1207. int  wfvtime        (WFORM *form, char *buffer);
  1208.  
  1209. int  wval_date ( char *date );
  1210. int  wval_time ( char *time );
  1211.  
  1212. void wdtparse ( unsigned int *, char **, char );    /* internal */ 
  1213.  
  1214.  
  1215.  
  1216.  
  1217. /*! wfscanform() wfprintform()  - file oriented form processing.
  1218.  *
  1219.  *
  1220.  *
  1221.  *  wfscanform -
  1222.  *    parse a file using the same form table as above.
  1223.  *     one input item is looked for on each line of the file
  1224.  *    doesn't matter if file is opened as text or binary (for wfscanform)
  1225.  *        the order of the data items in the file doesn't matter
  1226.  *
  1227.  *    scanning is continued until a line beginning with stopcode is reached
  1228.  *
  1229.  *    validation functions are not called by wfscanform
  1230.  *
  1231.  *
  1232.  *  wfprintform -
  1233.  *    the data and labels are printed to a file, one line at a time
  1234.  *        in the order of the table.
  1235.  *
  1236.  *
  1237.  */
  1238. void wfscanform ( FILE *infile,  WFORM *formtable, char *stopcode );
  1239.  
  1240. void wfprintform (FILE *outfile, WFORM *formtable );
  1241.  
  1242.  
  1243.  
  1244. /* date and time processing
  1245.  *     NOTE the buffer for dates must be mm/dd/yyyy = 11 bytes (with \0)
  1246.  *         buffer for times must be hh:mm:ss   = 9 bytes.
  1247.  */
  1248. time_t mktime ( struct tm * );        /* ANSI routine TurboC forgot *
  1249.                                      * WARNING - only returns timt_t,
  1250.                                      *         does not modify struct values 
  1251.                                      */
  1252.                                      
  1253. void wt2showt ( time_t *t, char *date, char *time );
  1254. void wshowt2t ( char *date, char *time, time_t *t );
  1255.  
  1256. void whotkey_install ( int hotkey_keyvalue,  void (*hotkey_func)(void) );
  1257.  
  1258. void wpulldown         ( WMENU *topmenu );            /* install topmenu */
  1259. void wpulldown_pages    ( WMENU *topmenu );        /* use if mult video pages */
  1260. void wpulldown_draw     ( void );                /* redraw top 2 lines */
  1261.  
  1262. extern int  wpulldown_enable;                    /* 0=turns off menu default=1*/ 
  1263.  
  1264.  
  1265.  
  1266. /* install hep system. specify filename without the .hlp and .hx extensions
  1267.  */
  1268. void whelp_install(char *filename);                
  1269.  
  1270. void    wdos        (void);        /* not avail in graphics mode */
  1271. void     wexit         (void);        /* ask user if exit desired */
  1272.  
  1273. WINDOW     *wunlink (void);
  1274. void    wlink (WINDOW  *Wnew);
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.     /*--------- memory mgt routines ---------------*/
  1282.     /* wmalloc & wfarmalloc & wrealloc - ptr is NORMALIZED
  1283.      * if errmsg is not NULL, and no mem avail, prog halts.
  1284.      * NOTE: in models with far data ptrs, wmalloc maps to wfarmalloc.
  1285.      * MICROSOFT C warning: YOU MUST DEFINE __LARGE__ (or others as needed)
  1286.      *                        or your programs will not link in large model.
  1287.      */
  1288. void *wmalloc         ( size_t size,  char *errmsg );
  1289.      
  1290. #ifdef __LARGE__
  1291.     #define wmalloc(x,y)  wfarmalloc ( (x), (y) )
  1292. #endif    
  1293. #ifdef __COMPACT__
  1294.     #define wmalloc(x,y)  wfarmalloc ( (x), (y) )
  1295. #endif
  1296. #ifdef __HUGE__
  1297.     #define wmalloc(x,y)  wfarmalloc ( (x), (y) )
  1298. #endif
  1299. void  far *wfarmalloc ( unsigned long nbytes,  char *errmsg );
  1300.  
  1301. void *wrealloc  ( void *block,  size_t size,  char *errmsg );
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  extern unsigned long wheap_ramlimit;    /* default = 256k */
  1307.      /* this is max amount of ram used by heap manager */
  1308.  
  1309.  
  1310.  
  1311.  
  1312. void          wheap_init ( void );
  1313.  
  1314.  
  1315. WHEAP         *wheap_alloc
  1316.            (size_t numbytes, unsigned char priority, char *errmsg );
  1317.         
  1318.             /* priority=0     = lowest (always on disk), 
  1319.              *          1-254 = intermediated (wherever it fits)
  1320.              *          255   = highest (never on disk).
  1321.              *             If not enough, lower priority items are swapped.
  1322.              * errmsg = NULL, control returned to caller if error
  1323.              *        = string, program halts & errmsg printed.
  1324.              *                  string should be <12 bytes.
  1325.              * 
  1326.              */ 
  1327.  
  1328.  
  1329. void far     *wheap_access   ( WHEAP *heap_ptr,  int readwrite );
  1330. void          wheap_deaccess ( WHEAP *heap_ptr,  int readwrite );
  1331.  
  1332.     /* if readwrite is 0, no access to disk takes place
  1333.      */
  1334.  
  1335.  
  1336. void         wheap_free  ( WHEAP * );
  1337.  
  1338.  
  1339.  
  1340.  
  1341. unsigned long     wheap_avail    ( void );    /* total ram+xms */
  1342.  
  1343. unsigned long     wheap_availxms ( void );
  1344.  
  1345.  
  1346. void     wheap_swap2dsk ( WHEAP * );
  1347. void     wheap_swapall2dsk ( int priority ); /* all of this priority*/
  1348.  
  1349.  
  1350.  
  1351. void far     *wheap_unlink ( WHEAP * );
  1352.     /*    swaps from expanded or disk storage to main ram.
  1353.      *    removes control block from heap manager.
  1354.      *
  1355.      *    returned address can be released by farfree()
  1356.      *        (free() if LARGE)
  1357.      */
  1358.  
  1359.  
  1360. void         wheap_freeall ( void );
  1361.  
  1362.  
  1363.  
  1364. void whplj_dump ( FILE * );        /* laserjet screen dump */
  1365. void whplj_install ( int key );
  1366.  
  1367. /*-------------------------- WINDOW INTERNALS ----------------------*
  1368.  */
  1369.  
  1370.  
  1371.  
  1372.     extern unsigned  char far *wvideo_ram;
  1373.     extern unsigned  char far *wpage_ram;
  1374.  
  1375.     extern unsigned  int       wpage_size;
  1376.  
  1377.     extern char    wega256;
  1378.     extern int  wegarowsize;    /* bytes per graphics row */
  1379.  
  1380.  
  1381.  
  1382.     #ifdef  __WSCREEN__
  1383.           #ifdef TEXTONLY
  1384.  
  1385.  
  1386.             #define whifont +++(errorw_hifont_reserved_symbol)
  1387.             #define wlofont +++(errorw_lofont_reserved_symbol)
  1388.  
  1389.  
  1390.         #else        /* not TEXTONLY */
  1391.  
  1392.             /* graphics mode globals */
  1393.                 extern unsigned char whifont[8*128];
  1394.             extern unsigned char wlofont[8*32];
  1395.  
  1396.         #endif    /* TEXTONLY */
  1397.  
  1398.  
  1399.  
  1400.     #else        /* WSCREEN not defined */
  1401.  
  1402.         /* definitions to prevent referencing the font tables
  1403.              */
  1404.         #define whifont +++(errorw_hifont_reserved_symbol)
  1405.         #define wlofont +++(errorw_lofont_reserved_symbol)
  1406.  
  1407.     #endif  /* __WSCREEN__  */
  1408.  
  1409.  
  1410.  
  1411.  
  1412. char w_inDOS (void);
  1413.  
  1414. void     wgetmon (void);
  1415.  
  1416. void     wputcabs ( int x, int y, unsigned char c, unsigned char attr,
  1417.             unsigned char write_mode );
  1418.  
  1419.     #define WGOVERWRITE     0x00
  1420.     #define    WGXOR        0x18
  1421.     #define WGOR        0x10
  1422.     #define WGAND        0x08
  1423.  
  1424.  
  1425. void     wgscrollv ( int l, int t, int r, int b, int nr );
  1426.         /* nr = pixels, +=down -=up */
  1427.  
  1428. void wclearabs (int left, int t, int r, int b );
  1429.  
  1430. int  wreadc        (void);
  1431. int  wread_kbd  (void);
  1432. int  wready_kbd (void);
  1433. void  wflush_kbd (void);
  1434. void wkbd_init (void);
  1435.  
  1436. void          wmouse_init     (void);
  1437. void          wmouse_location (void);
  1438. void         wmouse_textmask (unsigned int screen, unsigned int cursor);
  1439.  
  1440.  
  1441.     /* BGI interface */
  1442. void     walign    (int current_page);
  1443. void     wmovepxpy (void);
  1444. void     wherepxpy (void);
  1445. void     wtextmode (void);
  1446. void     wgraphmode (void);
  1447.  
  1448. #ifdef __cplusplus
  1449.     }
  1450. #endif    /* c++ */
  1451.  
  1452. #endif        /* end of WTWG_HEADER */
  1453.  
  1454.