home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
progm
/
cpgms.zip
/
SLIST.C
< prev
next >
Wrap
C/C++ Source or Header
|
1985-11-17
|
2KB
|
126 lines
#include "stdio.h"
#define END 0xff
#define ERROR 0
#define CPMEOF 0X1A
#define NULL 0
#define DeSmet 1
char *documentation[] = {
"slist lists a few lines starting with a given line number.",
" slist [flags] [file] [<file] [>file]",
"",
"Flags are single characters preceeded by '-':",
" -snnn Start at line nnn. Default is 1",
" -cnnn Print nnn lines. Default is 20",
"",
"Input is from the given file or stdin, if none given.",
"Output is to stdout. To print add >PRN: to your command.",
0 };
int tflg = 0;
int sflg = 1;
int cflg = 20;
int debug = 0;
main(argc, argv)
char *argv[];
{
register char *p;
register int c, i;
int nfile;
char tolower();
FILE *f;
if (argc == 2 && argv[1][0] == '?' && argv[1][1] == 0) {
help(documentation);
return;
}
nfile = argc-1;
for (i=1; i < argc; ++i) {
p = argv[i];
if (*p == '-') {
++p;
while (c = *p++) {
switch(tolower(c)) {
case '?':
help(documentation);
break;
case 'S':
case 's':
sflg = atoi(p);
while (isdigit(*p)) p++;
break;
case 'C':
case 'c':
cflg = atoi(p);
while (isdigit(*p)) p++;
break;
case 'D':
case 'd':
debug++;
break;
default:
usage("Unknown flag");
}
}
argv[i] = 0;
--nfile;
}
}
if (nfile == 0)
slist(stdin, 0);
else if (nfile > 1)
usage("Too many filenames");
else
if ((f=fopen(p, "r")) == NULL)
cant(p);
else {
slist(f, p);
fclose(f);
}
}
/*******************************************************/
usage(s)
char *s;
{
puts("?SLIST-E-");
puts(s);
puts("\n");
puts("Usage: slist [-snnn] [-cnnn] [file] [<file] [>file]. \n");
puts(" slist ? for help\n");
exit(1);
}
/*******************************************************/
slist(fp, fn)
FILE *fp; /* File to process */
char *fn; /* File name (for -f option) */
/*
* short list of file from line# sflg for cflg lines.
*/
{
char buff[512];
int iflg, fgets(), fputs();
iflg = 1;
while (iflg++ < sflg)
if (!fgets(buff,sizeof(buff),fp))
break;
for (iflg=1; iflg < cflg; iflg++)
if (fgets(buff,sizeof(buff),fp))
fputs(buff,stdout);
}