Commit | Line | Data |
---|---|---|
23d0e88a GM |
1 | /* |
2 | * @(#)screen.h 3.1 10/29/86 | |
3 | */ | |
4 | ||
5 | #define INCLUDED_SCREEN | |
6 | ||
7 | /* defines and defines to describe how to deal with the screen */ | |
8 | ||
9 | #define MAXNUMBERLINES 43 /* 3278-4 */ | |
10 | #define MAXNUMBERCOLUMNS 132 /* 3278-5 */ | |
11 | #define MAXSCREENSIZE 3564 /* (27*132) 3278-5 */ | |
12 | #define LowestScreen() 0 | |
13 | #define HighestScreen() (ScreenSize-1) | |
14 | ||
15 | #define ScreenLineOffset(x) ((x)%NumberColumns) | |
16 | #define ScreenLine(x) ((int)((x)/NumberColumns)) | |
17 | #define ScreenInc(x) (((x)==HighestScreen())? LowestScreen():x+1) | |
18 | #define ScreenDec(x) (((x)==LowestScreen())? HighestScreen():x-1) | |
19 | #define ScreenUp(x) (((x)+(ScreenSize-NumberColumns))%ScreenSize) | |
20 | #define ScreenDown(x) (((x)+NumberColumns)%ScreenSize) | |
21 | #define IsOrder(x) (Orders[x]) | |
22 | #define BAIC(x) ((x)&0x3f) | |
23 | #define CIAB(x) (CIABuffer[(x)&0x3f]) | |
24 | #define BufferTo3270_0(x) (CIABuffer[(int)((x)/0x40)]) | |
25 | #define BufferTo3270_1(x) (CIABuffer[(x)&0x3f]) | |
26 | #define Addr3270(x,y) (BAIC(x)*64+BAIC(y)) | |
27 | #define SetBufferAddress(x,y) ((x)*NumberColumns+(y)) | |
28 | \f | |
29 | /* These know how fields are implemented... */ | |
30 | ||
31 | #define FieldInc(p) FieldFind(FieldForward, p, LowestScreen()) | |
32 | #define FieldDec(p) (HighestScreen() - \ | |
33 | FieldFind(FieldReverse, \ | |
90ed7ac2 | 34 | HighestScreen()-(p), HighestScreen())) |
23d0e88a GM |
35 | #define WhereAttrByte(p) (IsStartField(p)? p: FieldDec(p)) |
36 | #define WhereHighByte(p) ScreenDec(FieldInc(p)) | |
37 | #define WhereLowByte(p) ScreenInc(WhereAttrByte(p)) | |
90ed7ac2 GM |
38 | #define FieldAttributes(x) (IsStartField(x)? Host[x].data : \ |
39 | Host[WhereAttrByte(x)].data) | |
40 | #define FieldAttributesPointer(p) (IsStartFieldPointer(p)? (p)->data : \ | |
41 | Host[WhereAttrByte((p)-&Host[0])].data) | |
42 | #define TurnOffMdt(x) (Host[WhereAttrByte(x)].data &= ~ATTR_MDT) | |
43 | #define TurnOnMdt(x) (Host[WhereAttrByte(x)].data |= ATTR_MDT) | |
44 | #define HasMdt(x) (Host[x].data&ATTR_MDT) /* modified tag */ | |
23d0e88a GM |
45 | |
46 | /* | |
47 | * Is the screen formatted? Some algorithms change depending | |
48 | * on whether there are any attribute bytes lying around. | |
49 | */ | |
50 | #define FormattedScreen() \ | |
90ed7ac2 | 51 | ((WhereAttrByte(0) != 0) || ((Host[0].data&ATTR_MASK) == ATTR_MASK)) |
23d0e88a | 52 | |
90ed7ac2 GM |
53 | /* field starts here */ |
54 | #define IsStartField(x) ((Host[x].data&ATTR_MASK) == ATTR_MASK) | |
55 | #define IsStartFieldPointer(p) (((p)->data&ATTR_MASK) == ATTR_MASK) | |
56 | ||
57 | #define NewField(p,a) (Host[p].data = (a)|ATTR_MASK, \ | |
23d0e88a | 58 | FieldForward[p] = FieldReverse[ScreenSize-p-1] = 1) |
90ed7ac2 | 59 | #define DeleteField(p) (Host[p].data = 0, \ |
23d0e88a GM |
60 | FieldForward[p] = FieldReverse[ScreenSize-p-1] = 0) |
61 | #define DeleteAllFields() (bzero(FieldForward, sizeof FieldForward), \ | |
62 | bzero(FieldReverse, sizeof FieldReverse)) | |
63 | ||
64 | \f | |
65 | /* The following are independent of the implementation of fields */ | |
66 | #define IsProtectedAttr(p,a) (IsStartField(p) || ((a)&ATTR_PROT)) | |
67 | #define IsProtected(p) IsProtectedAttr(p,FieldAttributes(p)) | |
68 | ||
69 | #define IsUnProtected(x) (!IsProtected(x)) | |
70 | ||
71 | #define IsAutoSkip(x) (FieldAttributes(x)&ATTR_AUTO_SKIP) | |
72 | ||
73 | #define IsNonDisplayAttr(c) (((c)&ATTR_DSPD_MASK) == ATTR_DSPD_NONDISPLAY) | |
74 | #define IsNonDisplay(p) IsNonDisplayAttr(FieldAttributes(p)) | |
75 | ||
76 | #define IsHighlightedAttr(c) \ | |
77 | (((c)&ATTR_DSPD_MASK) == ATTR_DSPD_HIGH) | |
78 | #define IsHighlighted(p) \ | |
79 | (IsHighlightedAttr(FieldAttributes(p)) && !IsStartField(p)) | |
80 | ||
81 | ||
82 | #define MAX(x,y) ((x)<(y)? (y):(x)) | |
83 | #define MIN(x,y) ((x)<(y)? x:(y)) | |
84 | ||
85 | typedef struct { | |
90ed7ac2 | 86 | unsigned char data; /* data at this position */ |
23d0e88a GM |
87 | } ScreenImage; |
88 | ||
89 | extern int | |
90 | FieldFind(); | |
91 | ||
92 | extern char | |
93 | CIABuffer[]; | |
94 | ||
95 | #define GetHost(i) Host[i].data | |
96 | #define SetHost(p,c) (Host[p].data = c) |