130042Sminshall /*
230042Sminshall  *	@(#)screen.h	3.1  10/29/86
330042Sminshall  */
430042Sminshall 
530042Sminshall #define	INCLUDED_TERMINAL
630042Sminshall 
730042Sminshall #if	defined(SLOWSCREEN)
830042Sminshall 
930042Sminshall /*
1030042Sminshall  * In the situation where we have a copy of the terminal screen in front
1130042Sminshall  * of us, here are some macros to deal with them.
1230042Sminshall  */
1330042Sminshall 
14*31148Sminshall #define TermAttributes(x)	(TermIsStartField(x)? GetTerminal(x)&0xff : \
15*31148Sminshall 				    GetTerminal(WhereTermAttrByte(x))&0xff)
16*31148Sminshall #define TermIsStartField(x)	(GetTerminal(x)&ATTR_MASK)
17*31148Sminshall #define TermNewField(p,a)	SetTerminal(p, (a)|ATTR_MASK)
18*31148Sminshall #define TermDeleteField(p)	SetTerminal(p, 0)
1930042Sminshall #define TermIsNonDisplay(x)	\
2030042Sminshall 		    ((TermAttributes(x)&ATTR_DSPD_MASK) == ATTR_DSPD_NONDISPLAY)
2130042Sminshall #define TermIsHighlighted(x) \
2230042Sminshall 		(((TermAttributes(x)&ATTR_DSPD_MASK) == ATTR_DSPD_HIGH) \
2330042Sminshall 				    && !TermIsStartField(x))
2430042Sminshall 
2530042Sminshall #define TerminalCharacterAttr(c,p,a)	(IsNonDisplayAttr(a) ? ' ':c)
2630042Sminshall #define TerminalCharacter(c,p)	TerminalCharacterAttr(c,p,FieldAttributes(p))
2730042Sminshall 
2830042Sminshall #define NeedToRedisplayFields(p) ((TermIsNonDisplay(p) != IsNonDisplay(p)) || \
2930042Sminshall 				(TermIsHighlighted(p) != IsHighlighted(p)))
3030042Sminshall #define NeedToRedisplayFieldsAttr(p,c) ( \
3130042Sminshall 			(TermIsNonDisplay(p) != IsNonDisplayAttr(c)) || \
3230042Sminshall 			(TermIsHighlighted(p) != IsHighlightedAttr(c)))
3330042Sminshall 
3430042Sminshall #define NotVisuallyCompatibleAttributes(p,c,d) ( \
3530042Sminshall 			(IsNonDisplayAttr(c) != IsNonDisplayAttr(d)) || \
3630042Sminshall 			(IsHighlightedAttr(c) != IsHighlightedAttr(d)))
3730042Sminshall 
3830042Sminshall #define NeedToRedisplayAttr(c,p,a) \
3930042Sminshall 			((c != GetTerminal(p)) || NeedToRedisplayFieldsAttr(p,a))
4030042Sminshall #define NeedToRedisplay(c,p)	NeedToRedisplayAttr(c,p,FieldAttributes(p))
4130042Sminshall 
42*31148Sminshall #endif	/* defined(SLOWSCREEN) */
4330042Sminshall 
44*31148Sminshall #define GetTerminal(i)		GetGeneric(i, Terminal)
45*31148Sminshall #define GetTerminalPointer(p)	GetGenericPointer(p)
46*31148Sminshall #define SetTerminal(i,c)	SetGeneric(i,c,Terminal)
47