BSD 4_3 release
[unix-history] / usr / src / ucb / window / ttinit.c
#ifndef lint
static char sccsid[] = "@(#)ttinit.c 3.14 4/24/85";
#endif
/*
* Copyright (c) 1983 Regents of the University of California,
* All rights reserved. Redistribution permitted subject to
* the terms of the Berkeley Software License Agreement.
*/
#include "ww.h"
#include "tt.h"
int tt_h19();
int tt_h29();
int tt_f100();
int tt_tvi925();
int tt_generic();
struct tt_tab tt_tab[] = {
{ "h19", 3, tt_h19 },
{ "h29", 3, tt_h29 },
{ "f100", 4, tt_f100 },
{ "tvi925", 6, tt_tvi925 },
{ "generic", 0, tt_generic },
0
};
ttinit()
{
register struct tt_tab *tp;
register char *p, *q;
register char *t;
struct winsize winsize;
tt_strp = tt_strings;
/*
* Set output buffer size to about 1 second of output time.
*/
tt_obp = tt_ob;
tt_obe = tt_ob + MIN(wwbaud/10, sizeof tt_ob);
/*
* Use the standard name of the terminal (i.e. the second
* name in termcap).
*/
for (p = wwtermcap; *p && *p != '|' && *p != ':'; p++)
;
if (*p == '|')
p++;
for (q = p; *q && *q != '|' && *q != ':'; q++)
;
if (q != p && (t = malloc((unsigned) (q - p + 1))) != 0) {
wwterm = t;
while (p < q)
*t++ = *p++;
*t = 0;
}
for (tp = tt_tab; tp->tt_name != 0; tp++)
if (strncmp(tp->tt_name, wwterm, tp->tt_len) == 0)
break;
if (tp->tt_name == 0) {
wwerrno = WWE_BADTERM;
return -1;
}
if ((*tp->tt_func)() < 0) {
wwerrno = WWE_CANTDO;
return -1;
}
if (ioctl(0, (int)TIOCGWINSZ, (char *)&winsize) >= 0 &&
winsize.ws_row != 0 && winsize.ws_col != 0) {
tt.tt_nrow = winsize.ws_row;
tt.tt_ncol = winsize.ws_col;
}
return 0;
}