From: Ken Thompson Date: Fri, 26 May 1972 23:37:25 +0000 (-0500) Subject: Research V2 development X-Git-Tag: Research-V2~59 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/1a76c278ca7cf983014f7dbe5ee31bdef0b86dc3 Research V2 development Work on file cmd/fc.c Co-Authored-By: Dennis Ritchie Synthesized-from: v2 --- diff --git a/cmd/fc.c b/cmd/fc.c new file mode 100644 index 0000000000..8df9bffa20 --- /dev/null +++ b/cmd/fc.c @@ -0,0 +1,140 @@ +/* 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(i2 & *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); +} +(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); + retur \ No newline at end of file