version 1.3, 2010/02/05 12:31:56 |
version 1.6, 2010/02/11 09:42:03 |
|
|
/* $NetBSD$ */ |
/* $NetBSD$ */ |
|
|
/* |
/* |
* Copyright (c) 2009 The NetBSD Foundation, Inc. |
* Copyright (c) 2009, 2010 The NetBSD Foundation, Inc. |
* |
* |
* This code is derived from software contributed to The NetBSD Foundation |
* This code is derived from software contributed to The NetBSD Foundation |
* by Roy Marples. |
* by Roy Marples. |
Line 44 __RCSID("$NetBSD$"); |
|
Line 44 __RCSID("$NetBSD$"); |
|
#include <term_private.h> |
#include <term_private.h> |
#include <term.h> |
#include <term.h> |
|
|
#define TERMINFO_DIRS "/usr/share/misc/terminfo:/etc/terminfo:/rescue/terminfo" |
#define TERMINFO_DIRS "/usr/share/misc/terminfo" |
|
|
static char database[PATH_MAX]; |
static char database[PATH_MAX]; |
static char pathbuf[PATH_MAX]; |
static char pathbuf[PATH_MAX]; |
const char *_ti_database; |
const char *_ti_database; |
|
|
|
/* rescue.c is generated from /usr/src/share/terminfo/terminfo |
|
* at build time as an array of strings. |
|
* static const char *rescue_terms[] = { |
|
* "ansi", |
|
* "\002\005\000\141\156\163\151\000\000\000\043\000\141\156\163\151\057", |
|
* NULL, |
|
* NULL |
|
* }; |
|
*/ |
|
|
|
#include "rescue.c" |
|
|
static int |
static int |
_ti_readterm(TERMINAL *term, char *cap, size_t caplen, int flags) |
_ti_readterm(TERMINAL *term, const char *cap, size_t caplen, int flags) |
{ |
{ |
uint8_t ver; |
uint8_t ver; |
uint16_t ind, num; |
uint16_t ind, num; |
Line 75 _ti_readterm(TERMINAL *term, char *cap, |
|
Line 87 _ti_readterm(TERMINAL *term, char *cap, |
|
term->strs = calloc(TISTRMAX + 1, sizeof(char *)); |
term->strs = calloc(TISTRMAX + 1, sizeof(char *)); |
if (term->strs == NULL) |
if (term->strs == NULL) |
goto err; |
goto err; |
term->_area = malloc(caplen); |
term->_arealen = caplen; |
|
term->_area = malloc(term->_arealen); |
if (term->_area == NULL) |
if (term->_area == NULL) |
goto err; |
goto err; |
memcpy(term->_area, cap, caplen); |
memcpy(term->_area, cap, term->_arealen); |
|
|
cap = term->_area; |
cap = term->_area; |
len = le16dec(cap); |
len = le16dec(cap); |
Line 99 _ti_readterm(TERMINAL *term, char *cap, |
|
Line 112 _ti_readterm(TERMINAL *term, char *cap, |
|
} |
} |
len = le16dec(cap); |
len = le16dec(cap); |
cap += sizeof(uint16_t); |
cap += sizeof(uint16_t); |
term->desc = cap; |
if (len == 0) |
cap += len; |
term->desc = NULL; |
|
else { |
|
term->desc = cap; |
|
cap += len; |
|
} |
|
|
num = le16dec(cap); |
num = le16dec(cap); |
cap += sizeof(uint16_t); |
cap += sizeof(uint16_t); |
Line 279 _ti_getterm(TERMINAL *term, const char * |
|
Line 296 _ti_getterm(TERMINAL *term, const char * |
|
{ |
{ |
int r; |
int r; |
char *e, h[PATH_MAX]; |
char *e, h[PATH_MAX]; |
|
const char **p; |
|
|
_DIAGASSERT(term != NULL); |
_DIAGASSERT(term != NULL); |
_DIAGASSERT(name != NULL); |
_DIAGASSERT(name != NULL); |
|
|
|
database[0] = '\0'; |
_ti_database = NULL; |
_ti_database = NULL; |
|
|
e = getenv("TERMINFO"); |
e = getenv("TERMINFO"); |
if (e != NULL) |
if (e != NULL) |
return _ti_dbgetterm(term, e, name, flags); |
return _ti_dbgetterm(term, e, name, flags); |
Line 295 _ti_getterm(TERMINAL *term, const char * |
|
Line 315 _ti_getterm(TERMINAL *term, const char * |
|
if (r == 1) |
if (r == 1) |
return 1; |
return 1; |
} |
} |
|
|
return _ti_dbgettermp(term, TERMINFO_DIRS, name, flags); |
r = _ti_dbgettermp(term, TERMINFO_DIRS, name, flags); |
|
if (r == 1) |
|
return 1; |
|
|
|
for (p = rescue_terms; *p != NULL; p++, p++) |
|
if (strcmp(name, *p) == 0) { |
|
r = _ti_readterm(term, *(p + 1), 4096, flags); |
|
break; |
|
} |
|
|
|
return r; |
} |
} |
|
|
void |
void |