home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / windows / c / uw260 / uw.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-23  |  18.5 KB  |  457 lines

  1. /****************************************************************************/
  2. /*                                                                          */
  3. /* UW.H                                                                     */
  4. /*                                                                          */
  5. /* This is the main header for uWin, containing all the defines and         */
  6. /* typedefs for the program.                                                */
  7. /*                                                          Kevin Huck      */
  8. /*                                                          Boyd Gafford    */
  9. /*                                                                          */
  10. /****************************************************************************/
  11. #ifndef __UW_H
  12. #define __UW_H
  13.  
  14. #include <dos.h>              /* for the REGS definition used for mouse int */
  15. #include <stdlib.h>
  16. #include <time.h>
  17. #include <conio.h>
  18. #include <string.h>
  19. #include <ctype.h>
  20. #ifndef __ZTC__
  21. #if ( defined(M_I86) || defined(__WATCOMC__) )
  22.   #include <malloc.h>
  23. #else
  24.   #include <alloc.h>
  25. #endif
  26. #ifdef M_I86                /* Microsofts are malloc.h and memory.h        */
  27.   #include <memory.h>
  28.   #include <sys\types.h>
  29.   #pragma pack(1)
  30. #else                       /* Borlands are alloc.h and mem.h              */
  31.   #include <mem.h>
  32. #endif
  33. #endif
  34.  
  35. /*-------------------- Microsoft C compatibility defines ------------------*/
  36. /*---------------------- Watcom C compatibility defines --------------------*/
  37. #if ( defined(M_I86) || defined(__WATCOMC__) )
  38.   #include <stddef.h>
  39.   #define setmem(p,c,v)       memset((p),(v),(c))
  40.   #define movmem(s,d,c)       memmove((d),(s),(c))
  41.   #define random(x)           (rand() % (x))
  42.   #define bioskey(c)          _bios_keybrd(c)
  43.   #define biosprint(s, d, p)  _bios_printer(s, p, d)
  44.   #define getvect(i)          _dos_getvect(i)
  45.   #define setvect(i,hdlr)     _dos_setvect(i,hdlr)
  46.   #define enable              _enable
  47.   #define disable             _disable
  48.   #define setcolor            _setcolor
  49.   #define moveto              _moveto
  50.   #define lineto              _lineto
  51.   #define outbyte outp
  52.   #define inbyte  inp
  53.   #define outword outpw
  54.   #define inword  inpw
  55.   enum COLORS 
  56.   { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN,
  57.     LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN,
  58.     LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE };
  59.   #define C80  3
  60.   #define BW80 2
  61.   #define MONO 7
  62. #else
  63.   #define outbyte outportb
  64.   #define inbyte  inportb
  65.   #define outword outport
  66.   #define inword  inport
  67. #endif
  68.  
  69. /*---------------------- Power C compatibility defines ---------------------*/
  70. #ifdef __POWERC
  71.   #define C80   3
  72.   #define BW80  2
  73.   #define MONO  7
  74. enum COLORS {
  75.   BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN,
  76.   LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN,
  77.   LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE
  78. };
  79. #endif
  80.  
  81. /*---------------------- Zortech compatibility defines ---------------------*/
  82. #ifdef __ZTC__
  83.   #include <int.h>
  84.   #define interrupt
  85.   #define O_TRUNC 0
  86.   #define O_BINARY 0
  87.   #define enable  int_on
  88.   #define disable int_off
  89. #endif
  90.  
  91. /*------------------ Watcom C32/DOS4G compatibility defines ----------------*/
  92. #ifdef __WATCOMC__
  93.   #define UW_FAR
  94. #else
  95.   #define UW_FAR    far
  96. #endif
  97.  
  98. /*-------------------------------- debug defines ---------------------------*/
  99. #ifdef ENQ_DEBUG 
  100. #define DBG_POP()  dbg_pop()
  101. #define ENQ_ERROR( p1, p2, s1, s2, p ) enq_error( p1, p2, s1, s2, p )
  102. #define WNP_VLD( s, m, wnp )           wnp_vld( s, m, wnp )
  103. #define PRTP_VLD( s, m, prtp )         prtp_vld( s, m, prtp )
  104. #define P_VLD( s, gp )                 p_vld( s, gp )
  105. #define MENUP_VLD( s, m, menup )       menup_vld( s, m, menup )
  106. #define DBG_LOG( fname )               dbg__log( fname )
  107. #else
  108. #define DBG_POP()
  109. #define ENQ_ERROR( p1, p2, s1, s2, p )
  110. #define WNP_VLD( s, m, wnp )
  111. #define PRTP_VLD( s, m, prtp )
  112. #define P_VLD( s, gp )
  113. #define MENUP_VLD( s, m, menup )
  114. #define DBG_LOG( fname )
  115. #endif
  116.  
  117.  
  118. /*------------------------ rectangle operation defines ---------------------*/
  119. #define   NO_OVERLAP      0
  120. #define   OVERLAP         1
  121. #define   FIRST_ENCLOSED  2
  122. #define   SECOND_ENCLOSED 3
  123.  
  124. /*---------------------------- general defines -----------------------------*/
  125. #define   ON        1
  126. #define   OFF       0
  127. #define   UP        0
  128. #define   DOWN      1
  129. #define   LEFT      2
  130. #define   RIGHT     3
  131.  
  132. /*------------------------------ menuing defines ---------------------------*/
  133. #define   M_HORIZONTAL      0
  134. #define   M_VERTICAL        1
  135. #define   M_MAX_ENTRIES     20
  136. #define   M_GET_EVENT       0
  137. #define   M_PROC_EVENT      1
  138. #define   M_EXIT_ON_ESC     1
  139.  
  140.  
  141. /*---------------------------- mouse defines -------------------------------*/
  142. #define   TDELAY (clock_t) 4  /* clock ticks to check for multiple clicks   */
  143. #define   LB        0         /* m_event->flag is 4 for left button         */
  144. #define   MB        2         /* m_event->flag is 64 for middle button      */
  145. #define   RB        1         /* m_event->flag is 16 for right button       */
  146.  
  147. /*---------------------------- window defines ------------------------------*/
  148. #define   NO_BDR    0
  149. #define   SGL_BDR   1
  150. #define   DBL_BDR   2
  151. #define   SLD_BDR   3
  152. #define   DUAL_BDR  4
  153.  
  154. #define   CENTERED   -1
  155. #define   LEFT_JUST  -2
  156. #define   RIGHT_JUST -3
  157.  
  158. #define   ALPHA      'A'
  159. #define   DIGITS     'D'
  160. #define   C_LINE      0
  161. #define   C_SBLOCK    1
  162. #define   C_FBLOCK    2
  163.  
  164. #define   IN        0
  165. #define   OUT       1
  166. #define   BUFF      0
  167. #define   SAVE      1
  168.  
  169. #define   WN_POPUP  1
  170. #define   WN_NORMAL 0
  171.  
  172. #define   DELETE    1
  173. #define   INSERT    0
  174.  
  175. #define   STRIP_ON  1
  176. #define   STRIP_OFF 0
  177.  
  178. /*----------------------- printer support defines --------------------------*/
  179. #define PRT_BLOCK 2048
  180. #define MAX_PRINTERS 4
  181.  
  182. #define BLOCK_SIZE 512
  183.  
  184. #define READ  0
  185. #define WRITE 1
  186.  
  187. /*------------------------- flags for wn_gets_ll ---------------------------*/
  188. #define G_STRIP          0x0001
  189. #define G_STRIP_END      0x0002
  190. #define G_UP_FST_CHAR    0x0004
  191. #define G_ARROW          0x0008
  192. #define G_VALIDATE       0x0010
  193. #define G_RIGHT_TO_LEFT  0x0020
  194. #define G_EXIT_ON_FILL   0x0040
  195. #define G_CLEAR_ON_FIRST 0x0080
  196. #define G_UP_FST_CHAR2   0x0100
  197. #define G_MOVE_TO_END    0x0200
  198. #define G_INSERT         0x0400
  199. #define G_HIDE_ENTRY     0x0800
  200.  
  201. #define H_ENTRY          0
  202. #define H_PROCESS        1
  203. #define H_EXIT           2
  204.  
  205. /*-------------------------- base level typedefs ---------------------------*/
  206. typedef unsigned char uchar;
  207. typedef short int sint;
  208. typedef unsigned short int usint;
  209. typedef unsigned int  uint;
  210. typedef unsigned long ulong;
  211.  
  212. /*---------------------------- mouse structures ----------------------------*/
  213. typedef struct reset_struct
  214. {
  215.   int exists;
  216.   int n_buttons;
  217. } M_RESET;
  218.  
  219. typedef struct loc_struct
  220. {
  221.   int button_status;
  222.   int count;
  223.   int col;
  224.   int row;
  225. } M_LOC;
  226.  
  227. typedef struct move_struct
  228. {
  229.   int h_count;
  230.   int v_count;
  231. } M_MOVE;
  232.  
  233. typedef struct event_struct
  234. {
  235.   int     is_mouse;
  236.   int     key;
  237.   int     mod;
  238.   int     m_x, m_y;
  239.   int     m_count, m_button;
  240. } EVENT;
  241.  
  242. /*---------------------------- rectangle structure -------------------------*/
  243. typedef struct rect_struct
  244. {
  245.   int x_min, x_max, y_min, y_max;         /* rectangle coordinates          */
  246. } RECT;
  247.  
  248.  
  249. /*--------------------------- window structure -----------------------------*/
  250. typedef struct w_struct
  251. {
  252.   struct w_struct *next;                  /* next window in linked list     */
  253.   struct w_struct *previous;              /* previous window in list        */
  254.   RECT            pane;                   /* the window rectangle           */
  255.   RECT            old_pane;               /* for full size toggle           */
  256.   int             rows;                   /* save buffer rows and columns   */
  257.   int             cols;
  258.   int             csr_x;                  /* the "soft" cursor location     */
  259.   int             csr_y;
  260.   uchar           att;                    /* the window's attribute         */
  261.   uchar           bdr_att;                /* the window's border attribute  */
  262.   int             bdr_style;              /* the border style               */
  263.   int             name_loc;               /* CENTERED, LEFTJUST, RIGHTJUST  */
  264.   char            *name;                  /* pointer to window name         */
  265.   uchar           *save;                  /* pointer to save buffer area    */
  266.   uchar           *buff;                  /* pointer to write buffer area   */
  267.   uchar           *mask;                  /* pointer to window buffer mask  */
  268.  
  269.   uchar           *tabs;                  /* tab stops                      */
  270.   int             reg_s, reg_e;           /* scroll region start and end    */
  271.  
  272.   unsigned        hidden      : 1;        /* 1 if window hidden             */
  273.   unsigned        overlapped  : 1;        /* 1 if window overlapped         */
  274.   unsigned        csr_adv     : 1;        /* 1 if cursor auto advanced      */
  275.   unsigned        inside      : 1;        /* 1 if bordered and inside       */
  276.   unsigned        mask_on     : 1;        /* 1 if window mask is active     */
  277.   unsigned        popup       : 1;        /* 1 if window is popup           */
  278.   unsigned        scroll      : 1;        /* 1 if window auto-scrolls       */
  279.   unsigned        bs_clear    : 1;        /* 1 if backspace is destructive  */
  280.  
  281.   unsigned        eol_wrap    : 1;        /* 1 if cursor wraps at end of ln */
  282.   unsigned        mgr_flag    : 1;        /* 1 if win in manager's list     */
  283.   unsigned        set_flag    : 1;        /* 1 if window is set on screen   */
  284.   unsigned        cr_flag     : 1;        /* 1 if cr processed              */
  285.   unsigned        lf_flag     : 1;        /* 1 if lf processed              */
  286.   unsigned        cr_lf_flag  : 1;        /* 1 if cr or lf act as cr/lf pair*/
  287.   unsigned        bk_flag     : 1;        /* 1 if backspace processed       */
  288.   unsigned        tab_flag    : 1;        /* 1 if tab processed             */
  289.  
  290.   unsigned        bell_flag   : 1;        /* 1 if bell char processed       */
  291.   unsigned        w_wrap      : 1;        /* 1 if word wrap on              */
  292.   unsigned        unused      : 14;
  293.  
  294.   void            *usr_ptr;               /* user expansion pointer         */
  295.   uchar           usr_exp[4];             /* user expansion space           */
  296.                                           /* DO NOT USE BELOW VARIABLES     */
  297.   void            *sys_ptr;               /* system expansion pointer       */
  298.   uchar           sys_exp[4];             /* system expansion space         */
  299. } WINDOW;
  300.  
  301. /*---------------------------- menu structure ------------------------------*/
  302. typedef struct menu_struct
  303. {
  304.   WINDOW    *wnp;                             /* the window for output      */
  305.   int       direction;                        /* menu direction, vt or hz   */
  306.   int       num_entries;                      /* number of entries in menu  */
  307.   uchar     csr_att;                          /* the cursor attribute       */
  308.   uchar     first_att;                        /* the first letter attribute */
  309.   int       csr_pos;                          /* current cursor position    */
  310.   uchar     first_pos[M_MAX_ENTRIES];         /* first letter position      */
  311.   int       id[M_MAX_ENTRIES];                /* id value for each entry    */
  312.   uchar     x[M_MAX_ENTRIES];                 /* x location for each entry  */
  313.   char      *entry[M_MAX_ENTRIES];            /* array of char pointers     */
  314. } MENU;
  315.  
  316. typedef struct printer
  317. {
  318.   int   active;                     /* set to 1 if printer init'd/active    */
  319.   int   halt;                       /* set to 1 to temporarily stop printer */
  320.   int   prt_dev;                    /* file handle for printer device       */
  321.   char  device[81];                 /* name of printer device               */
  322.   int   prt_buff[2];                /* file handles for printer buffer      */
  323.   char  buffer[81];                 /* name of printer buffer               */
  324.   int   cr_cnt;                     /* number of carriage returns to send   */
  325.   int   lf_cnt;                     /* number of line feeds to send         */
  326.   int   block_mode;                 /* allows faster output on block devices*/
  327.  
  328.   long  max_que_size;               /* maximum size of print que            */
  329.   long  init_que_size;              /* initial size of print que            */
  330.   long  curr_que_size;              /* current size of print que            */
  331.   long  read;                       /* print que read  index                */
  332.   long  write;                      /* print que write index                */
  333.   long  cnt;                        /* print que cnt (number of bytes in q) */
  334.  
  335.   uchar *que;                       /* pointer to print que data            */
  336.   uchar *xlat;                      /* pointer to translation table         */
  337.   int   xlat_flag;                  /* translation flag                     */
  338. } PRINT;
  339.  
  340. /*----------------------------- generic macros -----------------------------*/
  341. #ifdef __WATCOMC__
  342.   #define UW_FP_SEG(p)      ((usint) (((ulong) p) >> 4))
  343.   #define UW_FP_OFF(p)      ((usint) (((ulong) p) & 0x000F))
  344.   #define UW_MK_FP(s,o)     ((((s) << 4) | (o)))
  345. #else
  346.   #define UW_FP_SEG(fp)     ((uint)((ulong)((void far *)(fp)) >> 16))
  347.   #define UW_FP_OFF(fp)     ((uint)((void far *)(fp)))
  348.   #define UW_MK_FP(seg,off) ((void far *)(((ulong)(seg)<<16) | (uint)(off)))
  349. #endif
  350.  
  351. #define lower(x, y)     (((x) < (y)) ? (x) : (y))
  352. #define upper(x, y)     (((x) > (y)) ? (x) : (y))
  353. #define lobyte(c)       (uchar) ((c) & 0x00ff)
  354. #define hibyte(c)       (uchar) ((c) >> 8)
  355. #define range(l,b,h)    ((((b) >= (l)) && ((b) <= (h))))
  356. #define swap(a,b,c)     ( (c) = (a), (a) = (b), (b) = (c) )
  357.  
  358. #ifndef min
  359. #define min(x, y)       (((x) < (y)) ? (x) : (y))
  360. #define max(x, y)       (((x) > (y)) ? (x) : (y))
  361. #endif
  362.  
  363. /*------------------------- compatibility macros ---------------------------*/
  364. #define refresh_rect(rect)          redisplay_rect(&(rect))
  365. #define rect_equal(rect1,rect2)     is_rect_equal(&(rect1), &(rect2))
  366. #define cr_inrect(c,r,rect)         col_row_inrect(c, r, &(rect))
  367. #define add_window(wnp)             link_window(wnp)
  368. #define remove_window(wnp)          remove_window_ll(1, wnp)
  369.  
  370. /*----------------------------- window macros ------------------------------*/
  371. #ifndef ENQ_DEBUG
  372. #ifndef SOURCE_TRACE
  373. #define wn_att(a,wnp)         ( (wnp)->att = (a) )
  374. #define wn_color(f,b,wnp)     ( (wnp)->att = ((b) << 4) | (f) )
  375. #define wn_bdratt(a,wnp)      ( (wnp)->bdr_att = (a) )
  376. #define wn_bdr_color(f,b,wnp) ( (wnp)->bdr_att = ((b) << 4) | (f) )
  377. #define mv_cs(c,r,wnp)        ( (wnp)->csr_x = (c), (wnp)->csr_y = (r) )
  378. #define wn_rqty(wnp)          ( (wnp)->inside ? ((wnp)->rows - 2) : (wnp)->rows )
  379. #define wn_sqty(wnp)          ( (wnp)->reg_e - (wnp)->reg_s )
  380. #define wn_cqty(wnp)          ( (wnp)->inside ? ((wnp)->cols - 2) : (wnp)->cols )
  381. #define wn_name(n, wnp)       ( (wnp)->name = (n) )
  382. #define wn_name_loc(l, wnp)   ( (wnp)->name_loc = (l) )
  383. #define wn_save( wnp )        ( wn_io( IN, SAVE, (wnp)) )
  384. #define wn_restore( wnp )     ( wn_io(OUT, SAVE, (wnp)) )
  385. #define wn_rfsh( wnp )        ( wn_io(OUT, BUFF, (wnp)) )
  386. #define wn_read( wnp )        ( wn_io( IN, BUFF, (wnp)) )
  387.  
  388. #define wn_get_csr_x(wnp)           ((wnp)->csr_x)
  389. #define wn_get_csr_y(wnp)           ((wnp)->csr_y)
  390. #define wn_get_att(wnp)             ((wnp)->att)
  391. #define wn_get_bdratt(wnp)          ((wnp)->bdr_att)
  392. #define wn_get_rows(wnp)            ((wnp)->rows)
  393. #define wn_get_cols(wnp)            ((wnp)->cols)
  394. #define wn_get_bdr_style(wnp)       ((wnp)->bdr_style)
  395. #define wn_get_name_loc(wnp)        ((wnp)->name_loc)
  396.  
  397. #define wn_is_hidden(wnp)           ((wnp)->hidden)     
  398. #define wn_is_overlapped(wnp)       ((wnp)->overlapped) 
  399. #define wn_is_csr_adv(wnp)          ((wnp)->csr_adv)    
  400. #define wn_is_inside(wnp)           ((wnp)->inside)     
  401. #define wn_is_mask_on(wnp)          ((wnp)->mask_on)    
  402. #define wn_is_popup(wnp)            ((wnp)->popup)      
  403. #define wn_is_scroll(wnp)           ((wnp)->scroll)     
  404. #define wn_is_bs_clear(wnp)         ((wnp)->bs_clear)   
  405. #define wn_is_eol_wrap(wnp)         ((wnp)->eol_wrap)   
  406. #define wn_is_mgr_flag(wnp)         ((wnp)->mgr_flag)   
  407. #define wn_is_set_flag(wnp)         ((wnp)->set_flag)   
  408. #define wn_is_cr_flag(wnp)          ((wnp)->cr_flag)    
  409. #define wn_is_lf_flag(wnp)          ((wnp)->lf_flag)    
  410. #define wn_is_cr_lf_flag(wnp)       ((wnp)->cr_lf_flag) 
  411. #define wn_is_bk_flag(wnp)          ((wnp)->bk_flag)    
  412. #define wn_is_tab_flag(wnp)         ((wnp)->tab_flag)   
  413. #define wn_is_bell_flag(wnp)        ((wnp)->bell_flag)  
  414. #define wn_is_w_wrap(wnp)           ((wnp)->w_wrap)     
  415.  
  416. #define wn_set_csr_x(x,wnp)            ((wnp)->csr_x = x)
  417. #define wn_set_csr_y(y,wnp)            ((wnp)->csr_y = y)
  418. #define wn_set_bdr_style(state,wnp)    ((wnp)->bdr_style = state)
  419. #define wn_set_name_loc(state,wnp)     ((wnp)->name_loc = state)
  420. #define wn_set_hidden(state,wnp)       ((wnp)->hidden = state)
  421. #define wn_set_overlapped(state,wnp)   ((wnp)->overlapped = state)
  422. #define wn_set_csr_adv(state,wnp)      ((wnp)->csr_adv = state)
  423. #define wn_set_inside(state,wnp)       ((wnp)->inside = state)
  424. #define wn_set_mask_on(state,wnp)      ((wnp)->mask_on = state)
  425. #define wn_set_popup(state,wnp)        ((wnp)->popup = state)
  426. #define wn_set_scroll(state,wnp)       ((wnp)->scroll = state)
  427. #define wn_set_bs_clear(state,wnp)     ((wnp)->bs_clear = state)
  428. #define wn_set_eol_wrap(state,wnp)     ((wnp)->eol_wrap = state)
  429. #define wn_set_mgr_flag(state,wnp)     ((wnp)->mgr_flag = state)
  430. #define wn_set_set_flag(state,wnp)     ((wnp)->set_flag = state)
  431. #define wn_set_cr_flag(state,wnp)      ((wnp)->cr_flag = state)
  432. #define wn_set_lf_flag(state,wnp)      ((wnp)->lf_flag = state)
  433. #define wn_set_cr_lf_flag(state,wnp)   ((wnp)->cr_lf_flag = state)
  434. #define wn_set_bk_flag(state,wnp)      ((wnp)->bk_flag = state)
  435. #define wn_set_tab_flag(state,wnp)     ((wnp)->tab_flag = state)
  436. #define wn_set_bell_flag(state,wnp)    ((wnp)->bell_flag = state)
  437. #define wn_set_w_wrap(state,wnp)       ((wnp)->w_wrap = state)
  438. #endif
  439. #endif
  440.  
  441. #define cls()                 ( setmem(Screen, V_cols * V_rows * 2, 0) )
  442. #define push(x)               ( Stack[Stack_ptr++] = (x) )
  443. #define pop(x)                ( (x) = Stack[--Stack_ptr] )
  444.  
  445. #ifdef UW_GLOB_INC
  446. #include "uw_glob.h"
  447. #else
  448. #include "uw_globx.h"
  449. #endif
  450. #include "uw_keys.h"
  451. #include "uw_proto.h"
  452. #include "uw_dbg.h"
  453.  
  454. #endif     /* __UW_H */
  455.  
  456. /**** END OF FILE ****/
  457.