mcr@julie.UUCP (Michael Richardson) (04/29/89)
I've been trying to rewrite my uuxqt program to deal with a soft-coded commands, (as in L.cmds), return codes, and nifty stuff like that. I want to redirect the standard input and invoke a new process (with fexecv, Manx 3.6a) I've managed to pare the code that causes the GURU I've been getting to the bare minimum. Here it is: (I know the _devtab stuff doesn't need to be there.) ======= #include <stdio.h> #include <libraries/dos.h> #include <libraries/dosextens.h> #include <fcntl.h> extern struct Task *FindTask(); main(argc,argv) int argc; char *argv[]; { int status,error; static char *av[30]; int i; long oldin,newin; struct Process *myProc; if(argc<=2) { printf("Not enough args\n"); exit(2); } myProc=(struct Process *)FindTask(0L); oldin=Input(); if((newin=(long)Open(argv[1],MODE_OLDFILE))==NULL) { printf("Can't open %s\n",argv[1]); exit(1); } myProc->pr_CIS=newin; _devtab[stdin->_unit].fd=newin; argc=argc-2; for(i=0; i<argc; i++) { av[i]=argv[i+2]; printf("Arg %d is %s\n",i,av[i]); } av[i]=NULL; status=fexecv(av[0],av); error=wait(); _devtab[stdin->_unit].fd=myProc->pr_CIS=oldin; Close(newin); exit(status || error); } ======================== Compile with: cc +L test2.c ln +Q -w test2.o -o test2 Run: test2 test2.c type ;; no problem test2 test2.c type hex ;; pretty neat test2 test2.c type opt h ;; GURUs. No task held. Takes out $c00000 RAD: test2 test2.c echo hi there ;; ditto. And this doesn't even access stdin! I've managed to isolate this down to the fexecv call. I AM setting up the arguments right, but it still dies. I haven't tracked all the way through the fexecv code, and I'm not sure I ever will. From the Dillon shell code I've looked at this ought to be the right thing to do... Any ideas? Anyone? Please? This keeps me up at night... -- :!mcr!: Michael Richardson Amiga v--------+ UUCP: uunet!attcan!lsuc!nrcaer!julie!mcr | INTERNET mcr@doe.carleton.ca Fido: Michael Richardson @ 1:163/109.10<--+ Alter @ 7:483/109.10