// (C) Copyright 1979 Tripos Research Group // University of Cambridge // Computer Laboratory SECTION "RUN" GET "LIBHDR" GET "CLIHDR" GET "IOHDR" GLOBAL $( maxglob:ug+200 $) LET start() BE $( LET command = VEC 255/bytesperword LET l,cvec,svec = 0,?,? LET ch = rdch() LET task = 0 LET failed = FALSE LET dummy = maxglob UNTIL ch = endstreamch DO $( IF l>=255 DO $( failed := TRUE BREAK $) command%l := ch l := l+1 IF ch='*N' | ch='*E' BREAK ch := rdch() $) IF failed GOTO err cvec := getvec((l-1)/bytesperword+1+scb.upb) IF cvec=0 GOTO err svec := cvec+scb.upb+1 FOR j = 0 TO (l-1)/bytesperword DO svec!j := command!j FOR i = 500 TO 1 BY -1 DO $( task := createtask(tcb!tcb.seglist, tcb!tcb.stsiz, i) UNLESS task=0 BREAK $) IF task=0 DO $( freevec(cvec) GOTO err $) cvec!scb.link := 0 cvec!scb.id := id.inscb cvec!scb.type := 0 cvec!scb.buf := svec cvec!scb.pos := 0 cvec!scb.end := l cvec!scb.func1 := 0 cvec!scb.func3 := 0 // cli.module!(cli.module!1) := globsize // too dangerous, use dummy method rootnode!rtn.tasktab!task!tcb.seglist!3 := cli.module sendpkt(-1, task, 0, 0, 0, copyobj(currentdir), consoletask, cvec, copyobj(cli.commanddir), cli.defaultstack, cli.prompt) RETURN err:writes("RUN failed*N") stop(20) $) LET cli.init(parm.pkt) = VALOF $( initio() currentdir := parm.pkt!pkt.arg1 consoletask := parm.pkt!pkt.arg2 selectinput(parm.pkt!pkt.arg3) selectoutput(findoutput("**")) cli.background := TRUE cli.standardinput := input() cli.currentinput := cli.standardinput cli.standardoutput := output() cli.currentoutput := cli.standardoutput cli.commanddir := parm.pkt!pkt.arg4 returncode := 0 cli.returncode := 0 cli.faillevel := cli.initialfaillevel cli.result2 := 0 cli.commandfile%0 := 0 cli.defaultstack := parm.pkt!pkt.arg5 cli.module := 0 FOR i = 0 TO parm.pkt!pkt.arg6 % 0 DO cli.prompt%i := parm.pkt!pkt.arg6 % i tcb!tcb.seglist!3 := 0 start := cli.undefglobval result2 := parm.pkt RESULTIS qpkt $)