Browse Source

Fix Linux, fix FLT in Examples

Arthur Yefimov 1 month ago
parent
commit
56f8ad7ddd

+ 9 - 9
Programs/Examples/Bitmaps.Mod

@@ -23,26 +23,26 @@ BEGIN
 
     G.GetScreenSize(w, h);
     DEC(w, b.w); DEC(h, b.h);
-    x := R.Uniform() * w;
-    y := R.Uniform() * h;
+    x := R.Uniform() * FLT(w);
+    y := R.Uniform() * FLT(h);
     vx := 0.0; vy := 0.0;
     REPEAT
       x := x + vx; y := y + vy;
-      IF x < 0 THEN vx := -vx; x := 0.0
-      ELSIF x >= w THEN vx := -vx; x := FLT(w)
+      IF x < 0.0 THEN vx := -vx; x := 0.0
+      ELSIF x >= FLT(w) THEN vx := -vx; x := FLT(w)
       END;
-      IF y < 0 THEN vy := -vy; y := 0.0
-      ELSIF y >= h THEN vy := -vy; y := FLT(h)
+      IF y < 0.0 THEN vy := -vy; y := 0.0
+      ELSIF y >= FLT(h) THEN vy := -vy; y := FLT(h)
       END;
-      vx := vx + (R.Uniform() - 0.5) * maxSpeed / 10;
-      vy := vy + (R.Uniform() - 0.5) * maxSpeed / 10;
+      vx := vx + (R.Uniform() - 0.5) * maxSpeed / 10.0;
+      vy := vy + (R.Uniform() - 0.5) * maxSpeed / 10.0;
       r := vx * vx + vy * vy;
       IF r > maxSpeed2 THEN
         r := maxSpeed / M.sqrt(r);
         vx := vx * r; vy := vy * r
       END;
       (*G.ClearScreen;*)
-      G.MakeCol(c, Val(FLOOR((x + y) / 4)), Val(FLOOR((x + y + 100) / 2)), 0);
+      G.MakeCol(c, Val(FLOOR((x + y) / 4.0)), Val(FLOOR((x + y + 100.0) / 2.0)), 0);
       (*G.DrawTintedPart(b, c, 0, 0, b.w, b.h, FLOOR(x), FLOOR(y));*)
       G.Draw(b, FLOOR(x), FLOOR(y));
       G.Flip;

+ 2 - 2
Programs/Examples/Fire.Mod

@@ -128,7 +128,7 @@ BEGIN
     IF intro # 0 THEN
       DEC(intro);
       Line(2, h - 1, w - 3, h - 1,
-        FLOOR((1 - M.sin(intro * (M.pi / 2) / introLen)) * 63))
+        FLOOR((1.0 - M.sin(FLT(intro) * (M.pi / 2.0) / FLT(introLen))) * 63.0))
     ELSE
       Line(2, h - 1, w - 3, h - 1, heat)
     END;
@@ -184,4 +184,4 @@ END Do;
 
 BEGIN
   Do
-END Fire.
+END Fire.

+ 13 - 13
Programs/Examples/Intersection.Mod

@@ -72,13 +72,13 @@ BEGIN
     G.MakeCol(c, 255, 0, 255);
     G.FillRect(FLOOR(P2.x) - 3, FLOOR(P2.y) - 3, FLOOR(P2.x) + 3, FLOOR(P2.y) + 3, c);
 
-    Int.Str(FLOOR(t1 * 100), ZZ);
+    Int.Str(FLOOR(t1 * 100.0), ZZ);
     G.DrawString(ZZ, 20, H - 50 + YY, f, c);
-    Int.Str(FLOOR(t2 * 100), ZZ);
+    Int.Str(FLOOR(t2 * 100.0), ZZ);
     G.DrawString(ZZ, 150, H - 50 + YY, f, c);
     INC(YY, 16);
 
-    IF (t1 >= 0) & (t1 <= 1) THEN
+    IF (t1 >= 0.0) & (t1 <= 1.0) THEN
       IF t1 < t2 THEN
         E.x := A.s.x + A.v.x;
         E.y := A.s.y + A.v.y;
@@ -90,7 +90,7 @@ BEGIN
         A.v.y := P1.y - A.s.y
       END
     END;
