1 #ifndef lint 2 static char sccsid[] = "@(#)ttinit.c 3.14 04/24/85"; 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 int tt_h19(); 15 int tt_h29(); 16 int tt_f100(); 17 int tt_tvi925(); 18 int tt_generic(); 19 struct tt_tab tt_tab[] = { 20 { "h19", 3, tt_h19 }, 21 { "h29", 3, tt_h29 }, 22 { "f100", 4, tt_f100 }, 23 { "tvi925", 6, tt_tvi925 }, 24 { "generic", 0, tt_generic }, 25 0 26 }; 27 28 ttinit() 29 { 30 register struct tt_tab *tp; 31 register char *p, *q; 32 register char *t; 33 struct winsize winsize; 34 35 tt_strp = tt_strings; 36 37 /* 38 * Set output buffer size to about 1 second of output time. 39 */ 40 tt_obp = tt_ob; 41 tt_obe = tt_ob + MIN(wwbaud/10, sizeof tt_ob); 42 43 /* 44 * Use the standard name of the terminal (i.e. the second 45 * name in termcap). 46 */ 47 for (p = wwtermcap; *p && *p != '|' && *p != ':'; p++) 48 ; 49 if (*p == '|') 50 p++; 51 for (q = p; *q && *q != '|' && *q != ':'; q++) 52 ; 53 if (q != p && (t = malloc((unsigned) (q - p + 1))) != 0) { 54 wwterm = t; 55 while (p < q) 56 *t++ = *p++; 57 *t = 0; 58 } 59 for (tp = tt_tab; tp->tt_name != 0; tp++) 60 if (strncmp(tp->tt_name, wwterm, tp->tt_len) == 0) 61 break; 62 if (tp->tt_name == 0) { 63 wwerrno = WWE_BADTERM; 64 return -1; 65 } 66 if ((*tp->tt_func)() < 0) { 67 wwerrno = WWE_CANTDO; 68 return -1; 69 } 70 if (ioctl(0, (int)TIOCGWINSZ, (char *)&winsize) >= 0 && 71 winsize.ws_row != 0 && winsize.ws_col != 0) { 72 tt.tt_nrow = winsize.ws_row; 73 tt.tt_ncol = winsize.ws_col; 74 } 75 return 0; 76 } 77