xref: /csrg-svn/usr.bin/window/tth19.c (revision 15651)
114414Sedward #ifndef lint
2*15651Sedward static	char *sccsid = "@(#)tth19.c	3.10 83/12/02";
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 
2014991Sedward #define NCOL	80
2114991Sedward #define NROW	24
2214991Sedward 
2314414Sedward char h19_frame[16] = {
2414414Sedward 	' ',      '`'|0x80, 'a'|0x80, 'e'|0x80,
2514414Sedward 	'`'|0x80, '`'|0x80, 'f'|0x80, 'v'|0x80,
2614414Sedward 	'a'|0x80, 'd'|0x80, 'a'|0x80, 'u'|0x80,
2714414Sedward 	'c'|0x80, 't'|0x80, 's'|0x80, 'b'|0x80
2814414Sedward };
2914414Sedward 
3014991Sedward extern char *gen_VS;
3114991Sedward extern char *gen_VE;
3214991Sedward 
3314991Sedward char h19_graphics;			/* in graphics mode */
3414414Sedward short h19_msp10c;
3514414Sedward 
3614414Sedward #define pc(c)	putchar('c')
3714414Sedward #define esc()	pc(\033)
3814414Sedward #define PAD(ms10) { \
3914414Sedward 	register i; \
4014414Sedward 	for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \
4114414Sedward 		pc(\0); \
4214414Sedward }
4314991Sedward #define ICPAD() PAD((NCOL - tt.tt_col) * 1)	/* 0.1 ms per char */
4414991Sedward #define ILPAD() PAD((NROW - tt.tt_row) * 10)	/* 1 ms per char */
4514414Sedward 
4614414Sedward #define SETINSERT(m) \
4714991Sedward 	((m) != tt.tt_insert \
4814991Sedward 		? (esc(), (tt.tt_insert = (m)) ? pc(@) : pc(O)) : 0)
4914414Sedward #define SETMODES(m) \
5014991Sedward 	((m) != tt.tt_modes \
5114991Sedward 		? (esc(), (tt.tt_modes = (m)) ? pc(p) : pc(q)) : 0)
5214414Sedward #define SETGRAPHICS(m) \
5314414Sedward 	((m) != h19_graphics \
5414414Sedward 		? (esc(), (h19_graphics = (m)) ? pc(F) : pc(G)) : 0)
5514414Sedward 
5614414Sedward h19_insline()
5714414Sedward {
5814414Sedward 	esc();
5914414Sedward 	pc(L);
6014414Sedward 	ILPAD();
6114414Sedward }
6214414Sedward 
6314414Sedward h19_delline()
6414414Sedward {
6514414Sedward 	esc();
6614414Sedward 	pc(M);
6714414Sedward 	ILPAD();
6814414Sedward }
6914414Sedward 
7014414Sedward h19_putc(c)
7114414Sedward register char c;
7214414Sedward {
7314991Sedward 	SETMODES(tt.tt_nmodes);
7414991Sedward 	SETINSERT(tt.tt_ninsert);
7514414Sedward 	if (c & 0x80) {
7614414Sedward 		SETGRAPHICS(1);
7714414Sedward 		putchar(c & 0x7f);
7814414Sedward 	} else {
7914414Sedward 		SETGRAPHICS(0);
8014414Sedward 		putchar(c);
8114414Sedward 	}
8214991Sedward 	if (tt.tt_insert)
8314414Sedward 		ICPAD();
8414991Sedward 	if (++tt.tt_col == NCOL)
8514991Sedward 		tt.tt_col = NCOL - 1;
8614414Sedward }
8714414Sedward 
8814991Sedward h19_write(p, n)
8914991Sedward register char *p;
9014991Sedward register n;
9114414Sedward {
9214414Sedward 	register char c;
9314414Sedward 
9414991Sedward 	SETMODES(tt.tt_nmodes);
9514991Sedward 	SETINSERT(tt.tt_ninsert);
9614991Sedward 	if (tt.tt_insert) {
9714991Sedward 		while (--n >= 0) {
9814991Sedward 			if ((c = *p++) & 0x80) {
9914414Sedward 				SETGRAPHICS(1);
10014414Sedward 				putchar(c & 0x7f);
10114414Sedward 			} else {
10214414Sedward 				SETGRAPHICS(0);
10314414Sedward 				putchar(c);
10414414Sedward 			}
10514414Sedward 			ICPAD();
10614991Sedward 			tt.tt_col++;
10714414Sedward 		}
10814414Sedward 	} else {
10914991Sedward 		tt.tt_col += n;
11014991Sedward 		while (--n >= 0)
11114991Sedward 			if ((c = *p++) & 0x80) {
11214414Sedward 				SETGRAPHICS(1);
11314414Sedward 				putchar(c & 0x7f);
11414414Sedward 			} else {
11514414Sedward 				SETGRAPHICS(0);
11614414Sedward 				putchar(c);
11714414Sedward 			}
11814414Sedward 	}
11914991Sedward 	if (tt.tt_col == NCOL)
12014991Sedward 		tt.tt_col = NCOL - 1;
12114414Sedward }
12214414Sedward 
12314414Sedward h19_move(row, col)
12414414Sedward register char row, col;
12514414Sedward {
12614991Sedward 	if (tt.tt_row == row) {
12714991Sedward 		if (tt.tt_col == col)
12814414Sedward 			return;
12914991Sedward 		if (tt.tt_col == col - 1) {
13014414Sedward 			esc();
13114414Sedward 			pc(C);
13214414Sedward 			goto out;
13314991Sedward 		} else if (tt.tt_col == col + 1) {
13414414Sedward 			pc(\b);
13514414Sedward 			goto out;
13614414Sedward 		}
13714414Sedward 	}
13814991Sedward 	if (tt.tt_col == col) {
13914991Sedward 		if (tt.tt_row == row + 1) {
14014414Sedward 			esc();
14114414Sedward 			pc(A);
14214414Sedward 			goto out;
143*15651Sedward 		} else if (tt.tt_row == row - 1) {
14414414Sedward 			pc(\n);
14514414Sedward 			goto out;
14614414Sedward 		}
14714414Sedward 	}
14814589Sedward 	if (col == 0 && row == 0) {
14914414Sedward 		esc();
15014414Sedward 		pc(H);
15114414Sedward 		goto out;
15214414Sedward 	}
15314414Sedward 	esc();
15414414Sedward 	pc(Y);
15514414Sedward 	putchar(' ' + row);
15614414Sedward 	putchar(' ' + col);
15714414Sedward out:
15814991Sedward 	tt.tt_col = col;
15914991Sedward 	tt.tt_row = row;
16014414Sedward }
16114414Sedward 
16214414Sedward h19_init()
16314414Sedward {
16414991Sedward 	if (gen_VS)
16514991Sedward 		fputs(gen_VS, stdout);
16614414Sedward 	esc();
16714690Sedward 	pc(w);
16814414Sedward 	esc();
16914414Sedward 	pc(E);
17014991Sedward 	tt.tt_col = tt.tt_row = 0;
17114991Sedward 	tt.tt_ninsert = tt.tt_insert = 0;
17214991Sedward 	tt.tt_nmodes = tt.tt_modes = 0;
17314414Sedward 	h19_graphics = 0;
17414414Sedward }
17514414Sedward 
17614649Sedward h19_end()
17714414Sedward {
17814414Sedward 	SETMODES(0);
17914414Sedward 	SETINSERT(0);
18014414Sedward 	SETGRAPHICS(0);
18114991Sedward 	if (gen_VE)
18214991Sedward 		fputs(gen_VE, stdout);
18314414Sedward 	esc();
18414414Sedward 	pc(v);
18514414Sedward }
18614414Sedward 
18714414Sedward h19_clreol()
18814414Sedward {
18914414Sedward 	esc();
19014414Sedward 	pc(K);
19114414Sedward }
19214414Sedward 
19314414Sedward h19_clreos()
19414414Sedward {
19514414Sedward 	esc();
19614414Sedward 	pc(J);
19714414Sedward }
19814414Sedward 
19914414Sedward h19_clear()
20014414Sedward {
20114414Sedward 	esc();
20214414Sedward 	pc(E);
20314414Sedward }
20414414Sedward 
20514414Sedward h19_delchar()
20614414Sedward {
20714414Sedward 	esc();
20814414Sedward 	pc(N);
20914414Sedward }
21014414Sedward 
21114414Sedward tt_h19()
21214414Sedward {
21314649Sedward 	float cpms = (float) wwbaud / 10000;	/* char per ms */
21414649Sedward 
21514649Sedward 	h19_msp10c = 10 / cpms;			/* ms per 10 char */
21614991Sedward 	gen_VS = tt_xgetstr("vs");
21714991Sedward 	gen_VE = tt_xgetstr("ve");
21814991Sedward 
21914991Sedward 	tt.tt_init = h19_init;
22014991Sedward 	tt.tt_end = h19_end;
22114991Sedward 
22214414Sedward 	tt.tt_insline = h19_insline;
22314414Sedward 	tt.tt_delline = h19_delline;
22414414Sedward 	tt.tt_delchar = h19_delchar;
22514414Sedward 	tt.tt_clreol = h19_clreol;
22614414Sedward 	tt.tt_clreos = h19_clreos;
22714414Sedward 	tt.tt_clear = h19_clear;
22814414Sedward 	tt.tt_move = h19_move;
22914414Sedward 	tt.tt_write = h19_write;
23014414Sedward 	tt.tt_putc = h19_putc;
23114991Sedward 
23214991Sedward 	tt.tt_ncol = NCOL;
23314991Sedward 	tt.tt_nrow = NROW;
23414991Sedward 	tt.tt_hasinsert = 1;
23514678Sedward 	tt.tt_availmodes = WWM_REV;
23614414Sedward 	tt.tt_frame = h19_frame;
23714414Sedward 	return 0;
23814414Sedward }
239