fixes
authorceriel <none@none>
Fri, 19 Jun 1987 09:25:08 +0000 (09:25 +0000)
committerceriel <none@none>
Fri, 19 Jun 1987 09:25:08 +0000 (09:25 +0000)
lang/m2/libm2/InOut.mod
lang/m2/libm2/RealConver.mod

index 329190c..beaa037 100644 (file)
@@ -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);
index 9af9b92..8c0bf2c 100644 (file)
@@ -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)