xref: /csrg-svn/usr.bin/window/tth19.c (revision 24975)
114414Sedward #ifndef lint
2*24975Sedward static char sccsid[] = "@(#)tth19.c	3.16 09/20/85";
314414Sedward #endif
414414Sedward 
518739Sedward /*
618739Sedward  * Copyright (c) 1983 Regents of the University of California,
718739Sedward  * All rights reserved.  Redistribution permitted subject to
818739Sedward  * the terms of the Berkeley Software License Agreement.
918739Sedward  */
1018739Sedward 
1114414Sedward #include "ww.h"
1214649Sedward #include "tt.h"
1314414Sedward 
1414414Sedward /*
1514414Sedward kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith:
1614414Sedward 	cr=^M:nl=^J:bl=^G:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK:
1714414Sedward 	cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:dl=1*\EM:do=\EB:
1814414Sedward 	ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:ms:
1914414Sedward 	ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4:
2014414Sedward 	kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH:
2114414Sedward 	kn#8:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:
2214414Sedward 	l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER:
2314414Sedward 	es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1:
2414414Sedward */
2514414Sedward 
2614991Sedward #define NCOL	80
2714991Sedward #define NROW	24
2814991Sedward 
2915733Sedward #define G (WWM_GRP << WWC_MSHIFT)
3015733Sedward short h19_frame[16] = {
3115733Sedward 	' ',	'`'|G,	'a'|G,	'e'|G,
3215733Sedward 	'`'|G,	'`'|G,	'f'|G,	'v'|G,
3315733Sedward 	'a'|G,	'd'|G,	'a'|G,	'u'|G,
3415733Sedward 	'c'|G,	't'|G,	's'|G,	'b'|G
3514414Sedward };
3614414Sedward 
37*24975Sedward extern struct tt_str *gen_VS;
38*24975Sedward extern struct tt_str *gen_VE;
3914991Sedward 
4015733Sedward int h19_msp10c;
4114414Sedward 
4216122Sedward #define pc(c)	ttputc('c')
4314414Sedward #define esc()	pc(\033)
4414414Sedward #define PAD(ms10) { \
4514414Sedward 	register i; \
4614414Sedward 	for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \
4714414Sedward 		pc(\0); \
4814414Sedward }
4914991Sedward #define ICPAD() PAD((NCOL - tt.tt_col) * 1)	/* 0.1 ms per char */
5014991Sedward #define ILPAD() PAD((NROW - tt.tt_row) * 10)	/* 1 ms per char */
5114414Sedward 
5224289Sedward #define H19_SETINSERT(m) (esc(), (tt.tt_insert = (m)) ? pc(@) : pc(O))
5314414Sedward 
5424289Sedward h19_setinsert(new)
5524289Sedward {
5624289Sedward 	H19_SETINSERT(new);
5724289Sedward }
5824289Sedward 
5915733Sedward h19_setmodes(new)
6015733Sedward register new;
6115733Sedward {
6215733Sedward 	register diff;
6315733Sedward 
6415733Sedward 	diff = new ^ tt.tt_modes;
6515733Sedward 	if (diff & WWM_REV) {
6615733Sedward 		esc();
6715733Sedward 		if (new & WWM_REV)
6815733Sedward 			pc(p);
6915733Sedward 		else
7015733Sedward 			pc(q);
7115733Sedward 	}
7215733Sedward 	if (diff & WWM_GRP) {
7315733Sedward 		esc();
7415733Sedward 		if (new & WWM_GRP)
7515733Sedward 			pc(F);
7615733Sedward 		else
7715733Sedward 			pc(G);
7815733Sedward 	}
7915733Sedward 	tt.tt_modes = new;
8015733Sedward }
8115733Sedward 
8214414Sedward h19_insline()
8314414Sedward {
8414414Sedward 	esc();
8514414Sedward 	pc(L);
8614414Sedward 	ILPAD();
8714414Sedward }
8814414Sedward 
8914414Sedward h19_delline()
9014414Sedward {
9114414Sedward 	esc();
9214414Sedward 	pc(M);
9314414Sedward 	ILPAD();
9414414Sedward }
9514414Sedward 
9614414Sedward h19_putc(c)
9714414Sedward register char c;
9814414Sedward {
9915733Sedward 	if (tt.tt_nmodes != tt.tt_modes)
10024289Sedward 		(*tt.tt_setmodes)(tt.tt_nmodes);
10115733Sedward 	if (tt.tt_ninsert != tt.tt_insert)
10224289Sedward 		H19_SETINSERT(tt.tt_ninsert);
10316122Sedward 	ttputc(c);
10414991Sedward 	if (tt.tt_insert)
10514414Sedward 		ICPAD();
10614991Sedward 	if (++tt.tt_col == NCOL)
10714991Sedward 		tt.tt_col = NCOL - 1;
10814414Sedward }
10914414Sedward 
11014991Sedward h19_write(p, n)
11114991Sedward register char *p;
11214991Sedward register n;
11314414Sedward {
11415733Sedward 	if (tt.tt_nmodes != tt.tt_modes)
11524289Sedward 		(*tt.tt_setmodes)(tt.tt_nmodes);
11615733Sedward 	if (tt.tt_ninsert != tt.tt_insert)
11724289Sedward 		H19_SETINSERT(tt.tt_ninsert);
11814991Sedward 	if (tt.tt_insert) {
11914991Sedward 		while (--n >= 0) {
12016122Sedward 			ttputc(*p++);
12114414Sedward 			ICPAD();
12214991Sedward 			tt.tt_col++;
12314414Sedward 		}
12414414Sedward 	} else {
12514991Sedward 		tt.tt_col += n;
126*24975Sedward 		ttwrite(p, n);
12714414Sedward 	}
12814991Sedward 	if (tt.tt_col == NCOL)
12914991Sedward 		tt.tt_col = NCOL - 1;
13014414Sedward }
13114414Sedward 
13214414Sedward h19_move(row, col)
13314414Sedward register char row, col;
13414414Sedward {
13514991Sedward 	if (tt.tt_row == row) {
13614991Sedward 		if (tt.tt_col == col)
13714414Sedward 			return;
13814991Sedward 		if (tt.tt_col == col - 1) {
13914414Sedward 			esc();
14014414Sedward 			pc(C);
14114414Sedward 			goto out;
14214991Sedward 		} else if (tt.tt_col == col + 1) {
14314414Sedward 			pc(\b);
14414414Sedward 			goto out;
14514414Sedward 		}
14614414Sedward 	}
14714991Sedward 	if (tt.tt_col == col) {
14814991Sedward 		if (tt.tt_row == row + 1) {
14914414Sedward 			esc();
15014414Sedward 			pc(A);
15114414Sedward 			goto out;
15215651Sedward 		} else if (tt.tt_row == row - 1) {
15314414Sedward 			pc(\n);
15414414Sedward 			goto out;
15514414Sedward 		}
15614414Sedward 	}
15714589Sedward 	if (col == 0 && row == 0) {
15814414Sedward 		esc();
15914414Sedward 		pc(H);
16014414Sedward 		goto out;
16114414Sedward 	}
16214414Sedward 	esc();
16314414Sedward 	pc(Y);
16416122Sedward 	ttputc(' ' + row);
16516122Sedward 	ttputc(' ' + col);
16614414Sedward out:
16714991Sedward 	tt.tt_col = col;
16814991Sedward 	tt.tt_row = row;
16914414Sedward }
17014414Sedward 
17114414Sedward h19_init()
17214414Sedward {
17314991Sedward 	if (gen_VS)
174*24975Sedward 		ttxputs(gen_VS);
17514414Sedward 	esc();
17614690Sedward 	pc(w);
17714414Sedward 	esc();
17814414Sedward 	pc(E);
17914991Sedward 	tt.tt_col = tt.tt_row = 0;
18014991Sedward 	tt.tt_ninsert = tt.tt_insert = 0;
18114991Sedward 	tt.tt_nmodes = tt.tt_modes = 0;
18214414Sedward }
18314414Sedward 
18414649Sedward h19_end()
18514414Sedward {
18614991Sedward 	if (gen_VE)
187*24975Sedward 		ttxputs(gen_VE);
18814414Sedward 	esc();
18914414Sedward 	pc(v);
19014414Sedward }
19114414Sedward 
19214414Sedward h19_clreol()
19314414Sedward {
19414414Sedward 	esc();
19514414Sedward 	pc(K);
19614414Sedward }
19714414Sedward 
19814414Sedward h19_clreos()
19914414Sedward {
20014414Sedward 	esc();
20114414Sedward 	pc(J);
20214414Sedward }
20314414Sedward 
20414414Sedward h19_clear()
20514414Sedward {
20614414Sedward 	esc();
20714414Sedward 	pc(E);
20814414Sedward }
20914414Sedward 
21014414Sedward h19_delchar()
21114414Sedward {
21214414Sedward 	esc();
21314414Sedward 	pc(N);
21414414Sedward }
21514414Sedward 
21614414Sedward tt_h19()
21714414Sedward {
21814649Sedward 	float cpms = (float) wwbaud / 10000;	/* char per ms */
21914649Sedward 
22014649Sedward 	h19_msp10c = 10 / cpms;			/* ms per 10 char */
22116122Sedward 	gen_VS = ttxgetstr("vs");
22216122Sedward 	gen_VE = ttxgetstr("ve");
22314991Sedward 
22414991Sedward 	tt.tt_init = h19_init;
22514991Sedward 	tt.tt_end = h19_end;
22614991Sedward 
22714414Sedward 	tt.tt_insline = h19_insline;
22814414Sedward 	tt.tt_delline = h19_delline;
22914414Sedward 	tt.tt_delchar = h19_delchar;
23014414Sedward 	tt.tt_clreol = h19_clreol;
23114414Sedward 	tt.tt_clreos = h19_clreos;
23214414Sedward 	tt.tt_clear = h19_clear;
23314414Sedward 	tt.tt_move = h19_move;
23414414Sedward 	tt.tt_write = h19_write;
23514414Sedward 	tt.tt_putc = h19_putc;
23624289Sedward 	tt.tt_setinsert = h19_setinsert;
23724289Sedward 	tt.tt_setmodes = h19_setmodes;
23814991Sedward 
23914991Sedward 	tt.tt_ncol = NCOL;
24014991Sedward 	tt.tt_nrow = NROW;
24114991Sedward 	tt.tt_hasinsert = 1;
24215733Sedward 	tt.tt_availmodes = WWM_REV|WWM_GRP;
24314414Sedward 	tt.tt_frame = h19_frame;
24414414Sedward 	return 0;
24514414Sedward }
246