/****************************************************************************
- * Copyright (c) 1998,1999,2000 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2004,2005 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 *
/****************************************************************************
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
+ * and: Thomas E. Dickey 1996-on *
+ * *
+ * some of the code in here was contributed by: *
+ * Magnus Bengtsson, d6mbeng@dtek.chalmers.se (Nov'93) *
****************************************************************************/
+#define __INTERNAL_CAPS_VISIBLE
#include <curses.priv.h>
#include <termcap.h>
#include <tic.h>
+#include <ctype.h>
-#define __INTERNAL_CAPS_VISIBLE
#include <term_entry.h>
-MODULE_ID("$Id: lib_termcap.c,v 1.36 2000/02/13 01:01:26 tom Exp $")
+MODULE_ID("$Id: lib_termcap.c,v 1.51 2005/07/16 23:12:51 tom Exp $")
-/*
- some of the code in here was contributed by:
- Magnus Bengtsson, d6mbeng@dtek.chalmers.se
-*/
+NCURSES_EXPORT_VAR(char *) UP = 0;
+NCURSES_EXPORT_VAR(char *) BC = 0;
-char *UP = 0;
-char *BC = 0;
+static char *fix_me = 0; /* this holds the filtered sgr0 string */
/***************************************************************************
*
*
***************************************************************************/
-int
+NCURSES_EXPORT(int)
tgetent(char *bufp GCC_UNUSED, const char *name)
{
int errcode;
+ START_TRACE();
T((T_CALLED("tgetent()")));
- setupterm((NCURSES_CONST char *) name, STDOUT_FILENO, &errcode);
+ _nc_setupterm((NCURSES_CONST char *) name, STDOUT_FILENO, &errcode, TRUE);
+
+ PC = 0;
+ UP = 0;
+ BC = 0;
+ fix_me = 0; /* don't free it - application may still use */
if (errcode == 1) {
if (backspace_if_not_bs != NULL)
BC = backspace_if_not_bs;
+ FreeIfNeeded(fix_me);
+ if ((fix_me = _nc_trim_sgr0(&(cur_term->type))) != 0) {
+ if (!strcmp(fix_me, exit_attribute_mode)) {
+ if (fix_me != exit_attribute_mode) {
+ free(fix_me);
+ }
+ fix_me = 0;
+ }
+ }
+
(void) baudrate(); /* sets ospeed as a side-effect */
/* LINT_PREPRO
*
***************************************************************************/
-int
+NCURSES_EXPORT(int)
tgetflag(NCURSES_CONST char *id)
{
- int i;
+ unsigned i;
T((T_CALLED("tgetflag(%s)"), id));
if (cur_term != 0) {
*
***************************************************************************/
-int
+NCURSES_EXPORT(int)
tgetnum(NCURSES_CONST char *id)
{
- int i;
+ unsigned i;
T((T_CALLED("tgetnum(%s)"), id));
if (cur_term != 0) {
*
***************************************************************************/
-char *
+NCURSES_EXPORT(char *)
tgetstr(NCURSES_CONST char *id, char **area)
{
- int i;
+ unsigned i;
+ char *result = NULL;
T((T_CALLED("tgetstr(%s,%p)"), id, area));
if (cur_term != 0) {
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])));
+ result = tp->Strings[i];
+ TR(TRACE_DATABASE, ("found match : %s", _nc_visbuf(result)));
/* setupterm forces canceled strings to null */
- if (area != 0
- && *area != 0
- && VALID_STRING(tp->Strings[i])) {
- (void) strcpy(*area, tp->Strings[i]);
- *area += strlen(*area) + 1;
+ if (VALID_STRING(result)) {
+ if (result == exit_attribute_mode
+ && fix_me != 0) {
+ result = fix_me;
+ TR(TRACE_DATABASE, ("altered to : %s", _nc_visbuf(result)));
+ }
+ if (area != 0
+ && *area != 0) {
+ (void) strcpy(*area, result);
+ *area += strlen(*area) + 1;
+ }
}
- returnPtr(tp->Strings[i]);
+ break;
}
}
}
- returnPtr(NULL);
-}
-
-/*
- * char *
- * tgoto(string, x, y)
- *
- * Retained solely for upward compatibility. Note the intentional
- * reversing of the last two arguments.
- *
- */
-
-char *
-tgoto(const char *string, int x, int y)
-{
- T((T_CALLED("tgoto(%s,%d,%d)"), string, x, y));
- returnPtr(tparm((NCURSES_CONST char *) string, y, x));
+ returnPtr(result);
}