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