xref: /csrg-svn/usr.bin/window/tth19.c (revision 38563)
118739Sedward /*
233514Sbostic  * Copyright (c) 1983 Regents of the University of California.
333514Sbostic  * All rights reserved.
433514Sbostic  *
533514Sbostic  * Redistribution and use in source and binary forms are permitted
634909Sbostic  * provided that the above copyright notice and this paragraph are
734909Sbostic  * duplicated in all such forms and that any documentation,
834909Sbostic  * advertising materials, and other materials related to such
934909Sbostic  * distribution and use acknowledge that the software was developed
1034909Sbostic  * by the University of California, Berkeley.  The name of the
1134909Sbostic  * University may not be used to endorse or promote products derived
1234909Sbostic  * from this software without specific prior written permission.
1334909Sbostic  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
1434909Sbostic  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
1534909Sbostic  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1618739Sedward  */
1718739Sedward 
1833514Sbostic #ifndef lint
19*38563Sedward static char sccsid[] = "@(#)tth19.c	3.21 (Berkeley) 08/02/89";
2033514Sbostic #endif /* not lint */
2133514Sbostic 
2214414Sedward #include "ww.h"
2314649Sedward #include "tt.h"
2414414Sedward 
2514414Sedward /*
2614414Sedward kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith:
2714414Sedward 	cr=^M:nl=^J:bl=^G:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK:
2814414Sedward 	cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:dl=1*\EM:do=\EB:
2914414Sedward 	ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:ms:
3014414Sedward 	ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4:
3114414Sedward 	kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH:
3214414Sedward 	kn#8:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:
3314414Sedward 	l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER:
3414414Sedward 	es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1:
3514414Sedward */
3614414Sedward 
3714991Sedward #define NCOL	80
3814991Sedward #define NROW	24
3914991Sedward 
4015733Sedward #define G (WWM_GRP << WWC_MSHIFT)
4115733Sedward short h19_frame[16] = {
4215733Sedward 	' ',	'`'|G,	'a'|G,	'e'|G,
4315733Sedward 	'`'|G,	'`'|G,	'f'|G,	'v'|G,
4415733Sedward 	'a'|G,	'd'|G,	'a'|G,	'u'|G,
4515733Sedward 	'c'|G,	't'|G,	's'|G,	'b'|G
4614414Sedward };
4714414Sedward 
4824975Sedward extern struct tt_str *gen_VS;
4924975Sedward extern struct tt_str *gen_VE;
5014991Sedward 
5115733Sedward int h19_msp10c;
5214414Sedward 
5337998Sedward #define pc(c)	ttputc(c)
5437998Sedward #define esc()	pc('\033')
5514414Sedward #define PAD(ms10) { \
5614414Sedward 	register i; \
5714414Sedward 	for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \
5837998Sedward 		pc('\0'); \
5914414Sedward }
6014991Sedward #define ICPAD() PAD((NCOL - tt.tt_col) * 1)	/* 0.1 ms per char */
6114991Sedward #define ILPAD() PAD((NROW - tt.tt_row) * 10)	/* 1 ms per char */
6214414Sedward 
6337998Sedward #define H19_SETINSERT(m) (esc(), (tt.tt_insert = (m)) ? pc('@') : pc('O'))
6414414Sedward 
6524289Sedward h19_setinsert(new)
6624289Sedward {
6724289Sedward 	H19_SETINSERT(new);
6824289Sedward }
6924289Sedward 
7015733Sedward h19_setmodes(new)
7115733Sedward register new;
7215733Sedward {
7315733Sedward 	register diff;
7415733Sedward 
7515733Sedward 	diff = new ^ tt.tt_modes;
7615733Sedward 	if (diff & WWM_REV) {
7715733Sedward 		esc();
7815733Sedward 		if (new & WWM_REV)
7937998Sedward 			pc('p');
8015733Sedward 		else
8137998Sedward 			pc('q');
8215733Sedward 	}
8315733Sedward 	if (diff & WWM_GRP) {
8415733Sedward 		esc();
8515733Sedward 		if (new & WWM_GRP)
8637998Sedward 			pc('F');
8715733Sedward 		else
8837998Sedward 			pc('G');
8915733Sedward 	}
9015733Sedward 	tt.tt_modes = new;
9115733Sedward }
9215733Sedward 
9337998Sedward h19_insline(n)
9414414Sedward {
9537998Sedward 	while (--n >= 0) {
9637998Sedward 		esc();
9737998Sedward 		pc('L');
9837998Sedward 		ILPAD();
9937998Sedward 	}
10014414Sedward }
10114414Sedward 
10237998Sedward h19_delline(n)
10314414Sedward {
10437998Sedward 	while (--n >= 0) {
10537998Sedward 		esc();
10637998Sedward 		pc('M');
10737998Sedward 		ILPAD();
10837998Sedward 	}
10914414Sedward }
11014414Sedward 
11114414Sedward h19_putc(c)
11214414Sedward register char c;
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);
11837998Sedward 	pc(c);
11914991Sedward 	if (tt.tt_insert)
12014414Sedward 		ICPAD();
12114991Sedward 	if (++tt.tt_col == NCOL)
12214991Sedward 		tt.tt_col = NCOL - 1;
12314414Sedward }
12414414Sedward 
12514991Sedward h19_write(p, n)
12614991Sedward register char *p;
12714991Sedward register n;
12814414Sedward {
12915733Sedward 	if (tt.tt_nmodes != tt.tt_modes)
13024289Sedward 		(*tt.tt_setmodes)(tt.tt_nmodes);
13115733Sedward 	if (tt.tt_ninsert != tt.tt_insert)
13224289Sedward 		H19_SETINSERT(tt.tt_ninsert);
13314991Sedward 	if (tt.tt_insert) {
13414991Sedward 		while (--n >= 0) {
13537998Sedward 			pc(*p++);
13614414Sedward 			ICPAD();
13714991Sedward 			tt.tt_col++;
13814414Sedward 		}
13914414Sedward 	} else {
14014991Sedward 		tt.tt_col += n;
14124975Sedward 		ttwrite(p, n);
14214414Sedward 	}
14314991Sedward 	if (tt.tt_col == NCOL)
14414991Sedward 		tt.tt_col = NCOL - 1;
14514414Sedward }
14614414Sedward 
14714414Sedward h19_move(row, col)
14814414Sedward register char row, col;
14914414Sedward {
15014991Sedward 	if (tt.tt_row == row) {
15114991Sedward 		if (tt.tt_col == col)
15214414Sedward 			return;
15334264Sedward 		if (col == 0) {
15437998Sedward 			pc('\r');
15534264Sedward 			goto out;
15634264Sedward 		}
15714991Sedward 		if (tt.tt_col == col - 1) {
15814414Sedward 			esc();
15937998Sedward 			pc('C');
16014414Sedward 			goto out;
16134264Sedward 		}
16234264Sedward 		if (tt.tt_col == col + 1) {
16337998Sedward 			pc('\b');
16414414Sedward 			goto out;
16514414Sedward 		}
16614414Sedward 	}
16714991Sedward 	if (tt.tt_col == col) {
16814991Sedward 		if (tt.tt_row == row + 1) {
16914414Sedward 			esc();
17037998Sedward 			pc('A');
17114414Sedward 			goto out;
17234264Sedward 		}
17334264Sedward 		if (tt.tt_row == row - 1) {
17437998Sedward 			pc('\n');
17514414Sedward 			goto out;
17614414Sedward 		}
17714414Sedward 	}
17814589Sedward 	if (col == 0 && row == 0) {
17914414Sedward 		esc();
18037998Sedward 		pc('H');
18114414Sedward 		goto out;
18214414Sedward 	}
18314414Sedward 	esc();
18437998Sedward 	pc('Y');
18537998Sedward 	pc(' ' + row);
18637998Sedward 	pc(' ' + col);
18714414Sedward out:
18814991Sedward 	tt.tt_col = col;
18914991Sedward 	tt.tt_row = row;
19014414Sedward }
19114414Sedward 
192*38563Sedward h19_start()
19314414Sedward {
19414991Sedward 	if (gen_VS)
19524975Sedward 		ttxputs(gen_VS);
19614414Sedward 	esc();
19737998Sedward 	pc('w');
19814414Sedward 	esc();
19937998Sedward 	pc('E');
20014991Sedward 	tt.tt_col = tt.tt_row = 0;
20114991Sedward 	tt.tt_ninsert = tt.tt_insert = 0;
20214991Sedward 	tt.tt_nmodes = tt.tt_modes = 0;
20314414Sedward }
20414414Sedward 
20514649Sedward h19_end()
20614414Sedward {
20714991Sedward 	if (gen_VE)
20824975Sedward 		ttxputs(gen_VE);
20914414Sedward 	esc();
21037998Sedward 	pc('v');
21114414Sedward }
21214414Sedward 
21314414Sedward h19_clreol()
21414414Sedward {
21514414Sedward 	esc();
21637998Sedward 	pc('K');
21714414Sedward }
21814414Sedward 
21914414Sedward h19_clreos()
22014414Sedward {
22114414Sedward 	esc();
22237998Sedward 	pc('J');
22314414Sedward }
22414414Sedward 
22514414Sedward h19_clear()
22614414Sedward {
22714414Sedward 	esc();
22837998Sedward 	pc('E');
22914414Sedward }
23014414Sedward 
23137998Sedward h19_delchar(n)
23214414Sedward {
23337998Sedward 	while (--n >= 0) {
23437998Sedward 		esc();
23537998Sedward 		pc('N');
23637998Sedward 	}
23714414Sedward }
23814414Sedward 
23937998Sedward h19_scroll_down(n)
24034264Sedward {
24134264Sedward 	h19_move(NROW - 1, 0);
24237998Sedward 	while (--n >= 0)
24337998Sedward 		pc('\n');
24434264Sedward }
24534264Sedward 
24637998Sedward h19_scroll_up(n)
24734264Sedward {
24834264Sedward 	h19_move(0, 0);
24937998Sedward 	while (--n >= 0) {
25037998Sedward 		esc();
25137998Sedward 		pc('I');
25237998Sedward 	}
25334264Sedward }
25434264Sedward 
25514414Sedward tt_h19()
25614414Sedward {
25714649Sedward 	float cpms = (float) wwbaud / 10000;	/* char per ms */
25814649Sedward 
25914649Sedward 	h19_msp10c = 10 / cpms;			/* ms per 10 char */
26016122Sedward 	gen_VS = ttxgetstr("vs");
26116122Sedward 	gen_VE = ttxgetstr("ve");
26214991Sedward 
263*38563Sedward 	tt.tt_start = h19_start;
26414991Sedward 	tt.tt_end = h19_end;
26514991Sedward 
26614414Sedward 	tt.tt_insline = h19_insline;
26714414Sedward 	tt.tt_delline = h19_delline;
26814414Sedward 	tt.tt_delchar = h19_delchar;
26914414Sedward 	tt.tt_clreol = h19_clreol;
27014414Sedward 	tt.tt_clreos = h19_clreos;
27114414Sedward 	tt.tt_clear = h19_clear;
27214414Sedward 	tt.tt_move = h19_move;
27314414Sedward 	tt.tt_write = h19_write;
27414414Sedward 	tt.tt_putc = h19_putc;
27534264Sedward 	tt.tt_scroll_down = h19_scroll_down;
27634264Sedward 	tt.tt_scroll_up = h19_scroll_up;
27724289Sedward 	tt.tt_setinsert = h19_setinsert;
27824289Sedward 	tt.tt_setmodes = h19_setmodes;
27914991Sedward 
28014991Sedward 	tt.tt_ncol = NCOL;
28114991Sedward 	tt.tt_nrow = NROW;
28215733Sedward 	tt.tt_availmodes = WWM_REV|WWM_GRP;
28314414Sedward 	tt.tt_frame = h19_frame;
28414414Sedward 	return 0;
28514414Sedward }
286