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