home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / CURSES.LZH / CURSES.H < prev    next >
Text File  |  1990-01-31  |  16KB  |  364 lines

  1. #ifndef CURSES_H
  2. #define CURSES_H
  3. /****************************************************************/
  4. /*                CURSES.H                */
  5. /* Header file for definitions and declarations for the        */
  6. /* PCcurses package. This should be #include'd in all user    */
  7. /* programs.                            */
  8. /****************************************************************/
  9. /* This version of curses is based on ncurses, a curses version    */
  10. /* originally written by Pavel Curtis at Cornell University.    */
  11. /* I have made substantial changes to make it run on IBM PC's,    */
  12. /* and therefore consider myself free to make it public domain.    */
  13. /*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  14. /****************************************************************/
  15. /* 1.0:    Release:                    870515    */
  16. /* 1.1:    'Raw' output routines, revision info in            */
  17. /*    curses.h:                    880306    */
  18. /* 1.2:    Rcsid[] string in all modules, for maintenance:    881002    */
  19. /* 1.3:    All modules lint-checked with MSC '-W3' and        */
  20. /*    turbo'C' '-w -w-pro' switches. Support for        */
  21. /*    border(), wborder() functions:            881005    */
  22. /****************************************************************/
  23.  
  24. /* general definitions */
  25.  
  26. #define     TRUE        1        /* booleans */
  27. #define     FALSE        0
  28. #define     ERR        1        /* general error flag */
  29. #define  OK     0       /* general OK flag */
  30. typedef unsigned short  ch_attr;
  31. #define chtype  ch_attr
  32.  
  33. #define    CURSES_RCS_ID    "@(#)PCcurses v.1.3, 881005"
  34.  
  35. /* functions defined as macros */
  36.  
  37. #define getch()       wgetch(stdscr)    /* using macroes allows you to use */
  38. #define    ungetch(c) wungetch(c)        /* #undef getch/ungetch in your */
  39.                     /* programs to use MSC getch() and */
  40.                     /* ungetch() routines */
  41.  
  42. #define getyx(win,y,x)       (y = (win)->_cury, x = (win)->_curx)
  43.  
  44. #ifndef max
  45. #define max(a,b) (((a) > (b)) ? (a) : (b))
  46. #endif
  47. #ifndef min
  48. #define min(a,b) (((a) < (b)) ? (a) : (b))
  49. #endif
  50.  
  51. /*
  52.  * some masks --
  53.  *
  54.  * A_ATTRIBUTES:  strip the char and reveal the attribute.
  55.  * A_CHARTEXT:    strip the attr and reveal the character.
  56.  *
  57.  * ie:  attr = A_ATTRIBUTES & inch();
  58.  *    ch = A_CHARTEXT & inch();
  59.  *
  60.  * A_ALTCHARSET - under unix you OR this flag with extended character
  61.  * set characters for terminal supported special characters:
  62.  *
  63.  *    ACS_CKBOARD = A_ALTCHARSET | (chtype) 176;
  64.  *
  65.  * for ms-dos, we don't need this flag.  in fact, it would just get in the
  66.  * way.  so it is zero in this implementation.
  67.  */
  68. #define A_ATTRIBUTES 0xff00
  69. #define A_CHARTEXT   0x00ff
  70. #define A_ALTCHARSET 0x0000
  71. /* video attribute definitions. Colour definitions for */
  72. /* CGA/EGA should also go here... */
  73.  
  74. #define    A_BLINK        0x100
  75. #define    A_BLANK        0x200
  76. #define    A_BOLD         0x400
  77. #define    A_DIM          0
  78. #define    A_PROTECT      0
  79. #define    A_REVERSE      0x800
  80. #define    A_STANDOUT     0x1000
  81. #define    A_UNDERLINE    0x2000
  82.  
  83. /*
  84.  *       The following was added by Jim Ragsdale for PC only
  85.  * extended - color: to put white characters on blue background
  86.  *             do ... wattron(win, A_BBLUE|A_FWHITE);
  87.  *             background_attr | foreground_attr
  88.  */
  89. #define    A_FBLACK    0x0000
  90. #define    A_FBLUE        0x0100
  91. #define    A_FGREEN    0x0200
  92. #define    A_FCYAN        0x0300
  93. #define    A_FRED        0x0400
  94. #define    A_FMAGENTA    0x0500
  95. #define    A_FBROWN    0x0600
  96. #define    A_FWHITE    0x0700
  97. #define    A_FGREY        0x0800
  98. #define    A_FGRAY        0x0800        /* same as A_FGREY */
  99. #define    A_FLT_BLUE    0x0900
  100. #define    A_FLT_GREEN    0x0a00
  101. #define    A_FLT_CYAN    0x0b00
  102. #define    A_FLT_RED    0x0c00
  103. #define    A_FLT_MAGENTA    0x0d00
  104. #define    A_FYELLOW    0x0e00
  105. #define    A_FHI_WHITE    0x0f00
  106.  
  107. #define    A_BBLACK    0x0000
  108. #define    A_BBLUE        0x1000
  109. #define    A_BGREEN    0x2000
  110. #define    A_BCYAN        0x3000
  111. #define    A_BRED        0x4000
  112. #define    A_BMAGENTA    0x5000
  113. #define    A_BBROWN    0x6000
  114. #define    A_BWHITE    0x7000
  115.  
  116. #define _MAKE_BLANK_CELL(win)\
  117.  (' ' | ((_si->s_flags & _USEATTRFILL) ? win->_c_attr:A_NORMAL))
  118.  
  119. /** new sys v.3.2 style color support **/
  120.  
  121. extern int COLORS, COLOR_PAIRS;
  122. extern chtype __pairs__[];
  123.  
  124. #define A_COLOR        0x7700
  125.  
  126. #define COLOR_PAIR(n)        (__pairs__[(n)])
  127. #define PAIR_NUMBER(p)        (_VV_look_up_pair(p))
  128. #define can_change_color()    (0)
  129. #define has_colors()        ((_si->s_flags & _COLOR) ? 1:0)
  130.  
  131. #define COLOR_BLACK    0
  132. #define COLOR_BLUE    1
  133. #define COLOR_GREEN    2
  134. #define COLOR_CYAN    3
  135. #define COLOR_RED    4
  136. #define COLOR_MAGENTA    5
  137. #define COLOR_YELLOW    6
  138. #define COLOR_WHITE    7
  139.  
  140. /*
  141. *   function and keypad key definitions. Many are just for compatibility
  142. *        The following may have to be added to or changed in-order for
  143. *        the keyboard to work correctly on an IBM PC or compatible.
  144. *        The following are definitions as stated on a UNIX system and
  145. *        to not necessarily have any relationship to an IBM PC keyboard
  146. */
  147. #define CTRL(c)        (c & 037)    /* mask for determining CTRL+c */
  148. #define KEY_BKSPACE    0x08         /* added by J.R. for PC only */
  149. #define KEY_TAB        0x09         /* added by J.R. for PC only */
  150. #define KEY_RETURN     0x0D         /* added by J.R. for PC only */
  151. #define KEY_ESC        0x1A         /* added by J.R. for PC only */
  152. #define KEY_BREAK      0x101        /* Not on PC */
  153. #define KEY_DOWN       0x102        /* The four arrow keys */
  154. #define KEY_UP         0x103
  155. #define KEY_LEFT       0x104
  156. #define KEY_RIGHT      0x105
  157. #define KEY_HOME       0x106        /* Home key */
  158. #define KEY_BACKSPACE  0x107        /* Not on PC */
  159. #define KEY_F0         0x108        /* Function keys. Space for */
  160. #define KEY_F(n)       (KEY_F0+(n)) /*  64 keys is reserved. */
  161. #define KEY_DL         0x148        /* Not on PC */
  162. #define KEY_IL         0x149        /* Insert line */
  163. #define KEY_DC         0x14a        /* Delete character */
  164. #define KEY_IC         0x14b        /* Insert char or enter insert mode */
  165. #define KEY_EIC        0x14c        /* Exit insert char mode */
  166. #define KEY_CLEAR      0x14d        /* Clear screen */
  167. #define KEY_EOS        0x14e        /* Clear to end of screen */
  168. #define KEY_EOL        0x14f        /* Clear to end of line */
  169. #define KEY_SF         0x150        /* Scroll 1 line forward */
  170. #define KEY_SR         0x151        /* Scroll 1 line backwards (reverse) */
  171. #define KEY_NPAGE      0x152        /* Next page */
  172. #define KEY_PPAGE      0x153        /* Previous page */
  173. #define KEY_STAB       0x154        /* Set tab */
  174. #define KEY_CTAB       0x155        /* Clear tab */
  175. #define KEY_CATAB      0x156        /* Clear all tabs */
  176. #define KEY_ENTER      0x157        /* Enter or send (unreliable) */
  177. #define KEY_SRESET     0x158        /* soft (partial) reset (unreliable) */
  178. #define KEY_RESET      0x159        /* reset or hard reset (unreliable) */
  179. #define KEY_PRINT      0x15a        /* print or copy */
  180. #define KEY_LL         0x15b        /* home down or bottom (lower left) */
  181. #define KEY_ABORT      0x15c        /*  Abort/Terminate key (any) */
  182. #define KEY_SHELP      0x15d        /* Short help */
  183. #define KEY_LHELP      0x15e        /* Long help */
  184.  
  185. /* type declarations */
  186.  
  187. typedef    char    bool;            /* boolean type */
  188.  
  189. typedef struct
  190.   {
  191.   int       _cury;            /* Current pseudo-cursor */
  192.   int       _curx;
  193.   int      _maxy;            /* Max coordinates */
  194.   int      _maxx;
  195.   int      _begy;            /* Origin on screen */
  196.   int      _begx;
  197.   int       _flags;            /* Window properties */
  198.   int       _attrs;            /* Attributes of written characters */
  199.   int      _tabsize;            /* Tab character size */
  200.   bool       _clear;            /* Causes clear at next refresh */
  201.   bool       _leave;            /* Leaves cursor as it happens */
  202.   bool       _scroll;            /* Allows window scrolling */
  203.   bool       _nodelay;            /* Input character wait flag */
  204.   bool       _keypad;            /* Flags keypad key mode active */
  205.   int    **_line;            /* Pointer to line pointer array */
  206.   int      *_minchng;            /* First changed character in line */
  207.   int      *_maxchng;            /* Last changed character in line */
  208.   int       _regtop;            /* Top of scrolling region */
  209.   int       _regbottom;            /* Bottom of scrolling region */
  210.   char       _borderchars[8];        /* Non-std border chars */
  211.   }    WINDOW;
  212.  
  213. /* External variables */
  214.  
  215. extern    int    LINES;            /* terminal height */
  216. extern    int    COLS;            /* terminal width */
  217. extern    WINDOW *curscr;            /* the current screen image */
  218. extern    WINDOW *stdscr;            /* the default screen window */
  219.  
  220. /* PCcurses function declarations */
  221.  
  222. extern    int     addch();        /* put char in stdscr */
  223. extern    int     addrawch();        /* put char in stdscr, raw */
  224. extern    int     addstr();        /* put string in stdscr */
  225. extern    void     attrset();        /* set stdscr char attributes */
  226. extern    void     attroff();        /* clear attribute(a) stdscr */
  227. extern    void     attron();        /* add attribute(s) stdscr */
  228. extern    int     baudrate();        /* compatibility dummy */
  229. extern    void     beep();        /* sound bell */
  230. extern    void     border();        /* Set non-std box characters */
  231. extern    void     box();            /* draw a box around a window */
  232. extern    void     cbreak();        /* set terminal cbreak mode */
  233. extern    void     clear();        /* clear stdscr */
  234. extern    void     clearok();        /* marks a window for screen clear */
  235. extern    int     clrtobot();        /* clear end of stdscr */
  236. extern    int     clrtoeol();        /* clear end of line in stdscr */
  237. extern    void     crmode();        /* set terminal cbreak mode */
  238. extern    void     cursoff();        /* turns off hardware cursor */
  239. extern    void     curson();        /* turns on hardware cursor */
  240. extern    void     def_prog_mode();    /* save TTY modes */
  241. extern    void     def_shell_mode();    /* compatibility dummy */
  242. extern    int     delch();        /* delete a char in stdscr */
  243. extern    int     deleteln();        /* delete a line in stdscr */
  244. extern    void     delwin();        /* delete a window or a subwindow */
  245. extern  void     doupdate();        /* update physical screen */
  246. extern    void     echo();        /* set terminal echo mode */
  247. extern    int     endwin();        /* cleanup and finitialization */
  248. extern    void     erase();        /* erase stdscr */
  249. extern    int     erasechar();        /* return char kill character */
  250. extern    int     fixterm();        /* compatibility dummy */
  251. extern    void     flash();        /* flash terminal screen */
  252. extern    void     flushinp();        /* kill pending keyboard input */
  253. extern  int     getstr();        /* get string to stdscr and buffer */
  254. extern    int     gettmode();        /* compatibility dummy */
  255. extern    void     idlok();        /* use ins/del line (dummy) */
  256. extern    int     initscr();        /* curses initialization */
  257. extern  int     inch();        /* get char at stdscr cursor */
  258. extern    int     insch();        /* insert character in stdscr */
  259. extern    int     insrawch();        /* insert character in stdscr, raw */
  260. extern    int     insertln();        /* insert new line in stdscr */
  261. extern    void     keypad();        /* marks a window for keypad usage */
  262. extern    int     killchar();        /* return line kill character */
  263. extern    char    *longname();        /* terminal description */
  264. extern    void     leaveok();        /* marks window for cursor 'leave' */
  265. extern    void     meta();        /* marks window for meta (dummy) */
  266. extern    int     move();        /* move cursor in stdscr */
  267. extern    int     mvaddch();        /* move & put char in stdscr */
  268. extern    int     mvaddrawch();        /* move & put char in stdscr, raw */
  269. extern    int     mvaddstr();        /* move & put string in stdscr */
  270. extern    int     mvclrtobot();        /* move & clear end of stdscr */
  271. extern    int     mvclrtoeol();        /* move & clear lineend in stdscr */
  272. extern    int     mvcur();        /* move terminal cursor */
  273. extern    int     mvdelch();        /* move & delete a char in stdscr */
  274. extern    int     mvdeleteln();        /* move & delete a line in stdscr */
  275. extern    int     mvgetch();        /* move & get char to stdscr */
  276. extern    int     mvgetstr();        /* move & get string to stdscr */
  277. extern    int     mvinch();        /* move & get char at stdscr cursor */
  278. extern    int     mvinsch();        /* move & insert char in stdscr */
  279. extern    int     mvinsrawch();        /* move & insert raw char in stdscr */
  280. extern    int     mvinsertln();        /* move & insert new line in stdscr */
  281. extern    int     mvprintw();        /* move & print string in stdscr */
  282. extern    int     mvscanw();        /* move & get values via stdscr */
  283. extern    int     mvwaddch();        /* move & put char in a window */
  284. extern    int     mvwaddrawch();        /* move & put char in a window, raw */
  285. extern    int     mvwaddstr();        /* move & put string in a window */
  286. extern    int     mvwclrtobot();        /* move & clear end of a window */
  287. extern    int     mvwclrtoeol();        /* move & clear lineend in a window */
  288. extern    int     mvwdelch();        /* move & delete a char in a window */
  289. extern    int     mvwdeleteln();        /* move & delete a line in a window */
  290. extern    int     mvwgetch();        /* move & get char to a window */
  291. extern    int     mvwgetstr();        /* move & get string to a window */
  292. extern    int     mvwinch();        /* move & get char at window cursor */
  293. extern    int     mvwinsch();        /* move & insert char in a window */
  294. extern    int     mvwinsrawch();        /* move & insert raw char in window */
  295. extern    int     mvwinsertln();        /* move & insert new line in window */
  296. extern    int     mvwin();        /* move window */
  297. extern    int     mvwprintw();        /* move & print string in a window */
  298. extern    int     mvwscanw();        /* move & get values via a window */
  299. extern    WINDOW    *newwin();        /* create a window */
  300. extern    void     nl();            /* set terminal cr-crlf map mode */
  301. extern    void     nocbreak();        /* unset terminal cbreak mode */
  302. extern    void     nocrmode();        /* unset terminal cbreak mode */
  303. extern    void     nodelay();        /* marks window for no input wait */
  304. extern    void     noecho();        /* unset terminal echo mode */
  305. extern    void     nonl();        /* unset terminal cr-crlf map mode */
  306. extern    void     noraw();        /* unset raw terminal mode */
  307. extern    void     overlay();        /* overlay one window on another */
  308. extern    void     overwrite();        /* overwrite one window on another */
  309. extern    int     printw();        /* print string in stdscr */
  310. extern    void     raw();            /* set raw terminal mode */
  311. extern    void     refrbrk();        /* set screen refresh break mode */
  312. extern    void     refresh();        /* refresh stdscr */
  313. extern    int     resetterm();        /* compatibility dummy */
  314. extern    int     resetty();        /* restore terminal I/O modes */
  315. extern    void     reset_prog_mode();    /* restore terminal I/O modes */
  316. extern    void     reset_shell_mode();    /* set terminal to default modes */
  317. extern    int     saveoldterm();        /* compatibility dummy */
  318. extern    int     saveterm();        /* compatibility dummy */
  319. extern    int     savetty();        /* save terminal I/O modes */
  320. extern    int     scanw();        /* get values via stdscr */
  321. extern    void     scroll();        /* scroll region in a window */
  322. extern    void     scrollok();        /* marks a window to allow scroll */
  323. extern    int     setsrcreg();        /* define stdscr's scroll region */
  324. extern    int     setterm();        /* compatibility dummy */
  325. extern    int     setupterm();        /* set up terminal (no-op) */
  326. extern    void     standend();        /* start normal chars in stdscr */
  327. extern    void     standout();        /* start standout chars in stdscr */
  328. extern    WINDOW    *subwin();        /* create a sub-window */
  329. extern    int     tabsize();        /* set/get tabsize of stdscr */
  330. extern    void     touchwin();        /* mark a window as modified */
  331. extern    char    *unctrl();        /* char-to-string converter */
  332. extern    int     waddch();        /* put char in a window */
  333. extern    int     waddrawch();        /* put char in a window, raw */
  334. extern    int     waddstr();        /* put string in a window */
  335. extern    void     wattroff();        /* clear attribute(a) in window */
  336. extern    void     wattron();        /* add attribute(s) in window */
  337. extern    void     wattrset();        /* set window char attributes */
  338. extern    void     wborder();        /* Set non-std box characters */
  339. extern    int     wbox();        /* draw a box inside a window */
  340. extern    void     wclear();        /* clear a window */
  341. extern    int     wclrtobot();        /* clear end of a window */
  342. extern    int     wclrtoeol();        /* clear end of line in a window */
  343. extern    int     wdelch();        /* delete a char in a window */
  344. extern    int     wdeleteln();        /* delete a line in a window */
  345. extern    void     werase();        /* erase a window */
  346. extern    int     wgetch();        /* get char to a window */
  347. extern  int     wgetstr();        /* get string to window and buffer */
  348. extern    int     winch();        /* get char at window cursor */
  349. extern    int     winsch();        /* insert character in a window */
  350. extern    int     winsrawch();        /* insert raw character in a window */
  351. extern    int     winsertln();        /* insert new line in a window */
  352. extern    int     wmove();        /* move cursor in a window */
  353. extern    void     wnoutrefresh();    /* create screen image, w/o display */
  354. extern    int     wprintw();        /* print string in a window */
  355. extern    void     wrefresh();        /* refresh screen */
  356. extern    int     wscanw();        /* get values via a window */
  357. extern    int     wsetsrcreg();        /* define a window's scroll region */
  358. extern    void     wstandend();        /* start normal chars in window */
  359. extern    void     wstandout();        /* start standout chars in window */
  360. extern    int     wtabsize();        /* set/get tabsize of a window */
  361. extern    int     wungetch();        /* character push-back */
  362.  
  363. #endif CURSES_H
  364.