| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- IMPLEMENTATION MODULE StdIO;
- CONST MaxStack = 32;
- PROCEDURE m2writechar (c : CHAR);
- EXTERNAL;
- PROCEDURE m2readchar () : CHAR;
- EXTERNAL;
- VAR
- outStack : ARRAY [0 .. MaxStack - 1] OF ProcWrite;
- outTop : INTEGER;
- inStack : ARRAY [0 .. MaxStack - 1] OF ProcRead;
- inTop : INTEGER;
- curOut : ProcWrite;
- curIn : ProcRead;
- PROCEDURE DefaultWrite (c : CHAR);
- BEGIN
- m2writechar(c)
- END DefaultWrite;
- PROCEDURE DefaultRead (VAR c : CHAR);
- BEGIN
- c := m2readchar()
- END DefaultRead;
- PROCEDURE Write (ch : CHAR);
- BEGIN
- curOut(ch)
- END Write;
- PROCEDURE Read (VAR ch : CHAR);
- BEGIN
- curIn(ch)
- END Read;
- PROCEDURE PushOutput (p : ProcWrite);
- BEGIN
- IF outTop < MaxStack THEN
- outStack[outTop] := curOut;
- INC(outTop)
- END;
- curOut := p
- END PushOutput;
- PROCEDURE PopOutput;
- BEGIN
- IF outTop > 0 THEN
- DEC(outTop);
- curOut := outStack[outTop]
- END
- END PopOutput;
- PROCEDURE GetCurrentOutput () : ProcWrite;
- BEGIN
- RETURN curOut
- END GetCurrentOutput;
- PROCEDURE PushInput (p : ProcRead);
- BEGIN
- IF inTop < MaxStack THEN
- inStack[inTop] := curIn;
- INC(inTop)
- END;
- curIn := p
- END PushInput;
- PROCEDURE PopInput;
- BEGIN
- IF inTop > 0 THEN
- DEC(inTop);
- curIn := inStack[inTop]
- END
- END PopInput;
- PROCEDURE GetCurrentInput () : ProcRead;
- BEGIN
- RETURN curIn
- END GetCurrentInput;
- BEGIN
- outTop := 0; inTop := 0;
- curOut := DefaultWrite;
- curIn := DefaultRead
- END StdIO.
|