320 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* curses.h */
 | |
| 
 | |
| /* Author:
 | |
|  *	Steve Kirkendall
 | |
|  *	14407 SW Teal Blvd. #C
 | |
|  *	Beaverton, OR 97005
 | |
|  *	kirkenda@cs.pdx.edu
 | |
|  */
 | |
| 
 | |
| 
 | |
| /* This is the header file for a small, fast, fake curses package */
 | |
| 
 | |
| /* termcap stuff */
 | |
| extern char	*tgoto();
 | |
| extern char	*tgetstr();
 | |
| extern void	tputs();
 | |
| 
 | |
| #if MSDOS
 | |
| /* BIOS interface used instead of termcap for MS-DOS */
 | |
| extern int	vmode;
 | |
| extern void	v_up();
 | |
| extern void	v_cb();
 | |
| extern void	v_cs();
 | |
| extern void	v_ce();
 | |
| extern void	v_cl();
 | |
| extern void	v_cd();
 | |
| extern void	v_al();
 | |
| extern void	v_dl();
 | |
| extern void	v_sr();
 | |
| extern void	v_move();
 | |
| #endif
 | |
| 
 | |
| /* faddch() is a function.  a pointer to it is passed to tputs() */
 | |
| extern int	faddch();
 | |
| 
 | |
| /* data types */
 | |
| #define WINDOW	char
 | |
| 
 | |
| /* CONSTANTS & SYMBOLS */
 | |
| #define TRUE		1
 | |
| #define FALSE		0
 | |
| #define A_NORMAL	0
 | |
| #define A_STANDOUT	1
 | |
| #define A_BOLD		2
 | |
| #define A_UNDERLINE	3
 | |
| #define A_ALTCHARSET	4
 | |
| #define A_POPUP		5
 | |
| #define A_VISIBLE	6
 | |
| #define KBSIZ		4096
 | |
| 
 | |
| /* figure out how many function keys we need to allow. */
 | |
| #ifndef NO_FKEY
 | |
| # ifdef NO_SHIFT_FKEY
 | |
| #  define	NFKEYS	10
 | |
| # else
 | |
| #  ifdef NO_CTRL_FKEY
 | |
| #   define	NFKEYS	20
 | |
| #  else
 | |
| #   ifdef NO_ALT_FKEY
 | |
| #    define	NFKEYS	30
 | |
| #   else
 | |
| #    define	NFKEYS	40
 | |
| #   endif
 | |
| #  endif
 | |
| # endif
 | |
| extern char	*FKEY[NFKEYS];	/* :k0=:...:k9=: codes sent by function keys */
 | |
| #endif
 | |
| 
 | |
| /* extern variables, defined in curses.c */
 | |
| extern char	*termtype;	/* name of terminal entry */
 | |
| extern short	ospeed;		/* tty speed, eg B2400 */
 | |
| #if OSK
 | |
| extern char PC_;	/* Pad char */
 | |
| extern char	*BC;	/* Backspace char string */
 | |
| #else
 | |
| extern char	PC;		/* Pad char */
 | |
| #endif
 | |
| extern WINDOW	*stdscr;	/* pointer into kbuf[] */
 | |
| extern WINDOW	kbuf[KBSIZ];	/* a very large output buffer */
 | |
| extern int	LINES;		/* :li#: number of rows */
 | |
| extern int	COLS;		/* :co#: number of columns */
 | |
| extern int	AM;		/* :am:  boolean: auto margins? */
 | |
| extern int	PT;		/* :pt:  boolean: physical tabs? */
 | |
| extern char	*VB;		/* :vb=: visible bell */
 | |
| extern char	*UP;		/* :up=: move cursor up */
 | |
| extern char	*SO;		/* :so=: standout start */
 | |
| extern char	*SE;		/* :se=: standout end */
 | |
| extern char	*US;		/* :us=: underline start */
 | |
| extern char	*UE;		/* :ue=: underline end */
 | |
