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