Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 16 Sep 2024 20:33:35 +0000 (23:33 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 16 Sep 2024 20:33:35 +0000 (23:33 +0300)
Graphics/Presentations/joulud.bas

index f56e70e..0885f09 100755 (executable)
@@ -19,7 +19,6 @@ DIM SHARED timerCtime(0 TO 50)
 DIM SHARED timerCvalue(0 TO 50)
 DIM SHARED timerLast
 
-
 pi = 3.14128
 
 turnon
@@ -28,11 +27,11 @@ SCREEN 7, , , 1
 
 timerinit
 s = 50
+' Main loop label
 2
 s1 = SIN(timerCvalue(1) * 1.3) * .5 + 1.1
 s2 = COS(timerCvalue(1) * 1.3) * .5 + 1.1
 
-
 frm = frm + 1
 sv1 = 5 * s1
 sv2 = 2
@@ -42,14 +41,16 @@ sh1 = 2 * s2
 sh2 = 1.4
 hp = SIN(timerCvalue(1)) * .7
 
-
+' Draw main object
 mo timerCvalue(2), timerCvalue(3), timerCvalue(4), timerCvalue(0), 0
 
+' Draw ellipses
 ellips 100, timerCvalue(6), timerCvalue(7) + 4, 14, .5
 ellips 100, timerCvalue(6), timerCvalue(7) + 2, 10, .5
 ellips 100, timerCvalue(6), timerCvalue(7), 0, .5
 prn timerCvalue(5), 10, "KHK", 7, 250
 
+' Print messages
 prn timerCvalue(8), 130, "Infotehno-", 2, 0
 prn timerCvalue(8), 150, "   loogia", 2, 0
 
@@ -60,293 +61,320 @@ IF timerCtime(0) > 26 THEN CHAIN "ray.bas"
 PCOPY 0, 1
 LINE (0, 0)-(319, 199), 15, BF
 GOTO 2
-SYSTEM
 
 SUB ellips (x, y, s, v, t)
+    ' Draw an ellipse if x and y are positive
+    IF x > 0 THEN
+        IF y > 0 THEN
+            CIRCLE (x, y), s, v, , , t
+            PAINT (x, y), v
+        END IF
+    END IF
+END SUB
 
-IF x > 0 THEN
-IF y > 0 THEN
+SUB mo (x, y, an, s, w)
+    depth = depth + 1
 
-CIRCLE (x, y), s, v, , , t
-PAINT (x, y), v
+    ' If size is less than .2, skip drawing
+    IF s < .2 THEN GOTO 1
 
-END IF
-END IF
+    ' Determine color based on depth
+    IF depth / 2 = depth \ 2 THEN c = 1 ELSE c = 3
 
-END SUB
+    CIRCLE (x, y), s, c
+    PAINT (x, y), c
 
-SUB mo (x, y, an, s, w)
-depth = depth + 1
-IF s < .2 THEN GOTO 1
-
-IF depth / 2 = depth \ 2 THEN c = 1 ELSE c = 3
-
-CIRCLE (x, y), s, c
-PAINT (x, y), c
-
-IF w <> 1 THEN
-x1 = SIN(an) * s * 2.5 + x
-y1 = COS(an) * s * 2.5 + y
-IF w = 3 THEN ns = s / sv2 ELSE ns = s / sv1
-mo x1, y1, an + vp, ns, 3
-END IF
-
-IF w <> 2 THEN
-x1 = SIN(an - pi / 2) * s * 2.5 + x
-y1 = COS(an - pi / 2) * s * 2.5 + y
-IF w = 4 THEN ns = s / sh2 ELSE ns = s / sh1
-mo x1, y1, an + hp, ns, 4
-END IF
-
-IF w <> 3 THEN
-x1 = SIN(an - pi) * s * 2.5 + x
-y1 = COS(an - pi) * s * 2.5 + y
-IF w = 1 THEN ns = s / sv2 ELSE ns = s / sv1
-mo x1, y1, an + vp, ns, 1
-END IF
-
-IF w <> 4 THEN
-x1 = SIN(an - pi * 1.5) * s * 2.5 + x
-y1 = COS(an - pi * 1.5) * s * 2.5 + y
-IF w = 2 THEN ns = s / sh2 ELSE ns = s / sh1
-mo x1, y1, an + hp, ns, 2
-END IF
+    IF w <> 1 THEN
+        x1 = SIN(an) * s * 2.5 + x
+        y1 = COS(an) * s * 2.5 + y
 
-1
-depth = depth - 1
-END SUB
+        ' Change size based on the value of w
+        IF w = 3 THEN ns = s / sv2 ELSE ns = s / sv1
 
-SUB playsound (a$)
-SHELL "c:\progra~1\winamp\winamp.exe " + a$
-SCREEN 0
-SCREEN 7, , , 1
+        mo x1, y1, an + vp, ns, 3
+    END IF
 
-END SUB
+    IF w <> 2 THEN
+        x1 = SIN(an - pi / 2) * s * 2.5 + x
+        y1 = COS(an - pi / 2) * s * 2.5 + y
 
-SUB prn (x, y, msg$, siz, col1)
-IF x < 0 THEN GOTO prn1
-IF x > 319 THEN GOTO prn1
+        ' Change size based on the value of w
+        IF w = 4 THEN ns = s / sh2 ELSE ns = s / sh1
 
-DIM bck(10000)
+        mo x1, y1, an + hp, ns, 4
+    END IF
 
-GET (0, 0)-(100, 7), bck
-LOCATE 1, 1
-PRINT msg$
-
-col = col1
-
-FOR x1 = 0 TO LEN(msg$) * 8 - 1
-FOR y1 = 0 TO 7
-  IF POINT(x1, y1) > 0 THEN
-    rx = x1 * siz + x
-    ry = y1 * siz + y
-    IF col1 > 100 THEN col = RND * 4 + 10
-    IF col1 > 200 THEN
-      LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, B
-    ELSE
-      LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, BF
+    IF w <> 3 THEN
+        x1 = SIN(an - pi) * s * 2.5 + x
+        y1 = COS(an - pi) * s * 2.5 + y
+
+        ' Change size based on the value of w
+        IF w = 1 THEN ns = s / sv2 ELSE ns = s / sv1
+
+        mo x1, y1, an + vp, ns, 1
+    END IF
+
+    IF w <> 4 THEN
+        x1 = SIN(an - pi * 1.5) * s * 2.5 + x
+        y1 = COS(an - pi * 1.5) * s * 2.5 + y
+
+        ' Change size based on the value of w
+        IF w = 2 THEN ns = s / sh2 ELSE ns = s / sh1
+
+        mo x1, y1, an + hp, ns, 2
     END IF
-'      LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, BF
-  END IF
-NEXT y1
-NEXT x1
 
+1
+    depth = depth - 1
+END SUB
+
+SUB playsound (a$)
+    SHELL "c:\progra~1\winamp\winamp.exe " + a$
+    ' Temporarily switch to text mode
+    SCREEN 0
+    ' Switch back to graphics mode
+    SCREEN 7, , , 1
+END SUB
 
-PUT (0, 0), bck, PSET
+SUB prn (x, y, msg$, siz, col1)
+    IF x < 0 THEN GOTO prn1
+    IF x > 319 THEN GOTO prn1
+
+    DIM bck(10000)
+
+    ' Save a portion of the screen to buffer
+    GET (0, 0)-(100, 7), bck
+
+    LOCATE 1, 1
+    PRINT msg$
+
+    col = col1
+
+    FOR x1 = 0 TO LEN(msg$) * 8 - 1
+        FOR y1 = 0 TO 7
+            IF POINT(x1, y1) > 0 THEN
+                ' Calculate the coordinates for the enlarged character
+                rx = x1 * siz + x
+                ry = y1 * siz + y
+
+                IF col1 > 100 THEN
+                    col = RND * 4 + 10
+
+                    ' Draw a solid box or outlined box based on the color value
+                    IF col1 > 200 THEN
+                        LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, B
+                    ELSE
+                        LINE (rx, ry)-(rx + siz - 1, ry + siz - 1), col, BF
+                    END IF
+                END IF
+            END IF
+        NEXT y1
+    NEXT x1
+
+    ' Restore the saved portion of the screen
+    PUT (0, 0), bck, PSET
 prn1:
 END SUB
 
 SUB timerAdd (element, time, value)
 
-FOR a = 0 TO 100
-  IF (timerTime(element, a) = 0) AND (timerValue(element, a) = 0) THEN GOTO timer3
-NEXT a
+    FOR a = 0 TO 100
+        IF (timerTime(element, a) = 0) AND (timerValue(element, a) = 0) THEN GOTO timer3
+    NEXT a
+
 timer3:
 
-timerTime(element, a) = time
-timerValue(element, a) = value
+    timerTime(element, a) = time
+    timerValue(element, a) = value
 
 END SUB
 
 SUB timerdisp
-LOCATE 1, 1
+    LOCATE 1, 1
 
-FOR a = 0 TO 10
-  PRINT timerCplace(a), timerCtime(a), timerCvalue(a)
-NEXT a
+    ' Display the current state of timers
+    FOR a = 0 TO 10
+        PRINT timerCplace(a), timerCtime(a), timerCvalue(a)
+    NEXT a
 
 END SUB
 
 SUB timerinit
-timerLast = TIMER
-
-paus = 24
-
-' stuff size
-timerAdd 0, 0, 50
-timerAdd 0, 7, 10
-timerAdd 0, 20, 10
-timerAdd 0, 24, 0
-timerAdd 0, 1000, 0
+    timerLast = TIMER
 
+    paus = 24
 
-' stuff speed
-timerAdd 1, 0, .1
-timerAdd 1, 1000, 1000
+    ' Initialize stuff size
+    timerAdd 0, 0, 50
+    timerAdd 0, 7, 10
+    timerAdd 0, 20, 10
+    timerAdd 0, 24, 0
+    timerAdd 0, 1000, 0
 
-' stuff X & Y
-timerAdd 2, 0, 160
-timerAdd 3, 0, 100
+    ' Initialize stuff speed
+    timerAdd 1, 0, .1
+    timerAdd 1, 1000, 1000
 
-timerAdd 2, 5, 160
-timerAdd 3, 5, 100
+    ' Initialize stuff X & Y
+    timerAdd 2, 0, 160
+    timerAdd 3, 0, 100
 
-timerAdd 2, 9, 280
-timerAdd 3, 9, 160
+    timerAdd 2, 5, 160
+    timerAdd 3, 5, 100
 
-timerAdd 2, 10, 280
-timerAdd 3, 10, 160
+    timerAdd 2, 9, 280
+    timerAdd 3, 9, 160
 
-timerAdd 2, 20, 40
-timerAdd 3, 20, 160
+    timerAdd 2, 10, 280
+    timerAdd 3, 10, 160
 
-timerAdd 2, 1000, 40
-timerAdd 3, 1000, 160
+    timerAdd 2, 20, 40
+    timerAdd 3, 20, 160
 
-' stuff rotations
-timerAdd 4, 0, .1
-timerAdd 4, 10, .1
-timerAdd 4, 22, 18
-timerAdd 4, 2000, 10000
+    timerAdd 2, 1000, 40
+    timerAdd 3, 1000, 160
 
-' KHK message X
+    ' Initialize stuff rotations
+    timerAdd 4, 0, .1
+    timerAdd 4, 10, .1
+    timerAdd 4, 22, 18
+    timerAdd 4, 2000, 10000
 
-timerAdd 5, 0, -1
-timerAdd 5, 5, -1
-timerAdd 5, 9, 50
-timerAdd 5, 10, 30
-timerAdd 5, paus, 30
-timerAdd 5, paus + 2, 321
+    ' Initialize KHK message X
 
-' Ellips Y & radius
-timerAdd 6, 0, -1
-timerAdd 6, 4, -1
-timerAdd 6, 10, 30
-timerAdd 6, 1000, 50
+    timerAdd 5, 0, -1
+    timerAdd 5, 5, -1
+    timerAdd 5, 9, 50
+    timerAdd 5, 10, 30
+    timerAdd 5, paus, 30
+    timerAdd 5, paus + 2, 321
 
-timerAdd 7, 0, 1
-timerAdd 7, 6, 1
-timerAdd 7, 12, 130
+    ' Initialize Ellips Y & radius
+    timerAdd 6, 0, -1
+    timerAdd 6, 4, -1
+    timerAdd 6, 10, 30
+    timerAdd 6, 1000, 50
 
-timerAdd 7, paus, 130
-timerAdd 7, paus + 2, 1
+    timerAdd 7, 0, 1
+    timerAdd 7, 6, 1
+    timerAdd 7, 12, 130
 
-' "Infotehnoloogia" message
+    timerAdd 7, paus, 130
+    timerAdd 7, paus + 2, 1
 
-timerAdd 8, 0, 320
-timerAdd 8, 11, 320
-timerAdd 8, 20, 100
-timerAdd 8, paus, 100
-timerAdd 8, paus + 1, -1
+    ' Initialize "Infotehnoloogia" message
 
+    timerAdd 8, 0, 320
+    timerAdd 8, 11, 320
+    timerAdd 8, 20, 100
+    timerAdd 8, paus, 100
+    timerAdd 8, paus + 1, -1
 
 END SUB
 
 SUB timerprocess
+    timerCurrent = TIMER
+    timerDiff = timerCurrent - timerLast
+    timerLast = timerCurrent
 
-timerCurrent = TIMER
-timerDiff = timerCurrent - timerLast
-timerLast = timerCurrent
-
-FOR a = 0 TO 50
-  ctim = timerCtime(a) + timerDiff
-  Cplace = timerCplace(a)
+    FOR a = 0 TO 50
+        ctim = timerCtime(a) + timerDiff
+        Cplace = timerCplace(a)
 timer2:
-  IF timerTime(a, Cplace + 1) = -1 THEN
-    ctim = 0
-    Cplace = 0
-  END IF
-  IF timerTime(a, Cplace + 1) < ctim THEN
-    IF timerTime(a, Cplace + 1) = 0 THEN
-      timerCvalue(a) = timerValue(a, Cplace)
-      GOTO timer1:
-    END IF
-    Cplace = Cplace + 1
-    GOTO timer2
-  END IF
-
-  v1 = timerValue(a, Cplace)
-  t1 = timerTime(a, Cplace)
-  v2 = timerValue(a, Cplace + 1)
-  t2 = timerTime(a, Cplace + 1)
-
-  IF v1 = v2 THEN
-    timerCvalue(a) = v1
-  ELSE
-    Tdiff1 = t2 - t1
-    Tdiff2 = ctim - t1
-    Vdiff = v2 - v1
-    timerCvalue(a) = Tdiff2 / Tdiff1 * Vdiff + v1
-  END IF
+        IF timerTime(a, Cplace + 1) = -1 THEN
+            ctim = 0
+            Cplace = 0
+        END IF
+
+        ' Update the current time and value of each element
+        IF timerTime(a, Cplace + 1) < ctim THEN
+            IF timerTime(a, Cplace + 1) = 0 THEN
+                timerCvalue(a) = timerValue(a, Cplace)
+                GOTO timer1
+            END IF
+
+            Cplace = Cplace + 1
+            GOTO timer2
+        END IF
+
+        v1 = timerValue(a, Cplace)
+        t1 = timerTime(a, Cplace)
+        v2 = timerValue(a, Cplace + 1)
+        t2 = timerTime(a, Cplace + 1)
+
+        IF v1 = v2 THEN
+            timerCvalue(a) = v1
+        ELSE
+            Tdiff1 = t2 - t1
+            Tdiff2 = ctim - t1
+            Vdiff = v2 - v1
+
+            ' Interpolate the current value
+            timerCvalue(a) = Tdiff2 / Tdiff1 * Vdiff + v1
+        END IF
 timer1:
-  timerCplace(a) = Cplace
-  timerCtime(a) = ctim
-NEXT a
+        timerCplace(a) = Cplace
+        timerCtime(a) = ctim
+    NEXT a
 
 END SUB
 
 SUB turnon
-a$ = INPUT$(1)
-playsound "marine.mp3"
+    ' Read user input
+    a$ = INPUT$(1)
 
-SCREEN 7, , , 1
+    ' Play sound
+    playsound "marine.mp3"
 
-FOR x = 0 TO 160 STEP 15
-  LINE (160 - x - 5, 90 - 5)-(160 + x + 5, 110 + 5), 1, BF
-  LINE (160 - x - 3, 90 - 3)-(160 + x + 3, 110 + 3), 3, BF
-  LINE (160 - x, 90)-(160 + x, 110), 15, BF
-
-  PCOPY 0, 1
-  CLS
-  SOUND 0, .5
-NEXT x
-
-FOR y = 10 TO 100 STEP 15
-  CLS
-
-  LINE (160 - x - 5, 90 - y - 5)-(160 + x + 5, 110 + y + 5), 1, BF
-  LINE (160 - x - 3, 90 - y - 3)-(160 + x + 3, 110 + y + 3), 3, BF
-  LINE (160 - x, 90 - y)-(160 + x, 110 + y), 15, BF
-
-  PCOPY 0, 1
-  SOUND 0, .5
-NEXT y
-
-FOR a = 1 TO 25
-  prn RND * 250, RND * 180, STR$(INT(RND * 2)), 3, 0
-  PCOPY 0, 1
-  SOUND 0, 1
-NEXT a
-
-DIM buf(1 TO 1000)
-FOR b = 1 TO 30
-FOR a = 0 TO 195
-  t = ABS(100 - a)
-
-  IF RND * 50 < t THEN
-    GET (1, a)-(318, a + 1), buf
-    IF a > 100 THEN
-      PUT (0, a), buf, PSET
-    ELSE
-      PUT (2, a), buf, PSET
-    END IF
-  END IF
-NEXT a
-PCOPY 0, 1
-'SOUND 0, 1
-NEXT b
+    SCREEN 7, , , 1
 
+    FOR x = 0 TO 160 STEP 15
+        LINE (160 - x - 5, 90 - 5)-(160 + x + 5, 110 + 5), 1, BF
+        LINE (160 - x - 3, 90 - 3)-(160 + x + 3, 110 + 3), 3, BF
+        LINE (160 - x, 90)-(160 + x, 110), 15, BF
 
-END SUB
+        PCOPY 0, 1
+        CLS
+        SOUND 0, .5
+    NEXT x
+
+    FOR y = 10 TO 100 STEP 15
+        CLS
+
+        LINE (160 - x - 5, 90 - y - 5)-(160 + x + 5, 110 + y + 5), 1, BF
+        LINE (160 - x - 3, 90 - y - 3)-(160 + x + 3, 110 + y + 3), 3, BF
+        LINE (160 - x, 90 - y)-(160 + x, 110 + y), 15, BF
+
+        PCOPY 0, 1
+        SOUND 0, .5
+    NEXT y
+
+    FOR a = 1 TO 25
+        prn RND * 250, RND * 180, STR$(INT(RND * 2)), 3, 0
+        PCOPY 0, 1
+        SOUND 0, 1
+    NEXT a
+
+    DIM buf(1 TO 1000)
+
+    FOR b = 1 TO 30
+        FOR a = 0 TO 195
+            t = ABS(100 - a)
+
+            IF RND * 50 < t THEN
+                GET (1, a)-(318, a + 1), buf
+
+                ' Randomly shift parts of the screen
+                IF a > 100 THEN
+                    PUT (0, a), buf, PSET
+                ELSE
+                    PUT (2, a), buf, PSET
+                END IF
+            END IF
+        NEXT a
+
+        PCOPY 0, 1
+    'SOUND 0, 1
+    NEXT b
 
+END SUB
\ No newline at end of file