| extern char	*MD;		/* :md=: bold start */
 | |
| extern char	*ME;		/* :me=: bold end */
 | |
| extern char	*AS;		/* :as=: alternate (italic) start */
 | |
| extern char	*AE;		/* :ae=: alternate (italic) end */
 | |
| #ifndef NO_VISIBLE
 | |
| extern char	*MV;		/* :mv=: "visible" selection start */
 | |
| #endif
 | |
| extern char	*CM;		/* :cm=: cursor movement */
 | |
| extern char	*CE;		/* :ce=: clear to end of line */
 | |
| extern char	*CD;		/* :cd=: clear to end of screen */
 | |
| extern char	*AL;		/* :al=: add a line */
 | |
| extern char	*DL;		/* :dl=: delete a line */
 | |
| #if OSK
 | |
| extern char	*SR_;		/* :sr=: scroll reverse */
 | |
| #else
 | |
| extern char	*SR;		/* :sr=: scroll reverse */
 | |
| #endif
 | |
| extern char	*KS;		/* :ks=: init string for cursor */
 | |
| extern char	*KE;		/* :ke=: restore string for cursor */
 | |
| extern char	*KU;		/* :ku=: sequence sent by up key */
 | |
| extern char	*KD;		/* :kd=: sequence sent by down key */
 | |
| extern char	*KL;		/* :kl=: sequence sent by left key */
 | |
| extern char	*KR;		/* :kr=: sequence sent by right key */
 | |
| extern char	*PU;		/* :PU=: key sequence sent by PgUp key */
 | |
| extern char	*PD;		/* :PD=: key sequence sent by PgDn key */
 | |
| extern char	*HM;		/* :HM=: key sequence sent by Home key */
 | |
| extern char	*EN;		/* :EN=: key sequence sent by End key */
 | |
| extern char	*KI;		/* :kI=: key sequence sent by Insert key */
 | |
| extern char	*IM;		/* :im=: insert mode start */
 | |
| extern char	*IC;		/* :ic=: insert following char */
 | |
| extern char	*EI;		/* :ei=: insert mode end */
 | |
| extern char	*DC;		/* :dc=: delete a character */
 | |
| extern char	*TI;		/* :ti=: terminal init */	/* GB */
 | |
| extern char	*TE;		/* :te=: terminal exit */	/* GB */
 | |
| #ifndef NO_CURSORSHAPE
 | |
| extern char	*CQ;		/* :cQ=: normal cursor */
 | |
| extern char	*CX;		/* :cX=: cursor used for EX command/entry */
 | |
| extern char	*CV;		/* :cV=: cursor used for VI command mode */
 | |
| extern char	*CI;		/* :cI=: cursor used for VI input mode */
 | |
| extern char	*CR;		/* :cR=: cursor used for VI replace mode */
 | |
| #endif
 | |
| extern char	*aend;		/* end an attribute -- either UE or ME */
 | |
| extern char	ERASEKEY;	/* taken from the ioctl structure */
 | |
| #ifndef NO_COLOR
 | |
| extern char	SOcolor[];
 | |
| extern char	SEcolor[];
 | |
| extern char	UScolor[];
 | |
| extern char	UEcolor[];
 | |
| extern char	MDcolor[];
 | |
| extern char	MEcolor[];
 | |
| extern char	AScolor[];
 | |
| extern char	AEcolor[];
 | |
| # ifndef NO_POPUP
 | |
| extern char	POPUPcolor[];
 | |
| # endif
 | |
| # ifndef NO_VISIBLE
 | |
| extern char	VISIBLEcolor[];
 | |
| # endif
 | |
| extern char	normalcolor[];
 | |
| #endif /* undef NO_COLOR */
 | |
| 
 | |
| /* Msdos-versions may use bios; others always termcap.
 | |
|  * Will emit some 'code has no effect' warnings in unix.
 | |
|  */
 | |
|  
 | |
| #if MSDOS
 | |
