add definition for ability to produce a backtrace
[unix-history] / usr / src / old / awk / main.c
CommitLineData
2791ff57
KB
1/*-
2 * Copyright (c) 1991 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * %sccs.include.proprietary.c%
6 */
7
8#ifndef lint
9char copyright[] =
10"@(#) Copyright (c) 1991 The Regents of the University of California.\n\
11 All rights reserved.\n";
12#endif /* not lint */
13
b803c326 14#ifndef lint
2791ff57
KB
15static char sccsid[] = "@(#)main.c 4.6 (Berkeley) %G%";
16#endif /* not lint */
90a429fa
KM
17
18#include "stdio.h"
19#include "ctype.h"
20#include "awk.def"
21#include "awk.h"
22#define TOLOWER(c) (isupper(c) ? tolower(c) : c) /* ugh!!! */
23
24int dbg = 0;
569c4905 25int ldbg = 0;
90a429fa
KM
26int svflg = 0;
27int rstflg = 0;
28int svargc;
29char **svargv, **xargv;
30extern FILE *yyin; /* lex input file */
31char *lexprog; /* points to program argument if it exists */
32extern errorflag; /* non-zero if any syntax errors; set by yyerror */
33
34int filefd, symnum, ansfd;
35char *filelist;
36extern int maxsym, errno;
37main(argc, argv) int argc; char *argv[]; {
38 if (argc == 1)
39 error(FATAL, "Usage: awk [-f source | 'cmds'] [files]");
90a429fa
KM
40 syminit();
41 while (argc > 1) {
42 argc--;
43 argv++;
44 /* this nonsense is because gcos argument handling */
45 /* folds -F into -f. accordingly, one checks the next
46 /* character after f to see if it's -f file or -Fx.
47 */
48 if (argv[0][0] == '-' && TOLOWER(argv[0][1]) == 'f' && argv[0][2] == '\0') {
26758489
KB
49 if (argv[1][0] == '-' && argv[1][1] == '\0')
50 yyin = stdin;
51 else {
52 yyin = fopen(argv[1], "r");
53 if (yyin == NULL)
54 error(FATAL, "can't open %s", argv[1]);
55 }
90a429fa
KM
56 argc--;
57 argv++;
58 break;
59 } else if (argv[0][0] == '-' && TOLOWER(argv[0][1]) == 'f') { /* set field sep */
60 if (argv[0][2] == 't') /* special case for tab */
61 **FS = '\t';
62 else
63 **FS = argv[0][2];
64 continue;
65 } else if (argv[0][0] != '-') {
66 dprintf("cmds=|%s|\n", argv[0], NULL, NULL);
67 yyin = NULL;
68 lexprog = argv[0];
69 argv[0] = argv[-1]; /* need this space */
70 break;
71 } else if (strcmp("-d", argv[0])==0) {
72 dbg = 1;
73 }
569c4905
SL
74 else if (strcmp("-l", argv[0])==0) {
75 ldbg = 1;
76 }
90a429fa
KM
77 else if(strcmp("-S", argv[0]) == 0) {
78 svflg = 1;
79 }
80 else if(strncmp("-R", argv[0], 2) == 0) {
81 if(thaw(argv[0] + 2) == 0)
82 rstflg = 1;
83 else {
84 fprintf(stderr, "not restored\n");
85 exit(1);
86 }
87 }
88 }
89 if (argc <= 1) {
90 argv[0][0] = '-';
91 argv[0][1] = '\0';
92 argc++;
93 argv--;
94 }
95 svargc = --argc;
96 svargv = ++argv;
97 dprintf("svargc=%d svargv[0]=%s\n", svargc, svargv[0], NULL);
98 *FILENAME = *svargv; /* initial file name */
99 if(rstflg == 0)
100 yyparse();
101 dprintf("errorflag=%d\n", errorflag, NULL, NULL);
102 if (errorflag)
103 exit(errorflag);
104 if(svflg) {
105 svflg = 0;
106 if(freeze("awk.out") != 0)
107 fprintf(stderr, "not saved\n");
108 exit(0);
109 }
110 run();
111 exit(errorflag);
112}
113
90a429fa
KM
114yywrap()
115{
116 return(1);
117}