xref: /csrg-svn/usr.bin/window/tth19.c (revision 14690)
114414Sedward #ifndef lint
2*14690Sedward static	char *sccsid = "@(#)tth19.c	3.6 83/08/17";
314414Sedward #endif
414414Sedward 
514414Sedward #include "ww.h"
614649Sedward #include "tt.h"
714414Sedward 
814414Sedward /*
914414Sedward kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith:
1014414Sedward 	cr=^M:nl=^J:bl=^G:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK:
1114414Sedward 	cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:dl=1*\EM:do=\EB:
1214414Sedward 	ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:ms:
1314414Sedward 	ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4:
1414414Sedward 	kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH:
1514414Sedward 	kn#8:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:
1614414Sedward 	l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER:
1714414Sedward 	es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1:
1814414Sedward */
1914414Sedward 
2014414Sedward char h19_frame[16] = {
2114414Sedward 	' ',      '`'|0x80, 'a'|0x80, 'e'|0x80,
2214414Sedward 	'`'|0x80, '`'|0x80, 'f'|0x80, 'v'|0x80,
2314414Sedward 	'a'|0x80, 'd'|0x80, 'a'|0x80, 'u'|0x80,
2414414Sedward 	'c'|0x80, 't'|0x80, 's'|0x80, 'b'|0x80
2514414Sedward };
2614414Sedward 
2714414Sedward char h19_row, h19_col;
2814414Sedward char h19_modes, h19_nmodes;
2914414Sedward char h19_insert, h19_ninsert;
3014414Sedward char h19_graphics;
3114414Sedward short h19_msp10c;
32*14690Sedward char *h19_VS;
33*14690Sedward char *h19_VE;
3414414Sedward 
3514414Sedward #define pc(c)	putchar('c')
3614414Sedward #define esc()	pc(\033)
3714414Sedward #define PAD(ms10) { \
3814414Sedward 	register i; \
3914414Sedward 	for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \
4014414Sedward 		pc(\0); \
4114414Sedward }
4214414Sedward #define ICPAD() PAD((80 - h19_col) * 1)		/* 0.1 ms per char */
4314414Sedward #define ILPAD() PAD((24 - h19_row) * 10);	/* 1 ms per char */
4414414Sedward 
4514414Sedward #define SETINSERT(m) \
4614414Sedward 	((m) != h19_insert \
4714414Sedward 		? (esc(), (h19_insert = (m)) ? pc(@) : pc(O)) : 0)
4814414Sedward #define SETMODES(m) \
4914414Sedward 	((m) != h19_modes \
5014414Sedward 		? (esc(), (h19_modes = (m)) ? pc(p) : pc(q)) : 0)
5114414Sedward #define SETGRAPHICS(m) \
5214414Sedward 	((m) != h19_graphics \
5314414Sedward 		? (esc(), (h19_graphics = (m)) ? pc(F) : pc(G)) : 0)
5414414Sedward 
5514414Sedward h19_setinsert(new)
5614414Sedward char new;
5714414Sedward {
5814414Sedward 	h19_ninsert = new;
5914414Sedward }
6014414Sedward 
6114414Sedward h19_setmodes(new)
6214414Sedward {
6314414Sedward 	h19_nmodes = new & WWM_REV;
6414414Sedward }
6514414Sedward 
6614414Sedward h19_insline()
6714414Sedward {
6814414Sedward 	esc();
6914414Sedward 	pc(L);
7014414Sedward 	ILPAD();
7114414Sedward }
7214414Sedward 
7314414Sedward h19_delline()
7414414Sedward {
7514414Sedward 	esc();
7614414Sedward 	pc(M);
7714414Sedward 	ILPAD();
7814414Sedward }
7914414Sedward 
8014414Sedward h19_putc(c)
8114414Sedward register char c;
8214414Sedward {
8314414Sedward 	SETMODES(h19_nmodes);
8414414Sedward 	SETINSERT(h19_ninsert);
8514414Sedward 	if (c & 0x80) {
8614414Sedward 		SETGRAPHICS(1);
8714414Sedward 		putchar(c & 0x7f);
8814414Sedward 	} else {
8914414Sedward 		SETGRAPHICS(0);
9014414Sedward 		putchar(c);
9114414Sedward 	}
9214414Sedward 	if (h19_insert)
9314414Sedward 		ICPAD();
9414414Sedward 	h19_col++;
9514414Sedward }
9614414Sedward 
9714414Sedward h19_write(start, end)
9814414Sedward register char *start, *end;
9914414Sedward {
10014414Sedward 	register char c;
10114414Sedward 
10214414Sedward 	SETMODES(h19_nmodes);
10314414Sedward 	SETINSERT(h19_ninsert);
10414414Sedward 	if (h19_insert) {
10514414Sedward 		while (start <= end) {
10614414Sedward 			if ((c = *start++) & 0x80) {
10714414Sedward 				SETGRAPHICS(1);
10814414Sedward 				putchar(c & 0x7f);
10914414Sedward 			} else {
11014414Sedward 				SETGRAPHICS(0);
11114414Sedward 				putchar(c);
11214414Sedward 			}
11314414Sedward 			ICPAD();
11414414Sedward 			h19_col++;
11514414Sedward 		}
11614414Sedward 	} else {
11714414Sedward 		h19_col += end - start + 1;
11814414Sedward 		while (start <= end)
11914414Sedward 			if ((c = *start++) & 0x80) {
12014414Sedward 				SETGRAPHICS(1);
12114414Sedward 				putchar(c & 0x7f);
12214414Sedward 			} else {
12314414Sedward 				SETGRAPHICS(0);
12414414Sedward 				putchar(c);
12514414Sedward 			}
12614414Sedward 	}
12714414Sedward }
12814414Sedward 
12914414Sedward h19_blank(n)
13014414Sedward register n;
13114414Sedward {
13214414Sedward 	if (n <= 0)
13314414Sedward 		return;
13414414Sedward 	SETMODES(h19_nmodes);
13514414Sedward 	SETINSERT(h19_ninsert);
13614414Sedward 	if (h19_insert) {
13714414Sedward 		while (--n >= 0) {
13814414Sedward 			putchar(' ');
13914414Sedward 			ICPAD();
14014414Sedward 			h19_col++;
14114414Sedward 		}
14214414Sedward 	} else {
14314414Sedward 		h19_col += n;
14414414Sedward 		while (--n >= 0)
14514414Sedward 			putchar(' ');
14614414Sedward 	}
14714414Sedward }
14814414Sedward 
14914414Sedward h19_move(row, col)
15014414Sedward register char row, col;
15114414Sedward {
15214414Sedward 	if (h19_row == row) {
15314414Sedward 		if (h19_col == col)
15414414Sedward 			return;
15514414Sedward 		if (h19_col == col - 1) {
15614414Sedward 			esc();
15714414Sedward 			pc(C);
15814414Sedward 			goto out;
15914414Sedward 		} else if (h19_col == col + 1) {
16014414Sedward 			pc(\b);
16114414Sedward 			goto out;
16214414Sedward 		}
16314414Sedward 	}
16414414Sedward 	if (h19_col == col) {
16514414Sedward 		if (h19_row == row + 1) {
16614414Sedward 			esc();
16714414Sedward 			pc(A);
16814414Sedward 			goto out;
16914414Sedward 		} else if (h19_row == row + 1) {
17014414Sedward 			pc(\n);
17114414Sedward 			goto out;
17214414Sedward 		}
17314414Sedward 	}
17414589Sedward 	if (col == 0 && row == 0) {
17514414Sedward 		esc();
17614414Sedward 		pc(H);
17714414Sedward 		goto out;
17814414Sedward 	}
17914414Sedward 	esc();
18014414Sedward 	pc(Y);
18114414Sedward 	putchar(' ' + row);
18214414Sedward 	putchar(' ' + col);
18314414Sedward out:
18414414Sedward 	h19_col = col;
18514414Sedward 	h19_row = row;
18614414Sedward }
18714414Sedward 
18814414Sedward h19_init()
18914414Sedward {
190*14690Sedward 	if (h19_VS)
191*14690Sedward 		fputs(h19_VS, stdout);
19214414Sedward 	esc();
193*14690Sedward 	pc(w);
19414414Sedward 	esc();
19514414Sedward 	pc(E);
19614414Sedward 	h19_col = h19_row = 0;
19714414Sedward 	h19_insert = 0;
19814414Sedward 	h19_graphics = 0;
19914414Sedward 	h19_modes = 0;
20014414Sedward }
20114414Sedward 
20214649Sedward h19_end()
20314414Sedward {
20414414Sedward 	SETMODES(0);
20514414Sedward 	SETINSERT(0);
20614414Sedward 	SETGRAPHICS(0);
207*14690Sedward 	if (h19_VE)
208*14690Sedward 		fputs(h19_VE, stdout);
20914414Sedward 	esc();
21014414Sedward 	pc(v);
21114414Sedward }
21214414Sedward 
21314414Sedward h19_clreol()
21414414Sedward {
21514414Sedward 	esc();
21614414Sedward 	pc(K);
21714414Sedward }
21814414Sedward 
21914414Sedward h19_clreos()
22014414Sedward {
22114414Sedward 	esc();
22214414Sedward 	pc(J);
22314414Sedward }
22414414Sedward 
22514414Sedward h19_clear()
22614414Sedward {
22714414Sedward 	esc();
22814414Sedward 	pc(E);
22914414Sedward }
23014414Sedward 
23114414Sedward h19_delchar()
23214414Sedward {
23314414Sedward 	esc();
23414414Sedward 	pc(N);
23514414Sedward }
23614414Sedward 
23714414Sedward tt_h19()
23814414Sedward {
23914649Sedward 	float cpms = (float) wwbaud / 10000;	/* char per ms */
24014649Sedward 
24114649Sedward 	h19_msp10c = 10 / cpms;			/* ms per 10 char */
242*14690Sedward 	h19_VS = tt_xgetstr("vs");
243*14690Sedward 	h19_VE = tt_xgetstr("ve");
24414414Sedward 	tt.tt_setinsert = h19_setinsert;
24514414Sedward 	tt.tt_setmodes = h19_setmodes;
24614414Sedward 	tt.tt_insline = h19_insline;
24714414Sedward 	tt.tt_delline = h19_delline;
24814414Sedward 	tt.tt_delchar = h19_delchar;
24914414Sedward 	tt.tt_blank = h19_blank;
25014414Sedward 	tt.tt_init = h19_init;
25114649Sedward 	tt.tt_end = h19_end;
25214414Sedward 	tt.tt_clreol = h19_clreol;
25314414Sedward 	tt.tt_clreos = h19_clreos;
25414414Sedward 	tt.tt_clear = h19_clear;
25514414Sedward 	tt.tt_move = h19_move;
25614414Sedward 	tt.tt_write = h19_write;
25714414Sedward 	tt.tt_putc = h19_putc;
25814414Sedward 	tt.tt_ncol = 80;
25914414Sedward 	tt.tt_nrow = 24;
26014678Sedward 	tt.tt_availmodes = WWM_REV;
26114414Sedward 	tt.tt_frame = h19_frame;
26214414Sedward 	return 0;
26314414Sedward }
264