118739Sedward /* 233514Sbostic * Copyright (c) 1983 Regents of the University of California. 333514Sbostic * All rights reserved. 433514Sbostic * 5*42954Sbostic * This code is derived from software contributed to Berkeley by 6*42954Sbostic * Edward Wang at The University of California, Berkeley. 7*42954Sbostic * 842835Sbostic * %sccs.include.redist.c% 918739Sedward */ 1018739Sedward 1133514Sbostic #ifndef lint 12*42954Sbostic static char sccsid[] = "@(#)tth19.c 3.25 (Berkeley) 06/06/90"; 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 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 7037998Sedward h19_insline(n) 7114414Sedward { 7237998Sedward while (--n >= 0) { 7338798Sedward ttesc('L'); 7437998Sedward ILPAD(); 7537998Sedward } 7614414Sedward } 7714414Sedward 7837998Sedward h19_delline(n) 7914414Sedward { 8037998Sedward while (--n >= 0) { 8138798Sedward ttesc('M'); 8237998Sedward ILPAD(); 8337998Sedward } 8414414Sedward } 8514414Sedward 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 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 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 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 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 17314414Sedward h19_clreol() 17414414Sedward { 17538798Sedward ttesc('K'); 17614414Sedward } 17714414Sedward 17814414Sedward h19_clreos() 17914414Sedward { 18038798Sedward ttesc('J'); 18114414Sedward } 18214414Sedward 18314414Sedward h19_clear() 18414414Sedward { 18538798Sedward ttesc('E'); 18614414Sedward } 18714414Sedward 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 20237998Sedward h19_delchar(n) 20314414Sedward { 20438798Sedward while (--n >= 0) 20538798Sedward ttesc('N'); 20614414Sedward } 20714414Sedward 20837998Sedward h19_scroll_down(n) 20934264Sedward { 21034264Sedward h19_move(NROW - 1, 0); 21137998Sedward while (--n >= 0) 21238798Sedward ttctrl('j'); 21334264Sedward } 21434264Sedward 21537998Sedward h19_scroll_up(n) 21634264Sedward { 21734264Sedward h19_move(0, 0); 21838798Sedward while (--n >= 0) 21938798Sedward ttesc('I'); 22034264Sedward } 22134264Sedward 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