X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Ftput.c;h=18b2d165dae24c5dacaf7be7caa745cad99cf711;hp=3e09eab22ddb357ad8d504e62b72ea192a1e21fc;hb=55ccd2b959766810cf7db8d1c4462f338ce0afc8;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01 diff --git a/progs/tput.c b/progs/tput.c index 3e09eab2..18b2d165 100644 --- a/progs/tput.c +++ b/progs/tput.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998,1999,2000,2001 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 * @@ -45,7 +45,7 @@ #endif #include -MODULE_ID("$Id: tput.c,v 1.31 2002/07/20 19:09:47 tom Exp $") +MODULE_ID("$Id: tput.c,v 1.35 2005/04/03 14:25:32 tom Exp $") #define PUTS(s) fputs(s, stdout) #define PUTCHAR(c) putchar(c) @@ -67,17 +67,18 @@ quit(int status, const char *fmt,...) va_list argp; va_start(argp, fmt); + fprintf(stderr, "%s: ", prg_name); vfprintf(stderr, fmt, argp); fprintf(stderr, "\n"); va_end(argp); - exit(status); + ExitProgram(status); } static void usage(void) { fprintf(stderr, "usage: %s [-V] [-S] [-T term] capname\n", prg_name); - exit(EXIT_FAILURE); + ExitProgram(EXIT_FAILURE); } static void @@ -150,7 +151,6 @@ tput(int argc, char *argv[]) int i, j, c; int status; FILE *f; - int token = UNDEF; if ((name = argv[0]) == 0) name = ""; @@ -292,13 +292,14 @@ tput(int argc, char *argv[]) (void) printf("%d\n", status); return exit_code(NUMBER, 0); } else if ((s = tigetstr(name)) == CANCELLED_STRING) { - quit(4, "%s: unknown terminfo capability '%s'", prg_name, name); + quit(4, "unknown terminfo capability '%s'", name); } else if (s != ABSENT_STRING) { - token = STRING; if (argc > 1) { int k; - int numbers[10]; - char *strings[10]; + int popcount; + long numbers[1 + NUM_PARM]; + char *strings[1 + NUM_PARM]; + char *p_is_s[NUM_PARM]; /* Nasty hack time. The tparm function needs to see numeric * parameters as numbers, not as pointers to their string @@ -312,7 +313,7 @@ tput(int argc, char *argv[]) if (tmp == 0 || *tmp != 0) numbers[k] = 0; } - for (k = argc; k <= 9; k++) { + for (k = argc; k <= NUM_PARM; k++) { numbers[k] = 0; strings[k] = 0; } @@ -325,10 +326,18 @@ tput(int argc, char *argv[]) s = tparm(s, numbers[1], strings[2], strings[3]); break; default: + (void) _nc_tparm_analyze(s, p_is_s, &popcount); +#define myParam(n) (p_is_s[n - 1] != 0 ? ((long) strings[n]) : numbers[n]) s = tparm(s, - numbers[1], numbers[2], numbers[3], - numbers[4], numbers[5], numbers[6], - numbers[7], numbers[8], numbers[9]); + myParam(1), + myParam(2), + myParam(3), + myParam(4), + myParam(5), + myParam(6), + myParam(7), + myParam(8), + myParam(9)); break; } } @@ -349,7 +358,6 @@ main(int argc, char **argv) int c; char buf[BUFSIZ]; int result = 0; - int err; check_aliases(prg_name = _nc_rootname(argv[0])); @@ -417,7 +425,7 @@ main(int argc, char **argv) argvec[argnum] = 0; if (argnum != 0 - && (err = tput(argnum, argvec)) != 0) { + && tput(argnum, argvec) != 0) { if (result == 0) result = 4; /* will return value >4 */ ++result;