home *** CD-ROM | disk | FTP | other *** search
- char *xxxvers[] = "\nFORTRAN 77 PASS 1, VERSION 1.21, 20 APRIL 1979\n";
-
- #include "defs"
-
-
- main(argc, argv)
- int argc;
- char **argv;
- {
- char *s;
- int k, retcode;
- FILEP opf();
-
- #define DONE(c) { retcode = c; goto finis; }
-
- --argc;
- ++argv;
-
- while(argc>0 && argv[0][0]=='-')
- {
- for(s = argv[0]+1 ; *s ; ++s) switch(*s)
- {
- case 'w':
- if(s[1]=='6' && s[2]=='6')
- {
- ftn66flag = YES;
- s += 2;
- }
- else
- nowarnflag = YES;
- break;
-
- case 'U':
- shiftcase = NO;
- break;
-
- case 'u':
- undeftype = YES;
- break;
-
- case 'O':
- optimflag = YES;
- if( isdigit(s[1]) )
- {
- k = *++s - '0';
- if(k > MAXREGVAR)
- {
- warn1("-O%d: too many register variables", k);
- maxregvar = MAXREGVAR;
- }
- else
- maxregvar = k;
- }
- break;
-
- case 'd':
- debugflag = YES;
- break;
-
- case 'p':
- profileflag = YES;
- break;
-
- case 'C':
- checksubs = YES;
- break;
-
- case '1':
- onetripflag = YES;
- break;
-
- case 'I':
- if(*++s == '2')
- tyint = TYSHORT;
- else if(*s == '4')
- {
- shortsubs = NO;
- tyint = TYLONG;
- }
- else if(*s == 's')
- shortsubs = YES;
- else
- fatal1("invalid flag -I%c\n", *s);
- tylogical = tyint;
- break;
-
- default:
- fatal1("invalid flag %c\n", *s);
- }
- --argc;
- ++argv;
- }
-
- if(argc != 4)
- fatal1("arg count %d", argc);
- asmfile = opf(argv[1]);
- initfile = opf(argv[2]);
- textfile = opf(argv[3]);
-
- initkey();
- if(inilex( copys(argv[0]) ))
- DONE(1);
- fprintf(diagfile, "%s:\n", argv[0]);
- fileinit();
- procinit();
- if(k = yyparse())
- {
- fprintf(diagfile, "Bad parse, return code %d\n", k);
- DONE(1);
- }
- if(nerr > 0)
- DONE(1);
- if(parstate != OUTSIDE)
- {
- warn("missing END statement");
- endproc();
- }
- doext();
- preven(ALIDOUBLE);
- prtail();
- #if FAMILY==SCJ
- puteof();
- #endif
- DONE(0);
-
-
- finis:
- done(retcode);
- return(retcode);
- }
-
-
-
- done(k)
- int k;
- {
- static int recurs = NO;
-
- if(recurs == NO)
- {
- recurs = YES;
- clfiles();
- }
- exit(k);
- }
-
-
- LOCAL FILEP opf(fn)
- char *fn;
- {
- FILEP fp;
- if( fp = fopen(fn, "w") )
- return(fp);
-
- fatal1("cannot open intermediate file %s", fn);
- /* NOTREACHED */
- }
-
-
-
- LOCAL clfiles()
- {
- clf(&textfile);
- clf(&asmfile);
- clf(&initfile);
- }
-
-
- clf(p)
- FILEP *p;
- {
- if(p!=NULL && *p!=NULL && *p!=stdout)
- {
- if(ferror(*p))
- fatal("writing error");
- fclose(*p);
- }
- *p = NULL;
- }
-
-