|
|
researchv8 Dan Cross
#define DEBUG
#include <stdio.h>
#include <ctype.h>
#include <signal.h>
#include "awk.h"
#include "y.tab.h"
int dbg = 0;
int svargc;
char **svargv;
char *cmdname; /* gets argv[0] for error messages */
extern FILE *yyin; /* lex input file */
char *lexprog; /* points to program argument if it exists */
extern int errorflag; /* non-zero if any syntax errors; set by yyerror */
int compile_time = 1; /* 0 when machine starts. for error printing */
main(argc, argv)
int argc;
char *argv[];
{
char *progfile = NULL, *progarg = NULL, *fs = NULL, *freezename = NULL;
extern int fpecatch();
cmdname = argv[0];
if (argc == 1)
error(FATAL, "Usage: %s [-f source | 'cmds'] [files]", cmdname);
yyin = NULL;
while (argc > 1 && argv[1][0] == '-' && argv[1][1] != '\0') {
switch (argv[1][1]) {
case 'f': /* next argument is program filename */
argc--;
argv++;
if ((yyin = fopen(argv[1], "r")) == NULL)
error(FATAL, "can't open file %s", argv[1]);
progfile = argv[1];
break;
case 'F': /* set field separator */
if (argv[1][2] != 0) { /* arg is -Fsomething */
if (argv[1][2] == 't' && argv[1][3] == 0) /* special case for tab */
fs = "\t";
else
fs = &argv[1][2];
} else { /* it's -F (space) something */
argc--;
argv++;
if (argv[1][0] == 't' && argv[1][1] == 0)
fs = "\t";
else
fs = &argv[1][0];
}
break;
case 'd':
dbg = 1;
break;
}
argc--;
argv++;
}
if (yyin == NULL) { /* no -f; first argument is program */
dprintf("program = |%s|\n", argv[1]);
progarg = lexprog = argv[1];
argc--;
argv++;
}
if (argc == 1) { /* no filenames; use stdin */
argv[0] = tostring("-");
argc++;
argv--;
}
argv[0] = cmdname; /* put prog name at front of arglist */
svargc = argc;
svargv = argv;
dprintf("svargc=%d, svargv[0]=%s\n", svargc, svargv[0]);
syminit(svargc, svargv);
if (fs)
*FS = tostring(fs);
*FILENAME = svargv[1]; /* initial file name */
signal(SIGFPE, fpecatch);
yyparse();
dprintf("errorflag=%d\n", errorflag, NULL, NULL);
if (errorflag == 0) {
compile_time = 0;
run(winner);
} else
bracecheck();
exit(errorflag);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.