home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1708 / curses.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-28  |  7.7 KB  |  214 lines

  1. /* curses.h */
  2.  
  3. /* Author:
  4.  *    Steve Kirkendall
  5.  *    16820 SW Tallac Way
  6.  *    Beaverton, OR 97006
  7.  *    kirkenda@jove.cs.pdx.edu, or ...uunet!tektronix!psueea!jove!kirkenda
  8.  */
  9.  
  10.  
  11. /* This is the header file for a small, fast, fake curses package */
  12.  
  13. /* termcap stuff */
  14. extern char    *tgoto();
  15. extern char    *tgetstr();
  16. extern void    tputs();
  17.  
  18. #if MSDOS
  19. /* BIOS interface used instead of termcap for MS-DOS */
  20. extern int    vmode;
  21. extern void    v_up();
  22. extern void    v_cb();
  23. extern void    v_cs();
  24. extern void    v_ce();
  25. extern void    v_cl();
  26. extern void    v_cd();
  27. extern void    v_al();
  28. extern void    v_dl();
  29. extern void    v_sr();
  30. extern void    v_move();
  31. #endif
  32.  
  33. /* faddch() is a function.  a pointer to it is passed to tputs() */
  34. extern int    faddch();
  35.  
  36. /* data types */
  37. #define WINDOW    char
  38.  
  39. /* CONSTANTS & SYMBOLS */
  40. #define TRUE        1
  41. #define FALSE        0
  42. #define A_NORMAL    0
  43. #define A_STANDOUT    1
  44. #define A_BOLD        2
  45. #define A_UNDERLINE    3
  46. #define A_ALTCHARSET    4
  47. #if    MSDOS
  48. #define KBSIZ        (10*1024)
  49. #else
  50. #define KBSIZ        (6*1024)
  51. #endif
  52.  
  53. /* extern variables, defined in curses.c */
  54. extern short    ospeed;        /* tty speed, eg B2400 */
  55. extern char    PC;        /* Pad char */
  56. extern WINDOW    *stdscr;    /* pointer into kbuf[] */
  57. extern WINDOW    kbuf[KBSIZ];    /* a very large output buffer */
  58. extern int    LINES;        /* :li#: number of rows */
  59. extern int    COLS;        /* :co#: number of columns */
  60. extern int    AM;        /* :am:  boolean: auto margins? */
  61. extern int    PT;        /* :pt:  boolean: physical tabs? */
  62. extern char    *VB;        /* :vb=: visible bell */
  63. extern char    *UP;        /* :up=: move cursor up */
  64. extern char    *SO;        /* :so=: standout start */
  65. extern char    *SE;        /* :se=: standout end */
  66. extern char    *US;        /* :us=: underline start */
  67. extern char    *UE;        /* :ue=: underline end */
  68. extern char    *VB_s;        /* :VB=: bold start */
  69. extern char    *VB_e;        /* :Vb=: bold end */
  70. extern char    *AS;        /* :as=: alternate (italic) start */
  71. extern char    *AE;        /* :ae=: alternate (italic) end */
  72. extern char    *CM;        /* :cm=: cursor movement */
  73. extern char    *CE;        /* :ce=: clear to end of line */
  74. extern char    *CD;        /* :cd=: clear to end of screen */
  75. extern char    *AL;        /* :al=: add a line */
  76. extern char    *DL;        /* :dl=: delete a line */
  77. extern char    *SR;        /* :sr=: scroll reverse */
  78. extern char    *KU;        /* :ku=: sequence sent by up key */
  79. extern char    *KD;        /* :kd=: sequence sent by down key */
  80. extern char    *KL;        /* :kl=: sequence sent by left key */
  81. extern char    *KR;        /* :kr=: sequence sent by right key */
  82. extern char    *PU;        /* :PU=: key sequence sent by PgUp key */
  83. extern char    *PD;        /* :PD=: key sequence sent by PgDn key */
  84. extern char    *HM;        /* :HM=: key sequence sent by Home key */
  85. extern char    *EN;        /* :EN=: key sequence sent by End key */
  86. extern char    *IM;        /* :im=: insert mode start */
  87. extern char    *IC;        /* :ic=: insert following char */
  88. extern char    *EI;        /* :ei=: insert mode end */
  89. extern char    *DC;        /* :dc=: delete a character */
  90. extern char    *TI;        /* :ti=: terminal init */    /* GB */
  91. extern char    *TE;        /* :te=: terminal exit */    /* GB */
  92. #ifndef NO_CURSORSHAPE
  93. extern char    *CQ;        /* :cQ=: normal cursor */
  94. extern char    *CX;        /* :cX=: cursor used for EX command/entry */
  95. extern char    *CV;        /* :cV=: cursor used for VI command mode */
  96. extern char    *CI;        /* :cI=: cursor used for VI input mode */
  97. extern char    *CR;        /* :cR=: cursor used for VI replace mode */
  98. #endif
  99. extern char    *aend;        /* end an attribute -- either UE or VB_e */
  100. extern char    ERASEKEY;    /* taken from the ioctl structure */
  101.  
  102. /* Msdos-versions may use bios; others always termcap.
  103.  * Will emit some 'code has no effect' warnings in unix.
  104.  */
  105.  
  106. #if    MSDOS
  107. extern char o_pcbios[1];        /* BAH! */
  108. #define    CHECKBIOS(x,y)    (*o_pcbios ? (x) : (y))
  109. #define VOIDBIOS(x,y)    {if (*o_pcbios) {x;} else {y;}}
  110. #else
  111. #define    CHECKBIOS(x,y)    (y)
  112. #define VOIDBIOS(x,y)    {y;}
  113. #endif
  114.  
  115. #define    do_VB()        VOIDBIOS(0, tputs(VB, 1, faddch))
  116. #define    do_UP()        VOIDBIOS(v_up(), tputs(UP, 1, faddch))
  117. #define    do_SO()        VOIDBIOS((vmode=A_STANDOUT), tputs(SO, 1, faddch))
  118. #define    do_SE()        VOIDBIOS((vmode=A_NORMAL), tputs(SE, 1, faddch))
  119. #define    do_US()        VOIDBIOS((vmode=A_UNDERLINE), tputs(US, 1, faddch))
  120. #define    do_UE()        VOIDBIOS((vmode=A_NORMAL), tputs(UE, 1, faddch))
  121. #define    do_VB_s()    VOIDBIOS((vmode=A_BOLD), tputs(VB_s, 1, faddch))
  122. #define    do_VB_e()    VOIDBIOS((vmode=A_NORMAL), tputs(VB_e, 1, faddch))
  123. #define    do_AS()        VOIDBIOS((vmode=A_ALTCHARSET), tputs(AS, 1, faddch))
  124. #define    do_AE()        VOIDBIOS((vmode=A_NORMAL), tputs(AE, 1, faddch))
  125. #undef    do_CM        /* move */
  126. #define    do_CE()        VOIDBIOS(v_ce(), tputs(CE, 1, faddch))
  127. #define    do_CD()        VOIDBIOS(v_cd(), tputs(CD, 1, faddch))
  128. #define    do_AL()        VOIDBIOS(v_al(), tputs(AL, LINES, faddch))
  129. #define    do_DL()        VOIDBIOS(v_dl(), tputs(DL, LINES, faddch))
  130. #define    do_SR()        VOIDBIOS(v_sr(), tputs(SR, 1, faddch))
  131. #define    do_IM()        VOIDBIOS(0, tputs(IM, 1, faddch))
  132. #define    do_IC()        VOIDBIOS(0, tputs(IC, 1, faddch))
  133. #define    do_EI()        VOIDBIOS(0, tputs(EI, 1, faddch))
  134. #define    do_DC()        VOIDBIOS(0, tputs(DC, COLS, faddch))
  135. #define    do_TI()        VOIDBIOS(0, (void)ttywrite(TI, strlen(TI)))
  136. #define    do_TE()        VOIDBIOS(0, (void)ttywrite(TE, strlen(TE)))
  137. #ifndef NO_CURSORSHAPE
  138. # define do_CQ()    VOIDBIOS(v_cs(), tputs(CQ, 1, faddch))
  139. # define do_CX()    VOIDBIOS(v_cs(), tputs(CX, 1, faddch))
  140. # define do_CV()    VOIDBIOS(v_cs(), tputs(CV, 1, faddch))
  141. # define do_CI()    VOIDBIOS(v_cb(), tputs(CI, 1, faddch))
  142. # define do_CR()    VOIDBIOS(v_cb(), tputs(CR, 1, faddch))
  143. #endif
  144. #define    do_aend()    VOIDBIOS((vmode=A_NORMAL), tputs(aend, 1, faddch))
  145.  
  146. #define    has_AM        CHECKBIOS(1, AM)
  147. #define    has_PT        CHECKBIOS(0, PT)
  148. #define    has_VB        CHECKBIOS((char *)0, VB)
  149. #define    has_UP        CHECKBIOS((char *)1, UP)
  150. #define    has_SO        CHECKBIOS((char)1, (*SO))
  151. #define    has_SE        CHECKBIOS((char)1, (*SE))
  152. #define    has_US        CHECKBIOS((char)1, (*US))
  153. #define    has_UE        CHECKBIOS((char)1, (*UE))
  154. #define    has_VB_s    CHECKBIOS((char)1, (*VB_s))
  155. #define    has_VB_e    CHECKBIOS((char)1, (*VB_e))
  156. #define    has_AS        CHECKBIOS((char)1, (*AS))
  157. #define    has_AE        CHECKBIOS((char)1, (*AE))
  158. #undef    has_CM        /* cursor move: don't need */
  159. #define    has_CB        CHECKBIOS(1, 0)
  160. #define    has_CS        CHECKBIOS(1, 0)
  161. #define    has_CE        CHECKBIOS((char *)1, CE)
  162. #define    has_CD        CHECKBIOS((char *)1, CD)
  163. #define    has_AL        CHECKBIOS((char *)1, AL)
  164. #define    has_DL        CHECKBIOS((char *)1, DL)
  165. #define    has_SR        CHECKBIOS((char *)1, SR)
  166. #define    has_KU        CHECKBIOS("#H", KU)
  167. #define    has_KD        CHECKBIOS("#P", KD)
  168. #define    has_KL        CHECKBIOS("#K", KL)
  169. #define    has_KR        CHECKBIOS("#M", KR)
  170. #define has_HM        CHECKBIOS("#G", HM)
  171. #define has_EN        CHECKBIOS("#O", EN)
  172. #define has_PU        CHECKBIOS("#I", PU)
  173. #define has_PD        CHECKBIOS("#Q", PD)
  174. #define    has_IM        CHECKBIOS((char)0, (*IM))
  175. #define    has_IC        CHECKBIOS((char)0, (*IC))
  176. #define    has_EI        CHECKBIOS((char)0, (*EI))
  177. #define    has_DC        CHECKBIOS((char *)0, DC)
  178. #define    has_TI        CHECKBIOS((char)0, (*TI))
  179. #define    has_TE        CHECKBIOS((char)0, (*TE))
  180. #ifndef NO_CURSORSHAPE
  181. #define has_CQ        CHECKBIOS((char *)1, CQ)
  182. #endif
  183.  
  184. /* (pseudo)-Curses-functions */
  185.  
  186. #define _addCR        (void)CHECKBIOS(0, (stdscr[-1] == '\n' ? qaddch('\r') : 0))
  187. #define qaddch(ch)    CHECKBIOS(v_put(ch), (*stdscr++ = (ch)))
  188. #define addch(ch)    if (qaddch(ch) == '\n') qaddch('\r'); else
  189.  
  190. extern void attrset();
  191. extern void insch();
  192. extern void qaddstr();
  193. #define addstr(str)    {qaddstr(str); _addCR;}
  194. #define move(y,x)    VOIDBIOS(v_move(x,y), \
  195.                     tputs(tgoto(CM, x, y), 1, faddch))
  196. #define mvaddch(y,x,ch)    {move(y,x); addch(ch);}
  197. #define refresh()    VOIDBIOS(0, wrefresh(stdscr))
  198. #define wrefresh(w)    if ((w) != kbuf) VOIDBIOS((w) = kbuf, {ttywrite(kbuf, (int)((w) - kbuf)); (w) = kbuf;}) else
  199. #define wqrefresh(w)    if ((w) - kbuf > 2000) VOIDBIOS((w) = kbuf, {ttywrite(kbuf, (int)((w) - kbuf)); (w) = kbuf;}) else
  200. #define standout()    do_SO()
  201. #define standend()    do_SE()
  202. #define clrtoeol()    do_CE()
  203. #define clrtobot()    do_CD()
  204. #define insertln()    do_AL()
  205. #define deleteln()    do_DL()
  206. #define delch()        do_DC()
  207. #define scrollok(w,b)
  208. #define raw()
  209. #define echo()
  210. #define cbreak()
  211. #define noraw()
  212. #define noecho()
  213. #define nocbreak()
  214.