/* fortran command */ char ts[500]; char *tsp ts; char *av[50]; char *llist[50]; main(argc, argv) char *argv[]; { char *t; int nl, cflag, i, j; llist[0] = 0; i = nl = cflag = 0; while(++i < argc) { if (getsuf(t=copy(argv[i])) == 'f') { printf("%s:\n", t); av[0] = "fc"; av[1] = t; av[2] = 0; if(callsys("/usr/fort/fc1", av) == 0) { av[0] = "as"; av[1] = "-"; av[2] = "f.tmp1"; av[3] = 0; callsys("/bin/as", av); setsuf(t); unlink(t); if(link("a.out", t) | unlink("a.out")) { printf("move failed: %s\n", t); return; } } else { cflag++; goto loop; } } else if (*t == '-' & t[1] =='c') { cflag++; goto loop; } if (nodup(llist, t)) { llist[nl++] = t; llist[nl] = 0; } loop:; } unlink("f.tmp1"); if (cflag | nl==0) return; i = 0; av[0] = "ld"; av[1] = "/lib/fr0.o"; j = 2; while(i<nl) av[j++] = llist[i++]; av[j++] = "-lf"; av[j++] = "/lib/filib.a"; av[j++] = "-l"; av[j++] = 0; callsys("/bin/ld", av); } getsuf(s) char s[]; { int c; char t, *os; c = 0; os = s; while(t = *s++) if (t=='/') c = 0; else c++; s =- 3; if (c<=8 & c>2 & *s++=='.' & *s=='f') return('f'); return(0); } setsuf(s) char s[]; { while(*s++); s[-2] = 'o'; } callsys(f, v) char f[], *v[]; { int t, status; if ((t=fork())==0) { execv(f, v); printf("Can't find %s\n", f); exit(-1); } else if (t == -1) { printf("Try again\n"); exit(-1); } while(t!=wait(&status)); if ((status&0377) != 0) exit(-1); return((status>>8) & 0377); } copy(s) char s[]; { char *otsp; otsp = tsp; while(*tsp++ = *s++); return(otsp); } nodup(l, s) char *l[], s[]; { char *t, *os, c; os = s; while(t = *l++) { s = os; while(c = *s++) if (c != *t++) goto ll; if (*t++ == '\0') return (0); ll:; } return(1); }