-    IF (t2 >= 0) & (t2 <= 1) THEN
+    IF (t2 >= 0.0) & (t2 <= 1.0) THEN
       IF t1 < t2 THEN
         A.v.x := P2.x - A.s.x;
         A.v.y := P2.y - A.s.y
@@ -114,14 +114,14 @@ BEGIN
   YY := 0;
   G.ClearScreen;
 
-  A.s.x := Random.Uniform() * W;
-  A.s.y := Random.Uniform() * H;
-  B.s.x := Random.Uniform() * W;
-  B.s.y := Random.Uniform() * H;
-  A.v.x := Random.Uniform() * W - A.s.x;
-  A.v.y := Random.Uniform() * H - A.s.y;
-  B.v.x := Random.Uniform() * W - B.s.x;
-  B.v.y := Random.Uniform() * H - B.s.y;
+  A.s.x := Random.Uniform() * FLT(W);
+  A.s.y := Random.Uniform() * FLT(H);
+  B.s.x := Random.Uniform() * FLT(W);
+  B.s.y := Random.Uniform() * FLT(H);
+  A.v.x := Random.Uniform() * FLT(W) - A.s.x;
+  A.v.y := Random.Uniform() * FLT(H) - A.s.y;
+  B.v.x := Random.Uniform() * FLT(W) - B.s.x;
+  B.v.y := Random.Uniform() * FLT(H) - B.s.y;
 
   G.MakeCol(c, 155, 0, 0);
   G.ThickLine(FLOOR(A.s.x), FLOOR(A.s.y), FLOOR(A.s.x + A.v.x), FLOOR(A.s.y + A.v.y), c, 7);
@@ -168,4 +168,4 @@ END Do2;
 
 BEGIN
   Do2
-END Intersection.
+END Intersection.

+ 3 - 3
Programs/Examples/Mandelbrot.Mod

@@ -8,9 +8,9 @@ VAR c: G.Color;
   re, im, re2: REAL;
 BEGIN re := x; im := y; i := 0;
   REPEAT re2 := re * re - im * im;
-    im := 2 * re * im; re := re2;
+    im := 2.0 * re * im; re := re2;
     re := re + x; im := im + y; INC(i)
-  UNTIL (i = iter) OR (re * re + im * im > 4);
+  UNTIL (i = iter) OR (re * re + im * im > 4.0);
   IF i # iter THEN i := i * 5;
     IF i > 255 THEN i := 255 END;
     G.MakeCol(c, i, 0, 0);
@@ -24,7 +24,7 @@ VAR x, y, W, H: INTEGER;
 BEGIN G.Settings(0, 0, {G.fullscreen});
   G.Init; G.GetScreenSize(W, H); G.ClearScreen; G.Flip;
   y0 := 1.0; y1 := -1.0;
