Merge changes from vendor branch to mainline.
This commit is contained in:
parent
45993e3bd4
commit
952abd2a98
|
@ -1,5 +1,5 @@
|
|||
/****************************************************************************
|
||||
* Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. *
|
||||
* Copyright (c) 1998,1999,2000,2001 Free Software Foundation, Inc. *
|
||||
* *
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a *
|
||||
* copy of this software and associated documentation files (the *
|
||||
|
@ -52,7 +52,7 @@
|
|||
#include <term_entry.h>
|
||||
#include <tic.h>
|
||||
|
||||
MODULE_ID("$Id: comp_scan.c,v 1.47 2000/09/24 01:15:17 tom Exp $")
|
||||
MODULE_ID("$Id: comp_scan.c,v 1.56 2001/04/21 18:53:34 tom Exp $")
|
||||
|
||||
/*
|
||||
* Maximum length of string capability we'll accept before raising an error.
|
||||
|
@ -62,14 +62,22 @@ MODULE_ID("$Id: comp_scan.c,v 1.47 2000/09/24 01:15:17 tom Exp $")
|
|||
|
||||
#define iswhite(ch) (ch == ' ' || ch == '\t')
|
||||
|
||||
int _nc_syntax = 0; /* termcap or terminfo? */
|
||||
long _nc_curr_file_pos = 0; /* file offset of current line */
|
||||
long _nc_comment_start = 0; /* start of comment range before name */
|
||||
long _nc_comment_end = 0; /* end of comment range before name */
|
||||
long _nc_start_line = 0; /* start line of current entry */
|
||||
NCURSES_EXPORT_VAR(int)
|
||||
_nc_syntax = 0; /* termcap or terminfo? */
|
||||
NCURSES_EXPORT_VAR(long)
|
||||
_nc_curr_file_pos = 0; /* file offset of current line */
|
||||
NCURSES_EXPORT_VAR(long)
|
||||
_nc_comment_start = 0; /* start of comment range before name */
|
||||
NCURSES_EXPORT_VAR(long)
|
||||
_nc_comment_end = 0; /* end of comment range before name */
|
||||
NCURSES_EXPORT_VAR(long)
|
||||
_nc_start_line = 0; /* start line of current entry */
|
||||
|
||||
struct token _nc_curr_token =
|
||||
{0, 0, 0};
|
||||
NCURSES_EXPORT_VAR(struct token)
|
||||
_nc_curr_token =
|
||||
{
|
||||
0, 0, 0
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
|
@ -83,7 +91,8 @@ static int pushtype; /* type of pushback token */
|
|||
static char pushname[MAX_NAME_SIZE + 1];
|
||||
|
||||
#if NCURSES_EXT_FUNCS
|
||||
bool _nc_disable_period = FALSE; /* used by tic -a option */
|
||||
NCURSES_EXPORT_VAR(bool)
|
||||
_nc_disable_period = FALSE; /* used by tic -a option */
|
||||
#endif
|
||||
|
||||
static int last_char(void);
|
||||
|
@ -135,8 +144,8 @@ eat_escaped_newline(int ch)
|
|||
*
|
||||
*/
|
||||
|
||||
int
|
||||
_nc_get_token(void)
|
||||
NCURSES_EXPORT(int)
|
||||
_nc_get_token(bool silent)
|
||||
{
|
||||
static const char terminfo_punct[] = "@%&*!#";
|
||||
long number;
|
||||
|
@ -204,8 +213,9 @@ _nc_get_token(void)
|
|||
&& !(ch == '.' && _nc_disable_period)
|
||||
#endif
|
||||
&& !strchr(terminfo_punct, (char) ch)) {
|
||||
_nc_warning("Illegal character (expected alphanumeric or %s) - %s",
|
||||
terminfo_punct, unctrl(ch));
|
||||
if (!silent)
|
||||
_nc_warning("Illegal character (expected alphanumeric or %s) - %s",
|
||||
terminfo_punct, unctrl((chtype) ch));
|
||||
_nc_panic_mode(separator);
|
||||
goto start_token;
|
||||
}
|
||||
|
@ -232,13 +242,11 @@ _nc_get_token(void)
|
|||
_nc_syntax = SYN_TERMINFO;
|
||||
separator = ',';
|
||||
/*
|
||||
* Fall-through here is not an accident.
|
||||
* The idea is that if we see a comma, we
|
||||
* figure this is terminfo unless we
|
||||
* subsequently run into a colon -- but
|
||||
* we don't stop looking for that colon until
|
||||
* hitting a newline. This allows commas to
|
||||
* be embedded in description fields of
|
||||
* Fall-through here is not an accident. The idea is that
|
||||
* if we see a comma, we figure this is terminfo unless we
|
||||
* subsequently run into a colon -- but we don't stop
|
||||
* looking for that colon until hitting a newline. This
|
||||
* allows commas to be embedded in description fields of
|
||||
* either syntax.
|
||||
*/
|
||||
/* FALLTHRU */
|
||||
|
@ -250,11 +258,10 @@ _nc_get_token(void)
|
|||
ptr[0] = '\0';
|
||||
if (_nc_syntax == ERR) {
|
||||
/*
|
||||
* Grrr...what we ought to do here is barf,
|
||||
* complaining that the entry is malformed.
|
||||
* But because a couple of name fields in the
|
||||
* 8.2 termcap file end with |\, we just have
|
||||
* to assume it's termcap syntax.
|
||||
* Grrr...what we ought to do here is barf, complaining that
|
||||
* the entry is malformed. But because a couple of name fields
|
||||
* in the 8.2 termcap file end with |\, we just have to assume
|
||||
* it's termcap syntax.
|
||||
*/
|
||||
_nc_syntax = SYN_TERMCAP;
|
||||
separator = ':';
|
||||
|
@ -266,8 +273,8 @@ _nc_get_token(void)
|
|||
}
|
||||
|
||||
/*
|
||||
* This is the soonest we have the terminal name
|
||||
* fetched. Set up for following warning messages.
|
||||
* This is the soonest we have the terminal name fetched. Set up
|
||||
* for following warning messages.
|
||||
*/
|
||||
ptr = strchr(buffer, '|');
|
||||
if (ptr == (char *) NULL)
|
||||
|
@ -278,11 +285,11 @@ _nc_get_token(void)
|
|||
*ptr = ch;
|
||||
|
||||
/*
|
||||
* Compute the boundary between the aliases and the
|
||||
* description field for syntax-checking purposes.
|
||||
* Compute the boundary between the aliases and the description
|
||||
* field for syntax-checking purposes.
|
||||
*/
|
||||
desc = strrchr(buffer, '|');
|
||||
if (desc) {
|
||||
if (!silent && desc) {
|
||||
if (*desc == '\0')
|
||||
_nc_warning("empty longname field");
|
||||
#ifndef FREEBSD_NATIVE
|
||||
|
@ -294,20 +301,22 @@ _nc_get_token(void)
|
|||
desc = buffer + strlen(buffer);
|
||||
|
||||
/*
|
||||
* Whitespace in a name field other than the long name
|
||||
* can confuse rdist and some termcap tools. Slashes
|
||||
* are a no-no. Other special characters can be
|
||||
* dangerous due to shell expansion.
|
||||
* Whitespace in a name field other than the long name can confuse
|
||||
* rdist and some termcap tools. Slashes are a no-no. Other
|
||||
* special characters can be dangerous due to shell expansion.
|
||||
*/
|
||||
for (ptr = buffer; ptr < desc; ptr++) {
|
||||
if (isspace(*ptr)) {
|
||||
_nc_warning("whitespace in name or alias field");
|
||||
if (isspace(CharOf(*ptr))) {
|
||||
if (!silent)
|
||||
_nc_warning("whitespace in name or alias field");
|
||||
break;
|
||||
} else if (*ptr == '/') {
|
||||
_nc_warning("slashes aren't allowed in names or aliases");
|
||||
if (!silent)
|
||||
_nc_warning("slashes aren't allowed in names or aliases");
|
||||
break;
|
||||
} else if (strchr("$[]!*?", *ptr)) {
|
||||
_nc_warning("dubious character `%c' in name or alias field", *ptr);
|
||||
if (!silent)
|
||||
_nc_warning("dubious character `%c' in name or alias field", *ptr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -340,9 +349,9 @@ _nc_get_token(void)
|
|||
type = BOOLEAN;
|
||||
break;
|
||||
case '@':
|
||||
if ((ch = next_char()) != separator)
|
||||
if ((ch = next_char()) != separator && !silent)
|
||||
_nc_warning("Missing separator after `%s', have %s",
|
||||
buffer, unctrl(ch));
|
||||
buffer, unctrl((chtype) ch));
|
||||
_nc_curr_token.tk_name = buffer;
|
||||
type = CANCEL;
|
||||
break;
|
||||
|
@ -356,10 +365,12 @@ _nc_get_token(void)
|
|||
}
|
||||
numbuf[found] = '\0';
|
||||
number = strtol(numbuf, &numchk, 0);
|
||||
if (numchk == numbuf)
|
||||
_nc_warning("no value given for `%s'", buffer);
|
||||
if ((*numchk != '\0') || (ch != separator))
|
||||
_nc_warning("Missing separator");
|
||||
if (!silent) {
|
||||
if (numchk == numbuf)
|
||||
_nc_warning("no value given for `%s'", buffer);
|
||||
if ((*numchk != '\0') || (ch != separator))
|
||||
_nc_warning("Missing separator");
|
||||
}
|
||||
_nc_curr_token.tk_name = buffer;
|
||||
_nc_curr_token.tk_valnumber = number;
|
||||
type = NUMBER;
|
||||
|
@ -367,7 +378,7 @@ _nc_get_token(void)
|
|||
|
||||
case '=':
|
||||
ch = _nc_trans_string(ptr, buffer + sizeof(buffer));
|
||||
if (ch != separator)
|
||||
if (!silent && ch != separator)
|
||||
_nc_warning("Missing separator");
|
||||
_nc_curr_token.tk_name = buffer;
|
||||
_nc_curr_token.tk_valstring = ptr;
|
||||
|
@ -380,7 +391,8 @@ _nc_get_token(void)
|
|||
default:
|
||||
/* just to get rid of the compiler warning */
|
||||
type = UNDEF;
|
||||
_nc_warning("Illegal character - %s", unctrl(ch));
|
||||
if (!silent)
|
||||
_nc_warning("Illegal character - %s", unctrl((chtype) ch));
|
||||
}
|
||||
} /* end else (first_column == FALSE) */
|
||||
} /* end else (ch != EOF) */
|
||||
|
@ -432,9 +444,12 @@ _nc_get_token(void)
|
|||
#endif
|
||||
|
||||
if (dot_flag == TRUE) /* if commented out, use the next one */
|
||||
type = _nc_get_token();
|
||||
type = _nc_get_token(silent);
|
||||
|
||||
DEBUG(3, ("token: `%s', class %d", _nc_curr_token.tk_name, type));
|
||||
DEBUG(3, ("token: `%s', class %d",
|
||||
_nc_curr_token.tk_name != 0 ? _nc_curr_token.tk_name :
|
||||
"<null>",
|
||||
type));
|
||||
|
||||
return (type);
|
||||
}
|
||||
|
@ -458,11 +473,11 @@ _nc_get_token(void)
|
|||
*
|
||||
*/
|
||||
|
||||
char
|
||||
NCURSES_EXPORT(char)
|
||||
_nc_trans_string(char *ptr, char *last)
|
||||
{
|
||||
int count = 0;
|
||||
int number;
|
||||
int number = 0;
|
||||
int i, c;
|
||||
chtype ch, last_ch = '\0';
|
||||
bool ignored = FALSE;
|
||||
|
@ -612,14 +627,14 @@ _nc_trans_string(char *ptr, char *last)
|
|||
* get_token() call.
|
||||
*/
|
||||
|
||||
void
|
||||
NCURSES_EXPORT(void)
|
||||
_nc_push_token(int tokclass)
|
||||
{
|
||||
/*
|
||||
* This implementation is kind of bogus, it will fail if we ever do
|
||||
* more than one pushback at a time between get_token() calls. It
|
||||
* relies on the fact that curr_tok is static storage that nothing
|
||||
* but get_token() touches.
|
||||
* This implementation is kind of bogus, it will fail if we ever do more
|
||||
* than one pushback at a time between get_token() calls. It relies on the
|
||||
* fact that curr_tok is static storage that nothing but get_token()
|
||||
* touches.
|
||||
*/
|
||||
pushtype = tokclass;
|
||||
_nc_get_type(pushname);
|
||||
|
@ -631,7 +646,7 @@ _nc_push_token(int tokclass)
|
|||
/*
|
||||
* Panic mode error recovery - skip everything until a "ch" is found.
|
||||
*/
|
||||
void
|
||||
NCURSES_EXPORT(void)
|
||||
_nc_panic_mode(char ch)
|
||||
{
|
||||
int c;
|
||||
|
@ -665,7 +680,7 @@ static FILE *yyin; /* scanner's input file descriptor */
|
|||
* non-null.
|
||||
*/
|
||||
|
||||
void
|
||||
NCURSES_EXPORT(void)
|
||||
_nc_reset_input(FILE * fp, char *buf)
|
||||
{
|
||||
pushtype = NO_PUSHBACK;
|
||||
|
@ -688,7 +703,7 @@ last_char(void)
|
|||
{
|
||||
size_t len = strlen(bufptr);
|
||||
while (len--) {
|
||||
if (!isspace(bufptr[len]))
|
||||
if (!isspace(CharOf(bufptr[len])))
|
||||
return bufptr[len];
|
||||
}
|
||||
return 0;
|
||||
|
@ -712,6 +727,10 @@ static int
|
|||
next_char(void)
|
||||
{
|
||||
if (!yyin) {
|
||||
/*
|
||||
* An string with an embedded null will truncate the input. This is
|
||||
* intentional (we don't read binary files here).
|
||||
*/
|
||||
if (*bufptr == '\0')
|
||||
return (EOF);
|
||||
if (*bufptr == '\n') {
|
||||
|
@ -720,52 +739,61 @@ next_char(void)
|
|||
}
|
||||
} else if (!bufptr || !*bufptr) {
|
||||
/*
|
||||
* In theory this could be recoded to do its I/O one
|
||||
* character at a time, saving the buffer space. In
|
||||
* practice, this turns out to be quite hard to get
|
||||
* completely right. Try it and see. If you succeed,
|
||||
* don't forget to hack push_back() correspondingly.
|
||||
* In theory this could be recoded to do its I/O one character at a
|
||||
* time, saving the buffer space. In practice, this turns out to be
|
||||
* quite hard to get completely right. Try it and see. If you
|
||||
* succeed, don't forget to hack push_back() correspondingly.
|
||||
*/
|
||||
static char line[LEXBUFSIZ];
|
||||
static char *result;
|
||||
static size_t allocated;
|
||||
size_t used;
|
||||
size_t len;
|
||||
|
||||
do {
|
||||
_nc_curr_file_pos = ftell(yyin);
|
||||
bufstart = 0;
|
||||
used = 0;
|
||||
do {
|
||||
if (used + (LEXBUFSIZ / 4) >= allocated) {
|
||||
allocated += (allocated + LEXBUFSIZ);
|
||||
result = _nc_doalloc(result, allocated);
|
||||
if (result == 0)
|
||||
return (EOF);
|
||||
}
|
||||
if (used == 0)
|
||||
_nc_curr_file_pos = ftell(yyin);
|
||||
|
||||
if ((bufstart = fgets(line, LEXBUFSIZ, yyin)) != NULL) {
|
||||
_nc_curr_line++;
|
||||
_nc_curr_col = 0;
|
||||
}
|
||||
bufptr = bufstart;
|
||||
} while
|
||||
(bufstart != NULL && line[0] == '#');
|
||||
if (fgets(result + used, allocated - used, yyin) != NULL) {
|
||||
bufstart = result;
|
||||
if (used == 0) {
|
||||
_nc_curr_line++;
|
||||
_nc_curr_col = 0;
|
||||
}
|
||||
} else {
|
||||
if (used != 0)
|
||||
strcat(result, "\n");
|
||||
}
|
||||
if ((bufptr = bufstart) != 0) {
|
||||
used = strlen(bufptr);
|
||||
while (iswhite(*bufptr))
|
||||
bufptr++;
|
||||
|
||||
if (bufstart == NULL || *bufstart == 0)
|
||||
return (EOF);
|
||||
|
||||
while (iswhite(*bufptr))
|
||||
bufptr++;
|
||||
|
||||
/*
|
||||
* Treat a trailing <cr><lf> the same as a <newline> so we can read
|
||||
* files on OS/2, etc.
|
||||
*/
|
||||
if ((len = strlen(bufptr)) > 1) {
|
||||
if (bufptr[len - 1] == '\n'
|
||||
&& bufptr[len - 2] == '\r') {
|
||||
len--;
|
||||
bufptr[len - 1] = '\n';
|
||||
bufptr[len] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If we don't have a trailing newline, it's because the line is simply
|
||||
* too long. Give up. (FIXME: We could instead reallocate the line
|
||||
* buffer and allow arbitrary-length lines).
|
||||
*/
|
||||
if (len == 0 || (bufptr[len - 1] != '\n'))
|
||||
return (EOF);
|
||||
/*
|
||||
* Treat a trailing <cr><lf> the same as a <newline> so we
|
||||
* can read files on OS/2, etc.
|
||||
*/
|
||||
if ((len = strlen(bufptr)) > 1) {
|
||||
if (bufptr[len - 1] == '\n'
|
||||
&& bufptr[len - 2] == '\r') {
|
||||
len--;
|
||||
bufptr[len - 1] = '\n';
|
||||
bufptr[len] = '\0';
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return (EOF);
|
||||
}
|
||||
} while (bufptr[len - 1] != '\n'); /* complete a line */
|
||||
} while (result[0] == '#'); /* ignore comments */
|
||||
}
|
||||
|
||||
first_column = (bufptr == bufstart);
|
||||
|
@ -797,5 +825,3 @@ end_of_stream(void)
|
|||
return ((yyin ? feof(yyin) : (bufptr && *bufptr == '\0'))
|
||||
? TRUE : FALSE);
|
||||
}
|
||||
|
||||
/* comp_scan.c ends here */
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
#include <curses.priv.h>
|
||||
#include <term.h> /* cur_term */
|
||||
|
||||
MODULE_ID("$Id: lib_raw.c,v 1.8 2000/09/02 18:08:48 tom Exp $")
|
||||
MODULE_ID("$Id: lib_raw.c,v 1.10 2000/12/10 02:55:07 tom Exp $")
|
||||
|
||||
#if SVR4_TERMIO && !defined(_POSIX_SOURCE)
|
||||
#define _POSIX_SOURCE
|
||||
|
@ -74,7 +74,7 @@ MODULE_ID("$Id: lib_raw.c,v 1.8 2000/09/02 18:08:48 tom Exp $")
|
|||
#define AFTER(s)
|
||||
#endif /* TRACE */
|
||||
|
||||
int
|
||||
NCURSES_EXPORT(int)
|
||||
raw(void)
|
||||
{
|
||||
T((T_CALLED("raw()")));
|
||||
|
@ -102,7 +102,7 @@ raw(void)
|
|||
returnCode(ERR);
|
||||
}
|
||||
|
||||
int
|
||||
NCURSES_EXPORT(int)
|
||||
cbreak(void)
|
||||
{
|
||||
T((T_CALLED("cbreak()")));
|
||||
|
@ -127,7 +127,7 @@ cbreak(void)
|
|||
returnCode(_nc_set_tty_mode(&cur_term->Nttyb));
|
||||
}
|
||||
|
||||
void
|
||||
NCURSES_EXPORT(void)
|
||||
qiflush(void)
|
||||
{
|
||||
T((T_CALLED("qiflush()")));
|
||||
|
@ -146,7 +146,7 @@ qiflush(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
NCURSES_EXPORT(int)
|
||||
noraw(void)
|
||||
{
|
||||
T((T_CALLED("noraw()")));
|
||||
|
@ -170,7 +170,7 @@ noraw(void)
|
|||
returnCode(_nc_set_tty_mode(&cur_term->Nttyb));
|
||||
}
|
||||
|
||||
int
|
||||
NCURSES_EXPORT(int)
|
||||
nocbreak(void)
|
||||
{
|
||||
T((T_CALLED("nocbreak()")));
|
||||
|
@ -192,7 +192,7 @@ nocbreak(void)
|
|||
returnCode(_nc_set_tty_mode(&cur_term->Nttyb));
|
||||
}
|
||||
|
||||
void
|
||||
NCURSES_EXPORT(void)
|
||||
noqiflush(void)
|
||||
{
|
||||
T((T_CALLED("noqiflush()")));
|
||||
|
@ -211,7 +211,7 @@ noqiflush(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
NCURSES_EXPORT(int)
|
||||
intrflush(WINDOW *win GCC_UNUSED, bool flag)
|
||||
{
|
||||
T((T_CALLED("intrflush(%d)"), flag));
|
||||
|
|
|
@ -41,15 +41,17 @@
|
|||
#define __INTERNAL_CAPS_VISIBLE
|
||||
#include <term_entry.h>
|
||||
|
||||
MODULE_ID("$Id: lib_termcap.c,v 1.37 2000/09/16 20:30:16 tom Exp $")
|
||||
MODULE_ID("$Id: lib_termcap.c,v 1.39 2000/12/10 02:56:30 tom Exp $")
|
||||
|
||||
/*
|
||||
some of the code in here was contributed by:
|
||||
Magnus Bengtsson, d6mbeng@dtek.chalmers.se
|
||||
*/
|
||||
|
||||
char *UP = 0;
|
||||
char *BC = 0;
|
||||
NCURSES_EXPORT_VAR(char *)
|
||||
UP = 0;
|
||||
NCURSES_EXPORT_VAR(char *)
|
||||
BC = 0;
|
||||
|
||||
#ifdef FREEBSD_NATIVE
|
||||
#undef GCC_UNUSED
|
||||
|
@ -72,8 +74,9 @@ extern char _nc_termcap[]; /* buffer to copy out */
|
|||
*
|
||||
***************************************************************************/
|
||||
|
||||
int
|
||||
tgetent(char *bufp GCC_UNUSED, const char *name)
|
||||
NCURSES_EXPORT(int)
|
||||
tgetent
|
||||
(char *bufp GCC_UNUSED, const char *name)
|
||||
{
|
||||
int errcode;
|
||||
|
||||
|
@ -126,7 +129,7 @@ tgetent(char *bufp GCC_UNUSED, const char *name)
|
|||
*
|
||||
***************************************************************************/
|
||||
|
||||
int
|
||||
NCURSES_EXPORT(int)
|
||||
tgetflag(NCURSES_CONST char *id)
|
||||
{
|
||||
int i;
|
||||
|
@ -154,7 +157,7 @@ tgetflag(NCURSES_CONST char *id)
|
|||
*
|
||||
***************************************************************************/
|
||||
|
||||
int
|
||||
NCURSES_EXPORT(int)
|
||||
tgetnum(NCURSES_CONST char *id)
|
||||
{
|
||||
int i;
|
||||
|
@ -183,8 +186,9 @@ tgetnum(NCURSES_CONST char *id)
|
|||
*
|
||||
***************************************************************************/
|
||||
|
||||
char *
|
||||
tgetstr(NCURSES_CONST char *id, char **area)
|
||||
NCURSES_EXPORT(char *)
|
||||
tgetstr
|
||||
(NCURSES_CONST char *id, char **area)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -194,7 +198,7 @@ tgetstr(NCURSES_CONST char *id, char **area)
|
|||
for_each_string(i, tp) {
|
||||
const char *capname = ExtStrname(tp, i, strcodes);
|
||||
if (!strncmp(id, capname, 2)) {
|
||||
TR(TRACE_DATABASE,("found match : %s", _nc_visbuf(tp->Strings[i])));
|
||||
TR(TRACE_DATABASE, ("found match : %s", _nc_visbuf(tp->Strings[i])));
|
||||
/* setupterm forces canceled strings to null */
|
||||
if (area != 0
|
||||
&& *area != 0
|
||||
|
|
Loading…
Reference in New Issue