|
|
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.