DEFINITION MODULE R5IO;
PROCEDURE R5TOSTRFIX(X:REAL5;D:CARDINAL;VAR S:ARRAY OF CHAR);
PROCEDURE R5TOSTR(X:REAL5;D:CARDINAL;VAR S:ARRAY OF CHAR);
PROCEDURE STRTOR5(S:ARRAY OF CHAR;VAR OK:BOOLEAN):REAL5;
PROCEDURE SUBSTRTOR5(S:ARRAY OF CHAR;VAR P:CARDINAL;VAR OK:BOOLEAN):REAL5;
PROCEDURE WRR5FIX(X:REAL5;W,D:CARDINAL);
PROCEDURE WRR5(X:REAL5;W,D:CARDINAL);
VAR OK:BOOLEAN;
PROCEDURE RDR5():REAL5;
END R5IO.
 
IMPLEMENTATION MODULE R5IO;
FROM NUMIO IMPORT WRINT,STRTOCARD,SUBSTRTOCARD;
FROM STDIO IMPORT RDSTR,WRSTRLEN;
 
PROCEDURE STRTOR5(S:ARRAY OF CHAR;VAR OK:BOOLEAN):REAL5;
HEX CD (@WRINT-25H) CD (@STOR5) 08 C3 (@STRTOCARD+6) END STRTOR5;
 
PROCEDURE SUBSTRTOR5(S:ARRAY OF CHAR;VAR P:CARDINAL;VAR OK:BOOLEAN):REAL5;
HEX CD (@WRINT-4CH) CD (@STOR5) 08 C3 (@SUBSTRTOCARD+6) END SUBSTRTOR5;
 
PROCEDURE STOR5;HEX
F5 08 37 08 CD (@WRINT-5CH) 38 22 06 04 CD (@WRINT-98H+4) 08 D9
C5 D5 D9 F5 E5 79 D4 4F 2D E1 CD (@61) F1 38 03
EF 0F 38 A7 D9 D1 C1 D9 08 30 DE 0E 00 D9 FE 2E
20 28 CD (@WRINT-6CH) D9 06 04 CD (@WRINT-98H+6) 08 D9 C5 D5 D9
C5 F5 C5 CD (@61) C1 AF 91 CD 4F 2D F1 38 03 EF
0F 38 C1 D9 D1 C1 A7 08 30 DB FE 65 28 04 FE 45
20 13 CD (@WRINT-25H+13H) CD (@WRINT-0AAH) 08 7D 38 0D CD 4F 2D F1
C0 EF 1B 38 C9 08 D9 30 F6 CD EA 1C F1 DD CB 00
86 C9 END STOR5;
 
PROCEDURE TOILG;
HEX 21 0A 00 39 CD B4 33 DD E1 C1 D9 E1 C1 D1 D9 F9
21 00 00 E5 E5 E5 E5 2E 30 E5 E5 33 C5 D9 C5 E5
D9 DD E5 DD 21 0A 00 DD 39 21 FB FF 19 7E 23 CB
7E CB FE 28 03 DD 34 FE D6 81 47 87 4F 7E FE 88
30 02 0D 05 FE B8 38 01 0C 79 21 00 4D CB 78 28
04 ED 44 28 0A 04 EA (@TOILG+5FH) 05 5F 55 CD (@2+7) 7C
CB 3F CB 79 28 01 2F D9 4F D9 C9 END TOILG;
 
PROCEDURE NORMLZ;
HEX ED 44 D9 D5 C5 D9 CD 4F 2D CD F1 2B 6A 63 C5 D9
D1 6A 63 D9 D6 7F 47 AF 18 06 D9 29 D9 ED 6A 8F
10 F8 4F C6 30 FE 3A 38 05 DD 34 FF D6 0A DD 77
00 D9 C1 D1 C9 END NORMLZ;
 
PROCEDURE SQOZE;
HEX D9 D5 D9 FE 09 38 02 3E 09 DD E5 47 04 18 23 5D
54 D9 5D 54 AF 29 D9 ED 6A 8F D9 29 D9 ED 6A 8F
D9 19 D9 ED 5A CE 18 D9 29 D9 ED 6A 8F DD 77 01
DD 23 10 DB DD E1 D9 D1 D9 C9 END SQOZE;
 
PROCEDURE GET;
HEX A7 C8 47 DD 7E 00 A7 20 04 3E 30 28 02 DD 23 0D
F8 77 23 10 EE C9 END GET;
 
PROCEDURE R5TOSTRFIX(X:REAL5;D:CARDINAL;VAR S:ARRAY OF CHAR);
HEX CD (@TOILG) 47 D9 83 47 D9 78 CD (@NORMLZ) 78 D9 CB 7F
28 13 3C 20 05 79 FE 05 30 0E E1 C1 D9 7B D9 CD
(@ZPZ) C3 (@PUT0) CD (@SQOZE) E1 C1 DD CB FE 46 1E 2D
C4 (@PUT1) DD 5E FF D9 79 D9 3C 28 15 FA (@R5TOSTRFIX+97) 08
CB 43 C4 (@PUT1) 08 CD (@GET) CD (@PUT0+4) D9 7B D9 18
0A CD (@PUT1) CD (@PUT0+4) D9 78 D9 3C CD (@GET) C3 (@PUT0)
   2F CD (@ZPZ) DD 5E FF CD (@PUT1) 18 EA END R5TOSTRFIX;
 
PROCEDURE R5TOSTR(X:REAL5;D:CARDINAL;VAR S:ARRAY OF CHAR);
HEX CD (@TOILG) CD (@NORMLZ) 3E FF 8B D9 CD (@SQOZE) E1 C1 DD
CB FE 46 1E 20 28 02 1E 2D CD (@PUT1) DD 5E FF CB
43 28 08 CD (@PUT1) D9 0C D9 18 05 3E 01 CD (@GET)
CD (@PUT0+4) D9 7B D9 CD (@GET) 1E 45 CD (@PUT1)
D9 79 D9 1E 2B CB 7F 28 04 1E 2D ED 44 F5 CD (@PUT1)
   F1 C3 (@CTOS0+9) END R5TOSTR;
 
PROCEDURE ZPZ(N:CARDINAL);
HEX F5 1E 30 CD (@PUT1) CD (@PUT0+4) F1 1E 30 C3 (@PUT1+2)
END ZPZ; 
 
PROCEDURE CTOS0(X:SHORTCARD;VAR S:ARRAY OF CHAR);
HEX D1 C1 E1 3B F1 3B D5 D5 D5 1E 2F 1C D6 0A 30 FB
C6 3A F5 CD (@PUT1) F1 5F CD (@PUT1) 1E 00 CD (@PUT1) END CTOS0;
PROCEDURE PUT0;
HEX 1E 00 18 02 1E 2E END PUT0;
PROCEDURE PUT1;
HEX 3E 01 A7 C8 47 0D F8 73 23 10 FA C9 END PUT1;
 
TYPE TEMPSTR=ARRAY[0..31] OF CHAR;
 
PROCEDURE WRR5FIX(X:REAL5;W,D:CARDINAL);
VAR S:TEMPSTR;
BEGIN
R5TOSTRFIX(X,D,S);
WRSTRLEN(S,W)
END WRR5FIX;
 
PROCEDURE WRR5(X:REAL5;W,D:CARDINAL);
VAR S:TEMPSTR;
BEGIN
R5TOSTR(X,D,S);
WRSTRLEN(S,W)
END WRR5;
 
PROCEDURE RDR5():REAL5;
VAR S:TEMPSTR;
BEGIN
RDSTR(S);
RETURN STRTOR5(S,OK)
END RDR5;
 
END R5IO.
