diff options
Diffstat (limited to 'ncurses/tinfo/lib_termcap.c')
-rw-r--r-- | ncurses/tinfo/lib_termcap.c | 227 |
1 files changed, 63 insertions, 164 deletions
diff --git a/ncurses/tinfo/lib_termcap.c b/ncurses/tinfo/lib_termcap.c index e9dae85bdd978..2d245ffbb61f3 100644 --- a/ncurses/tinfo/lib_termcap.c +++ b/ncurses/tinfo/lib_termcap.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2008 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 * @@ -30,7 +30,6 @@ * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 * * and: Eric S. Raymond <esr@snark.thyrsus.com> * * and: Thomas E. Dickey 1996-on * - * and: Juergen Pfeifer * * * * some of the code in here was contributed by: * * Magnus Bengtsson, d6mbeng@dtek.chalmers.se (Nov'93) * @@ -44,11 +43,9 @@ #include <tic.h> #include <ctype.h> -#ifndef CUR -#define CUR SP_TERMTYPE -#endif +#include <term_entry.h> -MODULE_ID("$Id: lib_termcap.c,v 1.73 2010/12/25 19:27:12 tom Exp $") +MODULE_ID("$Id: lib_termcap.c,v 1.63 2008/08/16 19:22:55 tom Exp $") NCURSES_EXPORT_VAR(char *) UP = 0; NCURSES_EXPORT_VAR(char *) BC = 0; @@ -79,26 +76,16 @@ NCURSES_EXPORT_VAR(char *) BC = 0; ***************************************************************************/ NCURSES_EXPORT(int) -NCURSES_SP_NAME(tgetent) (NCURSES_SP_DCLx char *bufp, const char *name) +tgetent(char *bufp, const char *name) { - int rc = ERR; + int errcode; int n; bool found_cache = FALSE; -#ifdef USE_TERM_DRIVER - TERMINAL *termp = 0; -#endif START_TRACE(); T((T_CALLED("tgetent()"))); - TINFO_SETUP_TERM(&termp, (NCURSES_CONST char *) name, - STDOUT_FILENO, &rc, TRUE); - -#ifdef USE_TERM_DRIVER - if (termp == 0 || - !((TERMINAL_CONTROL_BLOCK *) termp)->drv->isTerminfo) - return (rc); -#endif + _nc_setupterm((NCURSES_CONST char *) name, STDOUT_FILENO, &errcode, TRUE); /* * In general we cannot tell if the fixed sgr0 is still used by the @@ -122,9 +109,9 @@ NCURSES_SP_NAME(tgetent) (NCURSES_SP_DCLx char *bufp, const char *name) /* * Also free the terminfo data that we loaded (much bigger leak). */ - if (LAST_TRM != 0 && LAST_TRM != TerminalOf(SP_PARM)) { + if (LAST_TRM != 0 && LAST_TRM != cur_term) { TERMINAL *trm = LAST_TRM; - NCURSES_SP_NAME(del_curterm) (NCURSES_SP_ARGx LAST_TRM); + del_curterm(LAST_TRM); for (CacheInx = 0; CacheInx < TGETENT_MAX; ++CacheInx) if (LAST_TRM == trm) LAST_TRM = 0; @@ -144,7 +131,7 @@ NCURSES_SP_NAME(tgetent) (NCURSES_SP_DCLx char *bufp, const char *name) } CacheInx = best; } - LAST_TRM = TerminalOf(SP_PARM); + LAST_TRM = cur_term; LAST_SEQ = ++CacheSeq; PC = 0; @@ -152,7 +139,7 @@ NCURSES_SP_NAME(tgetent) (NCURSES_SP_DCLx char *bufp, const char *name) BC = 0; FIX_SGR0 = 0; /* don't free it - application may still use */ - if (rc == 1) { + if (errcode == 1) { if (cursor_left) if ((backspaces_with_bs = (char) !strcmp(cursor_left, "\b")) == 0) @@ -166,7 +153,7 @@ NCURSES_SP_NAME(tgetent) (NCURSES_SP_DCLx char *bufp, const char *name) if (backspace_if_not_bs != NULL) BC = backspace_if_not_bs; - if ((FIX_SGR0 = _nc_trim_sgr0(&(TerminalOf(SP_PARM)->type))) != 0) { + if ((FIX_SGR0 = _nc_trim_sgr0(&(cur_term->type))) != 0) { if (!strcmp(FIX_SGR0, exit_attribute_mode)) { if (FIX_SGR0 != exit_attribute_mode) { free(FIX_SGR0); @@ -177,8 +164,8 @@ NCURSES_SP_NAME(tgetent) (NCURSES_SP_DCLx char *bufp, const char *name) LAST_BUF = bufp; LAST_USE = TRUE; - SetNoPadding(SP_PARM); - (void) NCURSES_SP_NAME(baudrate) (NCURSES_SP_ARG); /* sets ospeed as a side-effect */ + SetNoPadding(SP); + (void) baudrate(); /* sets ospeed as a side-effect */ /* LINT_PREPRO #if 0*/ @@ -187,27 +174,8 @@ NCURSES_SP_NAME(tgetent) (NCURSES_SP_DCLx char *bufp, const char *name) #endif*/ } - returnCode(rc); -} - -#if NCURSES_SP_FUNCS -NCURSES_EXPORT(int) -tgetent(char *bufp, const char *name) -{ - return NCURSES_SP_NAME(tgetent) (CURRENT_SCREEN, bufp, name); -} -#endif - -#if 0 -static bool -same_tcname(const char *a, const char *b) -{ - fprintf(stderr, "compare(%s,%s)\n", a, b); - return !strncmp(a, b, 2); + returnCode(errcode); } -#else -#define same_tcname(a,b) !strncmp(a,b,2) -#endif /*************************************************************************** * @@ -219,48 +187,24 @@ same_tcname(const char *a, const char *b) ***************************************************************************/ NCURSES_EXPORT(int) -NCURSES_SP_NAME(tgetflag) (NCURSES_SP_DCLx NCURSES_CONST char *id) +tgetflag(NCURSES_CONST char *id) { - int result = 0; /* Solaris returns zero for missing flag */ - int i, j; - - T((T_CALLED("tgetflag(%p, %s)"), (void *) SP_PARM, id)); - if (HasTInfoTerminal(SP_PARM)) { - TERMTYPE *tp = &(TerminalOf(SP_PARM)->type); - struct name_table_entry const *entry_ptr; - - entry_ptr = _nc_find_type_entry(id, BOOLEAN, TRUE); - if (entry_ptr != 0) { - j = entry_ptr->nte_index; - } -#if NCURSES_XNAMES - else { - j = -1; - for_each_ext_boolean(i, tp) { - const char *capname = ExtBoolname(tp, i, boolcodes); - if (same_tcname(id, capname)) { - j = i; - break; - } + unsigned i; + + T((T_CALLED("tgetflag(%s)"), id)); + if (cur_term != 0) { + TERMTYPE *tp = &(cur_term->type); + for_each_boolean(i, tp) { + const char *capname = ExtBoolname(tp, i, boolcodes); + if (!strncmp(id, capname, 2)) { + /* setupterm forces invalid booleans to false */ + returnCode(tp->Booleans[i]); } } -#endif - if (j >= 0) { - /* note: setupterm forces invalid booleans to false */ - result = tp->Booleans[j]; - } } - returnCode(result); + returnCode(0); /* Solaris does this */ } -#if NCURSES_SP_FUNCS -NCURSES_EXPORT(int) -tgetflag(NCURSES_CONST char *id) -{ - return NCURSES_SP_NAME(tgetflag) (CURRENT_SCREEN, id); -} -#endif - /*************************************************************************** * * tgetnum(str) @@ -271,48 +215,25 @@ tgetflag(NCURSES_CONST char *id) ***************************************************************************/ NCURSES_EXPORT(int) -NCURSES_SP_NAME(tgetnum) (NCURSES_SP_DCLx NCURSES_CONST char *id) +tgetnum(NCURSES_CONST char *id) { - int result = ABSENT_NUMERIC; - int i, j; - - T((T_CALLED("tgetnum(%p, %s)"), (void *) SP_PARM, id)); - if (HasTInfoTerminal(SP_PARM)) { - TERMTYPE *tp = &(TerminalOf(SP_PARM)->type); - struct name_table_entry const *entry_ptr; - - entry_ptr = _nc_find_type_entry(id, NUMBER, TRUE); - if (entry_ptr != 0) { - j = entry_ptr->nte_index; - } -#if NCURSES_XNAMES - else { - j = -1; - for_each_ext_number(i, tp) { - const char *capname = ExtNumname(tp, i, numcodes); - if (same_tcname(id, capname)) { - j = i; - break; - } + unsigned i; + + T((T_CALLED("tgetnum(%s)"), id)); + if (cur_term != 0) { + TERMTYPE *tp = &(cur_term->type); + for_each_number(i, tp) { + const char *capname = ExtNumname(tp, i, numcodes); + if (!strncmp(id, capname, 2)) { + if (!VALID_NUMERIC(tp->Numbers[i])) + returnCode(ABSENT_NUMERIC); + returnCode(tp->Numbers[i]); } } -#endif - if (j >= 0) { - if (VALID_NUMERIC(tp->Numbers[j])) - result = tp->Numbers[j]; - } } - returnCode(result); + returnCode(ABSENT_NUMERIC); } -#if NCURSES_SP_FUNCS -NCURSES_EXPORT(int) -tgetnum(NCURSES_CONST char *id) -{ - return NCURSES_SP_NAME(tgetnum) (CURRENT_SCREEN, id); -} -#endif - /*************************************************************************** * * tgetstr(str, area) @@ -323,62 +244,40 @@ tgetnum(NCURSES_CONST char *id) ***************************************************************************/ NCURSES_EXPORT(char *) -NCURSES_SP_NAME(tgetstr) (NCURSES_SP_DCLx NCURSES_CONST char *id, char **area) +tgetstr(NCURSES_CONST char *id, char **area) { + unsigned i; char *result = NULL; - int i, j; - T((T_CALLED("tgetstr(%s,%p)"), id, (void *) area)); - if (HasTInfoTerminal(SP_PARM)) { - TERMTYPE *tp = &(TerminalOf(SP_PARM)->type); - struct name_table_entry const *entry_ptr; - - entry_ptr = _nc_find_type_entry(id, STRING, TRUE); - if (entry_ptr != 0) { - j = entry_ptr->nte_index; - } -#if NCURSES_XNAMES - else { - j = -1; - for_each_ext_string(i, tp) { - const char *capname = ExtStrname(tp, i, strcodes); - if (same_tcname(id, capname)) { - j = i; - break; - } - } - } -#endif - if (j >= 0) { - result = tp->Strings[j]; - TR(TRACE_DATABASE, ("found match : %s", _nc_visbuf(result))); - /* setupterm forces canceled strings to null */ - if (VALID_STRING(result)) { - if (result == exit_attribute_mode - && FIX_SGR0 != 0) { - result = FIX_SGR0; - TR(TRACE_DATABASE, ("altered to : %s", _nc_visbuf(result))); - } - if (area != 0 - && *area != 0) { - (void) strcpy(*area, result); - result = *area; - *area += strlen(*area) + 1; + T((T_CALLED("tgetstr(%s,%p)"), id, area)); + if (cur_term != 0) { + TERMTYPE *tp = &(cur_term->type); + for_each_string(i, tp) { + const char *capname = ExtStrname(tp, i, strcodes); + if (!strncmp(id, capname, 2)) { + result = tp->Strings[i]; + TR(TRACE_DATABASE, ("found match : %s", _nc_visbuf(result))); + /* setupterm forces canceled strings to null */ + if (VALID_STRING(result)) { + if (result == exit_attribute_mode + && FIX_SGR0 != 0) { + result = FIX_SGR0; + TR(TRACE_DATABASE, ("altered to : %s", _nc_visbuf(result))); + } + if (area != 0 + && *area != 0) { + (void) strcpy(*area, result); + result = *area; + *area += strlen(*area) + 1; + } } + break; } } } returnPtr(result); } -#if NCURSES_SP_FUNCS -NCURSES_EXPORT(char *) -tgetstr(NCURSES_CONST char *id, char **area) -{ - return NCURSES_SP_NAME(tgetstr) (CURRENT_SCREEN, id, area); -} -#endif - #if NO_LEAKS NCURSES_EXPORT(void) _nc_tgetent_leaks(void) |