xref: /csrg-svn/usr.bin/window/tth19.c (revision 14414)
1*14414Sedward #ifndef lint
2*14414Sedward static	char *sccsid = "@(#)tth19.c	3.1 83/08/09";
3*14414Sedward #endif
4*14414Sedward 
5*14414Sedward #include "ww.h"
6*14414Sedward 
7*14414Sedward /*
8*14414Sedward kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith:
9*14414Sedward 	cr=^M:nl=^J:bl=^G:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK:
10*14414Sedward 	cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:dl=1*\EM:do=\EB:
11*14414Sedward 	ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:ms:
12*14414Sedward 	ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4:
13*14414Sedward 	kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH:
14*14414Sedward 	kn#8:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:
15*14414Sedward 	l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER:
16*14414Sedward 	es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1:
17*14414Sedward */
18*14414Sedward 
19*14414Sedward char h19_frame[16] = {
20*14414Sedward 	' ',      '`'|0x80, 'a'|0x80, 'e'|0x80,
21*14414Sedward 	'`'|0x80, '`'|0x80, 'f'|0x80, 'v'|0x80,
22*14414Sedward 	'a'|0x80, 'd'|0x80, 'a'|0x80, 'u'|0x80,
23*14414Sedward 	'c'|0x80, 't'|0x80, 's'|0x80, 'b'|0x80
24*14414Sedward };
25*14414Sedward 
26*14414Sedward char h19_row, h19_col;
27*14414Sedward char h19_modes, h19_nmodes;
28*14414Sedward char h19_insert, h19_ninsert;
29*14414Sedward char h19_graphics;
30*14414Sedward short h19_msp10c;
31*14414Sedward 
32*14414Sedward #define pc(c)	putchar('c')
33*14414Sedward #define esc()	pc(\033)
34*14414Sedward #define PAD(ms10) { \
35*14414Sedward 	register i; \
36*14414Sedward 	for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \
37*14414Sedward 		pc(\0); \
38*14414Sedward }
39*14414Sedward #define ICPAD() PAD((80 - h19_col) * 1)		/* 0.1 ms per char */
40*14414Sedward #define ILPAD() PAD((24 - h19_row) * 10);	/* 1 ms per char */
41*14414Sedward 
42*14414Sedward #define SETINSERT(m) \
43*14414Sedward 	((m) != h19_insert \
44*14414Sedward 		? (esc(), (h19_insert = (m)) ? pc(@) : pc(O)) : 0)
45*14414Sedward #define SETMODES(m) \
46*14414Sedward 	((m) != h19_modes \
47*14414Sedward 		? (esc(), (h19_modes = (m)) ? pc(p) : pc(q)) : 0)
48*14414Sedward #define SETGRAPHICS(m) \
49*14414Sedward 	((m) != h19_graphics \
50*14414Sedward 		? (esc(), (h19_graphics = (m)) ? pc(F) : pc(G)) : 0)
51*14414Sedward 
52*14414Sedward h19_setinsert(new)
53*14414Sedward char new;
54*14414Sedward {
55*14414Sedward 	h19_ninsert = new;
56*14414Sedward }
57*14414Sedward 
58*14414Sedward h19_setmodes(new)
59*14414Sedward {
60*14414Sedward 	h19_nmodes = new & WWM_REV;
61*14414Sedward }
62*14414Sedward 
63*14414Sedward h19_insline()
64*14414Sedward {
65*14414Sedward 	esc();
66*14414Sedward 	pc(L);
67*14414Sedward 	ILPAD();
68*14414Sedward }
69*14414Sedward 
70*14414Sedward h19_delline()
71*14414Sedward {
72*14414Sedward 	esc();
73*14414Sedward 	pc(M);
74*14414Sedward 	ILPAD();
75*14414Sedward }
76*14414Sedward 
77*14414Sedward h19_putc(c)
78*14414Sedward register char c;
79*14414Sedward {
80*14414Sedward 	SETMODES(h19_nmodes);
81*14414Sedward 	SETINSERT(h19_ninsert);
82*14414Sedward 	if (c & 0x80) {
83*14414Sedward 		SETGRAPHICS(1);
84*14414Sedward 		putchar(c & 0x7f);
85*14414Sedward 	} else {
86*14414Sedward 		SETGRAPHICS(0);
87*14414Sedward 		putchar(c);
88*14414Sedward 	}
89*14414Sedward 	if (h19_insert)
90*14414Sedward 		ICPAD();
91*14414Sedward 	h19_col++;
92*14414Sedward }
93*14414Sedward 
94*14414Sedward h19_write(start, end)
95*14414Sedward register char *start, *end;
96*14414Sedward {
97*14414Sedward 	register char c;
98*14414Sedward 
99*14414Sedward 	SETMODES(h19_nmodes);
100*14414Sedward 	SETINSERT(h19_ninsert);
101*14414Sedward 	if (h19_insert) {
102*14414Sedward 		while (start <= end) {
103*14414Sedward 			if ((c = *start++) & 0x80) {
104*14414Sedward 				SETGRAPHICS(1);
105*14414Sedward 				putchar(c & 0x7f);
106*14414Sedward 			} else {
107*14414Sedward 				SETGRAPHICS(0);
108*14414Sedward 				putchar(c);
109*14414Sedward 			}
110*14414Sedward 			ICPAD();
111*14414Sedward 			h19_col++;
112*14414Sedward 		}
113*14414Sedward 	} else {
114*14414Sedward 		h19_col += end - start + 1;
115*14414Sedward 		while (start <= end)
116*14414Sedward 			if ((c = *start++) & 0x80) {
117*14414Sedward 				SETGRAPHICS(1);
118*14414Sedward 				putchar(c & 0x7f);
119*14414Sedward 			} else {
120*14414Sedward 				SETGRAPHICS(0);
121*14414Sedward 				putchar(c);
122*14414Sedward 			}
123*14414Sedward 	}
124*14414Sedward }
125*14414Sedward 
126*14414Sedward h19_blank(n)
127*14414Sedward register n;
128*14414Sedward {
129*14414Sedward 	if (n <= 0)
130*14414Sedward 		return;
131*14414Sedward 	SETMODES(h19_nmodes);
132*14414Sedward 	SETINSERT(h19_ninsert);
133*14414Sedward 	if (h19_insert) {
134*14414Sedward 		while (--n >= 0) {
135*14414Sedward 			putchar(' ');
136*14414Sedward 			ICPAD();
137*14414Sedward 			h19_col++;
138*14414Sedward 		}
139*14414Sedward 	} else {
140*14414Sedward 		h19_col += n;
141*14414Sedward 		while (--n >= 0)
142*14414Sedward 			putchar(' ');
143*14414Sedward 	}
144*14414Sedward }
145*14414Sedward 
146*14414Sedward h19_move(row, col)
147*14414Sedward register char row, col;
148*14414Sedward {
149*14414Sedward 	if (h19_row == row) {
150*14414Sedward 		if (h19_col == col)
151*14414Sedward 			return;
152*14414Sedward 		if (h19_col == col - 1) {
153*14414Sedward 			esc();
154*14414Sedward 			pc(C);
155*14414Sedward 			goto out;
156*14414Sedward 		} else if (h19_col == col + 1) {
157*14414Sedward 			pc(\b);
158*14414Sedward 			goto out;
159*14414Sedward 		}
160*14414Sedward 	}
161*14414Sedward 	if (h19_col == col) {
162*14414Sedward 		if (h19_row == row + 1) {
163*14414Sedward 			esc();
164*14414Sedward 			pc(A);
165*14414Sedward 			goto out;
166*14414Sedward 		} else if (h19_row == row + 1) {
167*14414Sedward 			pc(\n);
168*14414Sedward 			goto out;
169*14414Sedward 		}
170*14414Sedward 	}
171*14414Sedward 	if (col == 1 && row == 1) {
172*14414Sedward 		esc();
173*14414Sedward 		pc(H);
174*14414Sedward 		goto out;
175*14414Sedward 	}
176*14414Sedward 	esc();
177*14414Sedward 	pc(Y);
178*14414Sedward 	putchar(' ' + row);
179*14414Sedward 	putchar(' ' + col);
180*14414Sedward out:
181*14414Sedward 	h19_col = col;
182*14414Sedward 	h19_row = row;
183*14414Sedward }
184*14414Sedward 
185*14414Sedward h19_init()
186*14414Sedward {
187*14414Sedward 	float cpms = (float) wwbaud / 10000;	/* char per ms */
188*14414Sedward 
189*14414Sedward 	h19_msp10c = 10 / cpms;			/* ms per 10 char */
190*14414Sedward #ifdef notdef
191*14414Sedward 	tt.tt_ILmf = cpms;			/* 1 ms */
192*14414Sedward 	tt.tt_ILov = 2;
193*14414Sedward 	tt.tt_ICmf = cpms * 1.5 ;		/* 1.5 ms */
194*14414Sedward 	tt.tt_ICov = 2;
195*14414Sedward 	tt.tt_DCmf = 0;
196*14414Sedward 	tt.tt_DCov = 2;
197*14414Sedward #endif
198*14414Sedward 	return 0;
199*14414Sedward }
200*14414Sedward 
201*14414Sedward h19_reset()
202*14414Sedward {
203*14414Sedward 	esc();
204*14414Sedward 	pc(x);
205*14414Sedward 	pc(4);
206*14414Sedward 	esc();
207*14414Sedward 	pc(E);
208*14414Sedward 	esc();
209*14414Sedward 	pc(w);
210*14414Sedward 	h19_col = h19_row = 0;
211*14414Sedward 	h19_insert = 0;
212*14414Sedward 	h19_graphics = 0;
213*14414Sedward 	h19_modes = 0;
214*14414Sedward }
215*14414Sedward 
216*14414Sedward h19_cleanup()
217*14414Sedward {
218*14414Sedward 	SETMODES(0);
219*14414Sedward 	SETINSERT(0);
220*14414Sedward 	SETGRAPHICS(0);
221*14414Sedward 	esc();
222*14414Sedward 	pc(y);
223*14414Sedward 	pc(4);
224*14414Sedward 	esc();
225*14414Sedward 	pc(v);
226*14414Sedward }
227*14414Sedward 
228*14414Sedward h19_clreol()
229*14414Sedward {
230*14414Sedward 	esc();
231*14414Sedward 	pc(K);
232*14414Sedward }
233*14414Sedward 
234*14414Sedward h19_clreos()
235*14414Sedward {
236*14414Sedward 	esc();
237*14414Sedward 	pc(J);
238*14414Sedward }
239*14414Sedward 
240*14414Sedward h19_clear()
241*14414Sedward {
242*14414Sedward 	esc();
243*14414Sedward 	pc(E);
244*14414Sedward }
245*14414Sedward 
246*14414Sedward h19_delchar()
247*14414Sedward {
248*14414Sedward 	esc();
249*14414Sedward 	pc(N);
250*14414Sedward }
251*14414Sedward 
252*14414Sedward tt_h19()
253*14414Sedward {
254*14414Sedward 	tt.tt_setinsert = h19_setinsert;
255*14414Sedward 	tt.tt_setmodes = h19_setmodes;
256*14414Sedward 	tt.tt_insline = h19_insline;
257*14414Sedward 	tt.tt_delline = h19_delline;
258*14414Sedward 	tt.tt_delchar = h19_delchar;
259*14414Sedward 	tt.tt_blank = h19_blank;
260*14414Sedward 	tt.tt_init = h19_init;
261*14414Sedward 	tt.tt_cleanup = h19_cleanup;
262*14414Sedward 	tt.tt_clreol = h19_clreol;
263*14414Sedward 	tt.tt_clreos = h19_clreos;
264*14414Sedward 	tt.tt_clear = h19_clear;
265*14414Sedward 	tt.tt_move = h19_move;
266*14414Sedward 	tt.tt_reset = h19_reset;
267*14414Sedward 	tt.tt_write = h19_write;
268*14414Sedward 	tt.tt_putc = h19_putc;
269*14414Sedward 	tt.tt_ncol = 80;
270*14414Sedward 	tt.tt_nrow = 24;
271*14414Sedward 	tt.tt_frame = h19_frame;
272*14414Sedward 	return 0;
273*14414Sedward }
274