home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / BBS / XSRC_117.ZIP / AWINDOW.H < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-04  |  6.9 KB  |  240 lines

  1. /* AWindow.H  File */
  2.  
  3. /* Window colors */
  4. #define RED            4
  5. #define GREEN        2
  6. #define BLUE        1
  7. #define WHITE        (RED+GREEN+BLUE)
  8. #define YELLOW        (RED+GREEN)
  9. #define AQUA        (GREEN+BLUE)
  10. #define MAGENTA     (RED+BLUE)
  11. #define BLACK         0
  12. #define BRIGHT        8
  13. #define DIM            0
  14.  
  15. #define BORDER        0
  16. #define TITLE        1
  17. #define ACCENT        2
  18. #define NORMAL        3
  19. #define ALL            4
  20.  
  21. #define TRUE        1
  22. #define FALSE        0
  23. #define ERROR      -1
  24. #define OK            0
  25.  
  26. extern unsigned int maxy;
  27.  
  28. /* Window controller structures */
  29.  
  30. typedef struct field {  /* data entry field description */
  31.   char *fmask;          /* field data entry mask     */
  32.   int fprot;            /* field protection         */
  33.   char *fbuff;            /* field buffer            */
  34.   int ftype;            /* field type             */
  35.   int frow;                /* field row            */
  36.   int fcol;                /* field column            */
  37.   void (*fhelp)();        /* field help function         */
  38.   char *fhwin;            /* field help window        */
  39.   int flx,fly;            /* help window location        */
  40.   int (*fvalid)();        /* field validation function    */
  41.   struct field *fnxt;    /* next field on template    */
  42.   struct field *fprv;    /* previous field on template    */
  43. } FIELD;
  44.  
  45. typedef struct _wnd {
  46.   int _wv;            /* true if window is visible     */
  47.   int _hd;            /* true if window is hidden    */
  48.   char *_ws;        /* points to window save block  */
  49.   char *_tl;        /* points to window title    */
  50.   int _wx;            /* nw x coordinate        */
  51.   int _wy;            /* nw y coordinate        */
  52.   int _ww;            /* window width            */
  53.   int _wh;            /* window height        */
  54.   int _wsp;            /* scroll pointer        */
  55.   int _sp;            /* selection pointer        */
  56.   int _cr;            /* cursor x location        */
  57.   int btype;        /* border type            */
  58.   int wcolor[4];    /* colors for window        */
  59.   int _pn;            /* previous normal color    */
  60.   struct _wnd *_nx;    /* points to next window    */
  61.   struct _wnd *_pv;    /* points to prev window    */
  62.   FIELD *_fh;        /* points to 1st data entry fld    */
  63.   FIELD *_ft;        /* points to last data entry fld*/
  64. } WINDOW;
  65.  
  66. typedef struct w_menu {
  67.   char *mname;
  68.   char **mselcs;
  69.   void (**func)();
  70. } MENU;
  71.  
  72.  
  73. typedef struct k_menu {
  74.     char *mname;
  75.     char **mselcs;
  76.     int  *returnkey;
  77. } KMENU;
  78.  
  79. #define SAV            (wnd->_ws)
  80. #define WTITLE        (wnd->_tl)
  81. #define COL            (wnd->_wx)
  82. #define ROW            (wnd->_wy)
  83. #define WIDTH        (wnd->_ww)
  84. #define HEIGHT        (wnd->_wh)
  85. #define SCROLL        (wnd->_wsp)
  86. #define SELECT        (wnd->_sp)
  87. #define WCURS        (wnd->_cr)
  88. #define WBORDER        (wnd->wcolor[BORDER])
  89. #define WTITLEC        (wnd->wcolor[TITLE])
  90. #define WACCENT        (wnd->wcolor[ACCENT])
  91. #define WNORMAL        (wnd->wcolor[NORMAL])
  92. #define PNORMAL        (wnd->_pn)
  93. #define BTYPE        (wnd->btype)
  94. #define NEXT        (wnd->_nx)
  95. #define PREV        (wnd->_pv)
  96. #define WCOLOR        (wnd->wcolor)
  97. #define VISIBLE        (wnd->_wv)
  98. #define HIDDEN        (wnd->_hd)
  99. #define FHEAD        (wnd->_fh)
  100. #define FTAIL        (wnd->_ft)
  101.  
  102. #define NW        (wcs[wnd->btype].nw)
  103. #define NE        (wcs[wnd->btype].ne)
  104. #define SE        (wcs[wnd->btype].se)
  105. #define SW        (wcs[wnd->btype].sw)
  106. #define SIDE        (wcs[wnd->btype].side)
  107. #define LINE        (wcs[wnd->btype].line)
  108.  
  109. /* function prototypes and macros */
  110.  
  111. /* general-purpose functions and macros */
  112.  
  113. void pascal clear_screen (void);
  114. int pascal vmode(void);
  115. void pascal cursor(int,int);
  116. void pascal curr_cursor(int *,int *);
  117. int pascal cursor_type(void);
  118. void pascal set_cursor_type(int);
  119.  
  120. char * pascal genin (char length,char password,char caps,char hot,char type);
  121. int pascal get_char(void);
  122. #define get_char() ((int)*genin(1,0,0,2,32))
  123.  
  124. void   pascal ffree(void *);
  125. void * pascal mmalloc(unsigned int);
  126. char * pascal mystrdup (char *str);
  127. #ifdef free
  128.     #undef free
  129.     #define free ffree
  130. #else
  131.     #define free ffree
  132. #endif
  133. #ifdef malloc
  134.     #undef malloc
  135.     #define malloc mmalloc
  136. #else
  137.     #define malloc mmalloc
  138. #endif
  139. #ifdef strdup
  140.     #undef strdup
  141.     #define strdup mystrdup
  142. #else
  143.     #define strdup mystrdup
  144. #endif
  145.  
  146.  
  147. int pascal scroll_lock(void);
  148. void pascal vpoke (unsigned,unsigned,unsigned);
  149. int pascal vpeek(unsigned,unsigned);
  150.  
  151. #define vpoke(vseg,adr,chr) poke(vseg,adr,chr)
  152. #define vpeek(vseg,adr) peek(vseg,adr)
  153.  
  154. /* window functions and macros*/
  155.  
  156. WINDOW * pascal establish_window (int,int,int,int);
  157. WINDOW * pascal establish_screen (int,int,int,int);
  158. void pascal set_border(WINDOW *,int);
  159. void pascal set_colors(WINDOW *,int,int,int,int);
  160. void pascal set_intensity (WINDOW *,int);
  161. void pascal set_title(WINDOW *,char *);
  162. void pascal display_window(WINDOW *);
  163. void pascal delete_window(WINDOW *);
  164. void pascal clear_window (WINDOW *);
  165. void pascal hide_window(WINDOW *);
  166. void cdecl  wprintf(WINDOW *,char *,...);
  167. void pascal wputchar (WINDOW *,int);
  168. void cdecl  wprintfraw(WINDOW *,char *,...);
  169. void pascal wputcharaw (WINDOW *,int);
  170. void pascal close_all(void);
  171. void pascal wcursor(WINDOW *,int x,int y);
  172. void pascal wframe(WINDOW *wnd);
  173. void pascal error_message(char *);
  174. void pascal any_message(char *);
  175. void pascal _anymsg(char *,char *);
  176. void pascal clear_message(void);
  177. int  pascal get_selection(WINDOW *,int,char *);
  178. int  pascal hkmenu (char **selcs, char *keys, int *start);
  179.  
  180. #define reverse_video(wnd)wnd->wcolor[3]=wnd->wcolor[2]
  181. #define normal_video(wnd)wnd->wcolor[3]=wnd->_pn
  182. #define rmove_window(wnd,x,y) repos_wwnd(wnd,x,y,0)
  183. #define move_window(wnd,x,y) repos_wnd,COL-x,ROW-y,0)
  184. #define forefront(wnd) repos_wnd(wnd,0,0,1)
  185. #define rear_window(wnd) repos_wnd(wnd,0,0,-1)
  186.  
  187. /* internal to window processes */
  188.  
  189. void pascal accent(WINDOW *);
  190. void pascal deaccent(WINDOW *);
  191. void pascal scroll(WINDOW *,int);
  192. void pascal repos_wnd(WINDOW *,int,int,int);
  193. void pascal acline(WINDOW *,int);
  194. #define accent(wnd)acline(wnd,WACCENT)
  195. #define deaccent(wnd)acline(wnd,WNORMAL)
  196. #define clr(bg,fg,in)((fg)|(bg<<4)|(in))
  197. #define vad(x,y) ((y) * (maxx * 2) + (x) * 2)
  198. #ifdef FASTWINDOWS
  199. #define cht (c,a) (((c)&255) | ((a)<<8))
  200. /* #define displ(w,x,y,c,a) vpoke(VSG,vad(x+COL,y+ROW),(((c)&255) | ((a)<<8))) */
  201. #define dget(w,x,y) vpeek(VSG,vad(x+COL,y+ROW))
  202. #define verify_wnd(w) (*(w)=listtail)!=0
  203. /* #else */
  204. #endif
  205. void pascal displ(WINDOW *wnd,int x,int y,int ch,int at);
  206. /* #endif */
  207.  
  208. /* Text editor function */
  209.  
  210. char * pascal text_editor(WINDOW *,char *,unsigned);
  211.  
  212. /* Menu function */
  213.  
  214. void pascal menu_select(char *name,MENU *mn);
  215. int  pascal kmenu_select(char *name,KMENU *mn);
  216.  
  217. /* Help fundtions */
  218.  
  219. void pascal load_help(char *);
  220. void pascal set_help(char *,int,int);
  221.  
  222. /* Data entry functions */
  223.  
  224. void pascal init_template(WINDOW *);
  225. FIELD * pascal establish_field(WINDOW *,int,int,char *, char *,int);
  226. void pascal clear_template(WINDOW *);
  227. void pascal prep_template(WINDOW *);
  228. void pascal field_tally(WINDOW *);
  229. int  pascal data_entry(WINDOW *);
  230. void pascal wprompt(WINDOW *,int,int,char *);
  231. void pascal error_message(char *);
  232. void pascal clear_notice(void);
  233. void pascal field_window(FIELD *,char *,int,int);
  234. void pascal disp_field(WINDOW *wnd,char *bf,char *msk);
  235. #define field_protect(f,s)     f->fprot=s
  236. #define field_help(f,h)        f->fhelp=h
  237. #define field_validate(f,v)    f->fvalid=v
  238. void pascal save_screen(void);
  239. void pascal redraw_screen(void);
  240.