Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Wed, 11 Sep 2024 14:49:43 +0000 (17:49 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Wed, 11 Sep 2024 14:49:43 +0000 (17:49 +0300)
Graphics/3D/KHK Intellektika 2004 demo/KHKDEMO.BAS
Graphics/3D/KHK Intellektika 2004 demo/khkdemo5.BAS
Graphics/Presentations/KHK Intellektika 2004 demo/khkdemo4.BAS

index 601f9d6..77b7ff2 100755 (executable)
@@ -1,3 +1,12 @@
+' Graphics animation.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 200?, Initial version\r
+' 2024.09, Improved program readability using AI\r
+\r
 DECLARE SUB playsound (a$)\r
 DECLARE SUB turnon ()\r
 DECLARE SUB ellips (x!, y!, s!, v!, t!)\r
@@ -28,10 +37,10 @@ SCREEN 7, , , 1
 \r
 timerinit\r
 s = 50\r
-2\r
-s1 = SIN(timerCvalue(1) * 1.3) * .5 + 1.1\r
-s2 = COS(timerCvalue(1) * 1.3) * .5 + 1.1\r
 \r
+2 :\r
+    s1 = SIN(timerCvalue(1) * 1.3) * .5 + 1.1\r
+    s2 = COS(timerCvalue(1) * 1.3) * .5 + 1.1\r
 \r
 frm = frm + 1\r
 sv1 = 5 * s1\r
@@ -42,7 +51,6 @@ sh1 = 2 * s2
 sh2 = 1.4\r
 hp = SIN(timerCvalue(1)) * .7\r
 \r
-\r
 mo timerCvalue(2), timerCvalue(3), timerCvalue(4), timerCvalue(0), 0\r
 \r
 ellips 100, timerCvalue(6), timerCvalue(7) + 4, 14, .5\r
@@ -54,6 +62,7 @@ prn timerCvalue(8), 130, "Infotehno-", 2, 0
 prn timerCvalue(8), 150, "   loogia", 2, 0\r
 \r
 timerprocess\r
+\r
 LOCATE 1, 1\r
 'PRINT timerCtime(0)\r
 IF timerCtime(0) > 26 THEN CHAIN "ray.bas"\r
@@ -63,290 +72,266 @@ GOTO 2
 SYSTEM\r
 \r
 SUB ellips (x, y, s, v, t)\r
-\r
-IF x > 0 THEN\r
-IF y > 0 THEN\r
-\r
-CIRCLE (x, y), s, v, , , t\r
-PAINT (x, y), v\r
-\r
-END IF\r
-END IF\r
-\r
+    ' Draws an ellipse if the coordinates are positive\r
+    IF x > 0 THEN\r
+        IF y > 0 THEN\r
+            CIRCLE (x, y), s, v, , , t\r
+            PAINT (x, y), v\r
+        END IF\r
+    END IF\r
 END SUB\r
 \r
 SUB mo (x, y, an, s, w)\r
-depth = depth + 1\r
-IF s < .2 THEN GOTO 1\r
-\r
-IF depth / 2 = depth \ 2 THEN c = 1 ELSE c = 3\r
-\r
-CIRCLE (x, y), s, c\r
-PAINT (x, y), c\r
-\r
-IF w <> 1 THEN\r
-x1 = SIN(an) * s * 2.5 + x\r
-y1 = COS(an) * s * 2.5 + y\r
-IF w = 3 THEN ns = s / sv2 ELSE ns = s / sv1\r
-mo x1, y1, an + vp, ns, 3\r
-END IF\r
-\r
-IF w <> 2 THEN\r
-x1 = SIN(an - pi / 2) * s * 2.5 + x\r
-y1 = COS(an - pi / 2) * s * 2.5 + y\r
-IF w = 4 THEN ns = s / sh2 ELSE ns = s / sh1\r
-mo x1, y1, an + hp, ns, 4\r
-END IF\r
-\r
-IF w <> 3 THEN\r
-x1 = SIN(an - pi) * s * 2.5 + x\r
-y1 = COS(an - pi) * s * 2.5 + y\r
-IF w = 1 THEN ns = s / sv2 ELSE ns = s / sv1\r
-mo x1, y1, an + vp, ns, 1\r
-END IF\r
-\r
-IF w <> 4 THEN\r
-x1 = SIN(an - pi * 1.5) * s * 2.5 + x\r
-y1 = COS(an - pi * 1.5) * s * 2.5 + y\r
-IF w = 2 THEN ns = s / sh2 ELSE ns = s / sh1\r
-mo x1, y1, an + hp, ns, 2\r
-END IF\r
-\r
-1\r
-depth = depth - 1\r
-END SUB\r
+    ' Recursive function to draw a shape with rotating and scaling properties\r
+    depth = depth + 1\r
+    IF s < .2 THEN GOTO 1\r
 \r
-SUB playsound (a$)\r
-REM SHELL "c:\progra~1\winamp\winamp.exe " + a$\r
-SCREEN 0\r
-SCREEN 7, , , 1\r
+    IF depth / 2 = depth \ 2 THEN c = 1 ELSE c = 3\r
 \r
-END SUB\r
+    CIRCLE (x, y), s, c\r
+    PAINT (x, y), c\r
 \r
-SUB prn (x, y, msg$, siz, col1)\r
-IF x < 0 THEN GOTO prn1\r
-IF x > 319 THEN GOTO prn1\r
+    IF w <> 1 THEN\r
+        x1 = SIN(an) * s * 2.5 + x\r
+        y1 = COS(an) * s * 2.5 + y\r
+        IF w = 3 THEN ns = s / sv2 ELSE ns = s / sv1\r
+        mo x1, y1, an + vp, ns, 3\r
+    END IF\r
 \r
-DIM bck(10000)\r
+    IF w <> 2 THEN\r
+        x1 = SIN(an - pi / 2) * s * 2.5 + x\r
+        y1 = COS(an - pi / 2) * s * 2.5 + y\r
+        IF w = 4 THEN ns = s / sh2 ELSE ns = s / sh1\r
+        mo x1, y1, an + hp, ns, 4\r
+    END IF\r
 \r
-GET (0, 0)-(100, 7), bck\r
-LOCATE 1, 1\r
-PRINT msg$\r
-\r
-col = col1\r
-\r
-FOR x1 = 0 TO LEN(msg$) * 8 - 1\r
-FOR y1 = 0 TO 7\r
-  IF POINT(x1, y1) > 0 THEN\r
-    rx = x1 * siz + x\r
-    ry = y1 * siz + y\r
-    IF col1 > 100 THEN col = RND * 4 + 10\r
-    IF col1 > 200 THEN\r
-      LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, B\r
-    ELSE\r
-      LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, BF\r
+    IF w <> 3 THEN\r
+        x1 = SIN(an - pi) * s * 2.5 + x\r
+        y1 = COS(an - pi) * s * 2.5 + y\r
+        IF w = 1 THEN ns = s / sv2 ELSE ns = s / sv1\r
+        mo x1, y1, an + vp, ns, 1\r
     END IF\r
-'      LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, BF\r
-  END IF\r
-NEXT y1\r
-NEXT x1\r
 \r
+    IF w <> 4 THEN\r
+        x1 = SIN(an - pi * 1.5) * s * 2.5 + x\r
+        y1 = COS(an - pi * 1.5) * s * 2.5 + y\r
+        IF w = 2 THEN ns = s / sh2 ELSE ns = s / sh1\r
+        mo x1, y1, an + hp, ns, 2\r
+    END IF\r
+\r
+1 :\r
+    depth = depth - 1\r
+END SUB\r
 \r
-PUT (0, 0), bck, PSET\r
+SUB prn (x, y, msg$, siz, col1)\r
+    ' Prints text with specified size and color at given coordinates\r
+    IF x < 0 THEN GOTO prn1\r
+    IF x > 319 THEN GOTO prn1\r
+\r
+    DIM bck(10000)\r
+\r
+    GET (0, 0)-(100, 7), bck\r
+    LOCATE 1, 1\r
+    PRINT msg$\r
+\r
+    col = col1\r
+\r
+    FOR x1 = 0 TO LEN(msg$) * 8 - 1\r
+        FOR y1 = 0 TO 7\r
+            IF POINT(x1, y1) > 0 THEN\r
+                rx = x1 * siz + x\r
+                ry = y1 * siz + y\r
+                IF col1 > 100 THEN col = RND * 4 + 10\r
+                IF col1 > 200 THEN\r
+                    LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, B\r
+                ELSE\r
+                    LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, BF\r
+                END IF\r
+            END IF\r
+        NEXT y1\r
+    NEXT x1\r
+\r
+    PUT (0, 0), bck, PSET\r
 prn1:\r
 END SUB\r
 \r
 SUB timerAdd (element, time, value)\r
-\r
-FOR a = 0 TO 100\r
-  IF (timerTime(element, a) = 0) AND (timerValue(element, a) = 0) THEN GOTO timer3\r
-NEXT a\r
+    ' Adds a new timer event for a specific element at a given time with the specified value\r
+    FOR a = 0 TO 100\r
+        IF (timerTime(element, a) = 0) AND (timerValue(element, a) = 0) THEN GOTO timer3\r
+    NEXT a\r
 timer3:\r
 \r
-timerTime(element, a) = time\r
-timerValue(element, a) = value\r
-\r
-END SUB\r
-\r
-SUB timerdisp\r
-LOCATE 1, 1\r
-\r
-FOR a = 0 TO 10\r
-  PRINT timerCplace(a), timerCtime(a), timerCvalue(a)\r
-NEXT a\r
-\r
+    timerTime(element, a) = time\r
+    timerValue(element, a) = value\r
 END SUB\r
 \r
 SUB timerinit\r
-timerLast = TIMER\r
-\r
-paus = 24\r
-\r
-' stuff size\r
-timerAdd 0, 0, 50\r
-timerAdd 0, 7, 10\r
-timerAdd 0, 20, 10\r
-timerAdd 0, 24, 0\r
-timerAdd 0, 1000, 0\r
+    ' Initializes timers with predefined events and values\r
+    timerLast = TIMER\r
 \r
+    paus = 24\r
 \r
-' stuff speed\r
-timerAdd 1, 0, .1\r
-timerAdd 1, 1000, 1000\r
+    ' stuff size\r
+    timerAdd 0, 0, 50\r
+    timerAdd 0, 7, 10\r
+    timerAdd 0, 20, 10\r
+    timerAdd 0, 24, 0\r
+    timerAdd 0, 1000, 0\r
 \r
-' stuff X & Y\r
-timerAdd 2, 0, 160\r
-timerAdd 3, 0, 100\r
+    ' stuff speed\r
+    timerAdd 1, 0, .1\r
+    timerAdd 1, 1000, 1000\r
 \r
-timerAdd 2, 5, 160\r
-timerAdd 3, 5, 100\r
+    ' stuff X & Y\r
+    timerAdd 2, 0, 160\r
+    timerAdd 3, 0, 100\r
 \r
-timerAdd 2, 9, 280\r
-timerAdd 3, 9, 160\r
+    timerAdd 2, 5, 160\r
+    timerAdd 3, 5, 100\r
 \r
-timerAdd 2, 10, 280\r
-timerAdd 3, 10, 160\r
+    timerAdd 2, 9, 280\r
+    timerAdd 3, 9, 160\r
 \r
-timerAdd 2, 20, 40\r
-timerAdd 3, 20, 160\r
+    timerAdd 2, 10, 280\r
+    timerAdd 3, 10, 160\r
 \r
-timerAdd 2, 1000, 40\r
-timerAdd 3, 1000, 160\r
+    timerAdd 2, 20, 40\r
+    timerAdd 3, 20, 160\r
 \r
-' stuff rotations\r
-timerAdd 4, 0, .1\r
-timerAdd 4, 10, .1\r
-timerAdd 4, 22, 18\r
-timerAdd 4, 2000, 10000\r
+    timerAdd 2, 1000, 40\r
+    timerAdd 3, 1000, 160\r
 \r
-' KHK message X\r
+    ' stuff rotations\r
+    timerAdd 4, 0, .1\r
+    timerAdd 4, 10, .1\r
+    timerAdd 4, 22, 18\r
+    timerAdd 4, 2000, 10000\r
 \r
-timerAdd 5, 0, -1\r
-timerAdd 5, 5, -1\r
-timerAdd 5, 9, 50\r
-timerAdd 5, 10, 30\r
-timerAdd 5, paus, 30\r
-timerAdd 5, paus + 2, 321\r
+    ' KHK message X\r
 \r
-' Ellips Y & radius\r
-timerAdd 6, 0, -1\r
-timerAdd 6, 4, -1\r
-timerAdd 6, 10, 30\r
-timerAdd 6, 1000, 50\r
+    timerAdd 5, 0, -1\r
+    timerAdd 5, 5, -1\r
+    timerAdd 5, 9, 50\r
+    timerAdd 5, 10, 30\r
+    timerAdd 5, paus, 30\r
+    timerAdd 5, paus + 2, 321\r
 \r
-timerAdd 7, 0, 1\r
-timerAdd 7, 6, 1\r
-timerAdd 7, 12, 130\r
+    ' Ellips Y & radius\r
+    timerAdd 6, 0, -1\r
+    timerAdd 6, 4, -1\r
+    timerAdd 6, 10, 30\r
+    timerAdd 6, 1000, 50\r
 \r
-timerAdd 7, paus, 130\r
-timerAdd 7, paus + 2, 1\r
+    timerAdd 7, 0, 1\r
+    timerAdd 7, 6, 1\r
+    timerAdd 7, 12, 130\r
 \r
-' "Infotehnoloogia" message\r
-\r
-timerAdd 8, 0, 320\r
-timerAdd 8, 11, 320\r
-timerAdd 8, 20, 100\r
-timerAdd 8, paus, 100\r
-timerAdd 8, paus + 1, -1\r
+    timerAdd 7, paus, 130\r
+    timerAdd 7, paus + 2, 1\r
 \r
+    ' "Infotehnoloogia" message\r
 \r
+    timerAdd 8, 0, 320\r
+    timerAdd 8, 11, 320\r
+    timerAdd 8, 20, 100\r
+    timerAdd 8, paus, 100\r
+    timerAdd 8, paus + 1, -1\r
 END SUB\r
 \r
 SUB timerprocess\r
-\r
-timerCurrent = TIMER\r
-timerDiff = timerCurrent - timerLast\r
-timerLast = timerCurrent\r
-\r
-FOR a = 0 TO 50\r
-  ctim = timerCtime(a) + timerDiff\r
-  Cplace = timerCplace(a)\r
+    ' Processes timers to update their current values based on elapsed time\r
+    timerCurrent = TIMER\r
+    timerDiff = timerCurrent - timerLast\r
+    timerLast = timerCurrent\r
+\r
+    FOR a = 0 TO 50\r
+        ctim = timerCtime(a) + timerDiff\r
+        Cplace = timerCplace(a)\r
 timer2:\r
-  IF timerTime(a, Cplace + 1) = -1 THEN\r
-    ctim = 0\r
-    Cplace = 0\r
-  END IF\r
-  IF timerTime(a, Cplace + 1) < ctim THEN\r
-    IF timerTime(a, Cplace + 1) = 0 THEN\r
-      timerCvalue(a) = timerValue(a, Cplace)\r
-      GOTO timer1:\r
-    END IF\r
-    Cplace = Cplace + 1\r
-    GOTO timer2\r
-  END IF\r
-\r
-  v1 = timerValue(a, Cplace)\r
-  t1 = timerTime(a, Cplace)\r
-  v2 = timerValue(a, Cplace + 1)\r
-  t2 = timerTime(a, Cplace + 1)\r
-\r
-  IF v1 = v2 THEN\r
-    timerCvalue(a) = v1\r
-  ELSE\r
-    Tdiff1 = t2 - t1\r
-    Tdiff2 = ctim - t1\r
-    Vdiff = v2 - v1\r
-    timerCvalue(a) = Tdiff2 / Tdiff1 * Vdiff + v1\r
-  END IF\r
+        IF timerTime(a, Cplace + 1) = -1 THEN\r
+            ctim = 0\r
+            Cplace = 0\r
+        END IF\r
+        IF timerTime(a, Cplace + 1) < ctim THEN\r
+            IF timerTime(a, Cplace + 1) = 0 THEN\r
+                timerCvalue(a) = timerValue(a, Cplace)\r
+                GOTO timer1:\r
+            END IF\r
+            Cplace = Cplace + 1\r
+            GOTO timer2\r
+        END IF\r
+\r
+        v1 = timerValue(a, Cplace)\r
+        t1 = timerTime(a, Cplace)\r
+        v2 = timerValue(a, Cplace + 1)\r
+        t2 = timerTime(a, Cplace + 1)\r
+\r
+        IF v1 = v2 THEN\r
+            timerCvalue(a) = v1\r
+        ELSE\r
+            Tdiff1 = t2 - t1\r
+            Tdiff2 = ctim - t1\r
+            Vdiff = v2 - v1\r
+            timerCvalue(a) = Tdiff2 / Tdiff1 * Vdiff + v1\r
+        END IF\r
 timer1:\r
-  timerCplace(a) = Cplace\r
-  timerCtime(a) = ctim\r
-NEXT a\r
-\r
+        timerCplace(a) = Cplace\r
+        timerCtime(a) = ctim\r
+    NEXT a\r
 END SUB\r
 \r
 SUB turnon\r
-'a$ = INPUT$(1)\r
-playsound "marine.mp3"\r
-\r
-SCREEN 7, , , 1\r
-\r
-FOR x = 0 TO 160 STEP 15\r
\r
-  LINE (160 - x - 5, 90 - 5)-(160 + x + 5, 110 + 5), 1, BF\r
-  LINE (160 - x - 3, 90 - 3)-(160 + x + 3, 110 + 3), 3, BF\r
-  LINE (160 - x, 90)-(160 + x, 110), 15, BF\r
-\r
-  PCOPY 0, 1\r
-  CLS\r
-  SOUND 0, .5\r
-NEXT x\r
-\r
-FOR y = 10 TO 100 STEP 15\r
-  CLS\r
-\r
-  LINE (160 - x - 5, 90 - y - 5)-(160 + x + 5, 110 + y + 5), 1, BF\r
-  LINE (160 - x - 3, 90 - y - 3)-(160 + x + 3, 110 + y + 3), 3, BF\r
-  LINE (160 - x, 90 - y)-(160 + x, 110 + y), 15, BF\r
-\r
-  PCOPY 0, 1\r
-  SOUND 0, .5\r
-NEXT y\r
-\r
-FOR a = 1 TO 25\r
-  prn RND * 250, RND * 180, STR$(INT(RND * 2)), 3, 0\r
-  PCOPY 0, 1\r
-  SOUND 0, 1\r
-NEXT a\r
-\r
-DIM buf(1 TO 1000)\r
-FOR b = 1 TO 30\r
-FOR a = 0 TO 195\r
-  t = ABS(100 - a)\r
-\r
-  IF RND * 50 < t THEN\r
-    GET (1, a)-(318, a + 1), buf\r
-    IF a > 100 THEN\r
-      PUT (0, a), buf, PSET\r
-    ELSE\r
-      PUT (2, a), buf, PSET\r
-    END IF\r
-  END IF\r
-NEXT a\r
-PCOPY 0, 1\r
-'SOUND 0, 1\r
-NEXT b\r
-\r
-\r
+    ' Initializes the program by playing a sound and displaying an animation\r
+    SCREEN 0\r
+    SCREEN 7, , , 1\r
+\r
+\r
+    SCREEN 7, , , 1\r
+\r
+    FOR x = 0 TO 160 STEP 15\r
+        LINE (160 - x - 5, 90 - 5)-(160 + x + 5, 110 + 5), 1, BF\r
+        LINE (160 - x - 3, 90 - 3)-(160 + x + 3, 110 + 3), 3, BF\r
+        LINE (160 - x, 90)-(160 + x, 110), 15, BF\r
+\r
+        PCOPY 0, 1\r
+        CLS\r
+        SOUND 0, .5\r
+    NEXT x\r
+\r
+    FOR y = 10 TO 100 STEP 15\r
+        CLS\r
+\r
+        LINE (160 - x - 5, 90 - y - 5)-(160 + x + 5, 110 + y + 5), 1, BF\r
+        LINE (160 - x - 3, 90 - y - 3)-(160 + x + 3, 110 + y + 3), 3, BF\r
+        LINE (160 - x, 90 - y)-(160 + x, 110 + y), 15, BF\r
+\r
+        PCOPY 0, 1\r
+        SOUND 0, .5\r
+    NEXT y\r
+\r
+    FOR a = 1 TO 25\r
+        prn RND * 250, RND * 180, STR$(INT(RND * 2)), 3, 0\r
+        PCOPY 0, 1\r
+        SOUND 0, 1\r
+    NEXT a\r
+\r
+    DIM buf(1 TO 1000)\r
+    FOR b = 1 TO 30\r
+        FOR a = 0 TO 195\r
+            t = ABS(100 - a)\r
+\r
+            IF RND * 50 < t THEN\r
+                GET (1, a)-(318, a + 1), buf\r
+                IF a > 100 THEN\r
+                    PUT (0, a), buf, PSET\r
+                ELSE\r
+                    PUT (2, a), buf, PSET\r
+                END IF\r
+            END IF\r
+        NEXT a\r
+        PCOPY 0, 1\r
+        'SOUND 0, 1\r
+    NEXT b\r
 END SUB\r
 \r
index 8f8b250..dd8de8c 100755 (executable)
@@ -1,15 +1,19 @@
-' 3D Maze explorer\r
-' made by Svjatoslav Agejenko\r
-' in 2003.12\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
-DECLARE SUB startext ()\r
+DECLARE FUNCTION getWord& (addr!)\r
+DECLARE FUNCTION getByte! (addr!)\r
+' Render animated 3D maze.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2002, Initial version\r
+' 2024.09, Improved program readability using AI\r
+\r
+\r
+DECLARE SUB startText ()\r
 DECLARE SUB control ()\r
-DECLARE SUB putbyte (addr!, dat!)\r
-DECLARE SUB putword (addr!, dat!)\r
-DECLARE FUNCTION getword! (addr!)\r
-DECLARE FUNCTION getbyte! (addr!)\r
+DECLARE SUB putByte (addr!, dat!)\r
+DECLARE SUB putWord (addr!, dat!)\r
 DECLARE SUB start ()\r
 DECLARE SUB animate ()\r
 \r
@@ -42,7 +46,6 @@ np = 0
 \r
 start\r
 \r
-\r
 cx = 0\r
 cy = 0\r
 cz = 0\r
@@ -52,6 +55,7 @@ px(1) = 0
 py(1) = 0\r
 pz(1) = 0\r
 \r
+' Main loop\r
 1\r
 frm = frm + 1\r
 myx = SIN(frm / 30) * 100\r
@@ -60,35 +64,29 @@ myy = SIN(frm / 300)
 an1 = SIN(frm / 60)\r
 an2 = SIN(frm / 36) / 3\r
 \r
-\r
 np = np + 1\r
 px(np) = cx\r
 py(np) = cy\r
 pz(np) = cz\r
 \r
-\r
-\r
 nl = nl + 1\r
 l1(nl) = np\r
 l2(nl) = np - 1\r
 lc(nl) = INT(RND * 15) + 1\r
-'lc(nl) = ABS(cx / 20)\r
-\r
-\r
+' lc(nl) = ABS(cx / 20)\r
 \r
 va = INT(RND * 3)\r
 \r
 SELECT CASE va\r
 CASE 0\r
-  cx = RND * 500 - 250\r
+    cx = RND * 500 - 250\r
 CASE 1\r
-  cy = RND * 100 - 50\r
+    cy = RND * 100 - 50\r
 CASE 2\r
-  cz = RND * 500 - 250\r
+    cz = RND * 500 - 250\r
 END SELECT\r
 \r
-\r
-'control\r
+' control\r
 animate\r
 \r
 PCOPY 0, 1\r
@@ -96,13 +94,13 @@ CLS
 \r
 IF frm > 1200 THEN GOTO 200\r
 GOTO 1\r
+\r
 200\r
 \r
 CHAIN "khkdemo6.bas"\r
 \r
 SUB animate\r
 \r
-\r
 s1 = SIN(an1)\r
 s2 = SIN(an2)\r
 s3 = SIN(an3)\r
@@ -111,79 +109,72 @@ c1 = COS(an1)
 c2 = COS(an2)\r
 c3 = COS(an3)\r
 \r
-\r
-\r
+' Rotate and project points\r
 FOR a = 1 TO np\r
-  x = px(a) - myx\r
-  y = py(a) - myy\r
-  z = pz(a) - myz\r
-   \r
\r
-  x1 = x * c1 + z * s1\r
-  z1 = z * c1 - x * s1\r
-\r
-  y1 = y * c2 + z1 * s2\r
-  z2 = z1 * c2 - y * s2\r
-\r
-\r
-'  z2 = z2 + 10\r
-  \r
-  IF z2 > 3 THEN\r
-    rpe(a) = 1\r
-    rpx(a) = x1 / z2 * 130 + 160\r
-    rpy(a) = y1 / z2 * 130 + 100\r
-  ELSE\r
-    rpe(a) = 0\r
-  END IF\r
-\r
+    x = px(a) - myx\r
+    y = py(a) - myy\r
+    z = pz(a) - myz\r
+\r
+    ' First rotation around Y axis\r
+    x1 = x * c1 + z * s1\r
+    z1 = z * c1 - x * s1\r
+\r
+    ' Second rotation around X axis\r
+    y1 = y * c2 + z1 * s2\r
+    z2 = z1 * c2 - y * s2\r
+\r
+    ' Check if point is behind the viewer\r
+    IF z2 > 3 THEN\r
+        rpe(a) = 1\r
+        rpx(a) = x1 / z2 * 130 + 160\r
+        rpy(a) = y1 / z2 * 130 + 100\r
+    ELSE\r
+        rpe(a) = 0\r
+    END IF\r
 NEXT a\r
 \r
-\r
+' Draw lines between visible points\r
 FOR a = 1 TO nl\r
 \r
-  p1 = l1(a)\r
-  p2 = l2(a)\r
-  IF (rpe(p1) = 1) AND (rpe(p2) = 1) THEN LINE (rpx(p1), rpy(p1))-(rpx(p2), rpy(p2)), lc(a)\r
+    p1 = l1(a)\r
+    p2 = l2(a)\r
+    IF (rpe(p1) = 1) AND (rpe(p2) = 1) THEN LINE (rpx(p1), rpy(p1))-(rpx(p2), rpy(p2)), lc(a)\r
 \r
 NEXT a\r
 \r
-\r
 END SUB\r
 \r
 SUB control\r
 \r
-\r
-IF getbyte(8) <> 0 THEN\r
-  putbyte 8, 0\r
-  xp = getword(2)\r
-  putword 2, 0\r
-  yp = getword(4)\r
-  putword 4, 0\r
-  butt = getword(6)\r
-  putword 6, 0\r
-  buttL = 0\r
-  buttR = 0\r
-  IF butt = 1 THEN buttL = 1\r
-  IF butt = 2 THEN buttR = 1\r
-  IF butt = 3 THEN buttL = 1: buttR = 1\r
-\r
-\r
-  IF buttR = 1 THEN\r
-    IF buttL = 1 THEN\r
-      myxs = myxs + SIN(an1) * yp / 4\r
-      myzs = myzs - COS(an1) * yp / 4\r
-      GOTO 3\r
-    END IF\r
-    myys = myys + yp / 4\r
+IF getByte(8) <> 0 THEN\r
+    putByte 8, 0\r
+    xp = getWord(2)\r
+    putWord 2, 0\r
+    yp = getWord(4)\r
+    putWord 4, 0\r
+    butt = getWord(6)\r
+    putWord 6, 0\r
+    buttL = 0\r
+    buttR = 0\r
+    IF butt = 1 THEN buttL = 1\r
+    IF butt = 2 THEN buttR = 1\r
+    IF butt = 3 THEN buttL = 1: buttR = 1\r
+\r
+    ' Handle mouse movement\r
+    IF buttR = 1 THEN\r
+        IF buttL = 1 THEN\r
+            myxs = myxs + SIN(an1) * yp / 4\r
+            myzs = myzs - COS(an1) * yp / 4\r
+            GOTO 3\r
+        END IF\r
+        myys = myys + yp / 4\r
 3\r
-    yp = 0\r
-  END IF\r
+        yp = 0\r
+    END IF\r
 \r
 END IF\r
 \r
-\r
-\r
-\r
+' Limit movement to maxmove\r
 IF xp < -maxmove THEN xp = -maxmove\r
 IF xp > maxmove THEN xp = maxmove\r
 an1 = an1 - xp / 150\r
@@ -192,10 +183,9 @@ IF yp < -maxmove THEN yp = -maxmove
 IF yp > maxmove THEN yp = maxmove\r
 an2 = an2 - yp / 150\r
 \r
-\r
-\r
 a$ = INKEY$\r
 \r
+' Handle keyboard input\r
 IF a$ = "a" THEN myxs = myxs - COS(an1): myzs = myzs - SIN(an1)\r
 IF a$ = "d" THEN myxs = myxs + COS(an1): myzs = myzs + SIN(an1)\r
 IF a$ = "w" THEN myxs = myxs - SIN(an1): myzs = myzs + COS(an1)\r
@@ -212,46 +202,42 @@ myy = myy + myys
 \r
 END SUB\r
 \r
-FUNCTION getbyte (addr)\r
-getbyte = PEEK(extADDR + addr)\r
+FUNCTION getByte (addr)\r
+    getByte = PEEK(extADDR + addr)\r
 END FUNCTION\r
 \r
-FUNCTION getword (addr)\r
-a = PEEK(extADDR + addr)\r
-b = PEEK(extADDR + addr + 1)\r
-\r
+FUNCTION getWord& (addr)\r
+    a = PEEK(extADDR + addr)\r
+    b = PEEK(extADDR + addr + 1)\r
 \r
-c$ = HEX$(a)\r
-IF LEN(c$) = 1 THEN c$ = "0" + c$\r
-IF LEN(c$) = 0 THEN c$ = "00"\r
+    c$ = HEX$(a)\r
+    IF LEN(c$) = 1 THEN c$ = "0" + c$\r
+    IF LEN(c$) = 0 THEN c$ = "00"\r
 \r
+    c = VAL("&H" + HEX$(b) + c$)\r
 \r
-c = VAL("&H" + HEX$(b) + c$)\r
-\r
-getword = c\r
+    getWord = c\r
 END FUNCTION\r
 \r
-SUB mousedemo\r
-\r
-\r
+SUB mouseDemo\r
 \r
 cx = 150\r
 cy = 100\r
 maxmove = 50\r
+\r
+' Main loop\r
 100\r
 frm = frm + 1\r
 \r
-\r
 LOCATE 1, 1\r
 PRINT cx, cy\r
 PRINT frm\r
 \r
 CIRCLE (cx, cy), 10, 0\r
-xp = getword(2)\r
-putword 2, 0\r
-yp = getword(4)\r
-putword 4, 0\r
-\r
+xp = getWord(2)\r
+putWord 2, 0\r
+yp = getWord(4)\r
+putWord 4, 0\r
 \r
 IF xp < -maxmove THEN xp = -maxmove\r
 IF xp > maxmove THEN xp = maxmove\r
@@ -261,23 +247,18 @@ IF yp < -maxmove THEN yp = -maxmove
 IF yp > maxmove THEN yp = maxmove\r
 cy = cy + yp\r
 \r
-\r
 CIRCLE (cx, cy), 10, 10\r
 \r
-\r
-\r
 SOUND 0, .05\r
 GOTO 100\r
 \r
-\r
 END SUB\r
 \r
-SUB putbyte (addr, dat)\r
-\r
-POKE (extADDR + addr), dat\r
+SUB putByte (addr, dat)\r
+    POKE (extADDR + addr), dat\r
 END SUB\r
 \r
-SUB putword (addr, dat)\r
+SUB putWord (addr, dat)\r
 \r
 b$ = HEX$(dat)\r
 \r
@@ -287,15 +268,13 @@ IF LEN(b$) < 4 THEN b$ = "0" + b$: GOTO 2
 n1 = VAL("&H" + LEFT$(b$, 2))\r
 n2 = VAL("&H" + RIGHT$(b$, 2))\r
 \r
-\r
 POKE (extADDR + addr), n2\r
 POKE (extADDR + addr + 1), n1\r
 \r
 END SUB\r
 \r
 SUB start\r
-' startext\r
-\r
+    ' startext\r
 \r
 SCREEN 7, , , 1\r
 \r
@@ -303,7 +282,7 @@ maxmove = 50
 \r
 END SUB\r
 \r
-SUB startext\r
+SUB startText\r
 \r
 DEF SEG = 0     ' read first from interrupt table\r
 \r
@@ -319,10 +298,10 @@ PRINT "relative address is:"; extADDR
 \r
 DEF SEG = extSEG\r
 \r
-IF getword(0) <> 1983 THEN\r
-  PRINT "FATAL ERROR:  you must load"\r
-  PRINT "QBasic extension TSR first!"\r
-  SYSTEM\r
+IF getWord(0) <> 1983 THEN\r
+    PRINT "FATAL ERROR: you must load"\r
+    PRINT "QBasic extension TSR first!"\r
+    SYSTEM\r
 END IF\r
 \r
 END SUB\r
index ec82d00..4842b71 100755 (executable)
@@ -1,20 +1,20 @@
-DECLARE SUB ga (x!, y!, s!)\r
-DIM SHARED colr         ' this variable holds fractal color\r
-                        ' and because it is 'SHARED' it is accessible\r
-                        ' from within sub module.\r
+DECLARE SUB drawFractal (x!, y!, s!)\r
+DIM SHARED fractalColor         ' this variable holds fractal color\r
+                                ' and because it is 'SHARED' it is accessible\r
+                                ' from within sub module.\r
 SCREEN 12\r
 \r
-colr = 10                               ' display single fractel\r
-ga 320, 240, 127\r
+fractalColor = 10                       ' display single fractal\r
+drawFractal 320, 240, 127\r
 \r
 FOR a = 1 TO 50\r
   SOUND 0, 1\r
 NEXT a\r
 CLS\r
 \r
-FOR a = 1 TO 128 STEP 5                 ' display fractal serie\r
-  colr = RND * 7 + 7\r
-  ga 320, 240, a\r
+FOR a = 1 TO 128 STEP 5                 ' display fractal series\r
+  fractalColor = RND * 7 + 7\r
+  drawFractal 320, 240, a\r
 NEXT a\r
 \r
 FOR a = 1 TO 50\r
@@ -23,13 +23,12 @@ NEXT a
 \r
 CHAIN "khkdemo5.bas"\r
 \r
-SUB ga (x, y, s)\r
-IF s >= 1 THEN\r
-  LINE (x - s, y - s)-(x + s, y + s), colr, B\r
-  ga x - s, y - s, s / 2.3  ' each fractel sub element is 2.3 times smaller\r
-  ga x + s, y - s, s / 2.3  ' than previous.\r
-  ga x + s, y + s, s / 2.3\r
-  ga x - s, y + s, s / 2.3\r
-END IF\r
+SUB drawFractal (x, y, s)\r
+    IF s >= 1 THEN\r
+        LINE (x - s, y - s)-(x + s, y + s), fractalColor, B\r
+        drawFractal x - s, y - s, s / 2.3  ' each fractal sub element is 2.3 times smaller\r
+        drawFractal x + s, y - s, s / 2.3  ' than previous.\r
+        drawFractal x + s, y + s, s / 2.3\r
+        drawFractal x - s, y + s, s / 2.3\r
+    END IF\r
 END SUB\r
-\r