X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Ftput.c;h=2e67cfecbef4fdb10e57aef708a3103c2aff2d1d;hp=d594adbef3b52f37c0af79790e312464b747eeff;hb=5e36f11feab6f790e0cc6f2c882a67b7b65e3b6b;hpb=772f879d17117c5b766022f28099e341ebea825b diff --git a/progs/tput.c b/progs/tput.c index d594adbe..2e67cfec 100644 --- a/progs/tput.c +++ b/progs/tput.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright (c) 1998-2009,2010 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 * @@ -38,14 +38,16 @@ * Ross Ridge's mytinfo package. */ +#define USE_LIBTINFO #include #if !PURE_TERMINFO +#include #include #endif #include -MODULE_ID("$Id: tput.c,v 1.40 2007/07/21 17:45:59 tom Exp $") +MODULE_ID("$Id: tput.c,v 1.46 2010/01/09 16:53:24 tom Exp $") #define PUTS(s) fputs(s, stdout) #define PUTCHAR(c) putchar(c) @@ -84,8 +86,8 @@ usage(void) static void check_aliases(const char *name) { - is_init = (strcmp(name, PROG_INIT) == 0); - is_reset = (strcmp(name, PROG_RESET) == 0); + is_init = same_program(name, PROG_INIT); + is_reset = same_program(name, PROG_RESET); } /* @@ -151,6 +153,9 @@ tput(int argc, char *argv[]) int i, j, c; int status; FILE *f; +#if !PURE_TERMINFO + bool termcap = FALSE; +#endif if ((name = argv[0]) == 0) name = ""; @@ -263,35 +268,40 @@ tput(int argc, char *argv[]) return 0; } #if !PURE_TERMINFO - { - const struct name_table_entry *np; - - if ((np = _nc_find_entry(name, _nc_get_hash_table(1))) != 0) - switch (np->nte_type) { - case BOOLEAN: - if (bool_from_termcap[np->nte_index]) - name = boolnames[np->nte_index]; - break; - - case NUMBER: - if (num_from_termcap[np->nte_index]) - name = numnames[np->nte_index]; - break; - - case STRING: - if (str_from_termcap[np->nte_index]) - name = strnames[np->nte_index]; - break; - } - } + retry: #endif - if ((status = tigetflag(name)) != -1) { return exit_code(BOOLEAN, status); } else if ((status = tigetnum(name)) != CANCELLED_NUMERIC) { (void) printf("%d\n", status); return exit_code(NUMBER, 0); } else if ((s = tigetstr(name)) == CANCELLED_STRING) { +#if !PURE_TERMINFO + if (!termcap) { + const struct name_table_entry *np; + + termcap = TRUE; + if ((np = _nc_find_entry(name, _nc_get_hash_table(termcap))) != 0) { + switch (np->nte_type) { + case BOOLEAN: + if (bool_from_termcap[np->nte_index]) + name = boolnames[np->nte_index]; + break; + + case NUMBER: + if (num_from_termcap[np->nte_index]) + name = numnames[np->nte_index]; + break; + + case STRING: + if (str_from_termcap[np->nte_index]) + name = strnames[np->nte_index]; + break; + } + goto retry; + } + } +#endif quit(4, "unknown terminfo capability '%s'", name); } else if (s != ABSENT_STRING) { if (argc > 1) {