/* Compiler-Driver for BC-Fortran-77 * * (C)1992, Ulf Bartelt * * History (youngest first): * * 920122 - started in Sozobon-C 2.0 * 920123 - Option -n ans some bugfixes * - Dgetdrv/Dsetdrv used additionally to chdir()... */ #include #include #include #include extern char *getenv(); void usage() { fputs("BC-FORTRAN-77 Driver V.0.12, (C)1992 by Ulf Bartelt\n",stderr); fputs(" -c compile only\n",stderr); fputs(" -f no casefolding, distinguish upper and lowercase\n",stderr); fputs(" -g compile with debug code\n",stderr); fputs(" -n no actions, only show commands...\n",stderr); fputs(" -O optimize (currently only optimizes linking)\n",stderr); fputs(" -r don't link with MATHLIB.B\n",stderr); fputs(" -sn set stack size to n kBytes\n",stderr); fputs(" -v verbose compile and link\n",stderr); fputs(" -vc verbose compile\n",stderr); fputs(" -vl verbose link\n",stderr); exit(0); } char filetype( file ) char *file; { register char *cp=file, *lb, *lp; while( *cp ) if( *cp == '\\' ) lb=cp++; else if( *cp == '.' ) lp=cp++; else cp++; if( lb < lp && lp[2] == 0 ) switch( toupper(lp[1]) ) { case 'F' : return 'F'; case 'B' : return 'B'; } return 0; } char *f_2_b( file ) /* a legal source file name is assumend !!! */ char *file; /* i.e.: .f */ { register char *cp = file; register char *lp; /* last (p)oint */ while( *cp ) if( *cp == '.' ) lp=cp++; else cp++; lp[1] = 'b'; return file; } int main( argc, argv ) int argc; char *argv[]; { int retcode = 0; char bcf_opts[40]; char bcl_opts[40]; char bcf_files[129]; char bcl_files[129]; char bcf_exec[129]; char bcl_exec[129]; char stacksize[21]; struct { unsigned c_casefold:1; /* -f ==> -U for compiler */ unsigned c_debug:1; /* -g ==> -D for compiler */ unsigned c_verbose:1; /* -v or -vc ==> -L for compiler */ unsigned l_mathlib:1; /* -r */ unsigned l_optimize:1; /* -O ==> -O for linker */ unsigned l_stacksize:1; /* -s ==> -S for linker */ unsigned l_verbose:1; /* -v or -vl ==> -L for linker */ unsigned x_nolink:1; /* -c */ unsigned x_donothing:1; /* -n */ unsigned got_f_files:1; /* *.f files in arglist */ unsigned got_b_files:1; /* *.b files in arglist */ } flags; flags.c_casefold = 1; flags.c_debug = 0; flags.c_verbose = 0; flags.got_b_files = 0; flags.got_f_files = 0; flags.l_mathlib = 1; flags.l_optimize = 0; flags.l_stacksize = 0; flags.l_verbose = 0; flags.x_nolink = 0; flags.x_donothing = 0; strcpy(bcf_files,""); strcpy(bcl_files,""); { int i=1; char *file[129]; while( i