C program, separate input files
/*
* name - purpose xxx
*
* $Log$
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#define MAXSTR 500 /* For sizing strings -- DON'T use BUFSIZ! */
#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
#ifndef lint
static char RCSid[] = "$Header$";
#endif
int debug = 0;
char *progname;
char *inname; /* filename for messages etc. */
long lineno; /* line number for messages etc. */
extern void error(), exit();
#ifdef UTZOOERR
extern char *mkprogname();
#else
#define mkprogname(a) (a)
#endif
void fail();
/*
- main - parse arguments and handle options
*/
main(argc, argv)
int argc;
char *argv[];
{
int c;
int errflg = 0;
FILE *in;
struct stat statbuf;
extern int optind;
extern char *optarg;
extern FILE *efopen();
void process();
progname = mkprogname(argv[0]);
while ((c = getopt(argc, argv, "xxxd")) != EOF)
switch (c) {
case 'xxx': /* xxx meaning of option */
xxx
break;
case 'd': /* Debugging. */
debug++;
break;
case '?':
default:
errflg++;
break;
}
if (errflg) {
fprintf(stderr, "usage: %s ", progname);
fprintf(stderr, "xxx [file] ...\en");
exit(2);
}
if (optind >= argc)
process(stdin, "stdin");
else
for (; optind < argc; optind++)
if (STREQ(argv[optind], "-"))
process(stdin, "-");
else {
in = efopen(argv[optind], "r");
if (fstat(fileno(in), &statbuf) < 0)
error("can't fstat `%s'", argv[optind]);
if ((statbuf.st_mode & S_IFMT) == S_IFDIR)
error("`%s' is directory!", argv[optind]);
process(in, argv[optind]);
(void) fclose(in);
}
exit(0);
}
/*
- process - process input file
*/
void
process(in, name)
FILE *in;
char *name;
{
char line[MAXSTR];
inname = name;
lineno = 0;
while (fgets(line, sizeof(line), in) != NULL) {
lineno++;
xxx
}
}
/*
- fail - complain and die
*/
void
char *s1;
char *s2;
{
fprintf(stderr, "%s: (file `%s', line %ld) ", progname, inname, lineno);
fprintf(stderr, s1, s2);
fprintf(stderr, "\en");
exit(1);
}
Contents
C program, single stream of input
Make file