DEFINITION MODULE NUMIO;
PROCEDURE STRTOCARD(S:ARRAY OF CHAR;VAR OK:BOOLEAN):CARDINAL;
PROCEDURE STRTOINT(S:ARRAY OF CHAR;VAR OK:BOOLEAN):INTEGER;
PROCEDURE SUBSTRTOCARD(S:ARRAY OF CHAR;VAR P:CARDINAL;VAR OK1:BOOLEAN):CARDINAL;
PROCEDURE SUBSTRTOINT(S:ARRAY OF CHAR;VAR P:CARDINAL;VAR OK1:BOOLEAN):INTEGER;
PROCEDURE INTTOSTR(X:INTEGER;VAR S:ARRAY OF CHAR;VAR OK:BOOLEAN);
PROCEDURE CARDTOSTR(X:CARDINAL;VAR S:ARRAY OF CHAR;VAR OK:BOOLEAN);
VAR OK:BOOLEAN;
PROCEDURE WRCARD(X:CARDINAL;W:CARDINAL);
PROCEDURE WRCARD0(X:CARDINAL;W:CARDINAL);
PROCEDURE WRINT(X:INTEGER;W:CARDINAL);
PROCEDURE RDCARD():CARDINAL;
PROCEDURE RDINT():INTEGER;
END NUMIO.
 
IMPLEMENTATION MODULE NUMIO;
FROM STDIO IMPORT RDITEM,WRSTRLEN;
 
PROCEDURE SUBSTRTOINT(S:ARRAY OF CHAR;VAR P:CARDINAL;
                      VAR OK1:BOOLEAN):INTEGER;HEX
CD (@SUBSTRTO) CD (@STOI) 18 06 END SUBSTRTOINT;
PROCEDURE SUBSTRTOCARD(S:ARRAY OF CHAR;VAR P:CARDINAL;
                      VAR OK1:BOOLEAN):CARDINAL;HEX 
CD (@SUBSTRTO) CD (@STOC) D9 E1 C6 FF ED 42 EB E1 72 2B
73 D9 08 C9 END SUBSTRTOCARD;
 
PROCEDURE CTOSA;
HEX D9 01 00 00 D9 11 0A 00 CD (@34) 67 B1 08 7D 69
D9 C6 30 77 03 08 C8 2B 18 EA END CTOSA;
 
PROCEDURE INTTOSTR(X:INTEGER;VAR S:ARRAY OF CHAR;VAR OK:BOOLEAN);
HEX C1 DD E1 D1 D9 C1 E1 CB 7C 28 16 11 00 00 EB A7
ED 52 D9 3E 2D 12 13 D9 18 08 END INTTOSTR;
PROCEDURE CARDTOSTR(X:CARDINAL;VAR S:ARRAY OF CHAR;VAR OK:BOOLEAN);
HEX C1 DD E1 D1 D9 C1 E1 03 DD CB 00 C6 11 20 30 D5
D5 16 20 D5 D5 D9 21 05 00 39 C5 D9 C5 CD (@CTOSA)
E3 ED 42 E1 38 2B ED B0 C8 AF 12 C9 END CARDTOSTR;
PROCEDURE STRTOINT(S:ARRAY OF CHAR;VAR OK:BOOLEAN):INTEGER;
HEX CD (@STRTO) CD (@STOI) 18 06 END STRTOINT;
PROCEDURE STRTOCARD(S:ARRAY OF CHAR;VAR OK:BOOLEAN):CARDINAL;
HEX CD (@STRTO) CD (@STOC) D9 CD (@SKIPSP+3) A7 20 10 08 D9 C9
END STRTOCARD;
PROCEDURE STOI;HEX (* @WRINT-0AAH *)
20 12 CD (@STOC+2) EB 21 00 00 A7 ED 52 F8 DD CB 00
86 C9 END STOI;
PROCEDURE STOC;HEX (* @WRINT-98H *)
28 F9 06 05 0E 00 21 00 00 CD (@SKIP0S) 0C 0D 28 EB
D8 54 5D 29 29 19 29 38 E2 D6 30 16 00 5F 19 D9
CD (@GETCH) CD 1B 2D D9 D8 0C 10 E6 C9  END STOC;
PROCEDURE GETCH; (* @WRINT-6CH *)
HEX 78 B1 C8 1A A7 C8 13 0B C9 END GETCH;
 
PROCEDURE SKIPSP; (* @WRINT-63H *)
HEX CD (@GETCH) FE 20 28 F9 C9 END SKIPSP;
 
PROCEDURE SKIP0S; (* @WRINT-5BH *)
HEX CD 1B 2D D8 0C FE 30 C0 D9 CD (@GETCH) D9 18 F1
END SKIP0S;
 
PROCEDURE SUBSTRTO;HEX (* @WRINT-4CH *)
C1 D1 DD E1 D9 E1 4E 23 46 D1 E3 23 D9 E3 E5 E5
E5 D5 E5 D9 E5 A7 ED 42 EB 09 EB 44 4D D9 F2 (@STRTO+11H)
   DD CB 86 00 18 11 END SUBSTRTO;
 
PROCEDURE STRTO;HEX (* @WRINT-25H *)
C1 D1 DD E1 D9 D1 C1 03 C5 C5 C5 D9 D5 DD 36 00
01 C5 D9 CD (@SKIPSP) FE 2D F5 28 02 FE 2B CC (@GETCH)
67 F1 7C D9 C9 END STRTO;
 
 
TYPE TEMPSTR=ARRAY[0..31] OF CHAR;
PROCEDURE WRINT(X:INTEGER;W:CARDINAL);
VAR S:TEMPSTR;
BEGIN
INTTOSTR(X,S,OK);
IF OK THEN WRSTRLEN(S,W) END
END WRINT;
 
PROCEDURE WRCARD(X:CARDINAL;W:CARDINAL);
VAR S:TEMPSTR;
BEGIN
CARDTOSTR(X,S,OK);
IF OK THEN WRSTRLEN(S,W) END
END WRCARD;
 
PROCEDURE WRSTRL0(S:ARRAY OF CHAR; L:CARDINAL);
HEX 3E 30 C3 (@WRSTRLEN+2) END WRSTRL0;
 
PROCEDURE WRCARD0(X:CARDINAL;W:CARDINAL);
VAR S:TEMPSTR;
BEGIN
CARDTOSTR(X,S,OK);
IF OK THEN WRSTRL0(S,W) END
END WRCARD0;
 
PROCEDURE RDCARD():CARDINAL;
VAR S:TEMPSTR;
BEGIN
RDITEM(S);
RETURN STRTOCARD(S,OK)
END RDCARD;
 
PROCEDURE RDINT():INTEGER;
VAR S:TEMPSTR;
BEGIN
RDITEM(S);
RETURN STRTOINT(S,OK)
END RDINT;
 
END NUMIO.
