1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23: struct parmcap
24: {
25: int mincost, maxcost;
26: };
27:
28:
29:
30:
31:
32: struct cm
33: {
34:
35:
36:
37: int cm_curY;
38: int cm_curX;
39:
40:
41: char *cm_up;
42: char *cm_down;
43: char *cm_left;
44: char *cm_right;
45: char *cm_home;
46: char *cm_cr;
47: char *cm_ll;
48: char *cm_tab;
49: char *cm_backtab;
50: char *cm_abs;
51: char *cm_habs;
52: char *cm_vabs;
53: #if 0
54: char *cm_ds;
55: #endif
56: char *cm_multiup;
57: char *cm_multidown;
58: char *cm_multileft;
59: char *cm_multiright;
60: int cm_cols;
61: int cm_rows;
62: int cm_tabwidth;
63: unsigned int cm_autowrap:1;
64: unsigned int cm_magicwrap:1;
65:
66:
67: unsigned int cm_usetabs:1;
68: unsigned int cm_losewrap:1;
69:
70: unsigned int cm_autolf:1;
71:
72:
73:
74:
75: #if 0
76: struct parmcap cc_abs;
77: struct parmcap cc_habs;
78: struct parmcap cc_vabs;
79: struct parmcap cc_multiup;
80: struct parmcap cc_multidown;
81: struct parmcap cc_multileft;
82: struct parmcap cc_multiright;
83: #endif
84:
85:
86: int cc_up;
87: int cc_down;
88: int cc_left;
89: int cc_right;
90: int cc_home;
91: int cc_cr;
92: int cc_ll;
93: int cc_tab;
94: int cc_backtab;
95:
96:
97: int cc_abs;
98: int cc_habs;
99: int cc_vabs;
100: };
101:
102: extern struct cm Wcm;
103: extern char PC;
104:
105:
106: #ifndef NoCMShortHand
107: #define curY Wcm.cm_curY
108: #define curX Wcm.cm_curX
109: #define Up Wcm.cm_up
110: #define Down Wcm.cm_down
111: #define Left Wcm.cm_left
112: #define Right Wcm.cm_right
113: #define Tab Wcm.cm_tab
114: #define BackTab Wcm.cm_backtab
115: #define TabWidth Wcm.cm_tabwidth
116: #define CR Wcm.cm_cr
117: #define Home Wcm.cm_home
118: #define LastLine Wcm.cm_ll
119: #define AbsPosition Wcm.cm_abs
120: #define ColPosition Wcm.cm_habs
121: #define RowPosition Wcm.cm_vabs
122: #define MultiUp Wcm.cm_multiup
123: #define MultiDown Wcm.cm_multidown
124: #define MultiLeft Wcm.cm_multileft
125: #define MultiRight Wcm.cm_multiright
126: #define AutoWrap Wcm.cm_autowrap
127: #define MagicWrap Wcm.cm_magicwrap
128: #define UseTabs Wcm.cm_usetabs
129: #define FrameRows Wcm.cm_rows
130: #define FrameCols Wcm.cm_cols
131:
132: #define UpCost Wcm.cc_up
133: #define DownCost Wcm.cc_down
134: #define LeftCost Wcm.cc_left
135: #define RightCost Wcm.cc_right
136: #define HomeCost Wcm.cc_home
137: #define CRCost Wcm.cc_cr
138: #define LastLineCost Wcm.cc_ll
139: #define TabCost Wcm.cc_tab
140: #define BackTabCost Wcm.cc_backtab
141: #define AbsPositionCost Wcm.cc_abs
142: #define ColPositionCost Wcm.cc_habs
143: #define RowPositionCost Wcm.cc_vabs
144: #define MultiUpCost Wcm.cc_multiup
145: #define MultiDownCost Wcm.cc_multidown
146: #define MultiLeftCost Wcm.cc_multileft
147: #define MultiRightCost Wcm.cc_multiright
148: #endif
149:
150: #define cmat(row,col) (curY = (row), curX = (col))
151: #define cmplus(n) \
152: { \
153: if ((curX += (n)) >= FrameCols && !MagicWrap) \
154: { \
155: if (Wcm.cm_losewrap) losecursor (); \
156: else if (AutoWrap) curX = 0, curY++; \
157: else curX--; \
158: } \
159: }
160:
161: #define losecursor() (curX = -1, curY = -1)
162:
163: extern int cost;
164: extern int evalcost ();
165:
166: extern void cmcheckmagic ();
167: extern int cmputc ();
168: extern void cmcostinit ();
169: extern void cmgoto ();
170: extern void Wcm_clear ();
171: extern int Wcm_init ();
172:
173:
174: