home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / WUTIL.H < prev    next >
C/C++ Source or Header  |  1991-11-06  |  15KB  |  440 lines

  1. #ifndef __WUTIL_H
  2. #define __WUTIL_H
  3.  
  4.  
  5. #if defined(M_I86SM)
  6.   #define __SMALL__
  7. #endif
  8. #if defined(M_I86CM)
  9.   #define __COMPACT__
  10. #endif
  11. #if defined(M_I86MM)
  12.   #define __MEDIUM__
  13. #endif
  14. #if defined(M_I86LM)
  15.   #define __LARGE__
  16. #endif
  17. #if defined(M_I86HM)
  18.   #define __HUGE__
  19. #endif
  20.  
  21.  
  22. #ifndef BYTE
  23.   #define BYTE unsigned char
  24. #endif
  25.  
  26. #ifndef WORD
  27.   #define WORD unsigned int
  28. #endif
  29.  
  30. #ifndef COLOR_POINTER
  31.   #define COLOR_POINTER (WORD far *)0xB8000000L
  32. #endif
  33.  
  34. #ifndef MONO_POINTER
  35.   #define MONO_POINTER (WORD far *)0xB0000000L
  36. #endif
  37.  
  38.  
  39. #if    !defined(__COLORS)
  40. #define __COLORS
  41. enum COLORS {
  42.   BLACK=0,                             /*dark colors*/
  43.   BLUE,
  44.   GREEN,
  45.   CYAN,
  46.   RED,
  47.   MAGENTA,
  48.   BROWN,
  49.   LIGHTGRAY,
  50.   DARKGRAY,                            /*light colors --  only foreground*/
  51.   LIGHTBLUE,
  52.   LIGHTGREEN,
  53.   LIGHTCYAN,
  54.   LIGHTRED,
  55.   LIGHTMAGENTA,
  56.   YELLOW,
  57.   WHITE
  58. };
  59. #endif                                 /*if colors not already defined*/
  60.  
  61. #ifndef BLINK
  62. #define BLINK        0x80
  63. #endif
  64.  
  65. #define ATTR(fg,bg)     ((fg)+((bg)<<4))  /*auto-shifter for attribute fg,bg*/
  66.  
  67. #define DEF_CSIZE  0x0607              /*default cursor size*/
  68. #define NO_CURSOR  0xFFFF
  69.  
  70. typedef enum {
  71.   WCHAR=0,
  72.   WUCHAR,
  73.   WINT,
  74.   WUINT,
  75.   WLONG,
  76.   WULONG,
  77.   WFLOAT,
  78.   WDOUBLE,
  79.   WLDOUBLE,
  80.   WSTRING
  81. } WTYPES;
  82.  
  83. #define WCHAR_FMT                      "%c"
  84. #define WUCHAR_FMT                     "%02X"
  85. #define WINT_FMT                       "%d"
  86. #define WUINT_FMT                      "%04X"
  87. #define WLONG_FMT                      "%ld"
  88. #define WULONG_FMT                     "%08lX"
  89. #define WFLOAT_FMT                     "%g"
  90. #define WDOUBLE_FMT                    "%G"
  91. #define WLDOUBLE_FMT                   "%LG"
  92. #define WSTRING_FMT                    "%s"
  93.  
  94. typedef struct {                       /*field specifier for data entry*/
  95.   int r;                               /*row for field*/
  96.   int c;                               /*starting column for field*/
  97.   int w;                               /*width of field, 0=to end of row*/
  98.   WTYPES t;                            /*type of data*/
  99.   void *d;                             /*pointer to data*/
  100.   char *f;                             /*format for input/output of data*/
  101. } WFIELD;
  102.  
  103.  
  104. /****************************************************************************/
  105. /*  ASCII control characters...                                             */
  106. /****************************************************************************/
  107. #ifndef __ASCII
  108. #define __ASCII
  109. #define NUL    0x00    /*null character*/
  110. #define SOH    0x01    /*start of header*/
  111. #define STX    0x02    /*start of text*/
  112. #define ETX    0x03    /*end of text*/
  113. #define EOT    0x04    /*end of transmission*/
  114. #define ENQ    0x05    /*enquiry*/
  115. #define ACK    0x06    /*acknowledge*/
  116. #define BEL    0x07    /*bell, beep*/
  117. #define BS     0x08    /*backspace*/
  118. #define HT     0x09    /*horizontal tab*/
  119. #define TAB    0x09    /*horizontal tab, common name*/
  120. #define LF     0x0A    /*linefeed*/
  121. #define VT     0x0B    /*vertical tab*/
  122. #define FF     0x0C    /*formfeed*/
  123. #define CR     0x0D    /*carriage return, enter*/
  124. #define SO     0x0E    /*shift out*/
  125. #define SI     0x0F    /*shift in*/
  126. #define DC0    0x10    /*device control 0*/
  127. #define DLE    0x10    /*data link escape*/
  128. #define DC1    0x11    /*device control 1*/
  129. #define XON    0x11    /*transmit on*/
  130. #define DC2    0x12    /*device control 2*/
  131. #define DC3    0x13    /*device control 3*/
  132. #define XOFF   0x13    /*transmit off*/
  133. #define DC4    0x14    /*device control 4*/
  134. #define NAK    0x15    /*negative acknowledge*/
  135. #define SYN    0x16    /*synchronous idle*/
  136. #define ETB    0x17    /*end transmission block*/
  137. #define CAN    0x18    /*cancel*/
  138. #define EM     0x19    /*end of medium*/
  139. #define SUB    0x1A    /*substitute*/
  140. #define ESC    0x1B    /*escape*/
  141. #define FS     0x1C    /*file separator*/
  142. #define GS     0x1D    /*group separator*/
  143. #define RS     0x1E    /*record separator*/
  144. #define US     0x1F    /*unit separator*/
  145. #define SPC    0x20    /*space, blank*/
  146. #define DEL    0x7F    /*delete character*/
  147. #endif                                 /*if ascii not already defined*/
  148.  
  149.  
  150. /****************************************************************************/
  151. /*  The following special keys are returned by the getkey() function.       */
  152. /*  The keys are simply the second (scan) code with 256 added.              */
  153. /****************************************************************************/
  154. #ifndef __FKEYS
  155. #define __FKEYS
  156. #define A_ESC      0x0101
  157. #define A_1        0x0178
  158. #define A_2        0x0179
  159. #define A_3        0x017A
  160. #define A_4        0x017B
  161. #define A_5        0x017C
  162. #define A_6        0x017D
  163. #define A_7        0x017E
  164. #define A_8        0x017F
  165. #define A_9        0x0180
  166. #define A_0        0x0181
  167. #define A_MINUS    0x0182    /*0x010C?*/
  168. #define A_EQUAL    0x0183    /*0x010D?*/
  169. #define A_BS       0x010E
  170. #define S_TAB      0x010F
  171. #define A_Q        0x0110
  172. #define A_W        0x0111
  173. #define A_E        0x0112
  174. #define A_R        0x0113
  175. #define A_T        0x0114
  176. #define A_Y        0x0115
  177. #define A_U        0x0116
  178. #define A_I        0x0117
  179. #define A_O        0x0118
  180. #define A_P        0x0119
  181. #define A_LTBRKT   0x011A
  182. #define A_RTBRKT   0x011B
  183. #define A_ENTER    0x011C
  184. #define A_A        0x011E
  185. #define A_S        0x011F
  186. #define A_D        0x0120
  187. #define A_F        0x0121
  188. #define A_G        0x0122
  189. #define A_H        0x0123
  190. #define A_J        0x0124
  191. #define A_K        0x0125
  192. #define A_L        0x0126
  193. #define A_SEMICOL  0x0127
  194. #define A_QUOTE    0x0128
  195. #define A_TILDE    0x0129
  196. #define A_BSLASH   0x012B
  197. #define _F11       0x01D9
  198. #define _F12       0x01DA
  199. #define S_F11      0x0187
  200. #define S_F12      0x0188
  201. #define C_F11      0x0189
  202. #define C_F12      0x018A
  203. #define A_F11      0x018B
  204. #define A_F12      0x018C
  205. #define A_Z        0x012C
  206. #define A_X        0x012D
  207. #define A_C        0x012E
  208. #define A_V        0x012F
  209. #define A_B        0x0130
  210. #define A_N        0x0131
  211. #define A_M        0x0132
  212. #define A_COMMA    0x0133
  213. #define A_PERIOD   0x0134
  214. #define A_SLASH    0x0135
  215. #define A_TAB      0x01A5
  216.  
  217. #define _F1        0x013B
  218. #define _F2        0x013C
  219. #define _F3        0x013D
  220. #define _F4        0x013E
  221. #define _F5        0x013F
  222. #define _F6        0x0140
  223. #define _F7        0x0141
  224. #define _F8        0x0142
  225. #define _F9        0x0143
  226. #define _F10       0x0144
  227. #define _HOME      0x0147
  228. #define _UPAR      0x0148
  229. #define _PGUP      0x0149
  230. #define _LTAR      0x014B
  231. #define _RTAR      0x014D
  232. #define _END       0x014F
  233. #define _DNAR      0x0150
  234. #define _PGDN      0x0151
  235. #define _INS       0x0152
  236. #define _DEL       0x0153
  237. #define S_F1       0x0154
  238. #define S_F2       0x0155
  239. #define S_F3       0x0156
  240. #define S_F4       0x0157
  241. #define S_F5       0x0158
  242. #define S_F6       0x0159
  243. #define S_F7       0x015A
  244. #define S_F8       0x015B
  245. #define S_F9       0x015C
  246. #define S_F10      0x015D
  247. #define C_F1       0x015E
  248. #define C_F2       0x015F
  249. #define C_F3       0x0160
  250. #define C_F4       0x0161
  251. #define C_F5       0x0162
  252. #define C_F6       0x0163
  253. #define C_F7       0x0164
  254. #define C_F8       0x0165
  255. #define C_F9       0x0166
  256. #define C_F10      0x0167
  257. #define A_F1       0x0168
  258. #define A_F2       0x0169
  259. #define A_F3       0x016A
  260. #define A_F4       0x016B
  261. #define A_F5       0x016C
  262. #define A_F6       0x016D
  263. #define A_F7       0x016E
  264. #define A_F8       0x016F
  265. #define A_F9       0x0170
  266. #define A_F10      0x0171
  267. #define C_PRTSC    0x0172
  268. #define C_LTAR     0x0173
  269. #define C_RTAR     0x0174
  270. #define C_END      0x0175
  271. #define C_PGDN     0x0176
  272. #define C_HOME     0x0177
  273. #define C_PGUP     0x0184    /*0x0178?*/
  274.  
  275. #define C_A        0x01
  276. #define C_B        0x02
  277. #define C_C        0x03
  278. #define C_D        0x04
  279. #define C_E        0x05
  280. #define C_F        0x06
  281. #define C_G        0x07
  282. #define C_H        0x08
  283. #define C_I        0x09
  284. #define C_J        0x0A
  285. #define C_K        0x0B
  286. #define C_L        0x0C
  287. #define C_M        0x0D
  288. #define C_N        0x0E
  289. #define C_O        0x0F
  290. #define C_P        0x10
  291. #define C_Q        0x11
  292. #define C_R        0x12
  293. #define C_S        0x13
  294. #define C_T        0x14
  295. #define C_U        0x15
  296. #define C_V        0x16
  297. #define C_W        0x17
  298. #define C_X        0x18
  299. #define C_Y        0x19
  300. #define C_Z        0x1A
  301. #endif                                 /*if keys not already defined*/
  302.  
  303.  
  304. /****************************************************************************/
  305. /*  The following are the text graphics characters of the IBM extended      */
  306. /*  ASCII code.  The following letters are used to describe each value:     */
  307. /*  S=single D=double T=top L=left R=right B=bot H=horiz V=vert M=middle    */
  308. /****************************************************************************/
  309. #define _STL    0xDA
  310. #define _SH     0xC4
  311. #define _ST     0xC2
  312. #define _STR    0xBF
  313. #define _SV     0xB3
  314. #define _SL     0xC3
  315. #define _SM     0xC5
  316. #define _SR     0xB4
  317. #define _SBL    0xC0
  318. #define _SB     0xC1
  319. #define _SBR    0xD9
  320.  
  321. #define _DTL    0xC9
  322. #define _DH     0xCD
  323. #define _DT     0xCB
  324. #define _DTR    0xBB
  325. #define _DV     0xBA
  326. #define _DL     0xCC
  327. #define _DM     0xCE
  328. #define _DR     0xB9
  329. #define _DBL    0xC8
  330. #define _DB     0xCA
  331. #define _DBR    0xBC
  332.  
  333. #define _DSTL   0xD5
  334. #define _DST    0xD1
  335. #define _DSTR   0xB8
  336. #define _DSL    0xC6
  337. #define _DSM    0xD8
  338. #define _DSR    0xB5
  339. #define _DSBL   0xD4
  340. #define _DSB    0xCF
  341. #define _DSBR   0xBE
  342.  
  343. #define _SDTL   0xD6
  344. #define _SDT    0xD2
  345. #define _SDTR   0xB7
  346. #define _SDL    0xC7
  347. #define _SDM    0xD7
  348. #define _SDR    0xB6
  349. #define _SDBL   0xD3
  350. #define _SDB    0xD0
  351. #define _SDBR   0xBD
  352.  
  353.  
  354. /****************************************************************************/
  355. /*  structures and typedefs...                                              */
  356. /****************************************************************************/
  357. typedef struct {
  358.   WORD wrap:1;                         /*wrap at end of line?*/
  359.   WORD scroll:1;                       /*scrolling on?*/
  360.   WORD moves:1;                        /*window movement allowed in wgetch()*/
  361.   WORD sizes:1;                        /*window resizing allowed in wgetch()*/
  362.   WORD alive:1;                        /*display window flag*/
  363.   WORD saved:1;                        /*saved when wsetDOSscr called*/
  364.   WORD showcr:1;                       /*show CR character*/
  365.   WORD showlf:1;                       /*show LF character*/
  366.   WORD showbs:1;                       /*show BS character*/
  367. } wflags;
  368.  
  369. typedef struct w_struct {
  370.   WORD rows;                           /*rows in window*/
  371.   WORD cols;                           /*columns in window*/
  372.   WORD srow;                           /*starting row for screen display*/
  373.   WORD scol;                           /*starting column for screen*/
  374.   WORD row;                            /*row of cursor in window*/
  375.   WORD col;                            /*column of cursor in window*/
  376.   WORD csiz;                           /*cursor size*/
  377.   WORD attr;                           /*current attribute on screen*/
  378.   WORD fchr;                           /*fill character for clearing*/
  379.   WORD bord;                           /*border type (0,1 or 2 lines)*/
  380.   WORD battr;                          /*border attribute*/
  381.   char *prompt;                        /*set prompt pointer*/
  382.   wflags fl;                           /*various flags for window*/
  383.   struct w_struct *wprv;               /*previous window in linked list*/
  384.   struct w_struct *wnxt;               /*next window in linked list*/
  385.   WORD wtxt[1];                        /*dummy text, made bigger by malloc*/
  386. } WIND;
  387.  
  388.  
  389. int  winit(void);                      /*initialize windowing environment*/
  390. void wvscr(void);                      /*copy virtual to real screen*/
  391. void wupdate(WIND *w);                 /*updates screen -- rewrites*/
  392. void wpurge(void);                     /*purges all windows, closes environ*/
  393. void wclose(WIND *w);                  /*closes a given window*/
  394. WIND *wopen(WORD bord,char *p,WORD sr,WORD sc,WORD rows,WORD cols,WORD attr);
  395.  
  396. WORD wgetcrow(WIND *w);
  397. WORD wgetccol(WIND *w);
  398. WORD wgetcsiz(WIND *w);
  399. void wsetcpos(WIND *w,WORD row,WORD col);
  400. void wsetcsiz(WIND *w,WORD siz);
  401. void wfcolor(WIND *w,WORD color);      /*sets foreground color for window*/
  402. void wbcolor(WIND *w,WORD color);      /*sets background color for window*/
  403. WORD wsetattr(WIND* w,WORD attr);      /*sets attribute, returns old*/
  404. WORD wgetattr(WIND *w);                /*gets entire attribute*/
  405. void wclr(WIND *w);                    /*clears entire window,resets cursor*/
  406. void wclrbor(WIND *w);                 /*clears from beginning of row to curs*/
  407. void wclreor(WIND *w);                 /*clears from cursor to end of row*/
  408. void wclrbow(WIND *w);                 /*clears from beginning of window*/
  409. void wclreow(WIND *w);                 /*clears to end of window*/
  410. void wfront(WIND *w);                  /*brings window to front/top*/
  411. void wback(WIND *w);                   /*pushes window to back/bottom*/
  412. void whide(WIND *w);                   /*pushes to back and hides*/
  413. void wsetDOSscr(void);                 /*bring up base (DOS) window, hide all*/
  414. void wgetDOSscr(void);                 /*restore after wsetDOSscr*/
  415. void wdelrow(WIND *w);                 /*deletes current row of window*/
  416. void winsrow(WIND *w);                 /*inserts row at current row of window*/
  417. void wputc(WIND *w,int c);             /*puts a character out to the window*/
  418. void wputs(WIND *w,char *s);           /*puts a string to window*/
  419. void wputns(WIND *w,char *s,int n);    //writes n chars to window
  420. void wputrcs(WIND *w,WORD r,WORD c,char *s);   /*puts to window location*/
  421. void cdecl wprintf(WIND *w,char *fmt,...);   //formatted print to window
  422. int  wgetc(WIND *w);                   /*gets a character from a window*/
  423. int  wgetce(WIND *w);                  /*gets char and echoes it to window*/
  424. int  wgets(WIND *w,char *s,int n);     /*gets a string (max n-1 chars)*/
  425. int  wgetsfield(WIND *ww,char *s,int n,int w,WORD a);  /*gets s w/edit*/
  426. int  wgetfields(WIND *w,WFIELD *f,int nf,WORD a);   /*gets info from fields*/
  427. int  wfile(WIND *w,char *fn);          /*displays a text file*/
  428. int  hotlen(char* s,char hotkey);      /*length of a string, less hotkeys*/
  429. void wputshot(WIND* w,char *s,WORD hat,char hotkey);   /*put out hotkeys str*/
  430.  
  431. extern char winitd;                    /*flag for windows initialization*/
  432. extern char wupd;                      /*flag for updating*/
  433. extern char wcga;                      /*flag for checking for CGA snow*/
  434. extern WORD *vscr;                     /*pointer to virtual screen*/
  435. extern WORD far *vidp;                 /*pointer to video segment*/
  436. extern WIND *wscr;                     /*original screen, base window*/
  437. extern WIND *wact;                     /*current active window pointer*/
  438.  
  439. #endif          /* wutil already loaded */
  440.