|
|
1.1 ! root 1: /* curses.h */ ! 2: ! 3: /* Author: ! 4: * Steve Kirkendall ! 5: * 14407 SW Teal Blvd. #C ! 6: * Beaverton, OR 97005 ! 7: * [email protected] ! 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: #define A_POPUP 5 ! 48: #define A_VISIBLE 6 ! 49: #define KBSIZ 4096 ! 50: ! 51: /* figure out how many function keys we need to allow. */ ! 52: #ifndef NO_FKEY ! 53: # ifdef NO_SHIFT_FKEY ! 54: # define NFKEYS 10 ! 55: # else ! 56: # ifdef NO_CTRL_FKEY ! 57: # define NFKEYS 20 ! 58: # else ! 59: # ifdef NO_ALT_FKEY ! 60: # define NFKEYS 30 ! 61: # else ! 62: # define NFKEYS 40 ! 63: # endif ! 64: # endif ! 65: # endif ! 66: extern char *FKEY[NFKEYS]; /* :k0=:...:k9=: codes sent by function keys */ ! 67: #endif ! 68: ! 69: /* extern variables, defined in curses.c */ ! 70: extern char *termtype; /* name of terminal entry */ ! 71: extern short ospeed; /* tty speed, eg B2400 */ ! 72: #if OSK ! 73: extern char PC_; /* Pad char */ ! 74: extern char *BC; /* Backspace char string */ ! 75: #else ! 76: extern char PC; /* Pad char */ ! 77: #endif ! 78: extern WINDOW *stdscr; /* pointer into kbuf[] */ ! 79: extern WINDOW kbuf[KBSIZ]; /* a very large output buffer */ ! 80: extern int LINES; /* :li#: number of rows */ ! 81: extern int COLS; /* :co#: number of columns */ ! 82: extern int AM; /* :am: boolean: auto margins? */ ! 83: extern int PT; /* :pt: boolean: physical tabs? */ ! 84: extern char *VB; /* :vb=: visible bell */ ! 85: extern char *UP; /* :up=: move cursor up */ ! 86: extern char *SO; /* :so=: standout start */ ! 87: extern char *SE; /* :se=: standout end */ ! 88: extern char *US; /* :us=: underline start */ ! 89: extern char *UE; /* :ue=: underline end */ ! 90: extern char *MD; /* :md=: bold start */ ! 91: extern char *ME; /* :me=: bold end */ ! 92: extern char *AS; /* :as=: alternate (italic) start */ ! 93: extern char *AE; /* :ae=: alternate (italic) end */ ! 94: #ifndef NO_VISIBLE ! 95: extern char *MV; /* :mv=: "visible" selection start */ ! 96: #endif ! 97: extern char *CM; /* :cm=: cursor movement */ ! 98: extern char *CE; /* :ce=: clear to end of line */ ! 99: extern char *CD; /* :cd=: clear to end of screen */ ! 100: extern char *AL; /* :al=: add a line */ ! 101: extern char *DL; /* :dl=: delete a line */ ! 102: #if OSK ! 103: extern char *SR_; /* :sr=: scroll reverse */ ! 104: #else ! 105: extern char *SR; /* :sr=: scroll reverse */ ! 106: #endif ! 107: extern char *KU; /* :ku=: sequence sent by up key */ ! 108: extern char *KD; /* :kd=: sequence sent by down key */ ! 109: extern char *KL; /* :kl=: sequence sent by left key */ ! 110: extern char *KR; /* :kr=: sequence sent by right key */ ! 111: extern char *PU; /* :PU=: key sequence sent by PgUp key */ ! 112: extern char *PD; /* :PD=: key sequence sent by PgDn key */ ! 113: extern char *HM; /* :HM=: key sequence sent by Home key */ ! 114: extern char *EN; /* :EN=: key sequence sent by End key */ ! 115: extern char *KI; /* :kI=: key sequence sent by Insert key */ ! 116: extern char *IM; /* :im=: insert mode start */ ! 117: extern char *IC; /* :ic=: insert following char */ ! 118: extern char *EI; /* :ei=: insert mode end */ ! 119: extern char *DC; /* :dc=: delete a character */ ! 120: extern char *TI; /* :ti=: terminal init */ /* GB */ ! 121: extern char *TE; /* :te=: terminal exit */ /* GB */ ! 122: #ifndef NO_CURSORSHAPE ! 123: extern char *CQ; /* :cQ=: normal cursor */ ! 124: extern char *CX; /* :cX=: cursor used for EX command/entry */ ! 125: extern char *CV; /* :cV=: cursor used for VI command mode */ ! 126: extern char *CI; /* :cI=: cursor used for VI input mode */ ! 127: extern char *CR; /* :cR=: cursor used for VI replace mode */ ! 128: #endif ! 129: extern char *aend; /* end an attribute -- either UE or ME */ ! 130: extern char ERASEKEY; /* taken from the ioctl structure */ ! 131: #ifndef NO_COLOR ! 132: extern char SOcolor[]; ! 133: extern char SEcolor[]; ! 134: extern char UScolor[]; ! 135: extern char UEcolor[]; ! 136: extern char MDcolor[]; ! 137: extern char MEcolor[]; ! 138: extern char AScolor[]; ! 139: extern char AEcolor[]; ! 140: # ifndef NO_POPUP ! 141: extern char POPUPcolor[]; ! 142: # endif ! 143: # ifndef NO_VISIBLE ! 144: extern char VISIBLEcolor[]; ! 145: # endif ! 146: extern char normalcolor[]; ! 147: #endif /* undef NO_COLOR */ ! 148: ! 149: /* Msdos-versions may use bios; others always termcap. ! 150: * Will emit some 'code has no effect' warnings in unix. ! 151: */ ! 152: ! 153: #if MSDOS ! 154: extern char o_pcbios[1]; /* BAH! */ ! 155: #define CHECKBIOS(x,y) (*o_pcbios ? (x) : (y)) ! 156: #define VOIDBIOS(x,y) {if (*o_pcbios) {x;} else {y;}} ! 157: #else ! 158: #define CHECKBIOS(x,y) (y) ! 159: #define VOIDBIOS(x,y) {y;} ! 160: #endif ! 161: ! 162: #ifndef NO_COLOR ! 163: # define setcolor(m,a) CHECKBIOS(bioscolor(m,a), ansicolor(m,a)) ! 164: # define fixcolor() VOIDBIOS(;, tputs(normalcolor, 1, faddch)) ! 165: # define quitcolor() CHECKBIOS(biosquit(), ansiquit()) ! 166: # define do_SO() VOIDBIOS((vmode=A_STANDOUT), tputs(SOcolor, 1, faddch)) ! 167: # define do_SE() VOIDBIOS((vmode=A_NORMAL), tputs(SEcolor, 1, faddch)) ! 168: # define do_US() VOIDBIOS((vmode=A_UNDERLINE), tputs(UScolor, 1, faddch)) ! 169: # define do_UE() VOIDBIOS((vmode=A_NORMAL), tputs(UEcolor, 1, faddch)) ! 170: # define do_MD() VOIDBIOS((vmode=A_BOLD), tputs(MDcolor, 1, faddch)) ! 171: # define do_ME() VOIDBIOS((vmode=A_NORMAL), tputs(MEcolor, 1, faddch)) ! 172: # define do_AS() VOIDBIOS((vmode=A_ALTCHARSET), tputs(AScolor, 1, faddch)) ! 173: # define do_AE() VOIDBIOS((vmode=A_NORMAL), tputs(AEcolor, 1, faddch)) ! 174: # define do_POPUP() VOIDBIOS((vmode=A_POPUP), tputs(POPUPcolor, 1, faddch)) ! 175: # define do_VISIBLE() VOIDBIOS((vmode=A_VISIBLE), tputs(VISIBLEcolor, 1, faddch)) ! 176: #else ! 177: # define do_SO() VOIDBIOS((vmode=A_STANDOUT), tputs(SO, 1, faddch)) ! 178: # define do_SE() VOIDBIOS((vmode=A_NORMAL), tputs(SE, 1, faddch)) ! 179: # define do_US() VOIDBIOS((vmode=A_UNDERLINE), tputs(US, 1, faddch)) ! 180: # define do_UE() VOIDBIOS((vmode=A_NORMAL), tputs(UE, 1, faddch)) ! 181: # define do_MD() VOIDBIOS((vmode=A_BOLD), tputs(MD, 1, faddch)) ! 182: # define do_ME() VOIDBIOS((vmode=A_NORMAL), tputs(ME, 1, faddch)) ! 183: # define do_AS() VOIDBIOS((vmode=A_ALTCHARSET), tputs(AS, 1, faddch)) ! 184: # define do_AE() VOIDBIOS((vmode=A_NORMAL), tputs(AE, 1, faddch)) ! 185: # define do_POPUP() VOIDBIOS((vmode=A_POPUP), tputs(SO, 1, faddch)) ! 186: # define do_VISIBLE() VOIDBIOS((vmode=A_VISIBLE), tputs(MV, 1, faddch)) ! 187: #endif ! 188: ! 189: #define do_VB() VOIDBIOS(;, tputs(VB, 1, faddch)) ! 190: #define do_UP() VOIDBIOS(v_up(), tputs(UP, 1, faddch)) ! 191: #undef do_CM /* move */ ! 192: #define do_CE() VOIDBIOS(v_ce(), tputs(CE, 1, faddch)) ! 193: #define do_CD() VOIDBIOS(v_cd(), tputs(CD, 1, faddch)) ! 194: #define do_AL() VOIDBIOS(v_al(), tputs(AL, LINES, faddch)) ! 195: #define do_DL() VOIDBIOS(v_dl(), tputs(DL, LINES, faddch)) ! 196: #if OSK ! 197: #define do_SR() VOIDBIOS(v_sr(), tputs(SR_, 1, faddch)) ! 198: #else ! 199: #define do_SR() VOIDBIOS(v_sr(), tputs(SR, 1, faddch)) ! 200: #endif ! 201: #define do_IM() VOIDBIOS(;, tputs(IM, 1, faddch)) ! 202: #define do_IC() VOIDBIOS(;, tputs(IC, 1, faddch)) ! 203: #define do_EI() VOIDBIOS(;, tputs(EI, 1, faddch)) ! 204: #define do_DC() VOIDBIOS(;, tputs(DC, COLS, faddch)) ! 205: #define do_TI() VOIDBIOS(;, (void)ttywrite(TI, (unsigned)strlen(TI))) ! 206: #define do_TE() VOIDBIOS(;, (void)ttywrite(TE, (unsigned)strlen(TE))) ! 207: #ifndef NO_CURSORSHAPE ! 208: # define do_CQ() VOIDBIOS(v_cs(), tputs(CQ, 1, faddch)) ! 209: # define do_CX() VOIDBIOS(v_cs(), tputs(CX, 1, faddch)) ! 210: # define do_CV() VOIDBIOS(v_cs(), tputs(CV, 1, faddch)) ! 211: # define do_CI() VOIDBIOS(v_cb(), tputs(CI, 1, faddch)) ! 212: # define do_CR() VOIDBIOS(v_cb(), tputs(CR, 1, faddch)) ! 213: #endif ! 214: #ifndef NO_COLOR ! 215: # define do_aend() VOIDBIOS((vmode=A_NORMAL), endcolor()) ! 216: #else ! 217: # define do_aend() VOIDBIOS((vmode=A_NORMAL), tputs(aend, 1, faddch)) ! 218: #endif ! 219: ! 220: #define has_AM CHECKBIOS(1, AM) ! 221: #define has_PT CHECKBIOS(0, PT) ! 222: #define has_VB CHECKBIOS((char *)0, VB) ! 223: #define has_UP CHECKBIOS((char *)1, UP) ! 224: #define has_SO CHECKBIOS((char)1, (*SO)) ! 225: #define has_SE CHECKBIOS((char)1, (*SE)) ! 226: #define has_US CHECKBIOS((char)1, (*US)) ! 227: #define has_UE CHECKBIOS((char)1, (*UE)) ! 228: #define has_MD CHECKBIOS((char)1, (*MD)) ! 229: #define has_ME CHECKBIOS((char)1, (*ME)) ! 230: #define has_AS CHECKBIOS((char)1, (*AS)) ! 231: #define has_AE CHECKBIOS((char)1, (*AE)) ! 232: #undef has_CM /* cursor move: don't need */ ! 233: #define has_CB CHECKBIOS(1, 0) ! 234: #define has_CS CHECKBIOS(1, 0) ! 235: #define has_CE CHECKBIOS((char *)1, CE) ! 236: #define has_CD CHECKBIOS((char *)1, CD) ! 237: #define has_AL CHECKBIOS((char *)1, AL) ! 238: #define has_DL CHECKBIOS((char *)1, DL) ! 239: #if OSK ! 240: #define has_SR CHECKBIOS((char *)1, SR_) ! 241: #else ! 242: #define has_SR CHECKBIOS((char *)1, SR) ! 243: #endif ! 244: #define has_KU KU ! 245: #define has_KD KD ! 246: #define has_KL KL ! 247: #define has_KR KR ! 248: #define has_HM HM ! 249: #define has_EN EN ! 250: #define has_PU PU ! 251: #define has_PD PD ! 252: #define has_KI KI ! 253: #define has_IM CHECKBIOS((char)0, (*IM)) ! 254: #define has_IC CHECKBIOS((char)0, (*IC)) ! 255: #define has_EI CHECKBIOS((char)0, (*EI)) ! 256: #define has_DC CHECKBIOS((char *)0, DC) ! 257: #define has_TI CHECKBIOS((char)0, (*TI)) ! 258: #define has_TE CHECKBIOS((char)0, (*TE)) ! 259: #ifndef NO_CURSORSHAPE ! 260: #define has_CQ CHECKBIOS((char *)1, CQ) ! 261: #endif ! 262: ! 263: /* (pseudo)-Curses-functions */ ! 264: ! 265: #ifdef lint ! 266: # define _addCR VOIDBIOS(;, (stdscr[-1] == '\n' ? qaddch('\r') : (stdscr[-1] = '\n'))) ! 267: #else ! 268: # if OSK ! 269: # define _addCR VOIDBIOS(;, (stdscr[-1] == '\n' ? qaddch('\l') : (stdscr[-1] = stdscr[-1]))) ! 270: # else ! 271: # define _addCR VOIDBIOS(;, (stdscr[-1] == '\n' ? qaddch('\r') : 0)) ! 272: # endif ! 273: #endif ! 274: ! 275: #ifdef AZTEC_C ! 276: # define qaddch(ch) CHECKBIOS(v_put(ch), (*stdscr = (ch), *stdscr++)) ! 277: #else ! 278: #define qaddch(ch) CHECKBIOS(v_put(ch), (*stdscr++ = (ch))) ! 279: #endif ! 280: ! 281: #if OSK ! 282: #define addch(ch) if (qaddch(ch) == '\n') qaddch('\l'); else ! 283: #else ! 284: #define addch(ch) if (qaddch(ch) == '\n') qaddch('\r'); else ! 285: #endif ! 286: ! 287: extern void initscr(); ! 288: extern void endwin(); ! 289: extern void suspend_curses(); ! 290: extern void resume_curses(); ! 291: extern void attrset(); ! 292: extern void insch(); ! 293: extern void qaddstr(); ! 294: extern void wrefresh(); ! 295: extern void wqrefresh(); ! 296: #define addstr(str) {qaddstr(str); _addCR;} ! 297: #define move(y,x) VOIDBIOS(v_move(x,y), tputs(tgoto(CM, x, y), 1, faddch)) ! 298: #define mvaddch(y,x,ch) {move(y,x); addch(ch);} ! 299: #define refresh() VOIDBIOS(;, wrefresh()) ! 300: #define standout() do_SO() ! 301: #define standend() do_SE() ! 302: #define clrtoeol() do_CE() ! 303: #define clrtobot() do_CD() ! 304: #define insertln() do_AL() ! 305: #define deleteln() do_DL() ! 306: #define delch() do_DC() ! 307: #define scrollok(w,b) ! 308: #define raw() ! 309: #define echo() ! 310: #define cbreak() ! 311: #define noraw() ! 312: #define noecho() ! 313: #define nocbreak()
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.