- STRING argl[MAXARG];
- CHAR args[LINSIZ];
- STRING p, *ap, filnam;
- ap=argl; p=args;
- *ap++=symfil;
- REP IF rdc()==EOR THEN break; FI
- *ap = p;
- WHILE lastc!=EOR ANDF lastc!=SP ANDF lastc!=TB DO *p++=lastc; readchar(); OD
- *p++=0; filnam = *ap+1;
- IF **ap=='<'
- THEN close(0);
- IF open(filnam,0)<0
- THEN printf("%s: cannot open\n",filnam); exit(0);
- FI
- ELIF **ap=='>'
- THEN close(1);
- IF creat(filnam,0666)<0
- THEN printf("%s: cannot create\n",filnam); exit(0);
- FI
- ELSE ap++;
- FI
- PER lastc!=EOR DONE
- *ap++=0;
- if (debug) printf("About to exect(%s, %d, %d)\n",symfil,argl,environ);
+ char *argl[MAXARG], args[LINSIZ];
+ register char c, redchar, *argsp, **arglp, *filnam;
+
+ arglp = argl;
+ argsp = args;
+ *arglp++ = symfil;
+ c = ' ';
+
+ do {
+ while (eqany(c, " \t")) {
+ c = rdc();
+ }
+ if (eqany(c, "<>")) {
+ redchar = c;
+ do {
+ c = rdc();
+ } while (eqany(c, " \t"));
+ filnam = argsp;
+ do {
+ *argsp++ = c;
+ c = rdc();
+ } while (!eqany(c, " <>\t\n"));
+ *argsp++ = '\0';
+ if (redchar == '<') {
+ close(0);
+ if (open(filnam,0) < 0) {
+ printf("%s: cannot open\n",filnam);
+#ifdef UCBVAX
+ _exit(0);
+#else
+ exit(0);
+#endif
+ }
+ } else {
+ close(1);
+ if (creat(filnam,0666) < 0) {
+ printf("%s: cannot create\n",filnam);
+#ifdef UCBVAX
+ _exit(0);
+#else
+ exit(0);
+#endif
+ }
+ }
+ } else if (c != '\n') {
+ *arglp++ = argsp;
+ do {
+ *argsp++ = c;
+ c = rdc();
+ } while(!eqany(c, " <>\t\n"));
+ *argsp++ = '\0';
+ }
+ } while (c != '\n');
+ *arglp = (char *) 0;
+ if (debug) {
+ char **dap;
+ printf("About to exect(%s, %d, %d)\n",symfil,argl,environ);
+ for (dap = argl; *dap; dap++) {
+ printf("%s, ", *dap);
+ }
+ }