117411Sedward #ifndef lint 2*18757Sedward static char sccsid[] = "@(#)tth29.c 3.2 04/24/85"; 317411Sedward #endif 417411Sedward 5*18757Sedward /* 6*18757Sedward * Copyright (c) 1983 Regents of the University of California, 7*18757Sedward * All rights reserved. Redistribution permitted subject to 8*18757Sedward * the terms of the Berkeley Software License Agreement. 9*18757Sedward */ 10*18757Sedward 1117411Sedward #include "ww.h" 1217411Sedward #include "tt.h" 1317411Sedward 1417411Sedward /* 1517411Sedward kC|h29|heath-29|z29|zenith-29:\ 1617411Sedward :am:bc=\ED:bt=\E-:cr=^M:do=^J:nl=^J:bl=^G:\ 1717411Sedward :al=\EL:le=^H:bs:cd=\EJ:ce=\EK:cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:\ 1817411Sedward :dl=1*\EM:do=\EB:ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:\ 1917411Sedward :ms:ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4:\ 2017411Sedward :kb=^H:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH:kn#1:k0=\E~:l0=HOME:\ 2117411Sedward :k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:k6=\EP:k7=\EQ:k8=\ER:k9=\E01:\ 2217411Sedward :es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1:us=\Es8:ue=\Es0: 2317411Sedward */ 2417411Sedward 2517411Sedward #define NCOL 80 2617411Sedward #define NROW 24 2717411Sedward 2817411Sedward extern char *gen_VS; 2917411Sedward extern char *gen_VE; 3017411Sedward 3117411Sedward extern int h19_msp10c; 3217411Sedward 3317411Sedward #define pc(c) ttputc('c') 3417411Sedward #define esc() pc(\033) 3517411Sedward #define PAD(ms10) { \ 3617411Sedward register i; \ 3717411Sedward for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \ 3817411Sedward pc(\0); \ 3917411Sedward } 4017411Sedward #define ICPAD() PAD((NCOL - tt.tt_col) * 1) /* 0.1 ms per char */ 4117411Sedward #define ILPAD() PAD((NROW - tt.tt_row) * 10) /* 1 ms per char */ 4217411Sedward 4317411Sedward #define h29_setinsert(m) (esc(), (tt.tt_insert = (m)) ? pc(@) : pc(O)) 4417411Sedward 4517411Sedward h29_setmodes(new) 4617411Sedward register new; 4717411Sedward { 4817411Sedward register modes = '0'; 4917411Sedward 5017411Sedward if (new & WWM_REV) 5117411Sedward modes |= 1; 5217411Sedward if (new & WWM_BLK) 5317411Sedward modes |= 2; 5417411Sedward if (new & WWM_UL) 5517411Sedward modes |= 8; 5617411Sedward esc(); 5717411Sedward pc(s); 5817411Sedward ttputc(modes); 5917411Sedward if (new & WWM_GRP) { 6017411Sedward if ((tt.tt_modes & WWM_GRP) == 0) 6117411Sedward esc(), pc(F); 6217411Sedward } else 6317411Sedward if (tt.tt_modes & WWM_GRP) 6417411Sedward esc(), pc(G); 6517411Sedward tt.tt_modes = new; 6617411Sedward } 6717411Sedward 6817411Sedward h29_putc(c) 6917411Sedward register char c; 7017411Sedward { 7117411Sedward if (tt.tt_nmodes != tt.tt_modes) 7217411Sedward h29_setmodes(tt.tt_nmodes); 7317411Sedward if (tt.tt_ninsert != tt.tt_insert) 7417411Sedward h29_setinsert(tt.tt_ninsert); 7517411Sedward ttputc(c); 7617411Sedward if (tt.tt_insert) 7717411Sedward ICPAD(); 7817411Sedward if (++tt.tt_col == NCOL) 7917411Sedward tt.tt_col = NCOL - 1; 8017411Sedward } 8117411Sedward 8217411Sedward h29_write(p, n) 8317411Sedward register char *p; 8417411Sedward register n; 8517411Sedward { 8617411Sedward if (tt.tt_nmodes != tt.tt_modes) 8717411Sedward h29_setmodes(tt.tt_nmodes); 8817411Sedward if (tt.tt_ninsert != tt.tt_insert) 8917411Sedward h29_setinsert(tt.tt_ninsert); 9017411Sedward if (tt.tt_insert) { 9117411Sedward while (--n >= 0) { 9217411Sedward ttputc(*p++); 9317411Sedward ICPAD(); 9417411Sedward tt.tt_col++; 9517411Sedward } 9617411Sedward } else { 9717411Sedward tt.tt_col += n; 9817411Sedward while (--n >= 0) 9917411Sedward ttputc(*p++); 10017411Sedward } 10117411Sedward if (tt.tt_col == NCOL) 10217411Sedward tt.tt_col = NCOL - 1; 10317411Sedward } 10417411Sedward 10517411Sedward h29_end() 10617411Sedward { 10717411Sedward h29_setmodes(0); 10817411Sedward h29_setinsert(0); 10917411Sedward if (gen_VE) 11017411Sedward ttputs(gen_VE); 11117411Sedward esc(); 11217411Sedward pc(v); 11317411Sedward } 11417411Sedward 11517411Sedward tt_h29() 11617411Sedward { 11717411Sedward if (tt_h19() < 0) 11817411Sedward return -1; 11917411Sedward tt.tt_putc = h29_putc; 12017411Sedward tt.tt_write = h29_write; 12117411Sedward tt.tt_end = h29_end; 12217411Sedward tt.tt_availmodes = WWM_BLK|WWM_UL|WWM_REV|WWM_GRP; 12317411Sedward return 0; 12417411Sedward } 125