summaryrefslogtreecommitdiffstats
path: root/lib/libmytinfo/fillterm.c
blob: 8e120c9caa626404e60f9f04ed215f9025de8bf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
 * fillterm.c
 *
 * By Ross Ridge
 * Public Domain
 * 92/02/01 07:29:54
 *
 */

#include "defs.h"
#include <term.h>

#ifdef USE_SCCS_IDS
static const char SCCSid[] = "@(#) mytinfo fillterm.c 3.2 92/02/01 public domain, By Ross Ridge";
#endif

TERMINAL _term_buf;
TERMINAL *cur_term;

int
_fillterm(name, path, buf)
char *name, *buf;
struct term_path *path; {
	register int i, r;

	r = -1;

	for(i = NUM_OF_BOOLS; i;)
		_term_buf.bools[--i] = -1;
	for(i = NUM_OF_NUMS; i;)
		_term_buf.nums[--i] = -2;
	for(i = NUM_OF_STRS; i;)
		_term_buf.strs[--i] = (char *) -1;

	_term_buf.name_all = NULL;

	r = _findterm(name, path, buf);
	switch(r) {
	case 1:
		if (_gettcap(buf, &_term_buf, path) != 0)
			return -3;
		_tcapconv();
		_tcapdefault();
		break;
	case 2:
		if (_gettinfo(buf, &_term_buf, path) != 0)
			return -3;
		break;
	case 3:
		if (_gettbin(buf, &_term_buf) != 0)
			return -3;
		break;
	default:
		return r;
	}

	if ((_term_buf.name = _addstr(name)) == NULL)
		return -3;

	for(i = NUM_OF_BOOLS; i;)
		if (_term_buf.bools[--i] == -1)
			_term_buf.bools[i] = 0;
	for(i = NUM_OF_NUMS; i;)
		if (_term_buf.nums[--i] == -2)
			_term_buf.nums[i] = -1;
	for(i = NUM_OF_STRS; i;)
		if (_term_buf.strs[--i] == (char *) -1)
			_term_buf.strs[i] = NULL;

	_term_buf.fd = 1;
	_term_buf.pad = 1;
	_term_buf.baudrate = 0;
	_term_buf.strbuf = _endstr();

	cur_term = (TERMINAL *) malloc(sizeof(_term_buf));
	if (cur_term == NULL)
		return -3;
	memcpy((anyptr)cur_term, (anyptr)&_term_buf, sizeof(_term_buf));

	return r;
}
OpenPOWER on IntegriCloud