xref: /original-bsd/usr.bin/window/ttinit.c (revision 9ae781f3)
1aa9590d9Sedward /*
2*9ae781f3Sbostic  * Copyright (c) 1983, 1993
3*9ae781f3Sbostic  *	The Regents of the University of California.  All rights reserved.
4bac0d407Sbostic  *
58e751acfSbostic  * This code is derived from software contributed to Berkeley by
68e751acfSbostic  * Edward Wang at The University of California, Berkeley.
78e751acfSbostic  *
8122a1d9eSbostic  * %sccs.include.redist.c%
9aa9590d9Sedward  */
10aa9590d9Sedward 
11bac0d407Sbostic #ifndef lint
12*9ae781f3Sbostic static char sccsid[] = "@(#)ttinit.c	8.1 (Berkeley) 06/06/93";
13bac0d407Sbostic #endif /* not lint */
14bac0d407Sbostic 
15b7e21f24Sedward #include "ww.h"
16b7046220Sedward #include "tt.h"
17b7e21f24Sedward 
181134613eSedward int tt_h19();
191134613eSedward int tt_h29();
201134613eSedward int tt_f100();
21cd4b5b9fSedward int tt_tvi925();
22349a91a4Sedward int tt_wyse75();
23349a91a4Sedward int tt_wyse60();
2478178e88Sedward int tt_zapple();
253427f277Sedward int tt_zentec();
261134613eSedward int tt_generic();
271134613eSedward struct tt_tab tt_tab[] = {
281134613eSedward 	{ "h19",	3, tt_h19 },
291134613eSedward 	{ "h29",	3, tt_h29 },
301134613eSedward 	{ "f100",	4, tt_f100 },
31cd4b5b9fSedward 	{ "tvi925",	6, tt_tvi925 },
32349a91a4Sedward 	{ "wyse75",	6, tt_wyse75 },
33349a91a4Sedward 	{ "wyse60",	6, tt_wyse60 },
34349a91a4Sedward 	{ "w60",	3, tt_wyse60 },
3578178e88Sedward 	{ "zapple",	6, tt_zapple },
363427f277Sedward 	{ "zentec",	6, tt_zentec },
371134613eSedward 	{ "generic",	0, tt_generic },
381134613eSedward 	0
391134613eSedward };
401134613eSedward 
ttinit()41b7e21f24Sedward ttinit()
42b7e21f24Sedward {
437175ad38Sedward 	int i;
44b7e21f24Sedward 	register struct tt_tab *tp;
45d0e856a6Sedward 	register char *p, *q;
46d0e856a6Sedward 	register char *t;
47b7e21f24Sedward 
4836b83978Sedward 	tt_strp = tt_strings;
4936b83978Sedward 
50d0e856a6Sedward 	/*
51ac9c5eecSedward 	 * Set output buffer size to about 1 second of output time.
52ac9c5eecSedward 	 */
537175ad38Sedward 	i = MIN(wwbaud/10, 512);
547175ad38Sedward 	if ((tt_ob = malloc((unsigned) i)) == 0) {
557175ad38Sedward 		wwerrno = WWE_NOMEM;
567175ad38Sedward 		return -1;
577175ad38Sedward 	}
58ac9c5eecSedward 	tt_obp = tt_ob;
597175ad38Sedward 	tt_obe = tt_ob + i;
60ac9c5eecSedward 
61ac9c5eecSedward 	/*
62d0e856a6Sedward 	 * Use the standard name of the terminal (i.e. the second
63d0e856a6Sedward 	 * name in termcap).
64d0e856a6Sedward 	 */
65d0e856a6Sedward 	for (p = wwtermcap; *p && *p != '|' && *p != ':'; p++)
66d0e856a6Sedward 		;
67d0e856a6Sedward 	if (*p == '|')
68d0e856a6Sedward 		p++;
69d0e856a6Sedward 	for (q = p; *q && *q != '|' && *q != ':'; q++)
70d0e856a6Sedward 		;
71cbce46a8Sedward 	if (q != p && (t = malloc((unsigned) (q - p + 1))) != 0) {
72d0e856a6Sedward 		wwterm = t;
73d0e856a6Sedward 		while (p < q)
74d0e856a6Sedward 			*t++ = *p++;
75d0e856a6Sedward 		*t = 0;
76d0e856a6Sedward 	}
77b7e21f24Sedward 	for (tp = tt_tab; tp->tt_name != 0; tp++)
78b7e21f24Sedward 		if (strncmp(tp->tt_name, wwterm, tp->tt_len) == 0)
79b7e21f24Sedward 			break;
80bef2d3c1Sedward 	if (tp->tt_name == 0) {
81bef2d3c1Sedward 		wwerrno = WWE_BADTERM;
82b7e21f24Sedward 		return -1;
83bef2d3c1Sedward 	}
84bef2d3c1Sedward 	if ((*tp->tt_func)() < 0) {
85bef2d3c1Sedward 		wwerrno = WWE_CANTDO;
86bef2d3c1Sedward 		return -1;
87bef2d3c1Sedward 	}
88961336aeSedward 	if (wwgetttysize(0, &tt.tt_nrow, &tt.tt_ncol) < 0)
89961336aeSedward 		return -1;
90dd673294Sedward 	tt.tt_scroll_top = 0;
91dd673294Sedward 	tt.tt_scroll_bot = tt.tt_nrow - 1;
92bef2d3c1Sedward 	return 0;
93b7e21f24Sedward }
94