summaryrefslogtreecommitdiff
path: root/lib/libcurses/tinfo/comp_parse.c
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2001-01-22 18:02:21 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2001-01-22 18:02:21 +0000
commit7fe795010750d2e2889d7085abeaa1ee0926c69b (patch)
treeb52138c43e052b09287afed0fb6351cd31249bda /lib/libcurses/tinfo/comp_parse.c
parent85db479b2362c15a2266e01737d835e86cda1b1e (diff)
Update to ncurses-5.2-20010114
Diffstat (limited to 'lib/libcurses/tinfo/comp_parse.c')
-rw-r--r--lib/libcurses/tinfo/comp_parse.c101
1 files changed, 54 insertions, 47 deletions
diff --git a/lib/libcurses/tinfo/comp_parse.c b/lib/libcurses/tinfo/comp_parse.c
index 161b6d977c3..7a8992726ac 100644
--- a/lib/libcurses/tinfo/comp_parse.c
+++ b/lib/libcurses/tinfo/comp_parse.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: comp_parse.c,v 1.9 2000/10/22 18:27:23 millert Exp $ */
+/* $OpenBSD: comp_parse.c,v 1.10 2001/01/22 18:01:51 millert Exp $ */
/****************************************************************************
* Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. *
@@ -54,10 +54,10 @@
#include <tic.h>
#include <term_entry.h>
-MODULE_ID("$From: comp_parse.c,v 1.42 2000/10/14 17:50:45 Bernhard.Rosenkraenzer Exp $")
+MODULE_ID("$From: comp_parse.c,v 1.48 2001/01/15 00:44:51 tom Exp $")
static void sanity_check(TERMTYPE *);
-void (*_nc_check_termtype) (TERMTYPE *) = sanity_check;
+NCURSES_IMPEXP void NCURSES_API(*_nc_check_termtype) (TERMTYPE *) = sanity_check;
/****************************************************************************
*
@@ -80,10 +80,11 @@ void (*_nc_check_termtype) (TERMTYPE *) = sanity_check;
* _nc_head _nc_tail
*/
-ENTRY *_nc_head = 0, *_nc_tail = 0;
+NCURSES_EXPORT_VAR(ENTRY *) _nc_head = 0;
+NCURSES_EXPORT_VAR(ENTRY *) _nc_tail = 0;
-static void
-enqueue(ENTRY * ep)
+ static void
+ enqueue(ENTRY * ep)
/* add an entry to the in-core list */
{
ENTRY *newp = _nc_copy_entry(ep);
@@ -99,7 +100,7 @@ enqueue(ENTRY * ep)
newp->last->next = newp;
}
-void
+NCURSES_EXPORT(void)
_nc_free_entries(ENTRY * headp)
/* free the allocated storage consumed by list entries */
{
@@ -139,7 +140,7 @@ force_bar(char *dst, char *src, size_t siz)
return src;
}
-bool
+NCURSES_EXPORT(bool)
_nc_entry_match(char *n1, char *n2)
/* do any of the aliases in a pair of terminal names match? */
{
@@ -164,10 +165,10 @@ _nc_entry_match(char *n1, char *n2)
*
****************************************************************************/
-void
+NCURSES_EXPORT(void)
_nc_read_entry_source(FILE * fp, char *buf,
- int literal, bool silent,
- bool(*hook) (ENTRY *))
+ int literal, bool silent,
+ bool(*hook) (ENTRY *))
/* slurp all entries in the given file into core */
{
ENTRY thisentry;
@@ -182,7 +183,7 @@ _nc_read_entry_source(FILE * fp, char *buf,
memset(&thisentry, 0, sizeof(thisentry));
if (_nc_parse_entry(&thisentry, literal, silent) == ERR)
break;
- if (!isalnum(thisentry.tterm.term_names[0]))
+ if (!isalnum(CharOf(thisentry.tterm.term_names[0])))
_nc_err_abort("terminal names must start with letter or digit");
/*
@@ -212,7 +213,7 @@ _nc_read_entry_source(FILE * fp, char *buf,
_nc_suppress_warnings = oldsuppress;
}
-int
+NCURSES_EXPORT(int)
_nc_resolve_uses(bool fullresolve)
/* try to resolve all use capabilities */
{
@@ -229,17 +230,18 @@ _nc_resolve_uses(bool fullresolve)
for_entry_list(qp) {
int matchcount = 0;
- for_entry_list(rp)
+ for_entry_list(rp) {
if (qp > rp
- && _nc_entry_match(qp->tterm.term_names, rp->tterm.term_names)) {
- matchcount++;
- if (matchcount == 1) {
- (void) fprintf(stderr, "Name collision between %s",
- _nc_first_name(qp->tterm.term_names));
- multiples++;
+ && _nc_entry_match(qp->tterm.term_names, rp->tterm.term_names)) {
+ matchcount++;
+ if (matchcount == 1) {
+ (void) fprintf(stderr, "Name collision between %s",
+ _nc_first_name(qp->tterm.term_names));
+ multiples++;
+ }
+ if (matchcount >= 1)
+ (void) fprintf(stderr, " %s", _nc_first_name(rp->tterm.term_names));
}
- if (matchcount >= 1)
- (void) fprintf(stderr, " %s", _nc_first_name(rp->tterm.term_names));
}
if (matchcount >= 1)
(void) putc('\n', stderr);
@@ -267,14 +269,15 @@ _nc_resolve_uses(bool fullresolve)
_nc_set_type(child);
/* first, try to resolve from in-core records */
- for_entry_list(rp)
+ for_entry_list(rp) {
if (rp != qp
- && _nc_name_match(rp->tterm.term_names, lookfor, "|")) {
- DEBUG(2, ("%s: resolving use=%s (in core)",
- child, lookfor));
+ && _nc_name_match(rp->tterm.term_names, lookfor, "|")) {
+ DEBUG(2, ("%s: resolving use=%s (in core)",
+ child, lookfor));
- qp->uses[i].link = rp;
- foundit = TRUE;
+ qp->uses[i].link = rp;
+ foundit = TRUE;
+ }
}
/* if that didn't work, try to merge in a compiled entry */
@@ -285,7 +288,7 @@ _nc_resolve_uses(bool fullresolve)
memset(&thisterm, 0, sizeof(thisterm));
if (_nc_read_entry(lookfor, filename, &thisterm) == 1) {
DEBUG(2, ("%s: resolving use=%s (compiled)",
- child, lookfor));
+ child, lookfor));
rp = typeMalloc(ENTRY, 1);
if (rp == 0)
@@ -333,7 +336,7 @@ _nc_resolve_uses(bool fullresolve)
for_entry_list(qp) {
if (qp->nuses > 0) {
DEBUG(2, ("%s: attempting merge",
- _nc_first_name(qp->tterm.term_names)));
+ _nc_first_name(qp->tterm.term_names)));
/*
* If any of the use entries we're looking for is
* incomplete, punt. We'll catch this entry on a
@@ -342,7 +345,7 @@ _nc_resolve_uses(bool fullresolve)
for (i = 0; i < qp->nuses; i++)
if (qp->uses[i].link->nuses) {
DEBUG(2, ("%s: use entry %d unresolved",
- _nc_first_name(qp->tterm.term_names), i));
+ _nc_first_name(qp->tterm.term_names), i));
goto incomplete;
}
@@ -360,7 +363,7 @@ _nc_resolve_uses(bool fullresolve)
*/
for (; qp->nuses; qp->nuses--)
_nc_merge_entry(&merged,
- &qp->uses[qp->nuses - 1].link->tterm);
+ &qp->uses[qp->nuses - 1].link->tterm);
/*
* Now merge in the original entry.
@@ -374,6 +377,7 @@ _nc_resolve_uses(bool fullresolve)
FreeIfNeeded(qp->tterm.Numbers);
FreeIfNeeded(qp->tterm.Strings);
qp->tterm = merged;
+ _nc_wrap_entry(qp, TRUE);
/*
* We know every entry is resolvable because name resolution
@@ -395,15 +399,18 @@ _nc_resolve_uses(bool fullresolve)
* entry there should be no cancellation markers.
*/
for_entry_list(qp) {
- for_each_boolean(j, &(qp->tterm))
- if (qp->tterm.Booleans[j] == CANCELLED_BOOLEAN)
- qp->tterm.Booleans[j] = ABSENT_BOOLEAN;
- for_each_number(j, &(qp->tterm))
+ for_each_boolean(j, &(qp->tterm)) {
+ if ((int) qp->tterm.Booleans[j] == CANCELLED_BOOLEAN)
+ qp->tterm.Booleans[j] = ABSENT_BOOLEAN;
+ }
+ for_each_number(j, &(qp->tterm)) {
if (qp->tterm.Numbers[j] == CANCELLED_NUMERIC)
- qp->tterm.Numbers[j] = ABSENT_NUMERIC;
- for_each_string(j, &(qp->tterm))
+ qp->tterm.Numbers[j] = ABSENT_NUMERIC;
+ }
+ for_each_string(j, &(qp->tterm)) {
if (qp->tterm.Strings[j] == CANCELLED_STRING)
- qp->tterm.Strings[j] = ABSENT_STRING;
+ qp->tterm.Strings[j] = ABSENT_STRING;
+ }
}
}
@@ -447,14 +454,14 @@ sanity_check(TERMTYPE * tp)
bool terminal_entry = !strchr(tp->term_names, '+');
if (terminal_entry &&
(PRESENT(set_attributes)
- || PRESENT(enter_standout_mode)
- || PRESENT(enter_underline_mode)
- || PRESENT(enter_blink_mode)
- || PRESENT(enter_bold_mode)
- || PRESENT(enter_dim_mode)
- || PRESENT(enter_secure_mode)
- || PRESENT(enter_protected_mode)
- || PRESENT(enter_reverse_mode)))
+ || PRESENT(enter_standout_mode)
+ || PRESENT(enter_underline_mode)
+ || PRESENT(enter_blink_mode)
+ || PRESENT(enter_bold_mode)
+ || PRESENT(enter_dim_mode)
+ || PRESENT(enter_secure_mode)
+ || PRESENT(enter_protected_mode)
+ || PRESENT(enter_reverse_mode)))
_nc_warning("no exit_attribute_mode");
#endif /* __UNUSED__ */
PAIRED(enter_standout_mode, exit_standout_mode)