diff options
Diffstat (limited to 'lib/libmytinfo/terminfo.c')
-rw-r--r-- | lib/libmytinfo/terminfo.c | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/lib/libmytinfo/terminfo.c b/lib/libmytinfo/terminfo.c new file mode 100644 index 0000000..0568588 --- /dev/null +++ b/lib/libmytinfo/terminfo.c @@ -0,0 +1,132 @@ +/* + * terminfo.c + * + * By Ross Ridge + * Public Domain + * 92/02/01 07:30:30 + * + * terminfo compatible libary functions + * + */ + +#include "defs.h" +#include <term.h> + +#ifdef USE_SCCS_IDS +static const char SCCSid[] = "@(#) mytinfo terminfo.c 3.2 92/02/01 public domain, By Ross Ridge"; +#endif + +extern char _mytinfo_version[]; +/* not static */ +char *_force_pick2 = _mytinfo_version; + +#ifdef USE_FAKE_STDIO + +#ifdef __GNUC__ +__inline__ +#endif +static int +printerr(msg) +char *msg; { + return write(2, msg, strlen(msg)); +} + +#define RETERR(e, msg) { (err == NULL ? (printerr(msg), exit(1)) \ + : (*err = e)); return ERR; } + +#else + +#define RETERR(e, msg) { (err == NULL ? (fprintf(stderr, "setupterm(\"%s\",%d,NULL): %s", term, fd, msg), exit(1)) \ + : (*err = e)); return ERR; } + +#endif + +int +setupterm(term, fd, err) +char *term; +int fd; +int *err; { + struct term_path *path; + char *s; + int r = -1; + char buf[MAX_BUF]; + + + if (term == NULL) + term = getenv("TERM"); + if (term == NULL) + RETERR(0, "TERM not set\n") + + path = _buildpath( +#ifdef USE_TERMINFO + "$MYTERMINFO", 2, + "$TERMINFO", 2, +#ifdef TERMINFODIR + TERMINFODIR, 0, +#endif +#ifdef TERMINFOSRC + TERMINFOSRC, 0, +#endif +#endif +#ifdef USE_TERMCAP + "$TERMCAP", 1, +#ifdef TERMCAPFILE + TERMCAPFILE, 0, +#endif +#endif + NULL, -1); + + if (path == NULL) + RETERR(0, "malloc error\n"); + + r = _fillterm(term, path, buf); + + _delpath(path); + + switch(r) { + case -3: + RETERR(0, "malloc error\n"); + case -2: + RETERR(-1, "bad format\n"); + case -1: + RETERR(-1, "database not found\n"); + case 0: + RETERR(0, "terminal not found\n"); + case 1: + case 2: + case 3: + cur_term->fd = fd; + _term_buf.fd = fd; + if (_init_tty() == ERR) + RETERR(0, "problem initializing tty\n"); + if ((s = getenv("LINES")) != NULL && atoi(s) > 0) + lines = atoi(s); + if ((s = getenv("COLUMNS")) != NULL && atoi(s) > 0) + columns = atoi(s); + if (err != NULL) + *err = 1; + return OK; + default: + RETERR(0, "oops...\n"); + } +} + +int +set_curterm(p) +TERMINAL *p; { + cur_term = p; + if (_init_tty() == ERR) + return ERR; + if (_check_tty() == ERR) + return ERR; + return OK; +} + +int +del_curterm(p) +TERMINAL *p; { + _del_strs(p); + free((anyptr) p); + + return OK; +} |