From ea590431d8ff67e22d8cbfedc0362b08c292e53d Mon Sep 17 00:00:00 2001 From: ceriel Date: Fri, 19 Jun 1987 09:25:08 +0000 Subject: [PATCH] fixes --- lang/m2/libm2/InOut.mod | 13 ++++++++----- lang/m2/libm2/RealConver.mod | 12 +++++++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lang/m2/libm2/InOut.mod b/lang/m2/libm2/InOut.mod index 329190c0e..beaa0372c 100644 --- a/lang/m2/libm2/InOut.mod +++ b/lang/m2/libm2/InOut.mod @@ -313,14 +313,17 @@ IMPLEMENTATION MODULE InOut ; Read(ch); UNTIL (ch # ' ') AND (ch # TAB); UnRead(ch); - LOOP + REPEAT Read(ch); termCH := ch; - IF (NOT Done) OR (ch <= " ") THEN s[i] := 0C; RETURN END; - s[i] := ch; + IF i <= HIGH(s) THEN + s[i] := ch; + IF (NOT Done) OR (ch <= " ") THEN + s[i] := 0C; + END; + END; INC(i); - IF i > HIGH(s) THEN DEC(i); END; - END; + UNTIL (NOT Done) OR (ch <= " "); END ReadString; PROCEDURE XReadString(VAR s : ARRAY OF CHAR); diff --git a/lang/m2/libm2/RealConver.mod b/lang/m2/libm2/RealConver.mod index 9af9b9205..8c0bf2c58 100644 --- a/lang/m2/libm2/RealConver.mod +++ b/lang/m2/libm2/RealConver.mod @@ -250,7 +250,7 @@ IMPLEMENTATION MODULE RealConversions; ch := str[iB]; INC(iB); IF NOT (ch IN SETOFCHAR{'0'..'9'}) THEN ok := FALSE; RETURN END; REPEAT - dig(ORD(ch)); + IF r>BIG THEN INC(pow10) ELSE r:= 10.0D*r+FLOATD(ORD(ch)-ORD('0')) END; IF iB <= HIGH(str) THEN ch := str[iB]; INC(iB); END; @@ -259,8 +259,10 @@ IMPLEMENTATION MODULE RealConversions; ch := str[iB]; INC(iB); IF NOT (ch IN SETOFCHAR{'0'..'9'}) THEN ok := FALSE; RETURN END; REPEAT - dig(ORD(ch)); - DEC(pow10); + IF r < BIG THEN + r := 10.0D * r + FLOATD(ORD(ch)-ORD('0')); + DEC(pow10); + END; IF iB <= HIGH(str) THEN ch := str[iB]; INC(iB); END; @@ -297,6 +299,10 @@ IMPLEMENTATION MODULE RealConversions; IF pow10 < 0 THEN i := -pow10; ELSE i := pow10; END; e := 1.0D; DEC(i); + WHILE i >= 10 DO + e := e * 10000000000.0D; + DEC(i,10); + END; WHILE i >= 0 DO e := e * 10.0D; DEC(i) -- 2.34.1