| extern char o_pcbios[1];		/* BAH! */
 | |
| #define	CHECKBIOS(x,y)	(*o_pcbios ? (x) : (y))
 | |
| #define VOIDBIOS(x,y)	{if (*o_pcbios) {x;} else {y;}}
 | |
| #else
 | |
| #define	CHECKBIOS(x,y)	(y)
 | |
| #define VOIDBIOS(x,y)	{y;}
 | |
| #endif
 | |
| 
 | |
| #ifndef NO_COLOR
 | |
| # define setcolor(m,a)	CHECKBIOS(bioscolor(m,a), ansicolor(m,a))
 | |
| # define fixcolor()	VOIDBIOS(;, tputs(normalcolor, 1, faddch))
 | |
| # define quitcolor()	CHECKBIOS(biosquit(), ansiquit())
 | |
| # define do_SO()	VOIDBIOS((vmode=A_STANDOUT), tputs(SOcolor, 1, faddch))
 | |
| # define do_SE()	VOIDBIOS((vmode=A_NORMAL), tputs(SEcolor, 1, faddch))
 | |
| # define do_US()	VOIDBIOS((vmode=A_UNDERLINE), tputs(UScolor, 1, faddch))
 | |
| # define do_UE()	VOIDBIOS((vmode=A_NORMAL), tputs(UEcolor, 1, faddch))
 | |
| # define do_MD()	VOIDBIOS((vmode=A_BOLD), tputs(MDcolor, 1, faddch))
 | |
| # define do_ME()	VOIDBIOS((vmode=A_NORMAL), tputs(MEcolor, 1, faddch))
 | |
| # define do_AS()	VOIDBIOS((vmode=A_ALTCHARSET), tputs(AScolor, 1, faddch))
 | |
| # define do_AE()	VOIDBIOS((vmode=A_NORMAL), tputs(AEcolor, 1, faddch))
 | |
| # define do_POPUP()	VOIDBIOS((vmode=A_POPUP), tputs(POPUPcolor, 1, faddch))
 | |
| # define do_VISIBLE()	VOIDBIOS((vmode=A_VISIBLE), tputs(VISIBLEcolor, 1, faddch))
 | |
| #else
 | |
| # define do_SO()	VOIDBIOS((vmode=A_STANDOUT), tputs(SO, 1, faddch))
 | |
| # define do_SE()	VOIDBIOS((vmode=A_NORMAL), tputs(SE, 1, faddch))
 | |
| # define do_US()	VOIDBIOS((vmode=A_UNDERLINE), tputs(US, 1, faddch))
 | |
| # define do_UE()	VOIDBIOS((vmode=A_NORMAL), tputs(UE, 1, faddch))
 | |
| # define do_MD()	VOIDBIOS((vmode=A_BOLD), tputs(MD, 1, faddch))
 | |
| # define do_ME()	VOIDBIOS((vmode=A_NORMAL), tputs(ME, 1, faddch))
 | |
| # define do_AS()	VOIDBIOS((vmode=A_ALTCHARSET), tputs(AS, 1, faddch))
 | |
| # define do_AE()	VOIDBIOS((vmode=A_NORMAL), tputs(AE, 1, faddch))
 | |
| # define do_POPUP()	VOIDBIOS((vmode=A_POPUP), tputs(SO, 1, faddch))
 | |
| # define do_VISIBLE()	VOIDBIOS((vmode=A_VISIBLE), tputs(MV, 1, faddch))
 | |
| #endif
 | |
| 
 | |
| #define	do_VB()		VOIDBIOS(;, tputs(VB, 1, faddch))
 | |
| #define	do_UP()		VOIDBIOS(v_up(), tputs(UP, 1, faddch))
 | |
| #undef	do_CM		/* move */
 | |
| #define	do_CE()		VOIDBIOS(v_ce(), tputs(CE, 1, faddch))
 | |
| #define	do_CD()		VOIDBIOS(v_cd(), tputs(CD, 1, faddch))
 | |