-  x1 := 2.0 * W / H / 3.0; x0 := -x1 * 2.0;
+  x1 := 2.0 * FLT(W) / FLT(H) / 3.0; x0 := -x1 * 2.0;
   FOR y := 0 TO H - 1 DO
     FOR x := 0 TO W - 1 DO
       Go(x, y, x0 + x / (W - 1) * (x1 - x0),

+ 6 - 6
Programs/Examples/Mandelbrot2.Mod

@@ -10,9 +10,9 @@ VAR col, i: INTEGER;
   re, im, re2: REAL;
 BEGIN re := x; im := y; i := 0;
   REPEAT re2 := re * re - im * im;
-    im := 2 * re * im; re := re2;
+    im := 2.0 * re * im; re := re2;
     re := re + x; im := im + y; INC(i)
-  UNTIL (i = iter) OR (re * re + im * im > 4);
+  UNTIL (i = iter) OR (re * re + im * im > 4.0);
   m[sy, sx] := i
 END Go;
 
@@ -20,12 +20,12 @@ PROCEDURE Draw;
 VAR i, x, y: INTEGER;
   shine: REAL;
   c: G.Color;
-BEGIN shine := (1 - M.cos(angle)) * 1;
+BEGIN shine := 1.0 - M.cos(angle);
   FOR y := 0 TO H - 1 DO
     FOR x := 0 TO W - 1 DO
       i := m[y, x];
       IF i # iter THEN
-        i := FLOOR(i * shine);
+        i := FLOOR(FLT(i) * shine);
         IF i > 255 THEN i := 255 END;
         CASE col OF
           0: G.MakeCol(c, i, 0, 0)
@@ -47,7 +47,7 @@ VAR x, y: INTEGER;
   x0, y0, x1, y1: REAL;
 BEGIN
   x0 := cx - r; x1 := cx + r;
-  y0 := cy + r * H / W; y1 := 2 * cy - y0;
+  y0 := cy + r * FLT(H) / FLT(W); y1 := 2.0 * cy - y0;
   y := 0;
   WHILE (y < H) & ~G.KeyPressed() DO
     FOR x := 0 TO W - 1 DO
@@ -70,7 +70,7 @@ BEGIN G.Settings(320, 200, {G.exact});
       angle := 0.0;
       col := (col + 1) MOD 7;
       G.ClearScreen; G.Flip;
-      r := r / 2;
+      r := r / 2.0;
       Set(x, y, r)
     ELSE G.Flip; G.Delay(10)
     END

+ 12 - 12
Programs/Examples/Rocket2.Mod

@@ -24,31 +24,31 @@ BEGIN
     Out.String('Could not load rocket.png'); Out.Ln; ASSERT(FALSE)
   END;
   FOR i := 0 TO N - 1 DO
-    x[i] := w * Random.Uniform();
-    y[i] := h * Random.Uniform();
-    vx[i] := 0.0; vy[i] := -Random.Uniform() * 5 - 0.3
+    x[i] := FLT(w) * Random.Uniform();
+    y[i] := FLT(h) * Random.Uniform();
+    vx[i] := 0.0; vy[i] := -Random.Uniform() * 5.0 - 0.3
   END;
   t := 0.0;
   REPEAT
-    G.MakeCol(c, 10, 30, 60 + FLOOR(60 * M.cos(t / 40)));
+    G.MakeCol(c, 10, 30, 60 + FLOOR(60.0 * M.cos(t / 40.0)));
     G.ClearToColor(c);
     pw := FLOOR(h * b.w / b.h * (0.65 + 0.05 * M.sin(t)));
-    ph := FLOOR(h * (0.65 + 0.05 * M.cos(t)));
+    ph := FLOOR(FLT(h) * (0.65 + 0.05 * M.cos(t)));
     G.DrawEx(b, 0, 0, b.w, b.h,
       (w - pw) DIV 2,
-      (h - ph) DIV 2 - FLOOR(h * 0.2 * M.sin(t / 40)),
+      (h - ph) DIV 2 - FLOOR(FLT(h) * 0.2 * M.sin(t / 40.0)),
       pw, ph, {});
     FOR i := 0 TO N - 1 DO
       G.Draw(b, FLOOR(x[i]), FLOOR(y[i]));
       x[i] := x[i] + vx[i]; y[i] := y[i] + vy[i];
-      IF x[i] < -b.w THEN x[i] := x[i] + w + b.w
-      ELSIF x[i] > w THEN x[i] := x[i] - w - b.w
+      IF x[i] < -FLT(b.w) THEN x[i] := x[i] + FLT(w + b.w)
+      ELSIF x[i] > FLT(w) THEN x[i] := x[i] - FLT(w - b.w)
       END;
-      IF y[i] < -b.h THEN y[i] := y[i] + h + b.h
-      ELSIF y[i] > h THEN y[i] := y[i] - h - b.h
+      IF y[i] < -FLT(b.h) THEN y[i] := y[i] + FLT(h + b.h)
+      ELSIF y[i] > FLT(h) THEN y[i] := y[i] - FLT(h - b.h)
       END;
-      vx[i] := vx[i] + (Random.Uniform() * 2 - 1) / 50;
-      vy[i] := vy[i] + (Random.Uniform() * 2 - 1) / 50
+      vx[i] := vx[i] + (Random.Uniform() * 2.0 - 1.0) / 50.0;
+      vy[i] := vy[i] + (Random.Uniform() * 2.0 - 1.0) / 50.0
     END;
     G.Flip;
     G.Delay(20);

+ 1 - 1
src/make.sh

@@ -77,7 +77,7 @@ $OFR -Cwm FreeOberon.Mod &&
 
 $OFR -7wm Fob.Mod &&
 
-../Data/bin/patch.sh FreeOberon.c
+{ [ "$THISOS" = "macOS" ] && ../Data/bin/patch.sh FreeOberon.c; } &&
 
 
 $CCFULL -c Utf8.c &&