فهرست منبع

Out RealFix and Real fixed

Arthur Yefimov 3 سال پیش
والد
کامیت
0c491eb442
1فایلهای تغییر یافته به همراه13 افزوده شده و 11 حذف شده
  1. 13 11
      src/Out.Mod

+ 13 - 11
src/Out.Mod

@@ -113,7 +113,7 @@ PROCEDURE Int*(x, n: INTEGER);
 VAR i: INTEGER; x0: INTEGER;
   a: ARRAY 10 OF CHAR;
 BEGIN
-  IF SYSTEM.ROT(*!FIXME ROR*)(x, 31) = 1 THEN
+  IF SYSTEM.ROT(*!FIXME ROR*)(x, -31) = 1 THEN
     Spaces(n - 11); String('-2147483648')
   ELSE i := 0;
     IF x < 0 THEN DEC(n); x0 := -x ELSE x0 := x END;
@@ -178,24 +178,26 @@ END Real;
 
 PROCEDURE RealFix*(x: REAL; n, k: INTEGER);
 VAR i, m: INTEGER; neg: BOOLEAN;
-  d: ARRAY 12 OF CHAR;
+  d: ARRAY 80 OF CHAR;
 BEGIN
-  IF x = 0.0 THEN DEC(n);
-    WHILE n # 0 DO Char(' '); DEC(n) END;
-    Char('0')
+  IF x = 0.0 THEN Spaces(n - 1); Char('0')
   ELSE
     IF x < 0.0 THEN x := -x; neg := TRUE ELSE neg := FALSE END;
     IF k > 7 THEN k := 7 END;
     x := Ten(k) * x; m := SHORT(ENTIER(x + 0.5));
     i := 0;
     REPEAT d[i] := CHR(m MOD 10 + ORD('0')); m := m DIV 10; INC(i) UNTIL m = 0;
-    Char(' ');
-    WHILE n > i + 3 DO Char(' '); DEC(n) END;
-    IF neg THEN Char('-'); DEC(n) ELSE Char(' ') END;
+    (*Char('['); Int(n, 0); Char('|'); Int(i, 0); Char(']');*)
+    IF neg THEN DEC(n) END;
+    IF k > 0 THEN DEC(n) END;
+    WHILE n > i DO Char(' '); DEC(n) END;
+    IF neg THEN Char('-') END;
     WHILE i > k DO DEC(i); Char(d[i]) END;
-    Char('.');
-    WHILE k > i DO DEC(k); Char('0') END;
-    WHILE i > 0 DO DEC(i); Char(d[i]) END
+    IF (k > i) OR (i > 0) THEN
+      Char('.');
+      WHILE k > i DO DEC(k); Char('0') END;
+      WHILE i > 0 DO DEC(i); Char(d[i]) END
+    END
   END
 END RealFix;