| #define	do_AL()		VOIDBIOS(v_al(), tputs(AL, LINES, faddch))
 | |
| #define	do_DL()		VOIDBIOS(v_dl(), tputs(DL, LINES, faddch))
 | |
| #if OSK
 | |
| #define	do_SR()		VOIDBIOS(v_sr(), tputs(SR_, 1, faddch))
 | |
| #else
 | |
| #define	do_SR()		VOIDBIOS(v_sr(), tputs(SR, 1, faddch))
 | |
| #endif
 | |
| #define do_KS()		VOIDBIOS(1, tputs(KS, 1, faddch))
 | |
| #define do_KE()		VOIDBIOS(1, tputs(KE, 1, faddch))
 | |
| #define	do_IM()		VOIDBIOS(;, tputs(IM, 1, faddch))
 | |
| #define	do_IC()		VOIDBIOS(;, tputs(IC, 1, faddch))
 | |
| #define	do_EI()		VOIDBIOS(;, tputs(EI, 1, faddch))
 | |
| #define	do_DC()		VOIDBIOS(;, tputs(DC, COLS, faddch))
 | |
| #define	do_TI()		VOIDBIOS(;, (void)ttywrite(TI, (unsigned)strlen(TI)))
 | |
| #define	do_TE()		VOIDBIOS(;, (void)ttywrite(TE, (unsigned)strlen(TE)))
 | |
| #ifndef NO_CURSORSHAPE
 | |
| # define do_CQ()	VOIDBIOS(v_cs(), tputs(CQ, 1, faddch))
 | |
| # define do_CX()	VOIDBIOS(v_cs(), tputs(CX, 1, faddch))
 | |
| # define do_CV()	VOIDBIOS(v_cs(), tputs(CV, 1, faddch))
 | |
| # define do_CI()	VOIDBIOS(v_cb(), tputs(CI, 1, faddch))
 | |
| # define do_CR()	VOIDBIOS(v_cb(), tputs(CR, 1, faddch))
 | |
| #endif
 | |
| #ifndef NO_COLOR
 | |
| # define do_aend()	VOIDBIOS((vmode=A_NORMAL), endcolor())
 | |
| #else
 | |
| # define do_aend()	VOIDBIOS((vmode=A_NORMAL), tputs(aend, 1, faddch))
 | |
| #endif
 | |
| 
 | |
| #define	has_AM		CHECKBIOS(1, AM)
 | |
| #define	has_PT		CHECKBIOS(0, PT)
 | |
| #define	has_VB		CHECKBIOS((char *)0, VB)
 | |
| #define	has_UP		CHECKBIOS((char *)1, UP)
 | |
| #define	has_SO		CHECKBIOS((char)1, (*SO))
 | |
| #define	has_SE		CHECKBIOS((char)1, (*SE))
 | |
| #define	has_US		CHECKBIOS((char)1, (*US))
 | |
| #define	has_UE		CHECKBIOS((char)1, (*UE))
 | |
| #define	has_MD		CHECKBIOS((char)1, (*MD))
 | |
| #define	has_ME		CHECKBIOS((char)1, (*ME))
 | |
| #define	has_AS		CHECKBIOS((char)1, (*AS))
 | |
| #define	has_AE		CHECKBIOS((char)1, (*AE))
 | |
| #undef	has_CM		/* cursor move: don't need */
 | |
| #define	has_CB		CHECKBIOS(1, 0)
 | |
| #define	has_CS		CHECKBIOS(1, 0)
 | |
| #define	has_CE		CHECKBIOS((char *)1, CE)
 | |
| #define	has_CD		CHECKBIOS((char *)1, CD)
 | |
| #define	has_AL		CHECKBIOS((char *)1, AL)
 | |
| #define	has_DL		CHECKBIOS((char *)1, DL)
 | |
| #if OSK
 | |
| #define	has_SR		CHECKBIOS((char *)1, SR_)
 | |
