]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - progs/tabs.c
ncurses 5.7 - patch 20101023
[ncurses.git] / progs / tabs.c
index 002a7531de08af3de16af0587ac59c752370f6d2..b59c9086d8d37650756af87aa5c80da405468dde 100644 (file)
@@ -37,7 +37,7 @@
 #define USE_LIBTINFO
 #include <progs.priv.h>
 
 #define USE_LIBTINFO
 #include <progs.priv.h>
 
-MODULE_ID("$Id: tabs.c,v 1.17 2010/05/01 22:04:08 tom Exp $")
+MODULE_ID("$Id: tabs.c,v 1.19 2010/10/23 22:26:01 tom Exp $")
 
 static void usage(void) GCC_NORETURN;
 
 
 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;
                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,
                    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;
                    free(result);
                    result = 0;
                    break;
@@ -122,7 +123,7 @@ decode_tabs(const char *tab_list)
        /*
         * Add the last value, if any.
         */
        /*
         * Add the last value, if any.
         */
-       result[n++] = value;
+       result[n++] = value + prior;
        result[n] = 0;
     }
     return result;
        result[n] = 0;
     }
     return result;
@@ -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]);
            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);
                    fprintf(stderr,
                            "%s: unexpected character found '%c'\n",
                            program, ch);
@@ -448,7 +449,11 @@ main(int argc, char *argv[])
                    mar_list = option;
                    break;
                default:
                    mar_list = 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;
                }
            }
            break;