X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Ftput.c;h=2e67cfecbef4fdb10e57aef708a3103c2aff2d1d;hp=0fde63407c5ce25f0e41abec5caf94c0646df027;hb=77afe78361875f531dc2bf8d73f2e781c8e76176;hpb=c13e57306ae5c4431fddd0fe856c3bcae6aeeb2c diff --git a/progs/tput.c b/progs/tput.c index 0fde6340..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.39 2007/07/14 19:31:08 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) { @@ -364,7 +374,7 @@ main(int argc, char **argv) term = getenv("TERM"); - while ((c = getopt(argc, argv, "ST:V")) != EOF) { + while ((c = getopt(argc, argv, "ST:V")) != -1) { switch (c) { case 'S': cmdline = FALSE;