/****************************************************************************
- * Copyright (c) 2008 Free Software Foundation, Inc. *
+ * Copyright (c) 2008-2011,2012 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 *
#define USE_LIBTINFO
#include <progs.priv.h>
-MODULE_ID("$Id: tabs.c,v 1.15 2008/11/23 00:47:51 tom Exp $")
+MODULE_ID("$Id: tabs.c,v 1.23 2012/02/22 23:57:44 tom Exp $")
static void usage(void) GCC_NORETURN;
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;
/*
* Add the last value, if any.
*/
- result[n++] = value;
+ result[n++] = value + prior;
result[n] = 0;
}
return result;
for (n = 0; n < max_cols; n += 10) {
int ch = 1 + (n / 10);
char buffer[20];
- sprintf(buffer, "----+----%c",
- ((ch < 10)
- ? (ch + '0')
- : (ch + 'A' - 10)));
+ _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer))
+ "----+----%c",
+ ((ch < 10)
+ ? (ch + '0')
+ : (ch + 'A' - 10)));
printf("%.*s", ((max_cols - n) > 10) ? 10 : (max_cols - n), buffer);
}
putchar('\n');
;
} else {
if (last == ',')
- result[k++] = last;
- result[k++] = ch;
+ result[k++] = (char) last;
+ result[k++] = (char) ch;
}
last = ch;
}
bool result = FALSE;
if (source != 0) {
- unsigned len = strlen(source);
+ size_t len = strlen(source);
if (len != 0)
result = (source[len - 1] != ',');
} else {
if (copied != 0 && *copied != '\0') {
const char *comma = ",";
- unsigned need = 1 + strlen(copied);
+ size_t need = 1 + strlen(copied);
if (*copied == ',')
comma = "";
if (result != 0) {
*result = '\0';
if (*append != 0) {
- strcpy(result, *append);
+ _nc_STRCPY(result, *append, need);
free(*append);
}
- strcat(result, comma);
- strcat(result, copied);
+ _nc_STRCAT(result, comma, need);
+ _nc_STRCAT(result, copied, need);
}
*append = result;
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);
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;
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;
}
}
tab_list = add_to_tab_list(&append, option);
- option += ((int) strlen(option)) - 1;
break;
}
}