home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / elvis184.zip / src / curses.h < prev    next >
C/C++ Source or Header  |  1995-05-26  |  12KB  |  371 lines

  1. /* curses.h */
  2.  
  3. /* Author:
  4.  *    Steve Kirkendall
  5.  *    1500 SW Park #326
  6.  *    Portland OR, 97201
  7.  *    kirkenda@cs.pdx.edu
  8.  */
  9.  
  10.  
  11. /* This is the header file for a small, fast, fake curses package */
  12.  
  13. /* termcap stuff */
  14. extern char    *tgoto P_((char *, int, int));
  15. extern char    *tgetstr P_((char*, char**));
  16. extern void    tputs P_((char *, int, int (*)()));
  17.  
  18. #if MSDOS
  19. /* BIOS interface used instead of termcap for MS-DOS */
  20. extern int    vmode;
  21. extern void    v_up P_((void));
  22. extern void    v_cb P_((void));
  23. extern void    v_cs P_((void));
  24. extern void    v_ce P_((void));
  25. extern void    v_cl P_((void));
  26. extern void    v_cd P_((void));
  27. extern void    v_al P_((void));
  28. extern void    v_dl P_((void));
  29. extern void    v_sr P_((void));
  30. extern void    v_move P_((int, int));
  31. extern int    v_cols P_((void));
  32. extern int    v_rows P_((void));
  33. #endif
  34.  
  35. #if OS2
  36. extern void    v_sr P_((void));
  37. extern void    audible_beep P_((void));
  38. extern void    v_vio_init P_((void));
  39. extern void    v_vio_restore P_((void));
  40. extern void    v_cb P_((void));
  41. extern void    v_cs P_((void));
  42. #endif
  43.  
  44. /* faddch() is a function.  a pointer to it is passed to tputs() */
  45. extern int    faddch P_((int));
  46.  
  47. /* data types */
  48. #define WINDOW    char
  49.  
  50. /* CONSTANTS & SYMBOLS */
  51. #define TRUE        1
  52. #define FALSE        0
  53. #define A_NORMAL    0
  54. #define A_STANDOUT    1
  55. #define A_BOLD        2
  56. #define A_QUIT        3
  57. #define A_UNDERLINE    4
  58. #define A_ALTCHARSET    5
  59. #define A_POPUP        6
  60. #define A_VISIBLE    7
  61. #define KBSIZ        4096
  62.  
  63. /* figure out how many function keys we need to allow. */
  64. #ifndef NO_FKEY
  65. # ifdef NO_SHIFT_FKEY
  66. #  define    NFKEYS    10
  67. # else
  68. #  ifdef NO_CTRL_FKEY
  69. #   define    NFKEYS    20
  70. #  else
  71. #   ifdef NO_ALT_FKEY
  72. #    define    NFKEYS    30
  73. #   else
  74. #    define    NFKEYS    40
  75. #   endif
  76. #  endif
  77. # endif
  78. extern char    *FKEY[NFKEYS];    /* :k0=:...:k9=: codes sent by function keys */
  79. #endif
  80.  
  81. /* extern variables, defined in curses.c */
  82. extern char    *termtype;    /* name of terminal entry */
  83. #if TERMIOS
  84. extern speed_t    ospeed;        /* tty speed, eg B2400 */
  85. #else
  86. extern short    ospeed;        /* tty speed, eg B2400 */
  87. #endif
  88. #if OSK
  89. extern char PC_;    /* Pad char */
  90. extern char    *BC;    /* Backspace char string */
  91. #else
  92. extern char    PC;        /* Pad char */
  93. #endif
  94. extern WINDOW    *stdscr;    /* pointer into kbuf[] */
  95. extern WINDOW    kbuf[KBSIZ];    /* a very large output buffer */
  96. extern int    LINES;        /* :li#: number of rows */
  97. extern int    COLS;        /* :co#: number of columns */
  98. extern int    AM;        /* :am:  boolean: auto margins? */
  99. extern int    PT;        /* :pt:  boolean: physical tabs? */
  100. extern char    *VB;        /* :vb=: visible bell */
  101. extern char    *UP;        /* :up=: move cursor up */
  102. extern char    *SO;        /* :so=: standout start */
  103. extern char    *SE;        /* :se=: standout end */
  104. extern char    *US;        /* :us=: underline start */
  105. extern char    *UE;        /* :ue=: underline end */
  106. extern char    *MD;        /* :md=: bold start */
  107. extern char    *ME;        /* :me=: bold end */
  108. extern char    *AS;        /* :as=: alternate (italic) start */
  109. extern char    *AE;        /* :ae=: alternate (italic) end */
  110. #ifndef NO_VISIBLE
  111. extern char    *MV;        /* :mv=: "visible" selection start */
  112. #endif
  113. extern char    *CM;        /* :cm=: cursor movement */
  114. extern char    *CE;        /* :ce=: clear to end of line */
  115. extern char    *CD;        /* :cd=: clear to end of screen */
  116. extern char    *AL;        /* :al=: add a line */
  117. extern char    *DL;        /* :dl=: delete a line */
  118. #if OSK
  119. extern char    *SR_;        /* :sr=: scroll reverse */
  120. #else
  121. extern char    *SR;        /* :sr=: scroll reverse */
  122. #endif
  123. extern char    *KS;        /* :ks=: init string for cursor */
  124. extern char    *KE;        /* :ke=: restore string for cursor */
  125. extern char    *KU;        /* :ku=: sequence sent by up key */
  126. extern char    *KD;        /* :kd=: sequence sent by down key */
  127. extern char    *KL;        /* :kl=: sequence sent by left key */
  128. extern char    *KR;        /* :kr=: sequence sent by right key */
  129. extern char    *PU;        /* :PU=: key sequence sent by PgUp key */
  130. extern char    *PD;        /* :PD=: key sequence sent by PgDn key */
  131. extern char    *HM;        /* :HM=: key sequence sent by Home key */
  132. extern char    *EN;        /* :EN=: key sequence sent by End key */
  133. extern char    *KI;        /* :kI=: key sequence sent by Insert key */
  134. extern char    *kDel;        /* :kD=: key sequence sent by Delete key */
  135. extern char    *IM;        /* :im=: insert mode start */
  136. extern char    *IC;        /* :ic=: insert following char */
  137. extern char    *EI;        /* :ei=: insert mode end */
  138. extern char    *DC;        /* :dc=: delete a character */
  139. extern char    *TI;        /* :ti=: terminal init */    /* GB */
  140. extern char    *TE;        /* :te=: terminal exit */    /* GB */
  141. #ifndef NO_CURSORSHAPE
  142. extern char    *CQ;        /* :cQ=: normal cursor */
  143. extern char    *CX;        /* :cX=: cursor used for EX command/entry */
  144. extern char    *CV;        /* :cV=: cursor used for VI command mode */
  145. extern char    *CI;        /* :cI=: cursor used for VI input mode */
  146. extern char    *CR;        /* :cR=: cursor used for VI replace mode */
  147. #endif
  148. extern char    *aend;        /* end an attribute -- either UE or ME */
  149. extern char    ERASEKEY;    /* taken from the ioctl structure */
  150. #ifndef NO_COLOR
  151. extern char    SOcolor[];
  152. extern char    SEcolor[];
  153. extern char    UScolor[];
  154. extern char    UEcolor[];
  155. extern char    MDcolor[];
  156. extern char    MEcolor[];
  157. extern char    AScolor[];
  158. extern char    AEcolor[];
  159. extern char    Qcolor[];
  160. # ifndef NO_POPUP
  161. extern char    POPUPcolor[];
  162. # endif
  163. # ifndef NO_VISIBLE
  164. extern char    VISIBLEcolor[];
  165. # endif
  166. extern char    normalcolor[];
  167. #endif /* undef NO_COLOR */
  168.  
  169. extern int canvi;    /* boolean: know enough to support visual mode? */
  170.  
  171. /* Msdos-versions may use bios; others always termcap.
  172.  * Will emit some 'code has no effect' warnings in unix.
  173.  */
  174.  
  175. #if MSDOS
  176. extern char o_pcbios[1];        /* BAH! */
  177. #define    CHECKBIOS(x,y)    (*o_pcbios ? (x) : (y))
  178. #define VOIDBIOS(x,y)    {if (*o_pcbios) {x;} else {y;}}
  179. #else
  180. #define    CHECKBIOS(x,y)    (y)
  181. #define VOIDBIOS(x,y)    {y;}
  182. #endif
  183.  
  184. #ifndef NO_COLOR
  185. extern int    bioscolor P_((int,int));
  186. extern int    biosquit P_((void));
  187. # define setcolor(m,a)    CHECKBIOS(bioscolor(m,a), ansicolor(m,a))
  188. # define fixcolor()    VOIDBIOS(;, tputs(normalcolor, 1, faddch))
  189. # define quitcolor()    CHECKBIOS(biosquit(), ansiquit())
  190. # define do_SO()    VOIDBIOS((vmode=A_STANDOUT), tputs(SOcolor, 1, faddch))
  191. # define do_SE()    VOIDBIOS((vmode=A_NORMAL), tputs(SEcolor, 1, faddch))
  192. # define do_US()    VOIDBIOS((vmode=A_UNDERLINE), tputs(UScolor, 1, faddch))
  193. # define do_UE()    VOIDBIOS((vmode=A_NORMAL), tputs(UEcolor, 1, faddch))
  194. # define do_MD()    VOIDBIOS((vmode=A_BOLD), tputs(MDcolor, 1, faddch))
  195. # define do_ME()    VOIDBIOS((vmode=A_NORMAL), tputs(MEcolor, 1, faddch))
  196. # define do_AS()    VOIDBIOS((vmode=A_ALTCHARSET), tputs(AScolor, 1, faddch))
  197. # define do_AE()    VOIDBIOS((vmode=A_NORMAL), tputs(AEcolor, 1, faddch))
  198. # define do_POPUP()    VOIDBIOS((vmode=A_POPUP), tputs(POPUPcolor, 1, faddch))
  199. # define do_VISIBLE()    VOIDBIOS((vmode=A_VISIBLE), tputs(VISIBLEcolor, 1, faddch))
  200. #else
  201. # define do_SO()    VOIDBIOS((vmode=A_STANDOUT), tputs(SO, 1, faddch))
  202. # define do_SE()    VOIDBIOS((vmode=A_NORMAL), tputs(SE, 1, faddch))
  203. # define do_US()    VOIDBIOS((vmode=A_UNDERLINE), tputs(US, 1, faddch))
  204. # define do_UE()    VOIDBIOS((vmode=A_NORMAL), tputs(UE, 1, faddch))
  205. # define do_MD()    VOIDBIOS((vmode=A_BOLD), tputs(MD, 1, faddch))
  206. # define do_ME()    VOIDBIOS((vmode=A_NORMAL), tputs(ME, 1, faddch))
  207. # define do_AS()    VOIDBIOS((vmode=A_ALTCHARSET), tputs(AS, 1, faddch))
  208. # define do_AE()    VOIDBIOS((vmode=A_NORMAL), tputs(AE, 1, faddch))
  209. # define do_POPUP()    VOIDBIOS((vmode=A_POPUP), tputs(SO, 1, faddch))
  210. # define do_VISIBLE()    VOIDBIOS((vmode=A_VISIBLE), tputs(MV, 1, faddch))
  211. #endif
  212.  
  213. #define    do_VB()        VOIDBIOS(;, tputs(VB, 1, faddch))
  214. #define    do_UP()        VOIDBIOS(v_up(), tputs(UP, 1, faddch))
  215. #undef    do_CM        /* move */
  216. #define    do_CE()        VOIDBIOS(v_ce(), tputs(CE, 1, faddch))
  217. #define    do_CD()        VOIDBIOS(v_cd(), tputs(CD, 1, faddch))
  218. #define    do_AL()        VOIDBIOS(v_al(), tputs(AL, LINES, faddch))
  219. #define    do_DL()        VOIDBIOS(v_dl(), tputs(DL, LINES, faddch))
  220. #if OS2
  221. # define do_SR()    if (*o_viomode) v_sr(); else tputs(SR, 1, faddch)
  222. #else
  223. # if OSK
  224. #  define do_SR()    VOIDBIOS(v_sr(), tputs(SR_, 1, faddch))
  225. # else
  226. #  define do_SR()    VOIDBIOS(v_sr(), tputs(SR, 1, faddch))
  227. # endif
  228. #endif
  229. #define do_KS()        VOIDBIOS(1, tputs(KS, 1, faddch))
  230. #define do_KE()        VOIDBIOS(1, tputs(KE, 1, faddch))
  231. #define    do_IM()        VOIDBIOS(;, tputs(IM, 1, faddch))
  232. #define    do_IC()        VOIDBIOS(;, tputs(IC, 1, faddch))
  233. #define    do_EI()        VOIDBIOS(;, tputs(EI, 1, faddch))
  234. #define    do_DC()        VOIDBIOS(;, tputs(DC, COLS, faddch))
  235. #define    do_TI()        VOIDBIOS(;, (void)ttywrite(TI, (unsigned)strlen(TI)))
  236. #define    do_TE()        VOIDBIOS(;, (void)ttywrite(TE, (unsigned)strlen(TE)))
  237. #ifndef NO_CURSORSHAPE
  238. # if OS2
  239. #  define do_CQ()    if (*o_viomode) v_cs(); else tputs(CQ, 1, faddch)
  240. #  define do_CX()    if (*o_viomode) v_cs(); else tputs(CX, 1, faddch)
  241. #  define do_CV()    if (*o_viomode) v_cs(); else tputs(CV, 1, faddch)
  242. #  define do_CI()    if (*o_viomode) v_cb(); else tputs(CI, 1, faddch)
  243. #  define do_CR()    if (*o_viomode) v_cb(); else tputs(CR, 1, faddch)
  244. # else
  245. #  define do_CQ()    VOIDBIOS(v_cs(), tputs(CQ, 1, faddch))
  246. #  define do_CX()    VOIDBIOS(v_cs(), tputs(CX, 1, faddch))
  247. #  define do_CV()    VOIDBIOS(v_cs(), tputs(CV, 1, faddch))
  248. #  define do_CI()    VOIDBIOS(v_cb(), tputs(CI, 1, faddch))
  249. #  define do_CR()    VOIDBIOS(v_cb(), tputs(CR, 1, faddch))
  250. # endif
  251. #endif
  252. #ifndef NO_COLOR
  253. # define do_aend()    VOIDBIOS((vmode=A_NORMAL), endcolor())
  254. #else
  255. # define do_aend()    VOIDBIOS((vmode=A_NORMAL), tputs(aend, 1, faddch))
  256. #endif
  257.  
  258. #define    has_AM        CHECKBIOS(1, AM)
  259. #define    has_PT        CHECKBIOS(0, PT)
  260. #define    has_VB        CHECKBIOS((char *)0, VB)
  261. #define    has_UP        CHECKBIOS((char *)1, UP)
  262. #define    has_SO        CHECKBIOS((char)1, (*SO))
  263. #define    has_SE        CHECKBIOS((char)1, (*SE))
  264. #define    has_US        CHECKBIOS((char)1, (*US))
  265. #define    has_UE        CHECKBIOS((char)1, (*UE))
  266. #define    has_MD        CHECKBIOS((char)1, (*MD))
  267. #define    has_ME        CHECKBIOS((char)1, (*ME))
  268. #define    has_AS        CHECKBIOS((char)1, (*AS))
  269. #define    has_AE        CHECKBIOS((char)1, (*AE))
  270. #undef    has_CM        /* cursor move: don't need */
  271. #define    has_CB        CHECKBIOS(1, 0)
  272. #define    has_CS        CHECKBIOS(1, 0)
  273. #define    has_CE        CHECKBIOS((char *)1, CE)
  274. #define    has_CD        CHECKBIOS((char *)1, CD)
  275. #define    has_AL        CHECKBIOS((char *)1, AL)
  276. #define    has_DL        CHECKBIOS((char *)1, DL)
  277. #if OS2
  278. # define has_SR        (*o_viomode? (char *)1 : SR)
  279. #else
  280. # if OSK
  281. #  define has_SR    CHECKBIOS((char *)1, SR_)
  282. # else
  283. #  define has_SR    CHECKBIOS((char *)1, SR)
  284. # endif
  285. #endif
  286. #define has_KS        CHECKBIOS((char)1, (*KS))
  287. #define has_KE        CHECKBIOS((char)1, (*KE))
  288. #define    has_KU        KU
  289. #define    has_KD        KD
  290. #define    has_KL        KL
  291. #define    has_KR        KR
  292. #define has_HM        HM
  293. #define has_EN        EN
  294. #define has_PU        PU
  295. #define has_PD        PD
  296. #define has_KI        KI
  297. #define has_kD        kDel
  298. #define    has_IM        CHECKBIOS((char)0, (*IM))
  299. #define    has_IC        CHECKBIOS((char)0, (*IC))
  300. #define    has_EI        CHECKBIOS((char)0, (*EI))
  301. #define    has_DC        CHECKBIOS((char *)0, DC)
  302. #define    has_TI        CHECKBIOS((char)0, (*TI))
  303. #define    has_TE        CHECKBIOS((char)0, (*TE))
  304. #ifndef NO_CURSORSHAPE
  305. # if OS2
  306. #  define has_CQ    (*o_viomode? (char *)1 : CQ)
  307. # else
  308. #  define has_CQ    CHECKBIOS((char *)1, CQ)
  309. # endif
  310. #endif
  311.  
  312. #if OS2
  313. # define do_beep()    if (*o_viomode) audible_beep(); else ttywrite("\007",1)
  314. #else
  315. # define do_beep()    ttywrite("\007",1)
  316. #endif
  317.  
  318. /* (pseudo)-Curses-functions */
  319.  
  320. #ifdef lint
  321. # define _addCR        VOIDBIOS(;, (stdscr[-1] == '\n' ? qaddch('\r') : (stdscr[-1] = '\n')))
  322. #else
  323. # if OSK
  324. #  define _addCR    VOIDBIOS(;, (stdscr[-1] == '\n' ? qaddch('\l') : (stdscr[-1] = stdscr[-1])))
  325. # else
  326. #  define _addCR    VOIDBIOS(;, (stdscr[-1] == '\n' ? qaddch('\r') : 0))
  327. # endif
  328. #endif
  329.  
  330. extern    int    v_put P_((int));
  331. #ifdef AZTEC_C
  332. # define qaddch(ch)    CHECKBIOS(v_put(ch), (*stdscr = (ch), *stdscr++))
  333. #else
  334. #define qaddch(ch)    CHECKBIOS(v_put(ch), (*stdscr++ = (ch)))
  335. #endif
  336.  
  337. #if OSK
  338. #define addch(ch)    if (qaddch(ch) == '\n') qaddch('\l'); else
  339. #else
  340. #define addch(ch)    if (qaddch(ch) == '\n') qaddch('\r'); else
  341. #endif
  342.  
  343. extern void initscr P_((void));
  344. extern void endwin P_((void));
  345. extern void suspend_curses P_((void));
  346. extern void resume_curses P_((int));
  347. extern void attrset P_((int));
  348. extern void insch P_((int));
  349. extern void qaddstr P_((char *));
  350. extern void wrefresh P_((void));
  351. extern void wqrefresh P_((void));
  352. extern SIGTYPE getsize();
  353. #define addstr(str)    {qaddstr(str); _addCR;}
  354. #define move(y,x)    VOIDBIOS(v_move(x,y), tputs(tgoto(CM, x, y), 1, faddch))
  355. #define mvaddch(y,x,ch)    {move(y,x); addch(ch);}
  356. #define refresh()    VOIDBIOS(;, wrefresh())
  357. #define standout()    do_SO()
  358. #define standend()    do_SE()
  359. #define clrtoeol()    do_CE()
  360. #define clrtobot()    do_CD()
  361. #define insertln()    do_AL()
  362. #define deleteln()    do_DL()
  363. #define delch()        do_DC()
  364. #define scrollok(w,b)
  365. #define raw()
  366. #define echo()
  367. #define cbreak()
  368. #define noraw()
  369. #define noecho()
  370. #define nocbreak()
  371.