home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume26
/
mytinfo
/
part01
/
termcap.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-12-26
|
2KB
|
155 lines
/*
* termcap.c
*
* By Ross Ridge
* Public Domain
* 92/06/01 07:43:08
*
* termcap compatibility functions
*
*/
#include "defs.h"
#include "term.h"
static const char SCCSid[] = "@(#) mytinfo termcap.c 3.3 92/06/01 public domain, By Ross Ridge";
extern char _mytinfo_version[];
static char *force = _mytinfo_version;
int
tgetent(buf, term)
char *term, *buf; {
char *s;
struct term_path *path;
int r = -1;
int fd;
if (term == NULL)
term = getenv("TERM");
if (term == NULL)
return 0;
path = _buildpath("$MYTERMINFO", 2,
"$TERMINFO", 2,
"$TERMCAP", 1,
#ifdef TERMINFODIR
TERMINFODIR, 0,
#endif
#ifdef TERMCAPFILE
TERMCAPFILE, 0,
#endif
#ifdef TERMINFOSRC
TERMINFOSRC, 0,
#endif
NULL, -1);
if (path == NULL)
return -1;
#if 1
{
char buf1[MAX_BUF];
r = _fillterm(term, path, buf1);
}
#else
r = _fillterm(term, path, buf);
#endif
_delpath(path);
switch(r) {
case -3:
case -2:
case -1:
return -1;
case 0:
return 0;
case 1:
case 2:
case 3:
if (isatty(1))
fd = 1;
else if (isatty(2))
fd = 2;
else if (isatty(3)) /* V10 /dev/tty ?? */
fd = 3;
else if (isatty(0))
fd = 0;
else
fd = 1;
cur_term->fd = fd;
_term_buf.fd = fd;
if (_init_tty() == ERR)
return 0;
if ((s = getenv("LINES")) != NULL && atoi(s) > 0)
lines = atoi(s);
if ((s = getenv("COLUMNS")) != NULL && atoi(s) > 0)
columns = atoi(s);
cur_term->termcap = 1;
return 1;
default:
return -1;
}
}
static char cap2[3];
int
tgetnum(cap)
char *cap; {
int ind;
cap2[0] = cap[0];
cap2[1] = cap[1];
cap2[2] = '\0';
ind = _findnumcode(cap2);
if (ind == -1)
return -1;
return cur_term->nums[ind];
}
int
tgetflag(cap)
char *cap; {
int ind;
cap2[0] = cap[0];
cap2[1] = cap[1];
cap2[2] = '\0';
ind = _findboolcode(cap2);
if (ind == -1)
return 0;
return cur_term->bools[ind];
}
char *
tgetstr(cap, area)
char *cap;
char **area; {
register char *sp, *dp;
int ind;
cap2[0] = cap[0];
cap2[1] = cap[1];
cap2[2] = '\0';
ind = _findstrcode(cap2);
if (ind == -1)
return NULL;
sp = cur_term->strs[ind];
if (area == NULL || sp == NULL)
return sp;
dp = *area;
while (*sp != '\0')
*dp++ = *sp++;
*dp++ = '\0';
sp = *area;
*area = dp;
return sp;
}