/* regex_compile will allocate the space for the compiled pattern. */
preg->buffer = 0;
preg->allocated = 0;
+ preg->used = 0;
/* Don't bother to use a fastmap when searching. This simplifies the
REG_NEWLINE case: if we used a fastmap, we'd have to put all the
+Wed May 19 19:12:18 1993 Karl Berry (karl@owl.hq.ileaf.com)
+
+ * sort.c (main): fflush before exit, so a closed stdout doesn't lose.
+
+Tue May 18 23:49:26 1993 Jim Meyering (meyering@comco.com)
+
+ * mkinstalldirs: New file.
+ * Makefile.in (installdirs): Use it.
+
+Fri May 14 23:45:52 1993 Jim Meyering (meyering@comco.com)
+
+ * all source: With --version, print version and exit immediately.
+
+Thu May 13 01:03:16 1993 Jim Meyering (meyering@comco.com)
+
+ * Makefile.in (installdirs): New rules for creating installation
+ directories. (install): depend on it.
+
+ * tail.c (main): Remove --compatible since `+1f' may be used
+ to get the BSD `-0f' behavior portably.
+
+ * fold.c (main): Turn -N arguments, where N is a digit, into -wN.
+ From Ian Lance Taylor (ian@cygnus.com).
+
+Mon May 10 22:33:44 1993 Jim Meyering (meyering@comco.com)
+
+ * tail.c (main): New option -C, --compatible to make `tail -0f'
+ work like `tail +1f' for compatibility with BSD tail.
+
+Thu May 6 23:28:56 1993 Jim Meyering (meyering@comco.com)
+
+ * pr.c (print_page): Decrement cols_ready_to_print even when
+ lines_to_print == 0. The command `echo |pr -2ta' *still* didn't
+ terminate. Add parentheses for clarity.
+
Mon May 3 23:57:47 1993 Jim Meyering (meyering@comco.com)
* Version 1.5.
+Major changes in release 1.6:
+* with the --version option programs print the version and exit immediately
+* --compatible makes `tail -0f' work like `tail +1f' for compatibility
+ with BSD tail.
+* pr -2a really terminates
+\f
Major changes in release 1.5:
* sort is 8-bit clean
* sort's -n and -M options no longer imply -b
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
#include "version.h"
char *xrealloc ();
+char *xmalloc ();
void error ();
/* The name this program was run with. */
program_name = argv[0];
break_spaces = count_bytes = have_read_stdin = 0;
+ /* Turn any numeric options into -w options. */
+ for (i = 1; i < argc; i++)
+ {
+ if (argv[i][0] == '-' && ISDIGIT (argv[i][1]))
+ {
+ char *s;
+
+ s = xmalloc (strlen (argv[i]) + 2);
+ s[0] = '-';
+ s[1] = 'w';
+ strcpy (s + 2, argv[i] + 1);
+ argv[i] = s;
+ }
+ }
+
while ((optc = getopt_long (argc, argv, "bsw:", longopts, (int *) 0))
!= EOF)
{
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
{0, 0, 0, 0}
};
+/* Return the number of columns that have either an open file or
+ stored lines. */
+
+static int
+crtp ()
+{
+ COLUMN *q;
+ int i;
+ int n;
+
+ n = 0;
+ for (q = column_vector, i = 0; i < columns; ++q, ++i)
+ if (q->status == OPEN ||
+ (storing_columns && q->lines_stored > 0 && q->lines_to_print > 0))
+ ++n;
+ return n;
+}
+
void
main (argc, argv)
int argc;
{
int c;
int accum = 0;
+ int n_files;
+ char **file_names;
program_name = argv[0];
- while ((c = getopt_long (argc, argv,
- "0123456789abcde::fFh:i::l:mn::o:rs::tvw:",
- long_options, (int *) 0)) != EOF)
+ n_files = 0;
+ file_names = (char **) xmalloc ((argc - 1) * sizeof (char *));
+
+ while (1)
{
- if (ISDIGIT (c))
+ c = getopt_long (argc, argv,
+ "-0123456789abcde::fFh:i::l:mn::o:rs::tvw:",
+ long_options, (int *) 0);
+ if (c == 1) /* Non-option argument. */
{
- accum = accum * 10 + c - '0';
- continue;
+ char *s;
+ s = optarg;
+ if (*s == '+')
+ {
+ ++s;
+ if (!ISDIGIT (*s))
+ {
+ error (0, 0, "`+' requires a numeric argument");
+ usage ();
+ }
+ /* FIXME: use strtol */
+ first_page_number = atoi (s);
+ }
+ else
+ {
+ file_names[n_files++] = optarg;
+ }
}
else
{
- if (accum > 0)
+ if (ISDIGIT (c))
{
- columns = accum;
- explicit_columns = TRUE;
+ accum = accum * 10 + c - '0';
+ continue;
+ }
+ else
+ {
+ if (accum > 0)
+ {
+ columns = accum;
+ explicit_columns = TRUE;
+ accum = 0;
+ }
}
- accum = 0;
}
+ if (c == 1)
+ continue;
+
+ if (c == EOF)
+ break;
+
switch (c)
{
case 0: /* getopt long option */
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
error (1, 0,
"Cannot specify both printing across and printing in parallel.");
- if (optind >= 2 && strcmp (argv[optind - 1], "--") == 0)
+ for ( ; optind < argc; optind++)
{
- /* We've seen `--', so interpret all remaining arguments as
- filenames. */
- }
- else
- {
- for ( ; optind < argc && argv[optind][0] == '+'; optind++)
- {
- first_page_number = atoi (&argv[optind][1]);
- }
+ file_names[n_files++] = argv[optind];
}
- if (optind >= argc)
+ if (n_files == 0)
{
/* No file arguments specified; read from standard input. */
print_files (0, (char **) 0);
else
{
if (parallel_files)
- print_files (argc - optind, &argv[optind]);
+ print_files (n_files, file_names);
else
{
- for ( ; optind < argc; optind++)
- print_files (1, &argv[optind]);
+ int i;
+ for (i=0; i<n_files; i++)
+ print_files (1, &file_names[i]);
}
}
q->status = CLOSED;
if (q->lines_stored == 0)
{
- if (cols_ready_to_print > 0 && !print_across_flag)
- --cols_ready_to_print;
q->lines_to_print = 0;
}
}
int j;
COLUMN *p;
- cols_ready_to_print = 0;
-
if (storing_columns)
{
store_columns ();
for (j = columns - 1, p = column_vector; j; --j, ++p)
{
p->lines_to_print = p->lines_stored;
- if (p->lines_to_print != 0)
- ++cols_ready_to_print;
}
/* Last column. */
if (balance_columns)
{
p->lines_to_print = p->lines_stored;
- if (p->lines_to_print != 0)
- ++cols_ready_to_print;
}
/* Since we're not balancing columns, we don't need to store
the rightmost column. Read it straight from the file. */
if (p->status == OPEN)
{
p->lines_to_print = lines_per_body;
- ++cols_ready_to_print;
}
else
p->lines_to_print = 0;
if (p->status == OPEN)
{
p->lines_to_print = lines_per_body;
- ++cols_ready_to_print;
}
else
p->lines_to_print = 0;
init_page ();
- if (cols_ready_to_print == 0)
+ if (crtp () == 0)
return FALSE;
if (extremities)
if (double_space)
lines_left_on_page *= 2;
- while (lines_left_on_page > 0 && cols_ready_to_print > 0)
+ while (lines_left_on_page > 0 && crtp () > 0)
{
output_position = 0;
spaces_not_printed = 0;
--p->lines_to_print;
if (p->lines_to_print <= 0)
{
- --cols_ready_to_print;
- if (cols_ready_to_print <= 0)
+ if (crtp () <= 0)
break;
}
}
sort (files, nfiles, ofp);
cleanup ();
+ /* If we wait for the implicit flush on exit, and the parent process
+ has closed stdout (e.g., exec >&- in a shell), then the output file
+ winds up empty. I don't understand why. This is under SunOS,
+ Solaris, Ultrix, and Irix. This premature fflush makes the output
+ reappear. --karl@cs.umb.edu */
+ if (fflush (ofp) < 0)
+ error (1, errno, "fflush", outfile);
+
if (have_read_stdin && fclose (stdin) == EOF)
error (1, errno, "-");
if (ferror (stdout) || fclose (stdout) == EOF)
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ((char *)0);
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();
}
if (flag_version)
- fprintf (stderr, "%s\n", version_string);
+ {
+ fprintf (stderr, "%s\n", version_string);
+ exit (0);
+ }
if (flag_help)
usage ();