// Program to decide whether a file that's been received is a // PD file or a Press file, and invoke PDPrint or Press accordingly. // Format of command line: // Decide/switches filename // Switches are passed on to PDPrint or Press // First looks on Trident (drive 0, file system 0), and if not, on // local disk. // Bldr decide gp (tfs stuff) get "streams.d" external [ //TFS TFSInit //GP SetupReadParam ReadParam //Loadram LoadRam SetBLV RamImage //OS OpenFile Closes Resets Gets Puts FileLength SetFilePos TruncateDiskStream DoubleAdd InitializeZone fpComCm StartIO Wss Ws CallSwat CallSubsys lvUserFinishProc AltoVersion MoveBlock ] static SavedUFP static UseRam let main() be [ let z=vec 3000 let zone=InitializeZone(z, 3000) let trident=0 //Very first thing to do is load the RAM: UseRam=(AltoVersion rshift 12) le 3 if UseRam then [ let errs=LoadRam(RamImage, true) SetBLV(#177776) //Prepare for a silent boot when finishing. SavedUFP=@lvUserFinishProc @lvUserFinishProc=UserFinishProc //Will boot to restore tasks to ROM trident=TFSInit(zone, false, 0) ] let stringvec = vec 20 let switchvec = vec 20 let filename=vec 20 let cs = OpenFile("com.cm", ksTypeReadWrite, charItem, 0, fpComCm) SetupReadParam(stringvec, switchvec, cs, 0) let globalswitchvec=vec 20 MoveBlock(globalswitchvec, switchvec, 20) ReadParam($P, 0, filename, 0) let s=0 if trident then s=OpenFile(filename, ksTypeReadOnly, 0,0,0,0, zone, 0, trident) if s eq 0 then s=OpenFile(filename, ksTypeReadOnly, wordItem) if s eq 0 then [ Ws("Cannot find the file.") finish ] let w1=Gets(s) //First word let w2=0 //Press password let fl=vec 1 FileLength(s, fl) if ((fl!1)̉) eq 0 then [ let recLen= table [ -1; -512 ] DoubleAdd(fl, recLen) SetFilePos(s, fl) w2=Gets(s) ] Closes(s) UserFinishProc() //Stop Trident, silent boot Resets(cs) let program=nil let typ=0 if w1 eq #125252 then typ=typ+1 if w2 eq 27183 then typ=typ+2 switchon typ into [ case 0: Ws("File is neither .press nor .pd."); finish case 1: program="Pdprint.run"; endcase case 2: program="Press.run"; endcase case 3: Ws("File type is ambiguous."); finish ] Wss(cs, program) if globalswitchvec!0 ne 0 then [ Puts(cs,$/) for i=1 to globalswitchvec!0 do Puts(cs, globalswitchvec!i) ] Wss(cs, " print ") Wss(cs, filename) TruncateDiskStream(cs) Closes(cs) cs=OpenFile(program, ksTypeReadOnly, wordItem) if cs eq 0 then CallSwat("File not found", program) CallSubsys(cs) ] and UserFinishProc() be if UseRam then [ StartIO(#100000) //silent boot to stop trident @lvUserFinishProc=SavedUFP ]