|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)tth19.c 3.17 5/2/86"; ! 3: #endif ! 4: ! 5: /* ! 6: * Copyright (c) 1983 Regents of the University of California, ! 7: * All rights reserved. Redistribution permitted subject to ! 8: * the terms of the Berkeley Software License Agreement. ! 9: */ ! 10: ! 11: #include "ww.h" ! 12: #include "tt.h" ! 13: ! 14: /* ! 15: kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith: ! 16: cr=^M:nl=^J:bl=^G:al=1*\EL:am:le=^H:bs:cd=\EJ:ce=\EK: ! 17: cl=\EE:cm=\EY%+ %+ :co#80:dc=\EN:dl=1*\EM:do=\EB: ! 18: ei=\EO:ho=\EH:im=\E@:li#24:mi:nd=\EC:as=\EF:ae=\EG:ms: ! 19: ta=^I:pt:sr=\EI:se=\Eq:so=\Ep:up=\EA:vs=\Ex4:ve=\Ey4: ! 20: kb=^h:ku=\EA:kd=\EB:kl=\ED:kr=\EC:kh=\EH: ! 21: kn#8:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW: ! 22: l6=blue:l7=red:l8=white:k6=\EP:k7=\EQ:k8=\ER: ! 23: es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1: ! 24: */ ! 25: ! 26: #define NCOL 80 ! 27: #define NROW 24 ! 28: ! 29: #define G (WWM_GRP << WWC_MSHIFT) ! 30: short h19_frame[16] = { ! 31: ' ', '`'|G, 'a'|G, 'e'|G, ! 32: '`'|G, '`'|G, 'f'|G, 'v'|G, ! 33: 'a'|G, 'd'|G, 'a'|G, 'u'|G, ! 34: 'c'|G, 't'|G, 's'|G, 'b'|G ! 35: }; ! 36: ! 37: extern struct tt_str *gen_VS; ! 38: extern struct tt_str *gen_VE; ! 39: extern struct tt_str *gen_XS; ! 40: extern struct tt_str *gen_XE; ! 41: ! 42: int h19_msp10c; ! 43: ! 44: #define pc(c) ttputc('c') ! 45: #define esc() pc(\033) ! 46: #define PAD(ms10) { \ ! 47: register i; \ ! 48: for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \ ! 49: pc(\0); \ ! 50: } ! 51: #define ICPAD() PAD((NCOL - tt.tt_col) * 1) /* 0.1 ms per char */ ! 52: #define ILPAD() PAD((NROW - tt.tt_row) * 10) /* 1 ms per char */ ! 53: ! 54: #define H19_SETINSERT(m) (esc(), (tt.tt_insert = (m)) ? pc(@) : pc(O)) ! 55: ! 56: h19_setinsert(new) ! 57: { ! 58: H19_SETINSERT(new); ! 59: } ! 60: ! 61: h19_setmodes(new) ! 62: register new; ! 63: { ! 64: register diff; ! 65: ! 66: diff = new ^ tt.tt_modes; ! 67: if (diff & WWM_REV) { ! 68: esc(); ! 69: if (new & WWM_REV) ! 70: pc(p); ! 71: else ! 72: pc(q); ! 73: } ! 74: if (diff & WWM_GRP) { ! 75: esc(); ! 76: if (new & WWM_GRP) ! 77: pc(F); ! 78: else ! 79: pc(G); ! 80: } ! 81: if (diff & WWM_USR) { ! 82: if (new & WWM_USR) { ! 83: if (gen_XS) ! 84: ttxputs(gen_XS); ! 85: } else ! 86: if (gen_XE) ! 87: ttxputs(gen_XE); ! 88: } ! 89: tt.tt_modes = new; ! 90: } ! 91: ! 92: h19_insline() ! 93: { ! 94: esc(); ! 95: pc(L); ! 96: ILPAD(); ! 97: } ! 98: ! 99: h19_delline() ! 100: { ! 101: esc(); ! 102: pc(M); ! 103: ILPAD(); ! 104: } ! 105: ! 106: h19_putc(c) ! 107: register char c; ! 108: { ! 109: if (tt.tt_nmodes != tt.tt_modes) ! 110: (*tt.tt_setmodes)(tt.tt_nmodes); ! 111: if (tt.tt_ninsert != tt.tt_insert) ! 112: H19_SETINSERT(tt.tt_ninsert); ! 113: ttputc(c); ! 114: if (tt.tt_insert) ! 115: ICPAD(); ! 116: if (++tt.tt_col == NCOL) ! 117: tt.tt_col = NCOL - 1; ! 118: } ! 119: ! 120: h19_write(p, n) ! 121: register char *p; ! 122: register n; ! 123: { ! 124: if (tt.tt_nmodes != tt.tt_modes) ! 125: (*tt.tt_setmodes)(tt.tt_nmodes); ! 126: if (tt.tt_ninsert != tt.tt_insert) ! 127: H19_SETINSERT(tt.tt_ninsert); ! 128: if (tt.tt_insert) { ! 129: while (--n >= 0) { ! 130: ttputc(*p++); ! 131: ICPAD(); ! 132: tt.tt_col++; ! 133: } ! 134: } else { ! 135: tt.tt_col += n; ! 136: ttwrite(p, n); ! 137: } ! 138: if (tt.tt_col == NCOL) ! 139: tt.tt_col = NCOL - 1; ! 140: } ! 141: ! 142: h19_move(row, col) ! 143: register char row, col; ! 144: { ! 145: if (tt.tt_row == row) { ! 146: if (tt.tt_col == col) ! 147: return; ! 148: if (tt.tt_col == col - 1) { ! 149: esc(); ! 150: pc(C); ! 151: goto out; ! 152: } else if (tt.tt_col == col + 1) { ! 153: pc(\b); ! 154: goto out; ! 155: } ! 156: } ! 157: if (tt.tt_col == col) { ! 158: if (tt.tt_row == row + 1) { ! 159: esc(); ! 160: pc(A); ! 161: goto out; ! 162: } else if (tt.tt_row == row - 1) { ! 163: pc(\n); ! 164: goto out; ! 165: } ! 166: } ! 167: if (col == 0 && row == 0) { ! 168: esc(); ! 169: pc(H); ! 170: goto out; ! 171: } ! 172: esc(); ! 173: pc(Y); ! 174: ttputc(' ' + row); ! 175: ttputc(' ' + col); ! 176: out: ! 177: tt.tt_col = col; ! 178: tt.tt_row = row; ! 179: } ! 180: ! 181: h19_init() ! 182: { ! 183: if (gen_VS) ! 184: ttxputs(gen_VS); ! 185: esc(); ! 186: pc(w); ! 187: esc(); ! 188: pc(E); ! 189: tt.tt_col = tt.tt_row = 0; ! 190: tt.tt_ninsert = tt.tt_insert = 0; ! 191: tt.tt_nmodes = tt.tt_modes = 0; ! 192: } ! 193: ! 194: h19_end() ! 195: { ! 196: if (gen_VE) ! 197: ttxputs(gen_VE); ! 198: esc(); ! 199: pc(v); ! 200: } ! 201: ! 202: h19_clreol() ! 203: { ! 204: esc(); ! 205: pc(K); ! 206: } ! 207: ! 208: h19_clreos() ! 209: { ! 210: esc(); ! 211: pc(J); ! 212: } ! 213: ! 214: h19_clear() ! 215: { ! 216: esc(); ! 217: pc(E); ! 218: } ! 219: ! 220: h19_delchar() ! 221: { ! 222: esc(); ! 223: pc(N); ! 224: } ! 225: ! 226: tt_h19() ! 227: { ! 228: float cpms = (float) wwbaud / 10000; /* char per ms */ ! 229: ! 230: h19_msp10c = 10 / cpms; /* ms per 10 char */ ! 231: gen_VS = ttxgetstr("vs"); ! 232: gen_VE = ttxgetstr("ve"); ! 233: gen_XS = ttxgetstr("XS"); ! 234: gen_XE = ttxgetstr("XE"); ! 235: ! 236: tt.tt_init = h19_init; ! 237: tt.tt_end = h19_end; ! 238: ! 239: tt.tt_insline = h19_insline; ! 240: tt.tt_delline = h19_delline; ! 241: tt.tt_delchar = h19_delchar; ! 242: tt.tt_clreol = h19_clreol; ! 243: tt.tt_clreos = h19_clreos; ! 244: tt.tt_clear = h19_clear; ! 245: tt.tt_move = h19_move; ! 246: tt.tt_write = h19_write; ! 247: tt.tt_putc = h19_putc; ! 248: tt.tt_setinsert = h19_setinsert; ! 249: tt.tt_setmodes = h19_setmodes; ! 250: ! 251: tt.tt_ncol = NCOL; ! 252: tt.tt_nrow = NROW; ! 253: tt.tt_hasinsert = 1; ! 254: tt.tt_availmodes = WWM_REV|WWM_GRP; ! 255: if (gen_XS) ! 256: tt.tt_availmodes |= WWM_USR; ! 257: tt.tt_frame = h19_frame; ! 258: return 0; ! 259: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.