1*14414Sedward #ifndef lint 2*14414Sedward static char *sccsid = "@(#)tth19.c 3.1 83/08/09"; 3*14414Sedward #endif 4*14414Sedward 5*14414Sedward #include "ww.h" 6*14414Sedward 7*14414Sedward /* 8*14414Sedward kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith: 9*14414Sedward cr=^M:nl=^J:bl=^G:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK: 10*14414Sedward cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:dl=1*\EM:do=\EB: 11*14414Sedward ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:ms: 12*14414Sedward ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4: 13*14414Sedward kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH: 14*14414Sedward kn#8:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW: 15*14414Sedward l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER: 16*14414Sedward es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1: 17*14414Sedward */ 18*14414Sedward 19*14414Sedward char h19_frame[16] = { 20*14414Sedward ' ', '`'|0x80, 'a'|0x80, 'e'|0x80, 21*14414Sedward '`'|0x80, '`'|0x80, 'f'|0x80, 'v'|0x80, 22*14414Sedward 'a'|0x80, 'd'|0x80, 'a'|0x80, 'u'|0x80, 23*14414Sedward 'c'|0x80, 't'|0x80, 's'|0x80, 'b'|0x80 24*14414Sedward }; 25*14414Sedward 26*14414Sedward char h19_row, h19_col; 27*14414Sedward char h19_modes, h19_nmodes; 28*14414Sedward char h19_insert, h19_ninsert; 29*14414Sedward char h19_graphics; 30*14414Sedward short h19_msp10c; 31*14414Sedward 32*14414Sedward #define pc(c) putchar('c') 33*14414Sedward #define esc() pc(\033) 34*14414Sedward #define PAD(ms10) { \ 35*14414Sedward register i; \ 36*14414Sedward for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \ 37*14414Sedward pc(\0); \ 38*14414Sedward } 39*14414Sedward #define ICPAD() PAD((80 - h19_col) * 1) /* 0.1 ms per char */ 40*14414Sedward #define ILPAD() PAD((24 - h19_row) * 10); /* 1 ms per char */ 41*14414Sedward 42*14414Sedward #define SETINSERT(m) \ 43*14414Sedward ((m) != h19_insert \ 44*14414Sedward ? (esc(), (h19_insert = (m)) ? pc(@) : pc(O)) : 0) 45*14414Sedward #define SETMODES(m) \ 46*14414Sedward ((m) != h19_modes \ 47*14414Sedward ? (esc(), (h19_modes = (m)) ? pc(p) : pc(q)) : 0) 48*14414Sedward #define SETGRAPHICS(m) \ 49*14414Sedward ((m) != h19_graphics \ 50*14414Sedward ? (esc(), (h19_graphics = (m)) ? pc(F) : pc(G)) : 0) 51*14414Sedward 52*14414Sedward h19_setinsert(new) 53*14414Sedward char new; 54*14414Sedward { 55*14414Sedward h19_ninsert = new; 56*14414Sedward } 57*14414Sedward 58*14414Sedward h19_setmodes(new) 59*14414Sedward { 60*14414Sedward h19_nmodes = new & WWM_REV; 61*14414Sedward } 62*14414Sedward 63*14414Sedward h19_insline() 64*14414Sedward { 65*14414Sedward esc(); 66*14414Sedward pc(L); 67*14414Sedward ILPAD(); 68*14414Sedward } 69*14414Sedward 70*14414Sedward h19_delline() 71*14414Sedward { 72*14414Sedward esc(); 73*14414Sedward pc(M); 74*14414Sedward ILPAD(); 75*14414Sedward } 76*14414Sedward 77*14414Sedward h19_putc(c) 78*14414Sedward register char c; 79*14414Sedward { 80*14414Sedward SETMODES(h19_nmodes); 81*14414Sedward SETINSERT(h19_ninsert); 82*14414Sedward if (c & 0x80) { 83*14414Sedward SETGRAPHICS(1); 84*14414Sedward putchar(c & 0x7f); 85*14414Sedward } else { 86*14414Sedward SETGRAPHICS(0); 87*14414Sedward putchar(c); 88*14414Sedward } 89*14414Sedward if (h19_insert) 90*14414Sedward ICPAD(); 91*14414Sedward h19_col++; 92*14414Sedward } 93*14414Sedward 94*14414Sedward h19_write(start, end) 95*14414Sedward register char *start, *end; 96*14414Sedward { 97*14414Sedward register char c; 98*14414Sedward 99*14414Sedward SETMODES(h19_nmodes); 100*14414Sedward SETINSERT(h19_ninsert); 101*14414Sedward if (h19_insert) { 102*14414Sedward while (start <= end) { 103*14414Sedward if ((c = *start++) & 0x80) { 104*14414Sedward SETGRAPHICS(1); 105*14414Sedward putchar(c & 0x7f); 106*14414Sedward } else { 107*14414Sedward SETGRAPHICS(0); 108*14414Sedward putchar(c); 109*14414Sedward } 110*14414Sedward ICPAD(); 111*14414Sedward h19_col++; 112*14414Sedward } 113*14414Sedward } else { 114*14414Sedward h19_col += end - start + 1; 115*14414Sedward while (start <= end) 116*14414Sedward if ((c = *start++) & 0x80) { 117*14414Sedward SETGRAPHICS(1); 118*14414Sedward putchar(c & 0x7f); 119*14414Sedward } else { 120*14414Sedward SETGRAPHICS(0); 121*14414Sedward putchar(c); 122*14414Sedward } 123*14414Sedward } 124*14414Sedward } 125*14414Sedward 126*14414Sedward h19_blank(n) 127*14414Sedward register n; 128*14414Sedward { 129*14414Sedward if (n <= 0) 130*14414Sedward return; 131*14414Sedward SETMODES(h19_nmodes); 132*14414Sedward SETINSERT(h19_ninsert); 133*14414Sedward if (h19_insert) { 134*14414Sedward while (--n >= 0) { 135*14414Sedward putchar(' '); 136*14414Sedward ICPAD(); 137*14414Sedward h19_col++; 138*14414Sedward } 139*14414Sedward } else { 140*14414Sedward h19_col += n; 141*14414Sedward while (--n >= 0) 142*14414Sedward putchar(' '); 143*14414Sedward } 144*14414Sedward } 145*14414Sedward 146*14414Sedward h19_move(row, col) 147*14414Sedward register char row, col; 148*14414Sedward { 149*14414Sedward if (h19_row == row) { 150*14414Sedward if (h19_col == col) 151*14414Sedward return; 152*14414Sedward if (h19_col == col - 1) { 153*14414Sedward esc(); 154*14414Sedward pc(C); 155*14414Sedward goto out; 156*14414Sedward } else if (h19_col == col + 1) { 157*14414Sedward pc(\b); 158*14414Sedward goto out; 159*14414Sedward } 160*14414Sedward } 161*14414Sedward if (h19_col == col) { 162*14414Sedward if (h19_row == row + 1) { 163*14414Sedward esc(); 164*14414Sedward pc(A); 165*14414Sedward goto out; 166*14414Sedward } else if (h19_row == row + 1) { 167*14414Sedward pc(\n); 168*14414Sedward goto out; 169*14414Sedward } 170*14414Sedward } 171*14414Sedward if (col == 1 && row == 1) { 172*14414Sedward esc(); 173*14414Sedward pc(H); 174*14414Sedward goto out; 175*14414Sedward } 176*14414Sedward esc(); 177*14414Sedward pc(Y); 178*14414Sedward putchar(' ' + row); 179*14414Sedward putchar(' ' + col); 180*14414Sedward out: 181*14414Sedward h19_col = col; 182*14414Sedward h19_row = row; 183*14414Sedward } 184*14414Sedward 185*14414Sedward h19_init() 186*14414Sedward { 187*14414Sedward float cpms = (float) wwbaud / 10000; /* char per ms */ 188*14414Sedward 189*14414Sedward h19_msp10c = 10 / cpms; /* ms per 10 char */ 190*14414Sedward #ifdef notdef 191*14414Sedward tt.tt_ILmf = cpms; /* 1 ms */ 192*14414Sedward tt.tt_ILov = 2; 193*14414Sedward tt.tt_ICmf = cpms * 1.5 ; /* 1.5 ms */ 194*14414Sedward tt.tt_ICov = 2; 195*14414Sedward tt.tt_DCmf = 0; 196*14414Sedward tt.tt_DCov = 2; 197*14414Sedward #endif 198*14414Sedward return 0; 199*14414Sedward } 200*14414Sedward 201*14414Sedward h19_reset() 202*14414Sedward { 203*14414Sedward esc(); 204*14414Sedward pc(x); 205*14414Sedward pc(4); 206*14414Sedward esc(); 207*14414Sedward pc(E); 208*14414Sedward esc(); 209*14414Sedward pc(w); 210*14414Sedward h19_col = h19_row = 0; 211*14414Sedward h19_insert = 0; 212*14414Sedward h19_graphics = 0; 213*14414Sedward h19_modes = 0; 214*14414Sedward } 215*14414Sedward 216*14414Sedward h19_cleanup() 217*14414Sedward { 218*14414Sedward SETMODES(0); 219*14414Sedward SETINSERT(0); 220*14414Sedward SETGRAPHICS(0); 221*14414Sedward esc(); 222*14414Sedward pc(y); 223*14414Sedward pc(4); 224*14414Sedward esc(); 225*14414Sedward pc(v); 226*14414Sedward } 227*14414Sedward 228*14414Sedward h19_clreol() 229*14414Sedward { 230*14414Sedward esc(); 231*14414Sedward pc(K); 232*14414Sedward } 233*14414Sedward 234*14414Sedward h19_clreos() 235*14414Sedward { 236*14414Sedward esc(); 237*14414Sedward pc(J); 238*14414Sedward } 239*14414Sedward 240*14414Sedward h19_clear() 241*14414Sedward { 242*14414Sedward esc(); 243*14414Sedward pc(E); 244*14414Sedward } 245*14414Sedward 246*14414Sedward h19_delchar() 247*14414Sedward { 248*14414Sedward esc(); 249*14414Sedward pc(N); 250*14414Sedward } 251*14414Sedward 252*14414Sedward tt_h19() 253*14414Sedward { 254*14414Sedward tt.tt_setinsert = h19_setinsert; 255*14414Sedward tt.tt_setmodes = h19_setmodes; 256*14414Sedward tt.tt_insline = h19_insline; 257*14414Sedward tt.tt_delline = h19_delline; 258*14414Sedward tt.tt_delchar = h19_delchar; 259*14414Sedward tt.tt_blank = h19_blank; 260*14414Sedward tt.tt_init = h19_init; 261*14414Sedward tt.tt_cleanup = h19_cleanup; 262*14414Sedward tt.tt_clreol = h19_clreol; 263*14414Sedward tt.tt_clreos = h19_clreos; 264*14414Sedward tt.tt_clear = h19_clear; 265*14414Sedward tt.tt_move = h19_move; 266*14414Sedward tt.tt_reset = h19_reset; 267*14414Sedward tt.tt_write = h19_write; 268*14414Sedward tt.tt_putc = h19_putc; 269*14414Sedward tt.tt_ncol = 80; 270*14414Sedward tt.tt_nrow = 24; 271*14414Sedward tt.tt_frame = h19_frame; 272*14414Sedward return 0; 273*14414Sedward } 274