diff options
Diffstat (limited to 'lib/libmytinfo/fillterm.c')
-rw-r--r-- | lib/libmytinfo/fillterm.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/lib/libmytinfo/fillterm.c b/lib/libmytinfo/fillterm.c new file mode 100644 index 0000000..4797f1a --- /dev/null +++ b/lib/libmytinfo/fillterm.c @@ -0,0 +1,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; +} |