//MXALTR.BCPL
get "streams.d"
external [
//OS
CallSwat; OpenFile; CallSubsys; CounterJunta; lvUserFinishProc
Closes
//MDISP
SetDisplay
//MXALTIO
ArgsAltIO; CallingAltIO
//MCMD
StartCmdOverlay
//MASM
ErrorProtect
//MINIT0
MidasRFP
//STATE package
SaveState
//Defined here
CallAltIO; InitAltIOFP
]
static [ AltIOFP ]
let CallAltIO() be
[ ErrorProtect(lv StartCmdOverlay,lv ArgsAltIO)
if CallingAltIO do
[ SetDisplay(true)
while @lvUserFinishProc ne 0 do (@lvUserFinishProc)()
SaveState(OpenFile("MIDAS.RESUME",ksTypeWriteOnly,wordItem,
verLatestCreate,MidasRFP))
CounterJunta(CallAltIONow)
]
]
and CallAltIONow() be
[ let F = OpenFile("AltIO.run",ksTypeReadOnly,wordItem,0,AltIOFP)
//AltIO writes "Midas.run/R" in Com.CM and does a CallSubsys to return
CallSubsys(F); CallSwat()
]
//Cannot init AltIOFP in MINIT0 because it is used after CounterJunta
//which smashes free storage
and InitAltIOFP() be
[ AltIOFP = table [ 0; 0; 0; 0; 0; 0 ]
let S = OpenFile("AltIO.run",ksTypeReadOnly,wordItem,0,AltIOFP)
if S eq 0 then CallSwat("No AltIO.run")
Closes(S)
]