133 lines
2.2 KiB
C
133 lines
2.2 KiB
C
/*
|
|
* 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;
|
|
}
|