home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / tc-book.zip / TWINDOW.H < prev    next >
Text File  |  1987-10-22  |  6KB  |  183 lines

  1. /* ------------------- twindow.h ----------------------- */
  2.  
  3. /*      Uncomment this for stacked windows 
  4.  *      rather than layered windows.
  5.  *
  6.  * #define FASTWINDOWS
  7.  *
  8.  */
  9.  
  10. /* ------ window colors ---------- */
  11. #define RED   4
  12. #define GREEN 2
  13. #define BLUE  1
  14. #define WHITE (RED+GREEN+BLUE)
  15. #define YELLOW (RED+GREEN)
  16. #define AQUA (GREEN+BLUE)
  17. #define MAGENTA (RED+BLUE)
  18. #define BLACK 0
  19. #define BRIGHT 8
  20. #define DIM 0
  21.  
  22. #define BORDER 0
  23. #define TITLE 1
  24. #define ACCENT 2
  25. #define NORMAL 3
  26. #define ALL 4
  27.  
  28. #define TRUE 1
  29. #define FALSE 0
  30. #define ERROR -1
  31. #define OK 0
  32. /*page*/
  33. /* ------------- window controller structures ----------- */
  34. typedef struct field {    /* data entry field description    */
  35.     char *fmask;        /* field data entry mask        */
  36.     char *fprot;        /* field protection                */
  37.     char *fbuff;        /* field buffer                    */
  38.     int ftype;            /* field type                    */
  39.     int frow;            /* field row                    */
  40.     int fcol;            /* field column                    */
  41.     void (*fhelp)();    /* field help function            */
  42.     char *fhwin;        /* field help window            */
  43.     int flx, fly;        /* help window location            */
  44.     int (*fvalid)();    /* field validation function    */
  45.     struct field *fnxt;    /* next field on template         */
  46.     struct field *fprv;    /* previous field on template     */
  47. } FIELD;
  48. typedef struct _wnd {
  49.     int _wv;          /* true if window is visible     */
  50.     int _hd;          /* true if window was hidden     */
  51.     char *_ws;          /* points to window save block   */
  52.     char *_tl;          /* points to window title           */
  53.     int _wx;          /* nw x coordinate               */
  54.     int _wy;          /* nw y coordinate               */
  55.     int _ww;          /* window width                   */
  56.     int _wh;          /* window height                   */
  57.     int _wsp;          /* scroll pointer                   */
  58.     int _sp;          /* selection pointer               */
  59.     int _cr;          /* cursor x location               */
  60.     int btype;          /* border type                   */
  61.     int wcolor[4];      /* colors for window                */
  62.     int _pn;          /* previous normal color           */
  63.     struct _wnd *_nx; /* points to next window         */
  64.     struct _wnd *_pv; /* points to previous window     */
  65.     FIELD *_fh;          /* points to 1st data entry fld  */    
  66.     FIELD *_ft;          /* points to last data entry fld */    
  67. } WINDOW;
  68. typedef struct w_menu {
  69.     char *mname;
  70.     char **mselcs;
  71.     void (**func)();
  72. } MENU;
  73.  
  74. #define SAV     (wnd->_ws)
  75. #define WTITLE  (wnd->_tl)
  76. #define COL     (wnd->_wx)
  77. #define ROW     (wnd->_wy)
  78. #define WIDTH     (wnd->_ww)
  79. #define HEIGHT     (wnd->_wh)
  80. #define SCROLL  (wnd->_wsp)
  81. #define SELECT  (wnd->_sp)
  82. #define WCURS   (wnd->_cr)
  83. #define WBORDER    (wnd->wcolor[BORDER])
  84. #define WTITLEC    (wnd->wcolor[TITLE])
  85. #define WACCENT    (wnd->wcolor[ACCENT])
  86. #define WNORMAL    (wnd->wcolor[NORMAL])
  87. #define PNORMAL (wnd->_pn)
  88. #define BTYPE    (wnd->btype)
  89. #define NEXT    (wnd->_nx)
  90. #define PREV    (wnd->_pv)
  91. #define WCOLOR  (wnd->wcolor)
  92. #define VISIBLE (wnd->_wv)
  93. #define HIDDEN  (wnd->_hd)
  94. #define FHEAD    (wnd->_fh)
  95. #define FTAIL   (wnd->_ft)
  96.  
  97. #define NW       (wcs[wnd->btype].nw)
  98. #define NE       (wcs[wnd->btype].ne)
  99. #define SE       (wcs[wnd->btype].se)
  100. #define SW       (wcs[wnd->btype].sw)
  101. #define SIDE     (wcs[wnd->btype].side)
  102. #define LINE     (wcs[wnd->btype].line)
  103. /*page*/
  104. /* -------- function prototypes and macros -------- */
  105.  
  106. /* ------ general-purpose functions and macros ----- */
  107. void clear_screen(void);
  108. int vmode(void);
  109. void cursor(int, int);
  110. void curr_cursor(int *, int *);
  111. int cursor_type(void);
  112. void set_cursor_type(int);
  113. int get_char(void);
  114. int scroll_lock(void);
  115. void vpoke(unsigned, unsigned, unsigned);
  116. int vpeek(unsigned, unsigned);
  117.  
  118. /* ----- window functions and macros ------- */
  119. WINDOW *establish_window(int, int, int, int);
  120. void set_border(WINDOW *, int);
  121. void set_colors(WINDOW *, int, int, int, int);
  122. void set_intensity(WINDOW *, int);
  123. void set_title(WINDOW *, char *);
  124. void display_window(WINDOW *);
  125. void delete_window(WINDOW *);
  126. void clear_window(WINDOW *);
  127. void hide_window(WINDOW *);
  128. void wprintf(WINDOW *, char *, ...);
  129. void wputchar(WINDOW *, int);
  130. void close_all(void);
  131. void wcursor(WINDOW *, int x, int y);
  132. void error_message(char *);
  133. void clear_message(void);
  134. int get_selection(WINDOW *, int, char *);
  135.  
  136. #define reverse_video(wnd) wnd->wcolor[3]=wnd->wcolor[2]
  137. #define normal_video(wnd) wnd->wcolor[3]=wnd->_pn
  138. #define rmove_window(wnd,x,y) repos_wnd(wnd, x, y, 0)
  139. #define move_window(wnd,x,y) repos_wnd(wnd, COL-x, ROW-y, 0)
  140. #define forefront(wnd) repos_wnd(wnd, 0, 0, 1)
  141. #define rear_window(wnd) repos_wnd(wnd, 0, 0, -1)
  142. /*page*/
  143. /* ----- internal to window processes ----- */
  144. void accent(WINDOW *);
  145. void deaccent(WINDOW *);
  146. void scroll(WINDOW *, int);
  147. void repos_wnd(WINDOW *, int, int, int);
  148. void acline(WINDOW *, int);
  149. #define accent(wnd)    acline(wnd, WACCENT)
  150. #define deaccent(wnd) acline(wnd, WNORMAL)
  151. #define clr(bg,fg,in) ((fg)|(bg<<4)|(in))
  152. #define vad(x,y) ((y)*160+(x)*2)
  153. #ifdef FASTWINDOWS
  154. #define cht(ch,at) ((ch&255)|(at<<8))
  155. #define displ(w,x,y,c,a) vpoke(VSG,vad(x+COL,y+ROW),cht((c),(a)))
  156. #define dget(w,x,y) vpeek(VSG,vad(x+COL,y+ROW))
  157. #define verify_wnd(w) (*(w)=listtail)!=0
  158. #else
  159. void displ(WINDOW *wnd, int x, int y, int ch, int at);
  160. #endif
  161. /* ------ editor function ------- */
  162. void text_editor(WINDOW *, char *, int);
  163. /* -------- menu function ------- */
  164. void menu_select(char *name, MENU *mn);
  165. /* ----- help functions ------- */
  166. void load_help(char *);
  167. void set_help(char *, int, int);
  168. /* ----- data entry functions ---- */
  169. void init_template(WINDOW *);
  170. FIELD *establish_field(WINDOW *,int,int,char *,char *,int);
  171. void clear_template(WINDOW *);
  172. void field_tally(WINDOW *);
  173. int data_entry(WINDOW *);
  174. void wprompt(WINDOW *, int, int, char *);
  175. void error_message(char *);
  176. void clear_notice(void);
  177. void field_window(FIELD *, char *, int, int);
  178. #define field_protect(f,s)  f->fprot=s
  179. #define field_help(f,h)     f->fhelp=h
  180. #define field_validate(f,v) f->fvalid=v
  181.  
  182.  
  183.