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