DEFINITION MODULE STDIO;
VAR RDSTR:PROCEDURE(VAR ARRAY OF CHAR);
    RDCHAR:PROCEDURE():CHAR;
    WRSTR:PROCEDURE(ARRAY OF CHAR);
    WRLN,CLS:PROC;
    GOTOXY:PROCEDURE(CARDINAL,CARDINAL);
    MOVEX:PROCEDURE(INTEGER);
    WRCHAR,CURSOR,UNCURS,MODECHNG:PROCEDURE(CHAR);
    GETXY:PROCEDURE(VAR CARDINAL,VAR CARDINAL);

PROCEDURE KREADY():BOOLEAN;
PROCEDURE GETKEY():CHAR;
PROCEDURE WAITKEY():CHAR;

PROCEDURE PRINTABLE(C:CHAR):BOOLEAN;
PROCEDURE RDCHAR1():CHAR;
PROCEDURE WRSTRLEN(S:ARRAY OF CHAR; L:CARDINAL);
PROCEDURE WRSPS(NUM:CARDINAL);
PROCEDURE WRSUBSTR(S:ARRAY OF CHAR;Start,End:CARDINAL);
VAR TERMCH:CHAR;
PROCEDURE RDITEM(VAR S:ARRAY OF CHAR);
PROCEDURE GENRDSTR(VAR S:ARRAY OF CHAR);
PROCEDURE BUFFRDCHAR():CHAR;
PROCEDURE STDOUT(STRM:SHORTCARD);
PROCEDURE STDIN(STRM:SHORTCARD);
PROCEDURE KBDIN;
(*
  PROCEDURE SWRSTR(S:ARRAY OF CHAR);
  PROCEDURE SUNCURS(C:CHAR);
  PROCEDURE SWRCHAR(C:CHAR);
  PROCEDURE SWRLN;
  PROCEDURE SCLS;
  PROCEDURE SGOTOXY(X,Y:CARDINAL);
  PROCEDURE SCURSOR(C:CHAR);
  PROCEDURE SMOVEX(N:INTEGER);
  PROCEDURE SGETXY(VAR X,Y:CARDINAL);
  PROCEDURE SRDSTR(VAR S:ARRAY OF CHAR);
  PROCEDURE SMODECHNG(C:CHAR);
*)
END STDIO.
 
IMPLEMENTATION MODULE STDIO;
FROM SYSTEM IMPORT ADDRESS;
 
VAR [0BD01H] INCHAN,OUTCHN:SHORTCARD;
VAR [5C63H] STKBOT:ADDRESS;

PROCEDURE SWRSTR(S:ARRAY OF CHAR);
HEX 03 CD (@15) 7E A7 C8 C5 D7 C1 0B 23 78 B1 20 F4 C9
END SWRSTR;
 
PROCEDURE SUNCURS(C:CHAR);
HEX A7 C8 END SUNCURS;
PROCEDURE SWRCHAR(C:CHAR);
HEX 08 CD (@15) 08 D7 C9
END SWRCHAR;
 
PROCEDURE SWRLN;
HEX CD (@15) 3E 0D D7 C9
END SWRLN;
 
PROCEDURE SGOTOXY(X,Y:CARDINAL);
HEX CD (@15) 3E 16 D7 21 02 00 39 7E D7 23 23 7E D7
C9 END SGOTOXY;
 
PROCEDURE SCURSOR(C:CHAR);HEX
A7 C8 08 CD (@15) 08 C3 C1 18 END SCURSOR;
 
PROCEDURE SMOVEX(N:INTEGER);HEX
CD (@15) 06 09 CB 7C 28 11 AF EB 67 6F ED 52 05
C5 78 D7 D9 CD D9 0D D9 C1 2B 7C B5 20 F2 C9 END SMOVEX;
 
PROCEDURE SGETXY(VAR X,Y:CARDINAL);HEX
CD 03 0B D1 E1 3E 18 90 77 23 36 00 E1 3E 21 91
77 23 36 00 E5 E5 D5 C9 END SGETXY;
 
PROCEDURE SRDSTR(VAR S:ARRAY OF CHAR);HEX
03 E5 C5 CD (@1EH) EB 2A (@STKBOT) 37 ED 52 C1 D9 D1
28 0F D5 D9 ED 42 09 30 02 44 4D E1 EB ED B0 30
02 AF 12 C3 (@49H) END SRDSTR;
 
PROCEDURE KREADY():BOOLEAN;
HEX 37 FD CB 01 6E C0 AF C9
END KREADY;
 
VAR [5C08H] LASTK:CHAR;
PROCEDURE GETKEY():CHAR;
HEX CD (@KREADY) D0 3A (@LASTK) FD CB 01 AE C9
END GETKEY;
 
