IMPLEMENTATION MODULE StdIO ;
IMPORT IO ;
CONST
MaxStack = 40 ;
VAR
Stack : ARRAY [0..MaxStack] OF ProcWrite ;
StackPtr: CARDINAL ;
PROCEDURE Read (VAR ch: CHAR) ;
BEGIN
IO.Read(ch)
END Read ;
PROCEDURE Write (ch: CHAR) ;
BEGIN
Stack[StackPtr](ch)
END Write ;
PROCEDURE PushOutput (p: ProcWrite) ;
BEGIN
IF StackPtr=MaxStack
THEN
HALT
ELSE
INC(StackPtr) ;
Stack[StackPtr] := p
END
END PushOutput ;
PROCEDURE PopOutput ;
BEGIN
IF StackPtr=1
THEN
HALT
ELSE
DEC(StackPtr)
END
END PopOutput ;
PROCEDURE GetCurrentOutput () : ProcWrite ;
BEGIN
IF StackPtr>0
THEN
RETURN( Stack[StackPtr] )
ELSE
HALT
END
END GetCurrentOutput ;
BEGIN
StackPtr := 0 ;
PushOutput(IO.Write)
END StdIO.