|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T a
Length: 2359 (0x937) Types: TextFile Names: »abut.c«
└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen └─⟦this⟧ »cph85dist/stat/src/abut.c«
#include "unixstat.h" PGM(abut,Join Files,5.0,3/5/85) /* Copyright (c) 1982 Gary Perlman (see Copyright file) */ /* abut reads from its argument files, one line at a time per cycle, and prints all those lines on one line to the standard output. */ #define MAXFILES 20 #define FORMAT "%s\t" /* width of printed field */ char Format[100]; int nfiles = 0; FILE *ioptr[MAXFILES], *fopen (); char inline[BUFSIZ]; char outline[BUFSIZ]; char tmpline[BUFSIZ]; int linelen; int done = 0; /* true if output is to stop */ int doneonce[MAXFILES]; /* true if [file] has been exhausted >= once */ int Numberlines = 0; /* true if lines are to be numbered */ int Cycle; /* true if abut should cycle through files */ /* until all have been doneonce */ int linenumber = 0; main (argc, argv) char **argv; { int errflg = 0; int C; int file; extern int optind; extern char *optarg; ARGV0; strcpy (Format, FORMAT); while ((C = getopt (argc, argv, "cnf:")) != EOF) switch (C) { case 'n': Numberlines = 1; break; case 'c': Cycle = 1; break; case 'f': if (!number (optarg)) ERRNUM (optarg,format) *Format = '%'; strcpy (Format+1, optarg); VOID strcat (Format, "s "); break; default: errflg++; } if (optind == argc || errflg) USAGE ([-nc] [-f format] file1 file2 ...) if (argc - optind >= MAXFILES) ERRMANY (files, MAXFILES) for (; optind < argc; optind++) if (!strcmp (argv[optind], "-")) ioptr[nfiles++] = stdin; else if ((ioptr[nfiles++] = fopen (argv[optind], "r")) == NULL) ERROPEN (argv[optind]) while (!done) { *outline = NULL; if (Numberlines) VOID sprintf (outline, "%-4d ", ++linenumber); for (file = 0; file < nfiles; file++) { if (fgets (inline, BUFSIZ, ioptr[file]) == NULL) { doneonce[file] = 1; if (Cycle) { rewind (ioptr[file]); if (fgets (inline, BUFSIZ, ioptr[file]) == NULL) inline[0] = NULL; } else inline[0] = NULL; } linelen = strlen (inline) - 1; while (linelen > 0 && isspace (inline[linelen])) inline[linelen--] = NULL; VOID sprintf (tmpline, Format, inline); VOID strcat (outline, tmpline); } done = 1; for (file = 0; file < nfiles; file++) if (!doneonce[file]) done = 0; if (!done) printf ("%s\n", outline); } exit (0); }