|
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 - downloadIndex: ┃ T r ┃
Length: 3277 (0xccd) Types: TextFile Names: »repeat.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─ ⟦this⟧ »EUUGD11/stat-5.3/eu/stat/src/repeat.c«
/* Copyright 1982 Gary Perlman */ #include "stat.h" PGM(repeat,Repeat a File or String,5.1,10/13/86) #define MAXCHARS BUFSIZ /* maximum number of chars in lines */ int Maxlines = 1000; int Count = 1; /* number of times to repeat */ Boole Formfeeds = FALSE; /* begin copies with ^L */ Boole Inside = FALSE; /* repeat lines within files */ Boole InfoVersion; /* print version information */ Boole InfoLimits; /* print program limits */ Boole InfoOptions; /* print usage information */ main (argc, argv) char **argv; { int optind; int repeat (); ARGV0; optind = initial (argc, argv); exit (filter (argc, argv, optind, repeat)); } repeat (name, ioptr) char *name; FILE *ioptr; { int nlines; char **lptr; register int i; int repcount; nlines = readlines (&lptr, Maxlines, ioptr); if (nlines > Maxlines) { fprintf (stderr, "%s: problem repeating file '%s'\n", Argv0, name); ERRMANY (input lines, Maxlines); } if (nlines < 0) ERRSPACE (lines) if (Inside) { for (i = 0; i < nlines; i++) for (repcount = 0; repcount < Count; repcount++) puts (lptr[i]); } else { for (repcount = 0; repcount < Count; repcount++) { if (Formfeeds) putchar ('\f'); for (i = 0; i < nlines; i++) puts (lptr[i]); } } for (i = 0; i < nlines; i++) free (lptr[i]); free (lptr); return (SUCCESS); } /*FUNCTION initial: returns local version of optind, index to first operand */ int initial (argc, argv) char **argv; { extern char *optarg; /* option value accessed through this by getopt */ extern int optind; /* will be index to first operand */ int opterr = 0; /* count of number of errors */ int flag; /* option flag characters read in here */ char *optstring = /* getopt string to be filled in */ "fil:n:LOV"; char *usage = /* part of usage summary to match optstring */ "[-fi] [-l maxlines] [-n count] [-] [files]"; while ((flag = getopt (argc, argv, optstring)) != EOF) switch (flag) { default: opterr++; break; /* put option cases here */ case 'O': InfoOptions = TRUE; break; case 'V': InfoVersion = TRUE; break; case 'L': InfoLimits = TRUE; break; case 'f': Formfeeds = TRUE; break; case 'i': Inside = TRUE; break; case 'l': if (setint (Argv0, flag, optarg, &Maxlines, 1, MAXINT)) opterr++; break; case 'n': if (setint (Argv0, flag, optarg, &Count, 0, MAXINT)) opterr++; break; } if (opterr) /* print usage message and bail out */ { fprintf (stderr, "Usage: %s %s\n", ARGV0, usage); exit (1); } usinfo (); return (optind); } \f usinfo () { if (InfoVersion) pver (Version); if (InfoLimits) { plim (Argv0); const (Maxlines, "maximum number of lines"); const (MAXCHARS, "maximum number of characters in lines"); } if (InfoOptions) { ppgm (Argv0, Purpose); lopt ('f', "insert formfeeds before each copy", Formfeeds); lopt ('i', "repeat lines inside files", Inside); iopt ('l', "lines", "maximum number of input lines", Maxlines); iopt ('n', "count", "number of times to repeat input files", Count); } if (InfoVersion || InfoLimits || InfoOptions) exit (0); }