| #else
 | |
| #define	has_SR		CHECKBIOS((char *)1, SR)
 | |
| #endif
 | |
| #define has_KS		CHECKBIOS((char)1, (*KS))
 | |
| #define has_KE		CHECKBIOS((char)1, (*KE))
 | |
| #define	has_KU		KU
 | |
| #define	has_KD		KD
 | |
| #define	has_KL		KL
 | |
| #define	has_KR		KR
 | |
| #define has_HM		HM
 | |
| #define has_EN		EN
 | |
| #define has_PU		PU
 | |
| #define has_PD		PD
 | |
| #define has_KI		KI
 | |
| #define	has_IM		CHECKBIOS((char)0, (*IM))
 | |
| #define	has_IC		CHECKBIOS((char)0, (*IC))
 | |
| #define	has_EI		CHECKBIOS((char)0, (*EI))
 | |
| #define	has_DC		CHECKBIOS((char *)0, DC)
 | |
| #define	has_TI		CHECKBIOS((char)0, (*TI))
 | |
| #define	has_TE		CHECKBIOS((char)0, (*TE))
 | |
| #ifndef NO_CURSORSHAPE
 | |
| #define has_CQ		CHECKBIOS((char *)1, CQ)
 | |
| #endif
 | |
| 
 | |
| /* (pseudo)-Curses-functions */
 | |
| 
 | |
| #ifdef lint
 | |
| # define _addCR		VOIDBIOS(;, (stdscr[-1] == '\n' ? qaddch('\r') : (stdscr[-1] = '\n')))
 | |
| #else
 | |
| # if OSK
 | |
| #  define _addCR	VOIDBIOS(;, (stdscr[-1] == '\n' ? qaddch('\l') : (stdscr[-1] = stdscr[-1])))
 | |
| # else
 | |
| #  define _addCR	VOIDBIOS(;, (stdscr[-1] == '\n' ? qaddch('\r') : 0))
 | |
| # endif
 | |
| #endif
 | |
| 
 | |
| #ifdef AZTEC_C
 | |
| # define qaddch(ch)	CHECKBIOS(v_put(ch), (*stdscr = (ch), *stdscr++))
 | |
| #else
 | |
| #define qaddch(ch)	CHECKBIOS(v_put(ch), (*stdscr++ = (ch)))
 | |
| #endif
 | |
| 
 | |
| #if OSK
 | |
| #define addch(ch)	if (qaddch(ch) == '\n') qaddch('\l'); else
 | |
| #else
 | |
| #define addch(ch)	if (qaddch(ch) == '\n') qaddch('\r'); else
 | |
| #endif
 | |
| 
 | |
| extern void initscr();
 | |
| extern void endwin();
 | |
| extern void suspend_curses();
 | |
| extern void resume_curses();
 | |
| extern void attrset();
 | |
| extern void insch();
 | |
| extern void qaddstr();
 | |
| extern void wrefresh();
 | |
| extern void wqrefresh();
 | |
| #define addstr(str)	{qaddstr(str); _addCR;}
 | |
| #define move(y,x)	VOIDBIOS(v_move(x,y), tputs(tgoto(CM, x, y), 1, faddch))
 | |
| #define mvaddch(y,x,ch)	{move(y,x); addch(ch);}
 | |
| #define refresh()	VOIDBIOS(;, wrefresh())
 | |
| #define standout()	do_SO()
 | |
| #define standend()	do_SE()
 | |
| #define clrtoeol()	do_CE()
 | |
| #define clrtobot()	do_CD()
 | |
| #define insertln()	do_AL()
 | |
| #define deleteln()	do_DL()
 | |
| #define delch()		do_DC()
 | |
| #define scrollok(w,b)
 | |
| #define raw()
 | |
| #define echo()
 | |
| #define cbreak()
 | |
| #define noraw()
 | |
| #define noecho()
 | |
| #define nocbreak()
 | 
