xref: /csrg-svn/usr.bin/window/tth19.c (revision 62463)
118739Sedward /*
2*62463Sbostic  * Copyright (c) 1983, 1993
3*62463Sbostic  *	The Regents of the University of California.  All rights reserved.
433514Sbostic  *
542954Sbostic  * This code is derived from software contributed to Berkeley by
642954Sbostic  * Edward Wang at The University of California, Berkeley.
742954Sbostic  *
842835Sbostic  * %sccs.include.redist.c%
918739Sedward  */
1018739Sedward 
1133514Sbostic #ifndef lint
12*62463Sbostic static char sccsid[] = "@(#)tth19.c	8.1 (Berkeley) 06/06/93";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1514414Sedward #include "ww.h"
1614649Sedward #include "tt.h"
1738798Sedward #include "char.h"
1814414Sedward 
1914414Sedward /*
2014414Sedward kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith:
2114414Sedward 	cr=^M:nl=^J:bl=^G:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK:
2214414Sedward 	cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:dl=1*\EM:do=\EB:
2314414Sedward 	ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:ms:
2414414Sedward 	ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4:
2514414Sedward 	kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH:
2614414Sedward 	kn#8:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:
2714414Sedward 	l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER:
2814414Sedward 	es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1:
2914414Sedward */
3014414Sedward 
3114991Sedward #define NCOL	80
3214991Sedward #define NROW	24
3314991Sedward 
3415733Sedward #define G (WWM_GRP << WWC_MSHIFT)
3515733Sedward short h19_frame[16] = {
3615733Sedward 	' ',	'`'|G,	'a'|G,	'e'|G,
3715733Sedward 	'`'|G,	'`'|G,	'f'|G,	'v'|G,
3815733Sedward 	'a'|G,	'd'|G,	'a'|G,	'u'|G,
3915733Sedward 	'c'|G,	't'|G,	's'|G,	'b'|G
4014414Sedward };
4114414Sedward 
4224975Sedward extern struct tt_str *gen_VS;
4324975Sedward extern struct tt_str *gen_VE;
4414991Sedward 
4515733Sedward int h19_msp10c;
4614414Sedward 
4714414Sedward #define PAD(ms10) { \
4814414Sedward 	register i; \
4914414Sedward 	for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \
5038798Sedward 		ttputc('\0'); \
5114414Sedward }
5214991Sedward #define ICPAD() PAD((NCOL - tt.tt_col) * 1)	/* 0.1 ms per char */
5314991Sedward #define ILPAD() PAD((NROW - tt.tt_row) * 10)	/* 1 ms per char */
5414414Sedward 
5538798Sedward #define H19_SETINSERT(m) ttesc((tt.tt_insert = (m)) ? '@' : 'O')
5614414Sedward 
h19_setmodes(new)5715733Sedward h19_setmodes(new)
5815733Sedward register new;
5915733Sedward {
6015733Sedward 	register diff;
6115733Sedward 
6215733Sedward 	diff = new ^ tt.tt_modes;
6338798Sedward 	if (diff & WWM_REV)
6438798Sedward 		ttesc(new & WWM_REV ? 'p' : 'q');
6538798Sedward 	if (diff & WWM_GRP)
6638798Sedward 		ttesc(new & WWM_REV ? 'F' : 'G');
6715733Sedward 	tt.tt_modes = new;
6815733Sedward }
6915733Sedward 
h19_insline(n)7037998Sedward h19_insline(n)
7114414Sedward {
7237998Sedward 	while (--n >= 0) {
7338798Sedward 		ttesc('L');
7437998Sedward 		ILPAD();
7537998Sedward 	}
7614414Sedward }
7714414Sedward 
h19_delline(n)7837998Sedward h19_delline(n)
7914414Sedward {
8037998Sedward 	while (--n >= 0) {
8138798Sedward 		ttesc('M');
8237998Sedward 		ILPAD();
8337998Sedward 	}
8414414Sedward }
8514414Sedward 
h19_putc(c)8614414Sedward h19_putc(c)
8714414Sedward register char c;
8814414Sedward {
8915733Sedward 	if (tt.tt_nmodes != tt.tt_modes)
9024289Sedward 		(*tt.tt_setmodes)(tt.tt_nmodes);
9138747Sedward 	if (tt.tt_insert)
9238747Sedward 		H19_SETINSERT(0);
9338798Sedward 	ttputc(c);
9414991Sedward 	if (++tt.tt_col == NCOL)
9514991Sedward 		tt.tt_col = NCOL - 1;
9614414Sedward }
9714414Sedward 
h19_write(p,n)9814991Sedward h19_write(p, n)
9914991Sedward register char *p;
10014991Sedward register n;
10114414Sedward {
10215733Sedward 	if (tt.tt_nmodes != tt.tt_modes)
10324289Sedward 		(*tt.tt_setmodes)(tt.tt_nmodes);
10438747Sedward 	if (tt.tt_insert)
10538747Sedward 		H19_SETINSERT(0);
10638747Sedward 	ttwrite(p, n);
10738747Sedward 	tt.tt_col += n;
10814991Sedward 	if (tt.tt_col == NCOL)
10914991Sedward 		tt.tt_col = NCOL - 1;
11014414Sedward }
11114414Sedward 
h19_move(row,col)11214414Sedward h19_move(row, col)
11314414Sedward register char row, col;
11414414Sedward {
11514991Sedward 	if (tt.tt_row == row) {
11614991Sedward 		if (tt.tt_col == col)
11714414Sedward 			return;
11834264Sedward 		if (col == 0) {
11938798Sedward 			ttctrl('m');
12034264Sedward 			goto out;
12134264Sedward 		}
12214991Sedward 		if (tt.tt_col == col - 1) {
12338798Sedward 			ttesc('C');
12414414Sedward 			goto out;
12534264Sedward 		}
12634264Sedward 		if (tt.tt_col == col + 1) {
12738798Sedward 			ttctrl('h');
12814414Sedward 			goto out;
12914414Sedward 		}
13014414Sedward 	}
13114991Sedward 	if (tt.tt_col == col) {
13214991Sedward 		if (tt.tt_row == row + 1) {
13338798Sedward 			ttesc('A');
13414414Sedward 			goto out;
13534264Sedward 		}
13634264Sedward 		if (tt.tt_row == row - 1) {
13738798Sedward 			ttctrl('j');
13814414Sedward 			goto out;
13914414Sedward 		}
14014414Sedward 	}
14114589Sedward 	if (col == 0 && row == 0) {
14238798Sedward 		ttesc('H');
14314414Sedward 		goto out;
14414414Sedward 	}
14538798Sedward 	ttesc('Y');
14638798Sedward 	ttputc(' ' + row);
14738798Sedward 	ttputc(' ' + col);
14814414Sedward out:
14914991Sedward 	tt.tt_col = col;
15014991Sedward 	tt.tt_row = row;
15114414Sedward }
15214414Sedward 
h19_start()15338563Sedward h19_start()
15414414Sedward {
15514991Sedward 	if (gen_VS)
15624975Sedward 		ttxputs(gen_VS);
15738798Sedward 	ttesc('w');
15838798Sedward 	ttesc('E');
15914991Sedward 	tt.tt_col = tt.tt_row = 0;
16038747Sedward 	tt.tt_insert = 0;
16114991Sedward 	tt.tt_nmodes = tt.tt_modes = 0;
16214414Sedward }
16314414Sedward 
h19_end()16414649Sedward h19_end()
16514414Sedward {
16638747Sedward 	if (tt.tt_insert)
16738747Sedward 		H19_SETINSERT(0);
16814991Sedward 	if (gen_VE)
16924975Sedward 		ttxputs(gen_VE);
17038798Sedward 	ttesc('v');
17114414Sedward }
17214414Sedward 
h19_clreol()17314414Sedward h19_clreol()
17414414Sedward {
17538798Sedward 	ttesc('K');
17614414Sedward }
17714414Sedward 
h19_clreos()17814414Sedward h19_clreos()
17914414Sedward {
18038798Sedward 	ttesc('J');
18114414Sedward }
18214414Sedward 
h19_clear()18314414Sedward h19_clear()
18414414Sedward {
18538798Sedward 	ttesc('E');
18614414Sedward }
18714414Sedward 
h19_inschar(c)18838747Sedward h19_inschar(c)
18938747Sedward register char c;
19038747Sedward {
19138747Sedward 	if (tt.tt_nmodes != tt.tt_modes)
19238747Sedward 		(*tt.tt_setmodes)(tt.tt_nmodes);
19338747Sedward 	if (!tt.tt_insert)
19438747Sedward 		H19_SETINSERT(1);
19538798Sedward 	ttputc(c);
19638747Sedward 	if (tt.tt_insert)
19738747Sedward 		ICPAD();
19838747Sedward 	if (++tt.tt_col == NCOL)
19938747Sedward 		tt.tt_col = NCOL - 1;
20038747Sedward }
20138747Sedward 
h19_delchar(n)20237998Sedward h19_delchar(n)
20314414Sedward {
20438798Sedward 	while (--n >= 0)
20538798Sedward 		ttesc('N');
20614414Sedward }
20714414Sedward 
h19_scroll_down(n)20837998Sedward h19_scroll_down(n)
20934264Sedward {
21034264Sedward 	h19_move(NROW - 1, 0);
21137998Sedward 	while (--n >= 0)
21238798Sedward 		ttctrl('j');
21334264Sedward }
21434264Sedward 
h19_scroll_up(n)21537998Sedward h19_scroll_up(n)
21634264Sedward {
21734264Sedward 	h19_move(0, 0);
21838798Sedward 	while (--n >= 0)
21938798Sedward 		ttesc('I');
22034264Sedward }
22134264Sedward 
tt_h19()22214414Sedward tt_h19()
22314414Sedward {
22414649Sedward 	float cpms = (float) wwbaud / 10000;	/* char per ms */
22514649Sedward 
22614649Sedward 	h19_msp10c = 10 / cpms;			/* ms per 10 char */
22716122Sedward 	gen_VS = ttxgetstr("vs");
22816122Sedward 	gen_VE = ttxgetstr("ve");
22914991Sedward 
23038563Sedward 	tt.tt_start = h19_start;
23114991Sedward 	tt.tt_end = h19_end;
23214991Sedward 
23314414Sedward 	tt.tt_insline = h19_insline;
23414414Sedward 	tt.tt_delline = h19_delline;
23538747Sedward 	tt.tt_inschar = h19_inschar;
23614414Sedward 	tt.tt_delchar = h19_delchar;
23714414Sedward 	tt.tt_clreol = h19_clreol;
23814414Sedward 	tt.tt_clreos = h19_clreos;
23914414Sedward 	tt.tt_clear = h19_clear;
24014414Sedward 	tt.tt_move = h19_move;
24114414Sedward 	tt.tt_write = h19_write;
24214414Sedward 	tt.tt_putc = h19_putc;
24334264Sedward 	tt.tt_scroll_down = h19_scroll_down;
24434264Sedward 	tt.tt_scroll_up = h19_scroll_up;
24524289Sedward 	tt.tt_setmodes = h19_setmodes;
24614991Sedward 
24714991Sedward 	tt.tt_ncol = NCOL;
24814991Sedward 	tt.tt_nrow = NROW;
24915733Sedward 	tt.tt_availmodes = WWM_REV|WWM_GRP;
25014414Sedward 	tt.tt_frame = h19_frame;
25114414Sedward 	return 0;
25214414Sedward }
253