|
|
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 l
Length: 3120 (0xc30)
Types: TextFile
Names: »linex.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/stat-5.3/eu/stat/src/linex.c«
/* Copyright 1986 Gary Perlman */
/* $link: linkml linex readlines+checkio+number+getopt+specol */
#include "stat.h"
PGM (linex,Line Extraction,5.0,12/01/86)
#define MAXREQS 1000 /* max number number of line requests */
#define MAXCHARS BUFSIZ /* maximum number of chars in lines */
Boole InfoVersion; /* print version information */
Boole InfoLimits; /* print program limits */
Boole InfoOptions; /* print usage information */
Boole Donumber = FALSE; /* number output lines */
Boole Silent = FALSE; /* be silent about missing lines */
int Request[MAXREQS]; /* requested lines */
int Maxrequest; /* maximum requested line */
int Nrequest = 0; /* number of requested lines */
char **Input; /* input store */
int Nlines; /* number of lines in input */
\f
main (argc, argv) char **argv;
{
int optind; /* local optind returned by initial() */
char *cs; /* current lines specification */
int reqno; /* the request number */
int reqline; /* the requested line */
char *specerr (); /* get colspec error string */
optind = initial (argc, argv);
while (optind < argc)
{
cs = argv[optind++];
Nrequest = specol (cs, Request, NULL, Nrequest, MAXREQS, MAXINT);
if (Nrequest > MAXREQS)
ERRMANY (line requests, MAXREQS)
if (Nrequest < 0)
{
fprintf (stderr, "%s: %s\n", Argv0, specerr (Nrequest));
exit (1);
}
}
if (Nrequest == 0)
ERRMSG0 (No line numbers were supplied)
for (reqno = 0; reqno < Nrequest; reqno++)
if (Request[reqno] > Maxrequest)
Maxrequest = Request[reqno];
checkstdin ();
/*BUG? may have problems with broken pipe */
Nlines = readlines (&Input, Maxrequest, stdin);
if (Nlines < 0)
ERRSPACE (lines)
for (reqno = 0; reqno < Nrequest; reqno++)
{
reqline = Request[reqno];
if (reqline <= Nlines)
{
if (Donumber)
printf ("%7d ", reqline);
puts (Input[reqline-1]);
}
else if (!Silent)
fprintf (stderr, "%s: missing line %d\n", Argv0, reqline);
}
exit (0);
}
\f
/*FUNCTION initial: returns local optind */
int
initial (argc, argv)
int argc;
char **argv;
{
extern int optind;
extern char *optarg;
Boole errflg = 0;
int c;
ARGV0;
while ((c = getopt (argc, argv, "nsLOV")) != EOF)
switch (c)
{
default: errflg = TRUE; break;
case 'O': InfoOptions = TRUE; break;
case 'V': InfoVersion = TRUE; break;
case 'L': InfoLimits = TRUE; break;
case 'n': Donumber = TRUE; break;
case 's': Silent = TRUE; break;
}
if (errflg)
USAGE ([-ns] line-numbers)
usinfo ();
return (optind);
}
\f
usinfo ()
{
if (InfoVersion)
pver (Version);
if (InfoLimits)
{
plim (Argv0);
const (MAXREQS, "maximum number of requested lines");
const (MAXCHARS, "maximum number of characters in lines");
}
if (InfoOptions)
{
ppgm (Argv0, Purpose);
lopt ('n', "number lines", Donumber);
lopt ('s', "be silent about missing lines", Silent);
oper ("lines", "lines to extract", "");
}
if (InfoVersion || InfoLimits || InfoOptions)
exit (0);
}