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