xref: /csrg-svn/usr.bin/window/tth19.c (revision 16122)
114414Sedward #ifndef lint
2*16122Sedward static	char *sccsid = "@(#)tth19.c	3.12 84/03/03";
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 
2315733Sedward #define G (WWM_GRP << WWC_MSHIFT)
2415733Sedward short h19_frame[16] = {
2515733Sedward 	' ',	'`'|G,	'a'|G,	'e'|G,
2615733Sedward 	'`'|G,	'`'|G,	'f'|G,	'v'|G,
2715733Sedward 	'a'|G,	'd'|G,	'a'|G,	'u'|G,
2815733Sedward 	'c'|G,	't'|G,	's'|G,	'b'|G
2914414Sedward };
3014414Sedward 
3114991Sedward extern char *gen_VS;
3214991Sedward extern char *gen_VE;
3314991Sedward 
3415733Sedward int h19_msp10c;
3514414Sedward 
36*16122Sedward #define pc(c)	ttputc('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 
4615733Sedward #define h19_setinsert(m) (esc(), (tt.tt_insert = (m)) ? pc(@) : pc(O))
4714414Sedward 
4815733Sedward h19_setmodes(new)
4915733Sedward register new;
5015733Sedward {
5115733Sedward 	register diff;
5215733Sedward 
5315733Sedward 	diff = new ^ tt.tt_modes;
5415733Sedward 	if (diff & WWM_REV) {
5515733Sedward 		esc();
5615733Sedward 		if (new & WWM_REV)
5715733Sedward 			pc(p);
5815733Sedward 		else
5915733Sedward 			pc(q);
6015733Sedward 	}
6115733Sedward 	if (diff & WWM_GRP) {
6215733Sedward 		esc();
6315733Sedward 		if (new & WWM_GRP)
6415733Sedward 			pc(F);
6515733Sedward 		else
6615733Sedward 			pc(G);
6715733Sedward 	}
6815733Sedward 	tt.tt_modes = new;
6915733Sedward }
7015733Sedward 
7114414Sedward h19_insline()
7214414Sedward {
7314414Sedward 	esc();
7414414Sedward 	pc(L);
7514414Sedward 	ILPAD();
7614414Sedward }
7714414Sedward 
7814414Sedward h19_delline()
7914414Sedward {
8014414Sedward 	esc();
8114414Sedward 	pc(M);
8214414Sedward 	ILPAD();
8314414Sedward }
8414414Sedward 
8514414Sedward h19_putc(c)
8614414Sedward register char c;
8714414Sedward {
8815733Sedward 	if (tt.tt_nmodes != tt.tt_modes)
8915733Sedward 		h19_setmodes(tt.tt_nmodes);
9015733Sedward 	if (tt.tt_ninsert != tt.tt_insert)
9115733Sedward 		h19_setinsert(tt.tt_ninsert);
92*16122Sedward 	ttputc(c);
9314991Sedward 	if (tt.tt_insert)
9414414Sedward 		ICPAD();
9514991Sedward 	if (++tt.tt_col == NCOL)
9614991Sedward 		tt.tt_col = NCOL - 1;
9714414Sedward }
9814414Sedward 
9914991Sedward h19_write(p, n)
10014991Sedward register char *p;
10114991Sedward register n;
10214414Sedward {
10315733Sedward 	if (tt.tt_nmodes != tt.tt_modes)
10415733Sedward 		h19_setmodes(tt.tt_nmodes);
10515733Sedward 	if (tt.tt_ninsert != tt.tt_insert)
10615733Sedward 		h19_setinsert(tt.tt_ninsert);
10714991Sedward 	if (tt.tt_insert) {
10814991Sedward 		while (--n >= 0) {
109*16122Sedward 			ttputc(*p++);
11014414Sedward 			ICPAD();
11114991Sedward 			tt.tt_col++;
11214414Sedward 		}
11314414Sedward 	} else {
11414991Sedward 		tt.tt_col += n;
11514991Sedward 		while (--n >= 0)
116*16122Sedward 			ttputc(*p++);
11714414Sedward 	}
11814991Sedward 	if (tt.tt_col == NCOL)
11914991Sedward 		tt.tt_col = NCOL - 1;
12014414Sedward }
12114414Sedward 
12214414Sedward h19_move(row, col)
12314414Sedward register char row, col;
12414414Sedward {
12514991Sedward 	if (tt.tt_row == row) {
12614991Sedward 		if (tt.tt_col == col)
12714414Sedward 			return;
12814991Sedward 		if (tt.tt_col == col - 1) {
12914414Sedward 			esc();
13014414Sedward 			pc(C);
13114414Sedward 			goto out;
13214991Sedward 		} else if (tt.tt_col == col + 1) {
13314414Sedward 			pc(\b);
13414414Sedward 			goto out;
13514414Sedward 		}
13614414Sedward 	}
13714991Sedward 	if (tt.tt_col == col) {
13814991Sedward 		if (tt.tt_row == row + 1) {
13914414Sedward 			esc();
14014414Sedward 			pc(A);
14114414Sedward 			goto out;
14215651Sedward 		} else if (tt.tt_row == row - 1) {
14314414Sedward 			pc(\n);
14414414Sedward 			goto out;
14514414Sedward 		}
14614414Sedward 	}
14714589Sedward 	if (col == 0 && row == 0) {
14814414Sedward 		esc();
14914414Sedward 		pc(H);
15014414Sedward 		goto out;
15114414Sedward 	}
15214414Sedward 	esc();
15314414Sedward 	pc(Y);
154*16122Sedward 	ttputc(' ' + row);
155*16122Sedward 	ttputc(' ' + col);
15614414Sedward out:
15714991Sedward 	tt.tt_col = col;
15814991Sedward 	tt.tt_row = row;
15914414Sedward }
16014414Sedward 
16114414Sedward h19_init()
16214414Sedward {
16314991Sedward 	if (gen_VS)
164*16122Sedward 		ttputs(gen_VS);
16514414Sedward 	esc();
16614690Sedward 	pc(w);
16714414Sedward 	esc();
16814414Sedward 	pc(E);
16914991Sedward 	tt.tt_col = tt.tt_row = 0;
17014991Sedward 	tt.tt_ninsert = tt.tt_insert = 0;
17114991Sedward 	tt.tt_nmodes = tt.tt_modes = 0;
17214414Sedward }
17314414Sedward 
17414649Sedward h19_end()
17514414Sedward {
17615733Sedward 	h19_setmodes(0);
17715733Sedward 	h19_setinsert(0);
17814991Sedward 	if (gen_VE)
179*16122Sedward 		ttputs(gen_VE);
18014414Sedward 	esc();
18114414Sedward 	pc(v);
18214414Sedward }
18314414Sedward 
18414414Sedward h19_clreol()
18514414Sedward {
18614414Sedward 	esc();
18714414Sedward 	pc(K);
18814414Sedward }
18914414Sedward 
19014414Sedward h19_clreos()
19114414Sedward {
19214414Sedward 	esc();
19314414Sedward 	pc(J);
19414414Sedward }
19514414Sedward 
19614414Sedward h19_clear()
19714414Sedward {
19814414Sedward 	esc();
19914414Sedward 	pc(E);
20014414Sedward }
20114414Sedward 
20214414Sedward h19_delchar()
20314414Sedward {
20414414Sedward 	esc();
20514414Sedward 	pc(N);
20614414Sedward }
20714414Sedward 
20814414Sedward tt_h19()
20914414Sedward {
21014649Sedward 	float cpms = (float) wwbaud / 10000;	/* char per ms */
21114649Sedward 
21214649Sedward 	h19_msp10c = 10 / cpms;			/* ms per 10 char */
213*16122Sedward 	gen_VS = ttxgetstr("vs");
214*16122Sedward 	gen_VE = ttxgetstr("ve");
21514991Sedward 
21614991Sedward 	tt.tt_init = h19_init;
21714991Sedward 	tt.tt_end = h19_end;
21814991Sedward 
21914414Sedward 	tt.tt_insline = h19_insline;
22014414Sedward 	tt.tt_delline = h19_delline;
22114414Sedward 	tt.tt_delchar = h19_delchar;
22214414Sedward 	tt.tt_clreol = h19_clreol;
22314414Sedward 	tt.tt_clreos = h19_clreos;
22414414Sedward 	tt.tt_clear = h19_clear;
22514414Sedward 	tt.tt_move = h19_move;
22614414Sedward 	tt.tt_write = h19_write;
22714414Sedward 	tt.tt_putc = h19_putc;
22814991Sedward 
22914991Sedward 	tt.tt_ncol = NCOL;
23014991Sedward 	tt.tt_nrow = NROW;
23114991Sedward 	tt.tt_hasinsert = 1;
23215733Sedward 	tt.tt_availmodes = WWM_REV|WWM_GRP;
23314414Sedward 	tt.tt_frame = h19_frame;
23414414Sedward 	return 0;
23514414Sedward }
236