home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / cprog / cursesp.zip / CURSES.H < prev    next >
C/C++ Source or Header  |  1991-12-03  |  19KB  |  330 lines

  1. /****************************************************************/
  2. /* CURSES.H                                                     */
  3. /* Header file for definitions and declarations for the         */
  4. /* PCcurses package. This should be #include'd in all user      */
  5. /* programs.                                                    */
  6. /****************************************************************/
  7. /* This version of curses is based on ncurses, a curses version */
  8. /* originally written by Pavel Curtis at Cornell University.    */
  9. /* I have made substantial changes to make it run on IBM PC's,  */
  10. /* and therefore consider myself free to make it public domain. */
  11. /*    Bjorn Larsson (...mcvax!enea!infovax!bl)                  */
  12. /****************************************************************/
  13. /* 1.0: Release:     870515                                     */
  14. /* 1.1: 'Raw' output routines, revision info in                 */
  15. /* curses.h:     880306                                         */
  16. /* 1.2: Rcsid[] string in all modules, for maintenance: 881002  */
  17. /* 1.3: All modules lint-checked with MSC '-W3' and             */
  18. /* turbo'C' '-w -w-pro' switches. Support for                   */
  19. /* border(), wborder() functions:    881005                     */
  20. /****************************************************************/
  21.  
  22. #include <alloc.h>
  23.  
  24. //  C++ compatible definition for  external functions
  25.  
  26. #if defined(__BCPLUSPLUS__) || defined(TCPLUSPLUS) || defined(__CPLUSPLUS__)
  27. #define _EXTERN         extern "C"
  28. #else
  29. #define _EXTERN         extern
  30. #endif
  31.  
  32. // general definitions 
  33.  
  34. #define TRUE    1                // booleans 
  35. #define FALSE   0
  36. #define ERR     0                // general error flag 
  37. #define OK      1                // general OK flag 
  38.  
  39. #define CURSES_RCS_ID "@(#)PCcurses v.1.3, 881005"
  40.  
  41. // functions defined as macros 
  42.  
  43. #define getch() wgetch(stdscr)           // using macroes allows you to use 
  44. #define ungetch(c) wungetch(c)           // #undef getch/ungetch in your 
  45.  
  46. // programs to use MSC getch() and 
  47. // ungetch() routines 
  48.  
  49. #define getyx(win,y,x)  (y = (win)->_cury, x = (win)->_curx)
  50.  
  51. #ifndef max
  52. #define max(a,b) (((a) > (b)) ? (a) : (b))
  53. #endif
  54. #ifndef min
  55. #define min(a,b) (((a) < (b)) ? (a) : (b))
  56. #endif
  57.  
  58. // video attribute definitions. Colour definitions for 
  59. // CGA/EGA should also go here... 
  60.  
  61. // We will have 2 leftmost bits for attributes. These attributes are
  62. // not colour attributes. They are to be used with wattron(), wattroff()
  63. // and wattrset() (do bit OR with colour attributes). 
  64.  
  65. #define A_NORMAL        0x0000       //  Binary  00
  66. #define A_HIGH          0x4000       //          01  Do not go with BLINK
  67. #define A_BLINK         0x8000       //          10  Do not go with HIGH
  68. #define A_REVERSE       0xC000       //          11  Overide all others
  69. #define A_STANDOUT      A_REVERSE    //          11  Same as REVERSE
  70.  
  71. // Just for the sake of UNIX Sys5 compatibility
  72.  
  73. #define A_UNDERLINE     A_REVERSE
  74. #define A_DIM           A_NORMAL
  75. #define A_BOLD          A_HIGH
  76. #define A_ALTCHARSET    A_NORMAL
  77. #define A_CHARTEXT      0x00ff
  78. #define A_ATTRIBUTES    0xff00
  79.  
  80.  
  81. // And we have the 3 bits for background colours + 3 bits for foreground
  82. // colours. Altogether 8 bits for EGA/VGA colours. These are colour
  83. // attributes (not characteristics). They cannot be used with wattron()
  84. // until the previous colour attributes have been turned off by wattroff().
  85. // However, wattrset() will always work. 
  86.  
  87. #define F_BLACK     0x0000
  88. #define F_BLUE      0x0100
  89. #define F_GREEN     0x0200
  90. #define F_CYAN      0x0300
  91. #define F_RED       0x0400
  92. #define F_MAGENTA   0x0500
  93. #define F_BROWN     0x0600
  94. #define F_GRAY      0x0700
  95.  
  96. #define B_BLACK     0x0000
  97. #define B_BLUE      0x0800
  98. #define B_GREEN     0x1000
  99. #define B_CYAN      0x1800
  100. #define B_RED       0x2000
  101. #define B_MAGENTA   0x2800
  102. #define B_BROWN     0x3000
  103. #define B_GRAY      0x3800
  104.  
  105. // function and keypad key definitions. Many are just for compatibility 
  106.  
  107. #define KEY_BREAK      0x101             // Not on PC 
  108. #define KEY_DOWN       0x102             // The four arrow keys 
  109. #define KEY_UP         0x103
  110. #define KEY_LEFT       0x104
  111. #define KEY_RIGHT      0x105
  112. #define KEY_HOME       0x106             // Home key 
  113. #define KEY_BACKSPACE  0x107             // Not on PC 
  114. #define KEY_F0         0x108             // Function keys. Space for 
  115. #define KEY_F(n)       (KEY_F0+(n))      //  64 keys is reserved. 
  116. #define KEY_DL         0x148             // Not on PC 
  117. #define KEY_IL         0x149             // Insert line 
  118. #define KEY_DC         0x14a             // Delete character 
  119. #define KEY_IC         0x14b             // Insert char or enter insert mode 
  120. #define KEY_EIC        0x14c             // Exit insert char mode 
  121. #define KEY_CLEAR      0x14d             // Clear screen 
  122. #define KEY_EOS        0x14e             // Clear to end of screen 
  123. #define KEY_EOL        0x14f             // Clear to end of line 
  124. #define KEY_SF         0x150             // Scroll 1 line forward 
  125. #define KEY_SR         0x151             // Scroll 1 line backwards (reverse) 
  126. #define KEY_NPAGE      0x152             // Next page 
  127. #define KEY_PPAGE      0x153             // Previous page 
  128. #define KEY_STAB       0x154             // Set tab 
  129. #define KEY_CTAB       0x155             // Clear tab 
  130. #define KEY_CATAB      0x156             // Clear all tabs 
  131. #define KEY_ENTER      0x157             // Enter or send (unreliable) 
  132. #define KEY_SRESET     0x158             // soft (partial) reset (unreliable) 
  133. #define KEY_RESET      0x159             // reset or hard reset (unreliable) 
  134. #define KEY_PRINT      0x15a             // print or copy 
  135. #define KEY_LL         0x15b             // home down or bottom (lower left) 
  136. #define KEY_ABORT      0x15c             //  Abort/Terminate key (any) 
  137. #define KEY_SHELP      0x15d             // Short help 
  138. #define KEY_LHELP      0x15e             // Long help 
  139.  
  140. // type declarations 
  141.  
  142. typedef char bool;               // boolean type 
  143.  
  144. typedef struct
  145.   {
  146.   int   _cury;                   // Current pseudo-cursor 
  147.   int   _curx;
  148.   int   _maxy;                   // Max coordinates 
  149.   int   _maxx;
  150.   int   _begy;                   // Origin on screen 
  151.   int   _begx;
  152.   int   _flags;                  // Window properties 
  153.   int   _attrs;                  // Attributes of written characters 
  154.   int   _tabsize;                // Tab character size 
  155.   bool  _clear;                  // Causes clear at next refresh 
  156.   bool  _leave;                  // Leaves cursor as it happens 
  157.   bool  _scroll;                 // Allows window scrolling 
  158.   bool  _nodelay;                // Input character wait flag 
  159.   bool  _keypad;                 // Flags keypad key mode active 
  160.   int    **_line;                // Pointer to line pointer array 
  161.   int   *_minchng;               // First changed character in line 
  162.   int   *_maxchng;               // Last changed character in line 
  163.   int   _regtop;                 // Top of scrolling region 
  164.   int   _regbottom;              // Bottom of scrolling region 
  165.   char  _borderchars[8];         // Non-std border chars 
  166.   } WINDOW;
  167.  
  168. // For UNIX compatibility
  169.  
  170. #define    COLS    _COLS            // These are expected in UNIX
  171. #define    LINES    _LINES
  172.  
  173. // External variables 
  174.  
  175. extern int    _LINES;            // terminal height 
  176. extern int    _COLS;             // terminal width 
  177. extern WINDOW *curscr;           // the current screen image 
  178. extern WINDOW *stdscr;           // the default screen window 
  179.  
  180. // PCcurses function declarations 
  181.  
  182. _EXTERN  int addch(int);         // put char in stdscr 
  183. _EXTERN  int addrawch(int);      // put char in stdscr, raw 
  184. _EXTERN  int addstr(char*);      // put string in stdscr 
  185. _EXTERN  void attrset(int);      // set stdscr char attributes 
  186. _EXTERN  void attroff(int);      // clear attribute(a) stdscr 
  187. _EXTERN  void attron(int);       // add attribute(s) stdscr 
  188. _EXTERN  int baudrate(void);     // compatibility dummy 
  189. _EXTERN  void beep(void);        // sound bell 
  190.  
  191. // Set non-std box characters 
  192. _EXTERN  void border(int,int,int,int,int,int,int,int);
  193. _EXTERN  void box(WINDOW*,int,int);             // draw a box around a window 
  194. _EXTERN  void cbreak(void);                     // set terminal cbreak mode 
  195. _EXTERN  void clear(void);                      // clear stdscr 
  196. _EXTERN  void clearok(WINDOW*,int);             // marks a window for screen clear 
  197. _EXTERN  int  clrtobot(void);                   // clear end of stdscr 
  198. _EXTERN  int  clrtoeol(void);                   // clear end of line in stdscr 
  199. _EXTERN  void crmode(void);                     // set terminal cbreak mode 
  200. _EXTERN  void cursoff(void);                    // turns off hardware cursor 
  201. _EXTERN  void curson(void);                     // turns on hardware cursor 
  202. _EXTERN  void def_prog_mode(void);              // save TTY modes 
  203. _EXTERN  void def_shell_mode(void);             // compatibility dummy 
  204. _EXTERN  int  delch(void);                      // delete a char in stdscr 
  205. _EXTERN  int  deleteln(void);                   // delete a line in stdscr 
  206. _EXTERN  void delwin(WINDOW*);                  // delete a window or a subwindow 
  207. _EXTERN  void doupdate(void);                   // update physical screen 
  208. _EXTERN  void echo(void);                       // set terminal echo mode 
  209. _EXTERN  int  endwin(void);                     // cleanup and finitialization 
  210. _EXTERN  void erase(void);                      // erase stdscr 
  211. _EXTERN  int  erasechar(void);                  // return char kill character 
  212. _EXTERN  int  fixterm(void);                    // compatibility dummy 
  213. _EXTERN  void flash(void);                      // flash terminal screen 
  214. _EXTERN  void flushinp(void);                   // kill pending keyboard input 
  215. _EXTERN  int  getstr(char*);                    // get string to stdscr and buffer 
  216. _EXTERN  int  gettmode(void);                   // compatibility dummy 
  217. _EXTERN  void idlok(void);                      // use ins/del line (dummy) 
  218. _EXTERN  int  initscr(void);                    // curses initialization 
  219. _EXTERN  int  inch(void);                       // get char at stdscr cursor 
  220. _EXTERN  int  insch(int);                       // insert character in stdscr 
  221. _EXTERN  int  insrawch(int);                    // insert character in stdscr, raw 
  222. _EXTERN  int  insertln(void);                   // insert new line in stdscr 
  223. _EXTERN  void keypad(WINDOW*,int );             // marks a window for keypad usage 
  224. _EXTERN  int  killchar(void);                   // return line kill character 
  225. _EXTERN  char *longname(void);                  // terminal description 
  226. _EXTERN  void leaveok(WINDOW*,int );            // marks window for cursor 'leave' 
  227. _EXTERN  void meta(void);                       // marks window for meta (dummy) 
  228. _EXTERN  int  move(int,int);                    // move cursor in stdscr 
  229. _EXTERN  int  mvaddch(int,int,int);             // move & put char in stdscr 
  230. _EXTERN  int  mvaddrawch(int,int,int);          // move & put char in stdscr, raw 
  231. _EXTERN  int  mvaddstr(int,int,char*);          // move & put string in stdscr 
  232. _EXTERN  int  mvclrtobot(int,int);              // move & clear end of stdscr 
  233. _EXTERN  int  mvclrtoeol(int,int);              // move & clear lineend in stdscr 
  234. _EXTERN  int  mvcur(int,int,int,int);           // move terminal cursor 
  235. _EXTERN  int  mvdelch(int,int);                 // move & delete a char in stdscr 
  236. _EXTERN  int  mvdeleteln(int,int);              // move & delete a line in stdscr 
  237. _EXTERN  int  mvgetch(int,int);                 // move & get char to stdscr 
  238. _EXTERN  int  mvgetstr(int,int,char*);          // move & get string to stdscr 
  239. _EXTERN  int  mvinch(int,int);                  // move & get char at stdscr cursor 
  240. _EXTERN  int  mvinsch(int,int,int);             // move & insert char in stdscr 
  241. _EXTERN  int  mvinsrawch(int,int,int);          // move & insert raw char in stdscr 
  242. _EXTERN  int  mvinsertln(int,int);              // move & insert new line in stdscr 
  243. _EXTERN  int  mvprintw();                       // move & print string in stdscr 
  244. _EXTERN  int  mvscanw();                        // move & get values via stdscr 
  245. _EXTERN  int  mvwaddch(WINDOW*,int,int,int);    // move & put char in a window 
  246. _EXTERN  int  mvwaddrawch(WINDOW*,int,int,int); // move & put char in a window, raw 
  247. _EXTERN  int  mvwaddstr(WINDOW*,int,int,char*); // move & put string in a window 
  248. _EXTERN  int  mvwclrtobot(WINDOW*,int,int);     // move & clear end of a window 
  249. _EXTERN  int  mvwclrtoeol(WINDOW*,int,int);     // move & clear lineend in a window 
  250. _EXTERN  int  mvwdelch(WINDOW*,int,int);        // move & delete a char in a window 
  251. _EXTERN  int  mvwdeleteln(WINDOW*,int,int);     // move & delete a line in a window 
  252. _EXTERN  int  mvwgetch(WINDOW*,int,int);        // move & get char to a window 
  253. _EXTERN  int  mvwgetstr(WINDOW*,int,int,char*); // move & get string to a window 
  254. _EXTERN  int  mvwinch(WINDOW*,int,int);         // move & get char at window cursor 
  255. _EXTERN  int  mvwinsch(WINDOW*,int,int,int);    // move & insert char in a window 
  256. _EXTERN  int  mvwinsrawch(WINDOW*,int,int,int); // move & insert raw char in window 
  257. _EXTERN  int  mvwinsertln(WINDOW*,int,int);     // move & insert new line in window 
  258. _EXTERN  int  mvwin(WINDOW*,int,int);           // move window 
  259. _EXTERN  int  mvwprintw();                      // move & print string in a window 
  260. _EXTERN  int  mvwscanw();                       // move & get values via a window 
  261. _EXTERN  WINDOW *newwin(int ,int,int,int);      // create a window 
  262. _EXTERN  void nl(void);                         // set terminal cr-crlf map mode 
  263. _EXTERN  void nocbreak(void);                   // unset terminal cbreak mode 
  264. _EXTERN  void nocrmode(void);                   // unset terminal cbreak mode 
  265. _EXTERN  void nodelay(WINDOW*,int );            // marks window for no input wait 
  266. _EXTERN  void noecho(void);                     // unset terminal echo mode 
  267. _EXTERN  void nonl(void);                       // unset terminal cr-crlf map mode 
  268. _EXTERN  void noraw(void);                      // unset raw terminal mode 
  269. _EXTERN  void overlay(WINDOW*,WINDOW*);         // overlay one window on another 
  270. _EXTERN  void overwrite(WINDOW*,WINDOW*);       // overwrite one window on another 
  271. _EXTERN  int  printw();                         // print string in stdscr 
  272. _EXTERN  void raw(void);                        // set raw terminal mode 
  273. _EXTERN  void refrbrk(int );                    // set screen refresh break mode 
  274. _EXTERN  void refresh(void);                    // refresh stdscr 
  275. _EXTERN  int  resetterm(void);                  // compatibility dummy 
  276. _EXTERN  int  resetty(void);                    // restore terminal I/O modes 
  277. _EXTERN  void reset_prog_mode(void);            // restore terminal I/O modes 
  278. _EXTERN  void reset_shell_mode(void);           // set terminal to default modes 
  279. _EXTERN  int  saveoldterm(void);                // compatibility dummy 
  280. _EXTERN  int  saveterm(void);                   // compatibility dummy 
  281. _EXTERN  int  savetty(void);                    // save terminal I/O modes 
  282. _EXTERN  int  scanw();                          // get values via stdscr 
  283. _EXTERN  void scroll(WINDOW*);                  // scroll region in a window 
  284. _EXTERN  void scrollok(WINDOW*,int );           // marks a window to allow scroll 
  285. _EXTERN  int  setsrcreg(void);                  // define stdscr's scroll region 
  286. _EXTERN  int  setterm(void);                    // compatibility dummy 
  287. _EXTERN  int  setupterm(void);                  // set up terminal (no-op) 
  288. _EXTERN  void standend(void);                   // start normal chars in stdscr 
  289. _EXTERN  void standout(void);                   // start standout chars in stdscr 
  290. _EXTERN  WINDOW *subwin(WINDOW*,int ,int,int,int);      // create a sub-window 
  291. _EXTERN  int  tabsize(int);                     // set/get tabsize of stdscr 
  292. _EXTERN  void touchwin(WINDOW*);                // mark a window as modified 
  293. _EXTERN  char *unctrl(int );                    // char-to-string converter 
  294. _EXTERN  int  waddch(WINDOW*,int);              // put char in a window 
  295. _EXTERN  int  waddrawch(WINDOW*,int);           // put char in a window, raw 
  296. _EXTERN  int  waddstr(WINDOW*,char*);           // put string in a window 
  297. _EXTERN  void wattroff(WINDOW*,int);            // clear attribute(a) in window 
  298. _EXTERN  void wattron(WINDOW*,int);             // add attribute(s) in window 
  299. _EXTERN  void wattrset(WINDOW*,int);            // set window char attributes 
  300. _EXTERN  void wborder(WINDOW*,int ,int,int,int,int,int,int,int);                // Set non-std box characters 
  301. _EXTERN  int  wbox(WINDOW*,int,int,int,int,int,int);    // draw a box inside a window 
  302. _EXTERN  void wclear(WINDOW*);                  // clear a window 
  303. _EXTERN  int  wclrtobot(WINDOW*);               // clear end of a window 
  304. _EXTERN  int  wclrtoeol(WINDOW*);               // clear end of line in a window 
  305. _EXTERN  int  wdelch(WINDOW*);                  // delete a char in a window 
  306. _EXTERN  int  wdeleteln(WINDOW*);               // delete a line in a window 
  307. _EXTERN  void werase(WINDOW*);                  // erase a window 
  308. _EXTERN  int  wgetch(WINDOW*);                  // get char to a window 
  309. _EXTERN  int  wgetstr(WINDOW*,char*);           // get string to window and buffer 
  310. _EXTERN  int  winch(WINDOW*);                   // get char at window cursor 
  311. _EXTERN  int  winsch(WINDOW*,int);              // insert character in a window 
  312. _EXTERN  int  winsrawch(WINDOW*,int);           // insert raw character in a window 
  313. _EXTERN  int  winsertln(WINDOW*);               // insert new line in a window 
  314. _EXTERN  int  wmove(WINDOW*,int,int);           // move cursor in a window 
  315. _EXTERN  void wnoutrefresh(WINDOW*);            // create screen image, w/o display 
  316. _EXTERN  int  wprintw();                        // print string in a window 
  317. _EXTERN  void wrefresh(WINDOW*);                // refresh screen 
  318. _EXTERN  int  wscanw();                         // get values via a window 
  319. _EXTERN  int  wsetsrcreg(WINDOW*,int,int);      // define a window's scroll region 
  320. _EXTERN  void wstandend(WINDOW*);               // start normal chars in window 
  321. _EXTERN  void wstandout(WINDOW*);               // start standout chars in window 
  322. _EXTERN  int  wtabsize(WINDOW*,int);            // set/get tabsize of a window 
  323. _EXTERN  int  wungetch(int);                    // character push-back 
  324. _EXTERN  void wputatpos(WINDOW*,int ,int,int);  // put a full character code back 
  325.  
  326. #define wgetatpos(win, y, x)    (*(win->_line[y] + x))
  327. _EXTERN  void wputatpos(WINDOW*,int,int,int);
  328.  
  329. //  End curses.h    
  330.