1*30042Sminshall /*
2*30042Sminshall  *	@(#)screen.h	3.1  10/29/86
3*30042Sminshall  */
4*30042Sminshall 
5*30042Sminshall #define	INCLUDED_TERMINAL
6*30042Sminshall 
7*30042Sminshall #if	defined(SLOWSCREEN)
8*30042Sminshall 
9*30042Sminshall /*
10*30042Sminshall  * In the situation where we have a copy of the terminal screen in front
11*30042Sminshall  * of us, here are some macros to deal with them.
12*30042Sminshall  */
13*30042Sminshall 
14*30042Sminshall #define TermAttributes(x)	(TermIsStartField(x)? Terminal[x].field&0xff : \
15*30042Sminshall 				    Terminal[WhereTermAttrByte(x)].field&0xff)
16*30042Sminshall #define TermIsStartField(x)	(Terminal[x].field&ATTR_MASK)
17*30042Sminshall #define TermNewField(p,a)	(Terminal[p].field = (a)|ATTR_MASK)
18*30042Sminshall #define TermDeleteField(p)	(Terminal[p].field = 0)
19*30042Sminshall #define TermIsNonDisplay(x)	\
20*30042Sminshall 		    ((TermAttributes(x)&ATTR_DSPD_MASK) == ATTR_DSPD_NONDISPLAY)
21*30042Sminshall #define TermIsHighlighted(x) \
22*30042Sminshall 		(((TermAttributes(x)&ATTR_DSPD_MASK) == ATTR_DSPD_HIGH) \
23*30042Sminshall 				    && !TermIsStartField(x))
24*30042Sminshall 
25*30042Sminshall #define TerminalCharacterAttr(c,p,a)	(IsNonDisplayAttr(a) ? ' ':c)
26*30042Sminshall #define TerminalCharacter(c,p)	TerminalCharacterAttr(c,p,FieldAttributes(p))
27*30042Sminshall 
28*30042Sminshall #define NeedToRedisplayFields(p) ((TermIsNonDisplay(p) != IsNonDisplay(p)) || \
29*30042Sminshall 				(TermIsHighlighted(p) != IsHighlighted(p)))
30*30042Sminshall #define NeedToRedisplayFieldsAttr(p,c) ( \
31*30042Sminshall 			(TermIsNonDisplay(p) != IsNonDisplayAttr(c)) || \
32*30042Sminshall 			(TermIsHighlighted(p) != IsHighlightedAttr(c)))
33*30042Sminshall 
34*30042Sminshall #define NotVisuallyCompatibleAttributes(p,c,d) ( \
35*30042Sminshall 			(IsNonDisplayAttr(c) != IsNonDisplayAttr(d)) || \
36*30042Sminshall 			(IsHighlightedAttr(c) != IsHighlightedAttr(d)))
37*30042Sminshall 
38*30042Sminshall #define NeedToRedisplayAttr(c,p,a) \
39*30042Sminshall 			((c != GetTerminal(p)) || NeedToRedisplayFieldsAttr(p,a))
40*30042Sminshall #define NeedToRedisplay(c,p)	NeedToRedisplayAttr(c,p,FieldAttributes(p))
41*30042Sminshall 
42*30042Sminshall #define GetTerminal(i)		Terminal[i].data
43*30042Sminshall #define SetTerminal(i,c)	(Terminal[i].data = c)
44*30042Sminshall 
45*30042Sminshall #endif	/* defined(SLOWSCREEN) */
46