//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)
]