PROCEDURE WAITKEY():CHAR;HEX
FD CB 01 DE CD (@GETKEY) 30 FB FE 10 38 21 21 41 5C
CB 46 C8 CB 86 F5 3A 41 5C 87 20 08 FD CB 30 5E
20 02 3E 09 C6 43 2A (@MODECHNG) CD 2C 16 F1 C9 FE 06
CD DB 10 38 D8 CD (@WAITKEY+15H) 18 CA END WAITKEY;
 
PROCEDURE CMODECHNG(C:CHAR);HEX
21 00 00 E5 39 E5 F5 E5 2B 2B E5 2A (@GETXY) CD 2C
16 E1 E1 21 1F 00 E5 6C E5 2A (@GOTOXY) CD 2C 16 E1
E1 F1 2A (@CURSOR) CD 2C 16 2A (@GOTOXY) CD 2C 16 E1 E1
C9 END CMODECHNG;
 
PROCEDURE RDCHAR1():CHAR;
HEX CD (@14) C3 D4 15 END RDCHAR1;
 
PROCEDURE SCLS;HEX C3 6B 0D END SCLS;
 
PROCEDURE WRSTRLEN(S:ARRAY OF CHAR; L:CARDINAL);HEX
3E 20 08 DD E1 D1 E1 C1 03 C5 E5 D5 DD E5 E5 C5
AF ED B1 20 01 37 E1 ED 42 EB ED 52 D5 D4 (@WRSPS+3)
C1 0B 2A (@WRSTR) E3 C9 END WRSTRLEN;
 
PROCEDURE WRSPS(NUM:CARDINAL);HEX
3E 20 08 7C B5 C8 E5 2A (@WRCHAR) 08 F5 CD 2C 16 F1
E1 2B 18 EE END WRSPS;
PROCEDURE WRSUBSTR(S:ARRAY OF CHAR;Start,End:CARDINAL);HEX
DD E1 D1 C1 E1 09 E3 23 A7 ED 42 EB A7 23 ED 42
C1 E5 E5 E5 E5 DD E5 D8 C8 7A B3 28 CF 0A A7 28
CB E5 C5 D5 2A (@WRCHAR) CD 2C 16 D1 C1 E1 03 1B 2B
7C B5 20 E5 C9 END WRSUBSTR;
 
PROCEDURE RDITEM(VAR S:ARRAY OF CHAR);HEX
03 CD (@RDITEM+15H) 38 FB 77 ED A1 E0 CD (@RDITEM+15H) 30 F7 36
00 32 (@TERMCH) C9 C5 E5 2A (@RDCHAR) CD 2C 16 FE 21 E1
C1 C9 END RDITEM;
 
PROCEDURE GENRDSTR(VAR S:ARRAY OF CHAR);HEX
03 CD (@RDITEM+12H) 77 3E 0D ED A1 E0 20 F5 2B 36 00 C9
END GENRDSTR;
 
VAR BUFFER:ARRAY [0..32] OF CHAR;
    BUFLG:BOOLEAN;
    BUFFAD:ADDRESS;
PROCEDURE BUFFRDCHAR():CHAR;HEX
3A (@BUFLG) A7 20 15 3C 32 (@BUFLG) 21 (@BUFFER) 01 1F 00
E5 DD 2A (@RDSTR) CD F0 03 E1 18 03 2A (@BUFFAD) 7E 23
22 (@BUFFAD) A7 C0 32 (@BUFLG) 3E 0D C9 END BUFFRDCHAR;
 
PROCEDURE PRINTABLE(C:CHAR):BOOLEAN;HEX
FE AB D0 FE 20 3F C9 END PRINTABLE;
 
PROCEDURE STDOUT(STRM:SHORTCARD);
BEGIN
OUTCHN:=STRM;
WRSTR:=SWRSTR;
WRLN:=SWRLN;
CLS:=SCLS;
WRCHAR:=SWRCHAR;
GOTOXY:=SGOTOXY;
UNCURS:=SWRCHAR;
CURSOR:=SCURSOR;
MOVEX:=SMOVEX;
GETXY:=SGETXY;
END STDOUT;
 
PROCEDURE STDIN(STRM:SHORTCARD);
BEGIN
INCHAN:=STRM;
RDSTR:=GENRDSTR;
RDCHAR:=RDCHAR1;
END STDIN;
 
PROCEDURE KBDIN;
BEGIN
INCHAN:=1;
RDSTR:=SRDSTR;
RDCHAR:=BUFFRDCHAR;
END KBDIN;
 
BEGIN
STDOUT(2);KBDIN;
MODECHNG:=CMODECHNG;
BUFLG:=FALSE
END STDIO.
