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