DEFINITION MODULE R2IO;
PROCEDURE R2TOSTRFIX(X:REAL2;D:CARDINAL;VAR S:ARRAY OF CHAR);
PROCEDURE R2TOSTR(X:REAL2;D:CARDINAL;VAR S:ARRAY OF CHAR);
PROCEDURE STRTOR2(S:ARRAY OF CHAR;VAR OK:BOOLEAN):REAL2;
PROCEDURE SUBSTRTOR2(S:ARRAY OF CHAR;VAR P:CARDINAL;VAR OK1:BOOLEAN):REAL2;
VAR OK:BOOLEAN;
PROCEDURE WRR2FIX(X:REAL2;W,D:CARDINAL);
PROCEDURE WRR2(X:REAL2;W,D:CARDINAL);
PROCEDURE RDR2():REAL2;
END R2IO.
 
IMPLEMENTATION MODULE R2IO;
FROM NUMIO IMPORT WRINT;
FROM STDIO IMPORT RDSTR,WRSTRLEN;
 
PROCEDURE STRTOR2(S:ARRAY OF CHAR;VAR OK:BOOLEAN):REAL2;
HEX CD (@WRINT-25H) CD (@STOR2) 08 C3 (@STRTOCARD+6) END STRTOR2;
PROCEDURE SUBSTRTOR2(S:ARRAY OF CHAR;VAR P:CARDINAL;VAR OK1:BOOLEAN):REAL2;
HEX CD (@WRINT-4CH) CD (@STOR2) 08 C3 (@SUBSTRTOCARD+6) END SUBSTRTOR2;
PROCEDURE STOR2;HEX
F5 08 37 08 CD (@WRINT-5BH) 38 21 D9 06 04 CD (@WRINT-98H+4) 08
38 09 E3 79 CD (@M10P+7) EB E1 0E FF CD (@40) 6C 67
0C CC (@12) E5 A7 D9 08 30 DF 0E 00 D9 FE 2E 20
26 CD (@WRINT-6CH) D9 06 04 CD (@WRINT-98H+6) 08 79 F5 CD (@40)
6C 67 AF 91 CD (@M10P+7) F1 47 38 06 D1 C5 CD (@12)
C1 A7 08 E5 30 DF D9 FE 45 28 04 FE 65 20 15 CD
(@WRINT-25H+13H) CD (@WRINT-0AAH) 08 7D E1 38 0F CD (@M10P+7) F1 C0 7C
EE 80 67 C9 E1 08 D9 30 F4 DD CB 00 86 C9 END STRTOR2;
 
PROCEDURE M10P(X:REAL2;N:INTEGER):REAL2;HEX
D1 C1 E1 E5 C5 D5 79 CB 7F 28 02 3D 2F F5 11 (@MULDIV+18H)
   CD (@MULDIV) F1 0F 0F F5 11 (@MULDIV+1EH) CD (@MULDIV) F1 0F
0F 11 (@MULDIV+24H) END M10P;
PROCEDURE MULDIV;
HEX F5 E6 03 87 4F 0D F1 79 17 D8 E5 EB 06 00 09 5E
23 56 E1 C2 (@20) C3 (@4) 40 03 90 06 F4 09 38
0D 7D 1A D1 27 3A 35 END MULDIV;
 
PROCEDURE TOILG;
HEX DD E1 C1 D9 E1 C1 D1 D9 E1 11 00 00 D5 D5 D5 16
30 D5 C5 D9 C5 E5 D9 DD E5 DD 21 0A 00 DD 39 7C
87 E2 (@TOILG+27H) DD 34 FE 4F CB 2F 67 E5 7D FE 10 30
01 0D FE 70 38 01 0C 79 CB 7F 28 02 ED 44 5F 21
00 4D 55 CD (@2+7) 7C CB 3F CB 79 28 01 2F D9 4F
D9 E1 C9 END TOILG;
 
PROCEDURE NORMLZ;
HEX ED 44 CD (@M10P+9) 44 04 26 01 18 01 29 10 FD 4C 3E
30 84 FE 3A 38 05 DD 34 FF D6 0A DD 77 00 D9 C9 END NORMLZ;
 
PROCEDURE SQOZE;
HEX FE 04 38 02 3E 04 DD E5 47 04 18 0E 5D 26 06 16
00 29 29 19 29 DD 74 01 DD 23 10 F0 DD E1 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 R2TOSTRFIX(X:REAL2;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 (@R2FIXS+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 R2TOSTRFIX;
 
PROCEDURE R2TOSTR(X:REAL2;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 R2TOSTR;
 
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 WRR2FIX(X:REAL2;W,D:CARDINAL);
VAR S:TEMPSTR;
BEGIN
R2FIXS(X,D,S);
WRSTRLEN(S,W)
END WRR2FIX;
 
PROCEDURE WRR2(X:REAL2;W,D:CARDINAL);
VAR S:TEMPSTR;
BEGIN
R2TOSTR(X,D,S);
WRSTRLEN(S,W)
END WRR2;
 
PROCEDURE RDR2():REAL2;
VAR S:TEMPSTR;
BEGIN
RDSTR(S);
RETURN STRTOR2(S,OK)
END RDR2;
 
END R2IO.
