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