X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Ftabs.c;h=2f6915de9c468b9e20a021681d8d212fbd74997e;hp=002a7531de08af3de16af0587ac59c752370f6d2;hb=daf57f17ced271693696cc30860aae20c97fb8d0;hpb=92e187a3459ab7ce1613a3684ca6642447c73620 diff --git a/progs/tabs.c b/progs/tabs.c index 002a7531..2f6915de 100644 --- a/progs/tabs.c +++ b/progs/tabs.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 2008-2009,2010 Free Software Foundation, Inc. * + * Copyright (c) 2008-2010,2011 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 * @@ -37,7 +37,7 @@ #define USE_LIBTINFO #include -MODULE_ID("$Id: tabs.c,v 1.17 2010/05/01 22:04:08 tom Exp $") +MODULE_ID("$Id: tabs.c,v 1.21 2011/05/21 18:31:21 tom Exp $") static void usage(void) GCC_NORETURN; @@ -90,9 +90,10 @@ decode_tabs(const char *tab_list) value += (ch - '0'); } else if (ch == ',') { result[n] = value + prior; - if (n > 0 && value <= result[n - 1]) { + if (n > 0 && result[n] <= result[n - 1]) { fprintf(stderr, - "tab-stops are not in increasing order\n"); + "tab-stops are not in increasing order: %d %d\n", + value, result[n - 1]); free(result); result = 0; break; @@ -122,7 +123,7 @@ decode_tabs(const char *tab_list) /* * Add the last value, if any. */ - result[n++] = value; + result[n++] = value + prior; result[n] = 0; } return result; @@ -226,7 +227,7 @@ comma_is_needed(const char *source) bool result = FALSE; if (source != 0) { - unsigned len = strlen(source); + size_t len = strlen(source); if (len != 0) result = (source[len - 1] != ','); } else { @@ -250,7 +251,7 @@ add_to_tab_list(char **append, const char *value) if (copied != 0 && *copied != '\0') { const char *comma = ","; - unsigned need = 1 + strlen(copied); + size_t need = 1 + strlen(copied); if (*copied == ',') comma = ""; @@ -290,7 +291,7 @@ legal_tab_list(const char *program, const char *tab_list) int n, ch; for (n = 0; tab_list[n] != '\0'; ++n) { ch = UChar(tab_list[n]); - if (!(isdigit(ch) || ch == ',')) { + if (!(isdigit(ch) || ch == ',' || ch == '+')) { fprintf(stderr, "%s: unexpected character found '%c'\n", program, ch); @@ -352,7 +353,6 @@ main(int argc, char *argv[]) bool no_op = FALSE; int n, ch; NCURSES_CONST char *term_name = 0; - const char *mar_list = 0; /* ignored */ char *append = 0; const char *tab_list = 0; @@ -445,10 +445,18 @@ main(int argc, char *argv[]) while ((ch = *++option) != '\0') { switch (ch) { case 'm': - mar_list = option; + /* + * The "+mXXX" option is unimplemented because only the long-obsolete + * att510d implements smgl, which is needed to support + * this option. + */ break; default: - usage(); + /* special case of relative stops separated by spaces? */ + if (option == argv[n] + 1) { + tab_list = add_to_tab_list(&append, argv[n]); + } + break; } } break;