X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/6869a3385823369a5d8d29caaa69fe70ecc343a5..6d713a99954cf8f800ebf06894840cbd5c6e89ba:/usr/src/usr.bin/window/tth19.c diff --git a/usr/src/usr.bin/window/tth19.c b/usr/src/usr.bin/window/tth19.c index 1cee1a3c7d..ffd87128b8 100644 --- a/usr/src/usr.bin/window/tth19.c +++ b/usr/src/usr.bin/window/tth19.c @@ -1,8 +1,26 @@ +/* + * Copyright (c) 1983 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + #ifndef lint -static char *sccsid = "@(#)tth19.c 3.1 83/08/09"; -#endif +static char sccsid[] = "@(#)tth19.c 3.19 (Berkeley) %G%"; +#endif /* not lint */ #include "ww.h" +#include "tt.h" /* kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith: @@ -16,48 +34,60 @@ kb|h19|heath|h19-b|h19b|heathkit|heath-19|z19|zenith: es:hs:ts=\Ej\Ex5\Ex1\EY8%+ \Eo:fs=\Ek\Ey5:ds=\Ey1: */ -char h19_frame[16] = { - ' ', '`'|0x80, 'a'|0x80, 'e'|0x80, - '`'|0x80, '`'|0x80, 'f'|0x80, 'v'|0x80, - 'a'|0x80, 'd'|0x80, 'a'|0x80, 'u'|0x80, - 'c'|0x80, 't'|0x80, 's'|0x80, 'b'|0x80 +#define NCOL 80 +#define NROW 24 + +#define G (WWM_GRP << WWC_MSHIFT) +short h19_frame[16] = { + ' ', '`'|G, 'a'|G, 'e'|G, + '`'|G, '`'|G, 'f'|G, 'v'|G, + 'a'|G, 'd'|G, 'a'|G, 'u'|G, + 'c'|G, 't'|G, 's'|G, 'b'|G }; -char h19_row, h19_col; -char h19_modes, h19_nmodes; -char h19_insert, h19_ninsert; -char h19_graphics; -short h19_msp10c; +extern struct tt_str *gen_VS; +extern struct tt_str *gen_VE; + +int h19_msp10c; -#define pc(c) putchar('c') +#define pc(c) ttputc('c') #define esc() pc(\033) #define PAD(ms10) { \ register i; \ for (i = ((ms10) + 5) / h19_msp10c; --i >= 0;) \ pc(\0); \ } -#define ICPAD() PAD((80 - h19_col) * 1) /* 0.1 ms per char */ -#define ILPAD() PAD((24 - h19_row) * 10); /* 1 ms per char */ +#define ICPAD() PAD((NCOL - tt.tt_col) * 1) /* 0.1 ms per char */ +#define ILPAD() PAD((NROW - tt.tt_row) * 10) /* 1 ms per char */ -#define SETINSERT(m) \ - ((m) != h19_insert \ - ? (esc(), (h19_insert = (m)) ? pc(@) : pc(O)) : 0) -#define SETMODES(m) \ - ((m) != h19_modes \ - ? (esc(), (h19_modes = (m)) ? pc(p) : pc(q)) : 0) -#define SETGRAPHICS(m) \ - ((m) != h19_graphics \ - ? (esc(), (h19_graphics = (m)) ? pc(F) : pc(G)) : 0) +#define H19_SETINSERT(m) (esc(), (tt.tt_insert = (m)) ? pc(@) : pc(O)) h19_setinsert(new) -char new; { - h19_ninsert = new; + H19_SETINSERT(new); } h19_setmodes(new) +register new; { - h19_nmodes = new & WWM_REV; + register diff; + + diff = new ^ tt.tt_modes; + if (diff & WWM_REV) { + esc(); + if (new & WWM_REV) + pc(p); + else + pc(q); + } + if (diff & WWM_GRP) { + esc(); + if (new & WWM_GRP) + pc(F); + else + pc(G); + } + tt.tt_modes = new; } h19_insline() @@ -77,150 +107,101 @@ h19_delline() h19_putc(c) register char c; { - SETMODES(h19_nmodes); - SETINSERT(h19_ninsert); - if (c & 0x80) { - SETGRAPHICS(1); - putchar(c & 0x7f); - } else { - SETGRAPHICS(0); - putchar(c); - } - if (h19_insert) + if (tt.tt_nmodes != tt.tt_modes) + (*tt.tt_setmodes)(tt.tt_nmodes); + if (tt.tt_ninsert != tt.tt_insert) + H19_SETINSERT(tt.tt_ninsert); + ttputc(c); + if (tt.tt_insert) ICPAD(); - h19_col++; + if (++tt.tt_col == NCOL) + tt.tt_col = NCOL - 1; } -h19_write(start, end) -register char *start, *end; -{ - register char c; - - SETMODES(h19_nmodes); - SETINSERT(h19_ninsert); - if (h19_insert) { - while (start <= end) { - if ((c = *start++) & 0x80) { - SETGRAPHICS(1); - putchar(c & 0x7f); - } else { - SETGRAPHICS(0); - putchar(c); - } - ICPAD(); - h19_col++; - } - } else { - h19_col += end - start + 1; - while (start <= end) - if ((c = *start++) & 0x80) { - SETGRAPHICS(1); - putchar(c & 0x7f); - } else { - SETGRAPHICS(0); - putchar(c); - } - } -} - -h19_blank(n) +h19_write(p, n) +register char *p; register n; { - if (n <= 0) - return; - SETMODES(h19_nmodes); - SETINSERT(h19_ninsert); - if (h19_insert) { + if (tt.tt_nmodes != tt.tt_modes) + (*tt.tt_setmodes)(tt.tt_nmodes); + if (tt.tt_ninsert != tt.tt_insert) + H19_SETINSERT(tt.tt_ninsert); + if (tt.tt_insert) { while (--n >= 0) { - putchar(' '); + ttputc(*p++); ICPAD(); - h19_col++; + tt.tt_col++; } } else { - h19_col += n; - while (--n >= 0) - putchar(' '); + tt.tt_col += n; + ttwrite(p, n); } + if (tt.tt_col == NCOL) + tt.tt_col = NCOL - 1; } h19_move(row, col) register char row, col; { - if (h19_row == row) { - if (h19_col == col) + if (tt.tt_row == row) { + if (tt.tt_col == col) return; - if (h19_col == col - 1) { + if (col == 0) { + pc(\r); + goto out; + } + if (tt.tt_col == col - 1) { esc(); pc(C); goto out; - } else if (h19_col == col + 1) { + } + if (tt.tt_col == col + 1) { pc(\b); goto out; } } - if (h19_col == col) { - if (h19_row == row + 1) { + if (tt.tt_col == col) { + if (tt.tt_row == row + 1) { esc(); pc(A); goto out; - } else if (h19_row == row + 1) { + } + if (tt.tt_row == row - 1) { pc(\n); goto out; } } - if (col == 1 && row == 1) { + if (col == 0 && row == 0) { esc(); pc(H); goto out; } esc(); pc(Y); - putchar(' ' + row); - putchar(' ' + col); + ttputc(' ' + row); + ttputc(' ' + col); out: - h19_col = col; - h19_row = row; + tt.tt_col = col; + tt.tt_row = row; } h19_init() { - float cpms = (float) wwbaud / 10000; /* char per ms */ - - h19_msp10c = 10 / cpms; /* ms per 10 char */ -#ifdef notdef - tt.tt_ILmf = cpms; /* 1 ms */ - tt.tt_ILov = 2; - tt.tt_ICmf = cpms * 1.5 ; /* 1.5 ms */ - tt.tt_ICov = 2; - tt.tt_DCmf = 0; - tt.tt_DCov = 2; -#endif - return 0; -} - -h19_reset() -{ + if (gen_VS) + ttxputs(gen_VS); esc(); - pc(x); - pc(4); + pc(w); esc(); pc(E); - esc(); - pc(w); - h19_col = h19_row = 0; - h19_insert = 0; - h19_graphics = 0; - h19_modes = 0; + tt.tt_col = tt.tt_row = 0; + tt.tt_ninsert = tt.tt_insert = 0; + tt.tt_nmodes = tt.tt_modes = 0; } -h19_cleanup() +h19_end() { - SETMODES(0); - SETINSERT(0); - SETGRAPHICS(0); - esc(); - pc(y); - pc(4); + if (gen_VE) + ttxputs(gen_VE); esc(); pc(v); } @@ -249,25 +230,48 @@ h19_delchar() pc(N); } +h19_scroll_down() +{ + h19_move(NROW - 1, 0); + pc(\n); +} + +h19_scroll_up() +{ + h19_move(0, 0); + esc(); + pc(I); +} + tt_h19() { - tt.tt_setinsert = h19_setinsert; - tt.tt_setmodes = h19_setmodes; + float cpms = (float) wwbaud / 10000; /* char per ms */ + + h19_msp10c = 10 / cpms; /* ms per 10 char */ + gen_VS = ttxgetstr("vs"); + gen_VE = ttxgetstr("ve"); + + tt.tt_init = h19_init; + tt.tt_end = h19_end; + tt.tt_insline = h19_insline; tt.tt_delline = h19_delline; tt.tt_delchar = h19_delchar; - tt.tt_blank = h19_blank; - tt.tt_init = h19_init; - tt.tt_cleanup = h19_cleanup; tt.tt_clreol = h19_clreol; tt.tt_clreos = h19_clreos; tt.tt_clear = h19_clear; tt.tt_move = h19_move; - tt.tt_reset = h19_reset; tt.tt_write = h19_write; tt.tt_putc = h19_putc; - tt.tt_ncol = 80; - tt.tt_nrow = 24; + tt.tt_scroll_down = h19_scroll_down; + tt.tt_scroll_up = h19_scroll_up; + tt.tt_setinsert = h19_setinsert; + tt.tt_setmodes = h19_setmodes; + + tt.tt_ncol = NCOL; + tt.tt_nrow = NROW; + tt.tt_hasinsert = 1; + tt.tt_availmodes = WWM_REV|WWM_GRP; tt.tt_frame = h19_frame; return 0; }