Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 8 Sep 2024 12:11:45 +0000 (15:11 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 8 Sep 2024 12:11:45 +0000 (15:11 +0300)
Math/Lottery/loto.bas
Simulation/Explosion/explode.bas

index 629b9c5..b34eb94 100755 (executable)
@@ -1,23 +1,14 @@
-CHDIR ".\qbasicapps\math\loto"\r
-\r
-\r
-' Lottery analyzer\r
-' made by Svjatoslav Agejenko\r
-' in 2001\r
-' homepage: svjatoslav.eu\r
-' email:       svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB ennus ()\r
-DECLARE SUB menu ()\r
-DECLARE SUB gr1 ()\r
-DECLARE SUB gr2 ()\r
-DECLARE SUB getson (a$)\r
-DECLARE SUB loaddata ()\r
-DECLARE SUB wai ()\r
-DECLARE SUB gr3 ()\r
+' Program to analyze lottery winning numbers.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2001, Initial version\r
+' 2024.09, Improved program readability using AI\r
+\r
 DEFINT A-Y\r
 \r
-DECLARE SUB start ()\r
 DIM SHARED mitus, sona$(1 TO 50)\r
 DIM SHARED num(1 TO 500, 1 TO 7)\r
 DIM SHARED mitun\r
@@ -28,188 +19,216 @@ loaddata
 menu\r
 \r
 SUB ennus\r
-DIM buf(1 TO 48)\r
-PRINT "viimase 10 loosimise ajal:"\r
-\r
-FOR a = mitun - 10 TO mitun\r
-FOR b = 2 TO 7\r
-buf(num(a, b)) = buf(num(a, b)) + 1\r
-NEXT b\r
-NEXT a\r
-\r
-FOR b = 1 TO 6\r
-c = 0\r
-FOR a = 1 TO 48\r
-IF buf(a) > c THEN c = buf(a): d = a\r
-NEXT a\r
-PRINT d; " esines: "; c; " korda"\r
-buf(d) = 0\r
-NEXT b\r
-\r
-PRINT "--------------------------------------"\r
-\r
-FOR a = 1 TO mitun\r
-FOR b = 2 TO 7\r
-buf(num(a, b)) = a\r
-NEXT b\r
-NEXT a\r
-\r
-FOR b = 1 TO 6\r
-c = 30000\r
-FOR a = 1 TO 48\r
-IF buf(a) < c THEN c = buf(a): d = a\r
-NEXT a\r
-PRINT d; " esines viimati: "; mitun - c; " loosimist tagasi"\r
-buf(d) = 30000\r
-NEXT b\r
-\r
+    DIM buf(1 TO 48)\r
+    PRINT "During the last 10 draws:"\r
+\r
+    ' Count occurrences of each number in the last 10 draws\r
+    FOR a = mitun - 10 TO mitun\r
+        FOR b = 2 TO 7\r
+            buf(num(a, b)) = buf(num(a, b)) + 1\r
+        NEXT b\r
+    NEXT a\r
+\r
+    ' Print the most frequent numbers\r
+    FOR b = 1 TO 6\r
+        c = 0\r
+        FOR a = 1 TO 48\r
+            IF buf(a) > c THEN c = buf(a): d = a\r
+        NEXT a\r
+        PRINT d; " appeared: "; c; " times"\r
+        buf(d) = 0\r
+    NEXT b\r
+\r
+    PRINT "--------------------------------------"\r
+\r
+    ' Find when each number last appeared\r
+    FOR a = 1 TO mitun\r
+        FOR b = 2 TO 7\r
+            buf(num(a, b)) = a\r
+        NEXT b\r
+    NEXT a\r
+\r
+    FOR b = 1 TO 6\r
+        c = 30000\r
+        FOR a = 1 TO 48\r
+            IF buf(a) < c THEN c = buf(a): d = a\r
+        NEXT a\r
+        PRINT d; " appeared last time: "; mitun - c; " draws ago"\r
+        buf(d) = 30000\r
+    NEXT b\r
 \r
 END SUB\r
 \r
 SUB getson (a$)\r
-mitus = 0\r
-\r
-d = 1\r
-FOR b = 1 TO LEN(a$)\r
-c$ = RIGHT$(LEFT$(a$, b), 1)\r
-IF c$ = " " THEN\r
-d = 1\r
-ELSE\r
-IF d = 1 THEN\r
-mitus = mitus + 1\r
-sona$(mitus) = ""\r
-d = 0\r
-END IF\r
-sona$(mitus) = sona$(mitus) + c$\r
-END IF\r
-NEXT b\r
+    mitus = 0\r
+\r
+    d = 1\r
+    FOR b = 1 TO LEN(a$)\r
+        c$ = RIGHT$(LEFT$(a$, b), 1)\r
+        IF c$ = " " THEN\r
+            d = 1\r
+        ELSE\r
+            IF d = 1 THEN\r
+                mitus = mitus + 1\r
+                sona$(mitus) = ""\r
+                d = 0\r
+            END IF\r
+            sona$(mitus) = sona$(mitus) + c$\r
+        END IF\r
+    NEXT b\r
 \r
 END SUB\r
 \r
 SUB gr1\r
-CLS\r
-LINE (0, 0)-(600, 0), 1\r
-LINE (0, 49)-(600, 49), 1\r
-LINE (0, 50)-(600, 50), 1\r
-LINE (0, 48 * 6 + 51)-(600, 48 * 6 + 51), 1\r
-FOR a = 1 TO mitun\r
-c = 0\r
-FOR b = 2 TO 7\r
-c = c + num(a, b)\r
-PSET (a, num(a, b)), 15\r
-NEXT b\r
-LINE (a, c + 50)-(a, 24 * 6 + 50), 10\r
-NEXT a\r
-wai\r
+    CLS\r
+    LINE (0, 0)-(600, 0), 1\r
+    LINE (0, 49)-(600, 49), 1\r
+    LINE (0, 50)-(600, 50), 1\r
+    LINE (0, 48 * 6 + 51)-(600, 48 * 6 + 51), 1\r
+\r
+    ' Draw vertical lines for each draw and plot numbers\r
+    FOR a = 1 TO mitun\r
+        c = 0\r
+        FOR b = 2 TO 7\r
+            c = c + num(a, b)\r
+            PSET (a, num(a, b)), 15\r
+        NEXT b\r
+        LINE (a, c + 50)-(a, 24 * 6 + 50), 10\r
+    NEXT a\r
+\r
+    wai\r
 END SUB\r
 \r
 SUB gr2\r
-CLS\r
-DIM buf(1 TO 20000)\r
-\r
-FOR x = 1 TO mitun - 1\r
-FOR a = 2 TO 7\r
-LINE (600, num(x, a))-(610, num(x + 1, a)), 3\r
-NEXT a\r
-LINE (600, 1)-(600, 48), 1\r
-SOUND 0, 2\r
-GET (10, 1)-(610, 50), buf(1)\r
-PUT (1, 1), buf(1), PSET\r
-LINE (601, 1)-(610, 50), 0, BF\r
-IF INKEY$ <> "" GOTO 5\r
-NEXT x\r
-wai\r
-5\r
+    CLS\r
+    DIM buf(1 TO 20000)\r
+\r
+    ' Draw lines connecting consecutive lottery numbers\r
+    FOR x = 1 TO mitun - 1\r
+        FOR a = 2 TO 7\r
+            LINE (600, num(x, a))-(610, num(x + 1, a)), 3\r
+        NEXT a\r
+        LINE (600, 1)-(600, 48), 1\r
+        SOUND 0, 2\r
+\r
+        ' Scroll the screen to the left\r
+        GET (10, 1)-(610, 50), buf(1)\r
+        PUT (1, 1), buf(1), PSET\r
+        LINE (601, 1)-(610, 50), 0, BF\r
+\r
+        IF INKEY$ <> "" GOTO 5\r
+    NEXT x\r
+\r
+    wai\r
+    5\r
 END SUB\r
 \r
 SUB gr3\r
-CLS\r
-PAINT (1, 1), 3\r
-DIM buf(1 TO 48)\r
-DIM buf2(1 TO 20000)\r
-c = 0\r
-\r
-FOR a = 1 TO mitun\r
-FOR b = 1 TO 48\r
-buf(b) = 0\r
-NEXT b\r
-\r
-FOR b = 2 TO 7\r
-buf(num(a, b)) = 10\r
-NEXT b\r
-\r
-FOR b = 1 TO 48\r
-c = c + 1\r
-buf2(c) = buf(b)\r
-NEXT b\r
-NEXT a\r
-\r
-FOR e = 2 TO 400\r
-d = 0\r
-FOR x = 1 TO 639\r
-FOR y = 1 TO e\r
-d = d + 1\r
-IF d > c THEN GOTO 4\r
-PSET (x, y), buf2(d)\r
-NEXT y\r
-NEXT x\r
-4\r
-LINE (x + 1, 1)-(x + 1, e), 14\r
-LINE (x + 1, y)-(x + 4, y), 12\r
-IF INKEY$ <> "" THEN GOTO 6\r
-NEXT e\r
-wai\r
-6\r
+    CLS\r
+    PAINT (1, 1), 3\r
+    DIM buf(1 TO 48)\r
+    DIM buf2(1 TO 20000)\r
+\r
+    c = 0\r
+\r
+    ' Prepare data for drawing\r
+    FOR a = 1 TO mitun\r
+        FOR b = 1 TO 48\r
+            buf(b) = 0\r
+        NEXT b\r
+\r
+        FOR b = 2 TO 7\r
+            buf(num(a, b)) = 10\r
+        NEXT b\r
+\r
+        FOR b = 1 TO 48\r
+            c = c + 1\r
+            buf2(c) = buf(b)\r
+        NEXT b\r
+    NEXT a\r
+\r
+    ' Draw the graph\r
+    FOR e = 2 TO 400\r
+        d = 0\r
+        FOR x = 1 TO 639\r
+            FOR y = 1 TO e\r
+                d = d + 1\r
+                IF d > c THEN GOTO 4\r
+                PSET (x, y), buf2(d)\r
+            NEXT y\r
+        NEXT x\r
+        4\r
+\r
+        LINE (x + 1, 1)-(x + 1, e), 14\r
+        LINE (x + 1, y)-(x + 4, y), 12\r
+\r
+        IF INKEY$ <> "" THEN GOTO 6\r
+    NEXT e\r
+\r
+    wai\r
+    6\r
 END SUB\r
 \r
 SUB loaddata\r
-PRINT "�ks hetk ...."\r
-\r
-mitun = 0\r
-OPEN "loos.txt" FOR INPUT AS #1\r
-1\r
-IF EOF(1) <> 0 THEN GOTO 2\r
-LINE INPUT #1, a$\r
-getson a$\r
-mitun = mitun + 1\r
-FOR b = 1 TO 7\r
-num(mitun, b) = VAL(sona$(b))\r
-NEXT b\r
-GOTO 1\r
-2\r
-CLOSE #1\r
-\r
-CLS\r
+    PRINT "One moment..."\r
+\r
+    mitun = 0\r
+    OPEN "loos.txt" FOR INPUT AS #1\r
+\r
+    1\r
+    IF EOF(1) <> 0 THEN GOTO 2\r
+\r
+    LINE INPUT #1, a$\r
+    getson a$\r
+\r
+    mitun = mitun + 1\r
+\r
+    ' Parse and store lottery numbers\r
+    FOR b = 1 TO 7\r
+        num(mitun, b) = VAL(sona$(b))\r
+    NEXT b\r
+\r
+    GOTO 1\r
+\r
+    2\r
+    CLOSE #1\r
+\r
+    CLS\r
 END SUB\r
 \r
 SUB menu\r
 3\r
-CLS\r
+    CLS\r
+\r
 7\r
-LOCATE 1, 1\r
-PRINT "           Viking loto statistika anal��s"\r
-PRINT "1 - t�ppgraaf"\r
-PRINT "2 - joongraaf"\r
-PRINT "3 - sobitus"\r
-PRINT "4 - statistika"\r
-PRINT "5 - v�lja"\r
-a$ = INPUT$(1)\r
-\r
-IF a$ = "1" THEN gr1\r
-IF a$ = "2" THEN gr2\r
-IF a$ = "3" THEN gr3\r
-IF a$ = "4" THEN ennus: GOTO 7\r
-IF a$ = "5" THEN SYSTEM\r
-GOTO 3\r
+    LOCATE 1, 1\r
+\r
+    PRINT "           Lottery statistics analysis"\r
+\r
+    PRINT "1 - Dot graph"\r
+    PRINT "2 - Line graph"\r
+    PRINT "3 - Combinatorics"\r
+    PRINT "4 - Statistics"\r
+    PRINT "5 - Exit program"\r
+\r
+    a$ = INPUT$(1)\r
+\r
+    IF a$ = "1" THEN gr1\r
+    IF a$ = "2" THEN gr2\r
+    IF a$ = "3" THEN gr3\r
+    IF a$ = "4" THEN ennus: GOTO 7\r
+    IF a$ = "5" THEN SYSTEM\r
+\r
+    GOTO 3\r
 \r
 END SUB\r
 \r
 SUB start\r
-SCREEN 12\r
+    SCREEN 12\r
 \r
 END SUB\r
 \r
 SUB wai\r
-a$ = INPUT$(1)\r
-END SUB\r
+    a$ = INPUT$(1)\r
 \r
+END SUB\r
index 54e0482..a3c8e16 100755 (executable)
@@ -1,19 +1,22 @@
-' Material simulation, simulates shockwaves propagation in gas.\r
-' made by Svjatoslav Agejenko\r
-' in 2003\r
-' homepage: svjatoslav.eu\r
-' email:    svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB saveit ()\r
-DECLARE SUB playit ()\r
-DECLARE SUB frmget ()\r
-DECLARE SUB frmsav ()\r
-DECLARE SUB spot (x!, y!, p!)\r
-DECLARE SUB lin (x1!, y1!, x2!, y2!)\r
-DECLARE SUB disp ()\r
-DECLARE SUB start ()\r
-DIM SHARED wal\r
-wal = 9980\r
+' Program to simulate shock waves propagation in gas.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2003, Initial version\r
+' 2024.09, Improved program readability using AI\r
+\r
+DECLARE SUB saveit()\r
+DECLARE SUB playit()\r
+DECLARE SUB frmget()\r
+DECLARE SUB frmsav()\r
+DECLARE SUB spot(x!, y!, p!)\r
+DECLARE SUB lin(x1!, y1!, x2!, y2!)\r
+DECLARE SUB disp()\r
+DECLARE SUB start()\r
+DIM SHARED wall\r
+wall = 9980\r
 \r
 DIM SHARED press(1 TO 100, 1 TO 100)\r
 DIM SHARED spdx(1 TO 100, 1 TO 100)\r
@@ -29,7 +32,6 @@ PAINT (1, 1), 1
 \r
 OPEN "tst.an0" FOR BINARY AS #1\r
 \r
-\r
 start\r
 \r
 1\r
@@ -37,19 +39,37 @@ start
 \r
 FOR y = 2 TO 99\r
     FOR x = 2 TO 99\r
-        IF press(x, y) = wal THEN spdx(x - 1, y) = 0: spdy(x, y - 1) = 0: spdx(x, y) = 0: spdy(x, y) = 0: GOTO 3\r
-        spdy(x, y) = spdy(x, y) - (press(x, y) / 500) ' gravitation\r
+        IF press(x, y) = wall THEN\r
+            spdx(x - 1, y) = 0\r
+            spdy(x, y - 1) = 0\r
+            spdx(x, y) = 0\r
+            spdy(x, y) = 0\r
+            GOTO 3\r
+        END IF\r
+\r
+        ' Apply gravitation\r
+        spdy(x, y) = spdy(x, y) - (press(x, y) / 500)\r
+\r
+        IF press(x + 1, y) = wall THEN\r
+            spdx(x, y) = 0\r
+            GOTO 2\r
+        END IF\r
 \r
-        IF press(x + 1, y) = wal THEN spdx(x, y) = 0: GOTO 2\r
+        ' Calculate x-direction speed\r
         spdx(x, y) = (press(x + 1, y) - press(x, y)) / 20 + spdx(x, y)\r
         2\r
-        IF press(x, y + 1) = wal THEN spdy(x, y) = 0: GOTO 3\r
+\r
+        IF press(x, y + 1) = wall THEN\r
+            spdy(x, y) = 0\r
+            GOTO 3\r
+        END IF\r
+\r
+        ' Calculate y-direction speed\r
         spdy(x, y) = (press(x, y + 1) - press(x, y)) / 20 + spdy(x, y)\r
         3\r
     NEXT x\r
 NEXT y\r
 \r
-\r
 4\r
 b = 0\r
 FOR y = 2 TO 99\r
@@ -57,18 +77,43 @@ FOR y = 2 TO 99
         a = press(x, y) + spdx(x, y) + spdy(x, y) - spdx(x - 1, y) - spdy(x, y - 1)\r
 \r
         IF a = 0 OR ((a < 0) AND (a > -.0001)) THEN\r
-            IF spdx(x, y) < 0 THEN spdx(x, y) = 0\r
-            IF spdy(x, y) < 0 THEN spdy(x, y) = 0\r
-            IF spdx(x - 1, y) > 0 THEN spdx(x - 1, y) = 0\r
-            IF spdy(x, y - 1) > 0 THEN spdy(x, y - 1) = 0\r
+            IF spdx(x, y) < 0 THEN\r
+                spdx(x, y) = 0\r
+            END IF\r
+\r
+            IF spdy(x, y) < 0 THEN\r
+                spdy(x, y) = 0\r
+            END IF\r
+\r
+            IF spdx(x - 1, y) > 0 THEN\r
+                spdx(x - 1, y) = 0\r
+            END IF\r
+\r
+            IF spdy(x, y - 1) > 0 THEN\r
+                spdy(x, y - 1) = 0\r
+            END IF\r
         END IF\r
 \r
         IF a < 0 THEN\r
-            IF spdx(x, y) < 0 THEN spdx(x, y) = spdx(x, y) / 1.5\r
-            IF spdy(x, y) < 0 THEN spdy(x, y) = spdy(x, y) / 1.5\r
-            IF spdx(x - 1, y) > 0 THEN spdx(x - 1, y) = spdx(x - 1, y) / 1.5\r
-            IF spdy(x, y - 1) > 0 THEN spdy(x, y - 1) = spdy(x, y - 1) / 1.5\r
+            IF spdx(x, y) < 0 THEN\r
+                spdx(x, y) = spdx(x, y) / 1.5\r
+            END IF\r
+\r
+            IF spdy(x, y) < 0 THEN\r
+                spdy(x, y) = spdy(x, y) / 1.5\r
+            END IF\r
+\r
+            IF spdx(x - 1, y) > 0 THEN\r
+                spdx(x - 1, y) = spdx(x - 1, y) / 1.5\r
+            END IF\r
+\r
+            IF spdy(x, y - 1) > 0 THEN\r
+                spdy(x, y - 1) = spdy(x, y - 1) / 1.5\r
+            END IF\r
+\r
             b = 1\r
+\r
+            ' Display negative pressure\r
             LOCATE 20, 1\r
             PRINT a\r
         END IF\r
@@ -78,16 +123,33 @@ IF b = 1 THEN GOTO 4
 \r
 FOR y = 2 TO 99\r
     FOR x = 2 TO 99\r
-        IF spdx(x, y) > 0 THEN spdxp(x - 1, y) = ((press(x, y) * spdx(x - 1, y)) + (spdx(x, y) * spdx(x, y))) / (press(x, y) + spdx(x, y)) - spdx(x - 1, y)\r
-        IF spdy(x, y) > 0 THEN spdyp(x, y - 1) = ((press(x, y) * spdy(x, y - 1)) + (spdy(x, y) * spdy(x, y))) / (press(x, y) + spdy(x, y)) - spdy(x, y - 1)\r
-        IF spdx(x - 1, y) < 0 THEN spdxp(x, y) = ((press(x, y) * spdx(x, y)) - (spdx(x - 1, y) * spdx(x - 1, y))) / (press(x, y) - spdx(x - 1, y)) - spdx(x, y)\r
-        IF spdy(x, y - 1) < 0 THEN spdyp(x, y) = ((press(x, y) * spdy(x, y)) - (spdy(x, y - 1) * spdy(x, y - 1))) / (press(x, y) - spdy(x, y - 1)) - spdy(x, y)\r
+        ' Update pressure based on speed\r
+        IF spdx(x, y) > 0 THEN\r
+            spdxp(x - 1, y) = ((press(x, y) * spdx(x - 1, y)) + (spdx(x, y) * spdx(x, y))) /\r
+                               (press(x, y) + spdx(x, y)) - spdx(x - 1, y)\r
+        END IF\r
+\r
+        IF spdy(x, y) > 0 THEN\r
+            spdyp(x, y - 1) = ((press(x, y) * spdy(x, y - 1)) + (spdy(x, y) * spdy(x, y))) /\r
+                               (press(x, y) + spdy(x, y)) - spdy(x, y - 1)\r
+        END IF\r
+\r
+        ' Handle negative speeds\r
+        IF spdx(x - 1, y) < 0 THEN\r
+            spdxp(x, y) = ((press(x, y) * spdx(x, y)) - (spdx(x - 1, y) * spdx(x - 1, y))) /\r
+                           (press(x, y) - spdx(x - 1, y)) - spdx(x, y)\r
+        END IF\r
+\r
+        IF spdy(x, y - 1) < 0 THEN\r
+            spdyp(x, y) = ((press(x, y) * spdy(x, y)) - (spdy(x, y - 1) * spdy(x, y - 1))) /\r
+                           (press(x, y) - spdy(x, y - 1)) - spdy(x, y)\r
+        END IF\r
     NEXT x\r
 NEXT y\r
 \r
-\r
 FOR y = 2 TO 99\r
     FOR x = 2 TO 99\r
+        ' Update pressure based on speed\r
         press(x + 1, y) = press(x + 1, y) - spdx(x, y)\r
         press(x, y + 1) = press(x, y + 1) - spdy(x, y)\r
         press(x, y) = press(x, y) + spdx(x, y)\r
@@ -97,6 +159,7 @@ NEXT y
 \r
 FOR y = 2 TO 99\r
     FOR x = 2 TO 99\r
+        ' Update speed based on previous speed\r
         spdx(x, y) = spdx(x, y) + spdxp(x, y)\r
         spdxp(x, y) = 0\r
         spdy(x, y) = spdy(x, y) + spdyp(x, y)\r
@@ -104,18 +167,15 @@ FOR y = 2 TO 99
     NEXT x\r
 NEXT y\r
 \r
-\r
 FOR y = 1 TO 100\r
     FOR x = 1 TO 100\r
+        ' Draw pixel based on pressure\r
         PSET (x, y), press(x, y) + 16\r
     NEXT x\r
 NEXT y\r
 \r
 saveit\r
 \r
-\r
-\r
-\r
 GOTO 1\r
 \r
 CLOSE #1\r
@@ -123,6 +183,7 @@ CLOSE #1
 SUB disp\r
 FOR y = 47 TO 53\r
     FOR x = 47 TO 53\r
+        ' Display pressure values in a grid\r
         LOCATE y - 46, (x - 46) * 4\r
         PRINT press(x, y)\r
     NEXT x\r
@@ -132,38 +193,46 @@ a$ = INPUT$(1)
 \r
 END SUB\r
 \r
-SUB lin (x1, y1, x2, y2)\r
+SUB lin(x1, y1, x2, y2)\r
 \r
 m = ABS(x1 - x2)\r
 m1 = ABS(y1 - y2)\r
-IF m1 > m THEN m = m1\r
+IF m1 > m THEN\r
+    m = m1\r
+END IF\r
 \r
+' Calculate line coordinates\r
 x3 = x2 - x1\r
 y3 = y2 - y1\r
 \r
 FOR a = 0 TO m\r
+    ' Interpolate points along the line\r
     x5 = x3 * a / m + x1\r
     y5 = y3 * a / m + y1\r
-    press(x5, y5) = wal\r
-NEXT a\r
 \r
+    ' Set pressure to wall value\r
+    press(x5, y5) = wall\r
+NEXT a\r
 \r
 END SUB\r
 \r
 SUB saveit\r
 FOR y = 1 TO 100\r
     a$ = ""\r
+\r
     FOR x = 1 TO 100\r
+        ' Save pixel color as string\r
         a$ = a$ + CHR$(POINT(x, y))\r
     NEXT x\r
+\r
     linb = a$\r
     PUT #1, , linb\r
 NEXT y\r
 \r
-\r
 END SUB\r
 \r
-SUB spot (x, y, p)\r
+SUB spot(x, y, p)\r
+' Set pressure to value `p` in a 2x2 area\r
 press(x, y) = p\r
 press(x + 1, y) = p\r
 press(x, y + 1) = p\r
@@ -175,6 +244,7 @@ frm = 0
 \r
 FOR a = 1 TO 100\r
     FOR b = 1 TO 100\r
+        ' Initialize pressure and speed variables\r
         press(a, b) = 3\r
         spdx(a, b) = 0\r
         spdy(a, b) = 0\r
@@ -185,18 +255,20 @@ NEXT a
 \r
 FOR y = 30 TO 60\r
     FOR x = 10 TO 50\r
+        ' Create initial pressure spots\r
         spot x, y, 30\r
     NEXT x\r
 NEXT y\r
 \r
+' Draw boundary lines\r
 lin 2, 2, 2, 99\r
 lin 99, 2, 99, 99\r
 lin 2, 99, 99, 99\r
 lin 2, 2, 99, 2\r
 \r
 FOR x = 5 TO 40 STEP 5\r
+    ' Draw additional lines for testing\r
     lin x, 80, x + 50, 80 - x\r
 NEXT x\r
 \r
 END SUB\r
-\r