Annotation of 43BSD/ucb/tn3270/screen.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     Copyright 1984, 1985 by the Regents of the University of
                      3:  *     California and by Gregory Glenn Minshall.
                      4:  *
                      5:  *     Permission to use, copy, modify, and distribute these
                      6:  *     programs and their documentation for any purpose and
                      7:  *     without fee is hereby granted, provided that this
                      8:  *     copyright and permission appear on all copies and
                      9:  *     supporting documentation, the name of the Regents of
                     10:  *     the University of California not be used in advertising
                     11:  *     or publicity pertaining to distribution of the programs
                     12:  *     without specific prior permission, and notice be given in
                     13:  *     supporting documentation that copying and distribution is
                     14:  *     by permission of the Regents of the University of California
                     15:  *     and by Gregory Glenn Minshall.  Neither the Regents of the
                     16:  *     University of California nor Gregory Glenn Minshall make
                     17:  *     representations about the suitability of this software
                     18:  *     for any purpose.  It is provided "as is" without
                     19:  *     express or implied warranty.
                     20:  */
                     21: 
                     22: 
                     23: /* defines and defines to describe how to deal with the screen */
                     24: 
                     25: #define LINESIZE       80
                     26: #define NUMBERLINES    24
                     27: #define SCREENSIZE     (LINESIZE*NUMBERLINES)
                     28: #define LowestScreen() 0
                     29: #define HighestScreen()        (SCREENSIZE-1)
                     30: 
                     31: #define ScreenLineOffset(x)    ((x)%LINESIZE)
                     32: #define ScreenLine(x)  ((int)((x)/LINESIZE))
                     33: #define ScreenInc(x)   (((x)==HighestScreen())? LowestScreen():x+1)
                     34: #define ScreenDec(x)   (((x)==LowestScreen())? HighestScreen():x-1)
                     35: #define ScreenUp(x)    (((x)+(SCREENSIZE-LINESIZE))%SCREENSIZE)
                     36: #define ScreenDown(x)  (((x)+LINESIZE)%SCREENSIZE)
                     37: #define IsOrder(x)     ((x) && ((x) < 0x40) && (\
                     38:                            ((x) == ORDER_SF) || \
                     39:                            ((x) == ORDER_SBA) || \
                     40:                            ((x) == ORDER_IC) || \
                     41:                            ((x) == ORDER_PT) || \
                     42:                            ((x) == ORDER_RA) || \
                     43:                            ((x) == ORDER_EUA) || \
                     44:                            ((x) == ORDER_YALE)))
                     45: #define BAIC(x)                ((x)&0x3f)
                     46: #define CIAB(x)                (CIABuffer[(x)&0x3f])
                     47: #define BufferTo3270_0(x)      (CIABuffer[(int)((x)/0x40)])
                     48: #define BufferTo3270_1(x)      (CIABuffer[(x)&0x3f])
                     49: #define Addr3270(x,y)  (BAIC(x)*64+BAIC(y))
                     50: #define SetBufferAddress(x,y)  ((x)*LINESIZE+(y))
                     51: 
                     52: /* These know how fields are implemented... */
                     53: 
                     54: #define        FieldInc(p)     FieldFind(FieldForward, p, LowestScreen())
                     55: #define        FieldDec(p)     (HighestScreen() - \
                     56:                                FieldFind(FieldReverse, \
                     57:                                        HighestScreen()-p, HighestScreen()))
                     58: #define WhereAttrByte(p)       (IsStartField(p)? p: FieldDec(p))
                     59: #define        WhereHighByte(p)        ScreenDec(FieldInc(p))
                     60: #define WhereLowByte(p)                ScreenInc(WhereAttrByte(p))
                     61: #define FieldAttributes(x)     (IsStartField(x)? Host[x].field&0xff : \
                     62:                                    Host[WhereAttrByte(x)].field&0xff)
                     63: #define TermAttributes(x)      (TermIsStartField(x)? Terminal[x].field&0xff : \
                     64:                                    Terminal[WhereTermAttrByte(x)].field&0xff)
                     65: #define TurnOffMdt(x)  (Host[WhereAttrByte(x)].field &= ~ATTR_MDT)
                     66: #define TurnOnMdt(x)   (Host[WhereAttrByte(x)].field |= ATTR_MDT)
                     67: #define HasMdt(x)      (Host[x].field&ATTR_MDT)        /* modified tag */
                     68: 
                     69: #define IsStartField(x)        (Host[x].field&ATTR_MASK)       /* field starts here */
                     70: #define TermIsStartField(x)    (Terminal[x].field&ATTR_MASK)
                     71: #define NewField(p,a)  (Host[p].field = (a)|ATTR_MASK, \
                     72:                            FieldForward[p] = FieldReverse[SCREENSIZE-p-1] = 1)
                     73: #define TermNewField(p,a)      (Terminal[p].field = (a)|ATTR_MASK)
                     74: #define DeleteField(p) (Host[p].field = 0, \
                     75:                            FieldForward[p] = FieldReverse[SCREENSIZE-p-1] = 0)
                     76: #define TermDeleteField(p)     (Terminal[p].field = 0)
                     77: #define        DeleteAllFields()       (bzero(FieldForward, sizeof FieldForward), \
                     78:                                    bzero(FieldReverse, sizeof FieldReverse))
                     79: 
                     80: 
                     81: /* The following are independent of the implementation of fields */
                     82: #define IsProtectedAttr(p,a)   (IsStartField(p) || ((a)&ATTR_PROT))
                     83: #define IsProtected(p) IsProtectedAttr(p,FieldAttributes(p))
                     84: 
                     85: #define IsUnProtected(x)       (!IsProtected(x))
                     86: 
                     87: #define IsAutoSkip(x)  (FieldAttributes(x)&ATTR_AUTO_SKIP)
                     88: 
                     89: #define IsNonDisplayAttr(c)    (((c)&ATTR_DSPD_MASK) == ATTR_DSPD_NONDISPLAY)
                     90: #define        IsNonDisplay(p) IsNonDisplayAttr(FieldAttributes(p))
                     91: 
                     92: #define IsHighlightedAttr(c) \
                     93:                (((c)&ATTR_DSPD_MASK) == ATTR_DSPD_HIGH)
                     94: #define        IsHighlighted(p) \
                     95:                (IsHighlightedAttr(FieldAttributes(p)) && !IsStartField(p))
                     96: 
                     97: #define TermIsNonDisplay(x)    \
                     98:                    ((TermAttributes(x)&ATTR_DSPD_MASK) == ATTR_DSPD_NONDISPLAY)
                     99: #define TermIsHighlighted(x) \
                    100:                (((TermAttributes(x)&ATTR_DSPD_MASK) == ATTR_DSPD_HIGH) \
                    101:                                    && !TermIsStartField(x))
                    102: 
                    103: #define TerminalCharacterAttr(c,p,a)   (IsNonDisplayAttr(a) ? ' ':c)
                    104: #define TerminalCharacter(c,p) TerminalCharacterAttr(c,p,FieldAttributes(p))
                    105: 
                    106: #define NeedToRedisplayFields(p) ((TermIsNonDisplay(p) != IsNonDisplay(p)) || \
                    107:                                (TermIsHighlighted(p) != IsHighlighted(p)))
                    108: #define NeedToRedisplayFieldsAttr(p,c) ( \
                    109:                        (TermIsNonDisplay(p) != IsNonDisplayAttr(c)) || \
                    110:                        (TermIsHighlighted(p) != IsHighlightedAttr(c)))
                    111: 
                    112: #define NotVisuallyCompatibleAttributes(p,c,d) ( \
                    113:                        (IsNonDisplayAttr(c) != IsNonDisplayAttr(d)) || \
                    114:                        (IsHighlightedAttr(c) != IsHighlightedAttr(d)))
                    115: 
                    116: #define NeedToRedisplayAttr(c,p,a) \
                    117:                        ((c != GetTerminal(p)) || NeedToRedisplayFieldsAttr(p,a))
                    118: #define NeedToRedisplay(c,p)   NeedToRedisplayAttr(c,p,FieldAttributes(p))
                    119: 
                    120: #define MAX(x,y)       ((x)<(y)? (y):(x))
                    121: #define MIN(x,y)       ((x)<(y)? x:(y))
                    122: 
                    123: #define GetHost(i)     Host[i].data
                    124: #define SetHost(i,c)   (Host[i].data = c)
                    125: 
                    126: #define GetTerminal(i)         Terminal[i].data
                    127: #define SetTerminal(i,c)       (Terminal[i].data = c)
                    128: 
                    129: struct {
                    130:     char       data,   /* data at this position */
                    131:                field;  /* field attributes of this location if ATTR_MASK */
                    132: }      Host[SCREENSIZE],               /* host view of screen */
                    133:        Terminal[SCREENSIZE];
                    134: 
                    135: char   FieldForward[SCREENSIZE],       /* non-zero for SF, 0..1919 */
                    136:        FieldReverse[SCREENSIZE];       /* non-zero for SF, 1919..0 */
                    137: 
                    138: 
                    139: int CursorAddress;                     /* where cursor is */
                    140: int BufferAddress;                     /* where writes are going */
                    141: 
                    142: int Lowest, Highest;
                    143: 
                    144: /* the Following are globals */
                    145: 
                    146: extern char CIABuffer[];
                    147: 
                    148: int UnLocked;          /* is the keyboard unlocked */
                    149: int AidByte;
                    150: 
                    151: int Initialized;       /* are we initialized? */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.