xref: /csrg-svn/usr.bin/window/tth19.c (revision 14678)
114414Sedward #ifndef lint
2*14678Sedward static	char *sccsid = "@(#)tth19.c	3.5 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;
3214414Sedward 
3314414Sedward #define pc(c)	putchar('c')
3414414Sedward #define esc()	pc(\033)
3514414Sedward #define PAD(ms10) { \
3614414Sedward 	register i; \
3714414Sedward 	for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \
3814414Sedward 		pc(\0); \
3914414Sedward }
4014414Sedward #define ICPAD() PAD((80 - h19_col) * 1)		/* 0.1 ms per char */
4114414Sedward #define ILPAD() PAD((24 - h19_row) * 10);	/* 1 ms per char */
4214414Sedward 
4314414Sedward #define SETINSERT(m) \
4414414Sedward 	((m) != h19_insert \
4514414Sedward 		? (esc(), (h19_insert = (m)) ? pc(@) : pc(O)) : 0)
4614414Sedward #define SETMODES(m) \
4714414Sedward 	((m) != h19_modes \
4814414Sedward 		? (esc(), (h19_modes = (m)) ? pc(p) : pc(q)) : 0)
4914414Sedward #define SETGRAPHICS(m) \
5014414Sedward 	((m) != h19_graphics \
5114414Sedward 		? (esc(), (h19_graphics = (m)) ? pc(F) : pc(G)) : 0)
5214414Sedward 
5314414Sedward h19_setinsert(new)
5414414Sedward char new;
5514414Sedward {
5614414Sedward 	h19_ninsert = new;
5714414Sedward }
5814414Sedward 
5914414Sedward h19_setmodes(new)
6014414Sedward {
6114414Sedward 	h19_nmodes = new & WWM_REV;
6214414Sedward }
6314414Sedward 
6414414Sedward h19_insline()
6514414Sedward {
6614414Sedward 	esc();
6714414Sedward 	pc(L);
6814414Sedward 	ILPAD();
6914414Sedward }
7014414Sedward 
7114414Sedward h19_delline()
7214414Sedward {
7314414Sedward 	esc();
7414414Sedward 	pc(M);
7514414Sedward 	ILPAD();
7614414Sedward }
7714414Sedward 
7814414Sedward h19_putc(c)
7914414Sedward register char c;
8014414Sedward {
8114414Sedward 	SETMODES(h19_nmodes);
8214414Sedward 	SETINSERT(h19_ninsert);
8314414Sedward 	if (c & 0x80) {
8414414Sedward 		SETGRAPHICS(1);
8514414Sedward 		putchar(c & 0x7f);
8614414Sedward 	} else {
8714414Sedward 		SETGRAPHICS(0);
8814414Sedward 		putchar(c);
8914414Sedward 	}
9014414Sedward 	if (h19_insert)
9114414Sedward 		ICPAD();
9214414Sedward 	h19_col++;
9314414Sedward }
9414414Sedward 
9514414Sedward h19_write(start, end)
9614414Sedward register char *start, *end;
9714414Sedward {
9814414Sedward 	register char c;
9914414Sedward 
10014414Sedward 	SETMODES(h19_nmodes);
10114414Sedward 	SETINSERT(h19_ninsert);
10214414Sedward 	if (h19_insert) {
10314414Sedward 		while (start <= end) {
10414414Sedward 			if ((c = *start++) & 0x80) {
10514414Sedward 				SETGRAPHICS(1);
10614414Sedward 				putchar(c & 0x7f);
10714414Sedward 			} else {
10814414Sedward 				SETGRAPHICS(0);
10914414Sedward 				putchar(c);
11014414Sedward 			}
11114414Sedward 			ICPAD();
11214414Sedward 			h19_col++;
11314414Sedward 		}
11414414Sedward 	} else {
11514414Sedward 		h19_col += end - start + 1;
11614414Sedward 		while (start <= end)
11714414Sedward 			if ((c = *start++) & 0x80) {
11814414Sedward 				SETGRAPHICS(1);
11914414Sedward 				putchar(c & 0x7f);
12014414Sedward 			} else {
12114414Sedward 				SETGRAPHICS(0);
12214414Sedward 				putchar(c);
12314414Sedward 			}
12414414Sedward 	}
12514414Sedward }
12614414Sedward 
12714414Sedward h19_blank(n)
12814414Sedward register n;
12914414Sedward {
13014414Sedward 	if (n <= 0)
13114414Sedward 		return;
13214414Sedward 	SETMODES(h19_nmodes);
13314414Sedward 	SETINSERT(h19_ninsert);
13414414Sedward 	if (h19_insert) {
13514414Sedward 		while (--n >= 0) {
13614414Sedward 			putchar(' ');
13714414Sedward 			ICPAD();
13814414Sedward 			h19_col++;
13914414Sedward 		}
14014414Sedward 	} else {
14114414Sedward 		h19_col += n;
14214414Sedward 		while (--n >= 0)
14314414Sedward 			putchar(' ');
14414414Sedward 	}
14514414Sedward }
14614414Sedward 
14714414Sedward h19_move(row, col)
14814414Sedward register char row, col;
14914414Sedward {
15014414Sedward 	if (h19_row == row) {
15114414Sedward 		if (h19_col == col)
15214414Sedward 			return;
15314414Sedward 		if (h19_col == col - 1) {
15414414Sedward 			esc();
15514414Sedward 			pc(C);
15614414Sedward 			goto out;
15714414Sedward 		} else if (h19_col == col + 1) {
15814414Sedward 			pc(\b);
15914414Sedward 			goto out;
16014414Sedward 		}
16114414Sedward 	}
16214414Sedward 	if (h19_col == col) {
16314414Sedward 		if (h19_row == row + 1) {
16414414Sedward 			esc();
16514414Sedward 			pc(A);
16614414Sedward 			goto out;
16714414Sedward 		} else if (h19_row == row + 1) {
16814414Sedward 			pc(\n);
16914414Sedward 			goto out;
17014414Sedward 		}
17114414Sedward 	}
17214589Sedward 	if (col == 0 && row == 0) {
17314414Sedward 		esc();
17414414Sedward 		pc(H);
17514414Sedward 		goto out;
17614414Sedward 	}
17714414Sedward 	esc();
17814414Sedward 	pc(Y);
17914414Sedward 	putchar(' ' + row);
18014414Sedward 	putchar(' ' + col);
18114414Sedward out:
18214414Sedward 	h19_col = col;
18314414Sedward 	h19_row = row;
18414414Sedward }
18514414Sedward 
18614414Sedward h19_init()
18714414Sedward {
18814414Sedward 	esc();
18914414Sedward 	pc(x);
19014414Sedward 	pc(4);
19114414Sedward 	esc();
19214414Sedward 	pc(E);
19314414Sedward 	esc();
19414414Sedward 	pc(w);
19514414Sedward 	h19_col = h19_row = 0;
19614414Sedward 	h19_insert = 0;
19714414Sedward 	h19_graphics = 0;
19814414Sedward 	h19_modes = 0;
19914414Sedward }
20014414Sedward 
20114649Sedward h19_end()
20214414Sedward {
20314414Sedward 	SETMODES(0);
20414414Sedward 	SETINSERT(0);
20514414Sedward 	SETGRAPHICS(0);
20614414Sedward 	esc();
20714414Sedward 	pc(y);
20814414Sedward 	pc(4);
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 */
24214414Sedward 	tt.tt_setinsert = h19_setinsert;
24314414Sedward 	tt.tt_setmodes = h19_setmodes;
24414414Sedward 	tt.tt_insline = h19_insline;
24514414Sedward 	tt.tt_delline = h19_delline;
24614414Sedward 	tt.tt_delchar = h19_delchar;
24714414Sedward 	tt.tt_blank = h19_blank;
24814414Sedward 	tt.tt_init = h19_init;
24914649Sedward 	tt.tt_end = h19_end;
25014414Sedward 	tt.tt_clreol = h19_clreol;
25114414Sedward 	tt.tt_clreos = h19_clreos;
25214414Sedward 	tt.tt_clear = h19_clear;
25314414Sedward 	tt.tt_move = h19_move;
25414414Sedward 	tt.tt_write = h19_write;
25514414Sedward 	tt.tt_putc = h19_putc;
25614414Sedward 	tt.tt_ncol = 80;
25714414Sedward 	tt.tt_nrow = 24;
258*14678Sedward 	tt.tt_availmodes = WWM_REV;
25914414Sedward 	tt.tt_frame = h19_frame;
26014414Sedward 	return 0;
26114414Sedward }
262