fix ticket file ownership (look at this again later)
[unix-history] / usr / src / usr.bin / window / tth19.c
... / ...
CommitLineData
1/*
2 * Copyright (c) 1983 Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16 */
17
18#ifndef lint
19static char sccsid[] = "@(#)tth19.c 3.21 (Berkeley) %G%";
20#endif /* not lint */
21
22#include "ww.h"
23#include "tt.h"
24
25/*
26kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith:
27 cr=^M:nl=^J:bl=^G:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK:
28 cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:dl=1*\EM:do=\EB:
29 ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:ms:
30 ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4:
31 kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH:
32 kn#8:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:
33 l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER:
34 es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1:
35*/
36
37#define NCOL 80
38#define NROW 24
39
40#define G (WWM_GRP << WWC_MSHIFT)
41short h19_frame[16] = {
42 ' ', '`'|G, 'a'|G, 'e'|G,
43 '`'|G, '`'|G, 'f'|G, 'v'|G,
44 'a'|G, 'd'|G, 'a'|G, 'u'|G,
45 'c'|G, 't'|G, 's'|G, 'b'|G
46};
47
48extern struct tt_str *gen_VS;
49extern struct tt_str *gen_VE;
50
51int h19_msp10c;
52
53#define pc(c) ttputc(c)
54#define esc() pc('\033')
55#define PAD(ms10) { \
56 register i; \
57 for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \
58 pc('\0'); \
59}
60#define ICPAD() PAD((NCOL - tt.tt_col) * 1) /* 0.1 ms per char */
61#define ILPAD() PAD((NROW - tt.tt_row) * 10) /* 1 ms per char */
62
63#define H19_SETINSERT(m) (esc(), (tt.tt_insert = (m)) ? pc('@') : pc('O'))
64
65h19_setinsert(new)
66{
67 H19_SETINSERT(new);
68}
69
70h19_setmodes(new)
71register new;
72{
73 register diff;
74
75 diff = new ^ tt.tt_modes;
76 if (diff & WWM_REV) {
77 esc();
78 if (new & WWM_REV)
79 pc('p');
80 else
81 pc('q');
82 }
83 if (diff & WWM_GRP) {
84 esc();
85 if (new & WWM_GRP)
86 pc('F');
87 else
88 pc('G');
89 }
90 tt.tt_modes = new;
91}
92
93h19_insline(n)
94{
95 while (--n >= 0) {
96 esc();
97 pc('L');
98 ILPAD();
99 }
100}
101
102h19_delline(n)
103{
104 while (--n >= 0) {
105 esc();
106 pc('M');
107 ILPAD();
108 }
109}
110
111h19_putc(c)
112register char c;
113{
114 if (tt.tt_nmodes != tt.tt_modes)
115 (*tt.tt_setmodes)(tt.tt_nmodes);
116 if (tt.tt_ninsert != tt.tt_insert)
117 H19_SETINSERT(tt.tt_ninsert);
118 pc(c);
119 if (tt.tt_insert)
120 ICPAD();
121 if (++tt.tt_col == NCOL)
122 tt.tt_col = NCOL - 1;
123}
124
125h19_write(p, n)
126register char *p;
127register n;
128{
129 if (tt.tt_nmodes != tt.tt_modes)
130 (*tt.tt_setmodes)(tt.tt_nmodes);
131 if (tt.tt_ninsert != tt.tt_insert)
132 H19_SETINSERT(tt.tt_ninsert);
133 if (tt.tt_insert) {
134 while (--n >= 0) {
135 pc(*p++);
136 ICPAD();
137 tt.tt_col++;
138 }
139 } else {
140 tt.tt_col += n;
141 ttwrite(p, n);
142 }
143 if (tt.tt_col == NCOL)
144 tt.tt_col = NCOL - 1;
145}
146
147h19_move(row, col)
148register char row, col;
149{
150 if (tt.tt_row == row) {
151 if (tt.tt_col == col)
152 return;
153 if (col == 0) {
154 pc('\r');
155 goto out;
156 }
157 if (tt.tt_col == col - 1) {
158 esc();
159 pc('C');
160 goto out;
161 }
162 if (tt.tt_col == col + 1) {
163 pc('\b');
164 goto out;
165 }
166 }
167 if (tt.tt_col == col) {
168 if (tt.tt_row == row + 1) {
169 esc();
170 pc('A');
171 goto out;
172 }
173 if (tt.tt_row == row - 1) {
174 pc('\n');
175 goto out;
176 }
177 }
178 if (col == 0 && row == 0) {
179 esc();
180 pc('H');
181 goto out;
182 }
183 esc();
184 pc('Y');
185 pc(' ' + row);
186 pc(' ' + col);
187out:
188 tt.tt_col = col;
189 tt.tt_row = row;
190}
191
192h19_start()
193{
194 if (gen_VS)
195 ttxputs(gen_VS);
196 esc();
197 pc('w');
198 esc();
199 pc('E');
200 tt.tt_col = tt.tt_row = 0;
201 tt.tt_ninsert = tt.tt_insert = 0;
202 tt.tt_nmodes = tt.tt_modes = 0;
203}
204
205h19_end()
206{
207 if (gen_VE)
208 ttxputs(gen_VE);
209 esc();
210 pc('v');
211}
212
213h19_clreol()
214{
215 esc();
216 pc('K');
217}
218
219h19_clreos()
220{
221 esc();
222 pc('J');
223}
224
225h19_clear()
226{
227 esc();
228 pc('E');
229}
230
231h19_delchar(n)
232{
233 while (--n >= 0) {
234 esc();
235 pc('N');
236 }
237}
238
239h19_scroll_down(n)
240{
241 h19_move(NROW - 1, 0);
242 while (--n >= 0)
243 pc('\n');
244}
245
246h19_scroll_up(n)
247{
248 h19_move(0, 0);
249 while (--n >= 0) {
250 esc();
251 pc('I');
252 }
253}
254
255tt_h19()
256{
257 float cpms = (float) wwbaud / 10000; /* char per ms */
258
259 h19_msp10c = 10 / cpms; /* ms per 10 char */
260 gen_VS = ttxgetstr("vs");
261 gen_VE = ttxgetstr("ve");
262
263 tt.tt_start = h19_start;
264 tt.tt_end = h19_end;
265
266 tt.tt_insline = h19_insline;
267 tt.tt_delline = h19_delline;
268 tt.tt_delchar = h19_delchar;
269 tt.tt_clreol = h19_clreol;
270 tt.tt_clreos = h19_clreos;
271 tt.tt_clear = h19_clear;
272 tt.tt_move = h19_move;
273 tt.tt_write = h19_write;
274 tt.tt_putc = h19_putc;
275 tt.tt_scroll_down = h19_scroll_down;
276 tt.tt_scroll_up = h19_scroll_up;
277 tt.tt_setinsert = h19_setinsert;
278 tt.tt_setmodes = h19_setmodes;
279
280 tt.tt_ncol = NCOL;
281 tt.tt_nrow = NROW;
282 tt.tt_availmodes = WWM_REV|WWM_GRP;
283 tt.tt_frame = h19_frame;
284 return 0;
285}