148761Sbostic /*-
2*62368Sbostic  * Copyright (c) 1988, 1993
3*62368Sbostic  *	The Regents of the University of California.  All rights reserved.
433810Sbostic  *
548761Sbostic  * %sccs.include.redist.c%
633810Sbostic  *
7*62368Sbostic  *	@(#)terminal.h	8.1 (Berkeley) 06/06/93
830042Sminshall  */
930042Sminshall 
1030042Sminshall #define	INCLUDED_TERMINAL
1130042Sminshall 
1230042Sminshall /*
1330042Sminshall  * In the situation where we have a copy of the terminal screen in front
1430042Sminshall  * of us, here are some macros to deal with them.
1530042Sminshall  */
1630042Sminshall 
1731148Sminshall #define TermAttributes(x)	(TermIsStartField(x)? GetTerminal(x)&0xff : \
1831148Sminshall 				    GetTerminal(WhereTermAttrByte(x))&0xff)
1931451Sminshall #define TermIsStartField(x)	((GetTerminal(x)&ATTR_MASK) == ATTR_MASK)
2031148Sminshall #define TermNewField(p,a)	SetTerminal(p, (a)|ATTR_MASK)
2131148Sminshall #define TermDeleteField(p)	SetTerminal(p, 0)
2230042Sminshall #define TermIsNonDisplay(x)	\
2330042Sminshall 		    ((TermAttributes(x)&ATTR_DSPD_MASK) == ATTR_DSPD_NONDISPLAY)
2430042Sminshall #define TermIsHighlighted(x) \
2530042Sminshall 		(((TermAttributes(x)&ATTR_DSPD_MASK) == ATTR_DSPD_HIGH) \
2630042Sminshall 				    && !TermIsStartField(x))
2730042Sminshall 
2830042Sminshall #define TerminalCharacterAttr(c,p,a)	(IsNonDisplayAttr(a) ? ' ':c)
2930042Sminshall #define TerminalCharacter(c,p)	TerminalCharacterAttr(c,p,FieldAttributes(p))
3030042Sminshall 
3138206Sminshall 	/*
3238206Sminshall 	 * Is the screen formatted?  Some algorithms change depending
3338206Sminshall 	 * on whether there are any attribute bytes lying around.
3438206Sminshall 	 */
3538206Sminshall #define	TerminalFormattedScreen() \
3638206Sminshall 	    ((WhereTermAttrByte(0) != 0) || ((GetTerminal(0)&ATTR_MASK) == ATTR_MASK))
3738206Sminshall 
3830042Sminshall #define NeedToRedisplayFields(p) ((TermIsNonDisplay(p) != IsNonDisplay(p)) || \
3930042Sminshall 				(TermIsHighlighted(p) != IsHighlighted(p)))
4030042Sminshall #define NeedToRedisplayFieldsAttr(p,c) ( \
4130042Sminshall 			(TermIsNonDisplay(p) != IsNonDisplayAttr(c)) || \
4230042Sminshall 			(TermIsHighlighted(p) != IsHighlightedAttr(c)))
4330042Sminshall 
4430042Sminshall #define NotVisuallyCompatibleAttributes(p,c,d) ( \
4530042Sminshall 			(IsNonDisplayAttr(c) != IsNonDisplayAttr(d)) || \
4630042Sminshall 			(IsHighlightedAttr(c) != IsHighlightedAttr(d)))
4730042Sminshall 
4830042Sminshall #define NeedToRedisplayAttr(c,p,a) \
4930042Sminshall 			((c != GetTerminal(p)) || NeedToRedisplayFieldsAttr(p,a))
5030042Sminshall #define NeedToRedisplay(c,p)	NeedToRedisplayAttr(c,p,FieldAttributes(p))
5130042Sminshall 
5230042Sminshall 
5331148Sminshall #define GetTerminal(i)		GetGeneric(i, Terminal)
5431148Sminshall #define GetTerminalPointer(p)	GetGenericPointer(p)
5531148Sminshall #define SetTerminal(i,c)	SetGeneric(i,c,Terminal)
56