Using AI to improve code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Thu, 29 Aug 2024 10:33:59 +0000 (13:33 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Thu, 29 Aug 2024 10:33:59 +0000 (13:33 +0300)
Math/valem.bas
Miscellaneous/wsystem.bas
Networking/Morse/morse.bas
Simulation/life/life.bas
Sound/siren1.bas

index 1a73618..659c0f0 100755 (executable)
@@ -1,6 +1,15 @@
+' Program to perform mathematical computation.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' ?, Initial version\r
+' 2024.08, Improved program readability using AI\r
+\r
 DEFDBL A-Z\r
 SCREEN 13\r
-pi = 3.141285\r
+pi = 3.14159\r
 \r
 p1 = -1\r
 p2 = 4\r
@@ -11,8 +20,8 @@ bli = -1
 \r
 siz = 100 / dia\r
 FOR a = 0 TO 100 STEP 100 / dia\r
-  LINE (0, 100 + a)-(319, 100 + a), 2\r
-  LINE (0, 100 - a)-(319, 100 - a), 2\r
+    LINE (0, 100 + a)-(319, 100 + a), 2\r
+    LINE (0, 100 - a)-(319, 100 - a), 2\r
 NEXT a\r
 \r
 LINE (0, 100)-(319, 100), 10\r
@@ -20,28 +29,27 @@ ste = (p2 - p1) / 319
 o = 0\r
 FOR x = p1 TO p2 STEP ste / 20\r
 \r
-  y = x ^ 2 - 3 * x\r
+    y = x ^ 2 - 3 * x\r
 \r
-u = ABS(INT(x) - x)\r
-IF u >= lu THEN su = 1 ELSE su = 0\r
-lu = u\r
-rx = (x - p1) * (1 / ste)\r
-IF lsu > su THEN tl = 1\r
-lsu = su\r
-y = y - mi\r
-IF y > tli THEN y = tli\r
-IF y < bli THEN y = bli\r
-s = s + ABS(y)\r
-ry = -y * siz + 100\r
-IF ry > 199 THEN ry = 199\r
-IF ry < 0 THEN ry = 0\r
-o = o + 1\r
-IF o = 20 THEN\r
-  o = 0\r
-  IF tl = 1 THEN LINE (rx, 0)-(rx, 199), 4: tl = 0\r
-  LINE (rx, 100)-(rx, ry), 15\r
-END IF\r
+    u = ABS(INT(x) - x)\r
+    IF u >= lu THEN su = 1 ELSE su = 0\r
+    lu = u\r
+    rx = (x - p1) * (1 / ste)\r
+    IF lsu > su THEN tl = 1\r
+    lsu = su\r
+    y = y - mi\r
+    IF y > tli THEN y = tli\r
+    IF y < bli THEN y = bli\r
+    s = s + ABS(y)\r
+    ry = -y * siz + 100\r
+    IF ry > 199 THEN ry = 199\r
+    IF ry < 0 THEN ry = 0\r
+    o = o + 1\r
+    IF o = 20 THEN\r
+        o = 0\r
+        IF tl = 1 THEN LINE (rx, 0)-(rx, 199), 4: tl = 0\r
+        LINE (rx, 100)-(rx, ry), 15\r
+    END IF\r
 NEXT x\r
 LOCATE 1, 1\r
 PRINT s / (1 / ste) / 20\r
-\r
index be1c406..62824f0 100755 (executable)
@@ -1,6 +1,11 @@
-' window engine, 2003\r
-' Svjatoslav Agejenko\r
-' svjatoslav@svjatoslav.eu\r
+' Text mode windowing system. Each window can display text file.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2003, Initial version\r
+' 2024.08, Improved program readability using AI\r
 \r
 DECLARE SUB demo ()\r
 DECLARE FUNCTION getline$ (w%, l%)\r
@@ -33,174 +38,197 @@ start
 \r
 demo\r
 \r
-FUNCTION addpage (x, y, xs, ys, title$)\r
-FOR a = 1 TO 10\r
-  IF pagon(a) = 0 THEN b = a: GOTO 1\r
-NEXT a\r
+FUNCTION addpage% (x, y, xs, ys, title$)\r
+    FOR a = 1 TO 10\r
+        IF pagon(a) = 0 THEN\r
+            b = a\r
+            GOTO 1\r
+        END IF\r
+    NEXT a\r
 1\r
 \r
-pagon(b) = 1\r
-pagx(b) = x\r
-pagy(b) = y\r
-pagxs(b) = xs\r
-pagys(b) = ys\r
-pagtitle$(b) = title$\r
+    pagon(b) = 1\r
+    pagx(b) = x\r
+    pagy(b) = y\r
+    pagxs(b) = xs\r
+    pagys(b) = ys\r
+    pagtitle$(b) = title$\r
 \r
-addpage = b\r
+    addpage% = b\r
 END FUNCTION\r
 \r
 SUB clrwnd (w)\r
-FOR a = 1 TO 1000\r
-  IF pag(w, a) > 0 THEN st$(pag(w, a)) = "": pag(w, a) = 0\r
-NEXT a\r
+    FOR a = 1 TO 1000\r
+        IF pag(w, a) > 0 THEN\r
+            st$(pag(w, a)) = ""\r
+            pag(w, a) = 0\r
+        END IF\r
+    NEXT a\r
 END SUB\r
 \r
 SUB demo\r
-w1 = addpage(1, 1, 30, 10, "window 1.")\r
-w2 = addpage(1, 12, 80, 30, "second window")\r
-w3 = addpage(31, 2, 30, 10, "last window")\r
+    w1 = addpage%(1, 1, 30, 10, "window 1.")\r
+    w2 = addpage%(1, 12, 80, 30, "second window")\r
+    w3 = addpage%(31, 2, 30, 10, "last window")\r
 \r
-loadfile "wsystem.bas", w2\r
-loadfile "wsystem.bas", w1\r
-loadfile "wsystem.bas", w3\r
+    loadfile "wsystem.bas", w2\r
+    loadfile "wsystem.bas", w1\r
+    loadfile "wsystem.bas", w3\r
 \r
 4\r
-pageactive = INT(RND * 3) + 1\r
-refresh\r
-\r
-FOR a = 1 TO 100\r
-  pagshx(pageactive) = SIN(a / 10) * 10 + 10\r
-  pagshy(pageactive) = a\r
-  shpage pageactive\r
-  SOUND 0, 1\r
-  IF INKEY$ <> "" THEN SYSTEM\r
-NEXT a\r
-\r
-GOTO 4\r
+    pageactive = INT(RND * 3) + 1\r
+    refresh\r
+\r
+    FOR a = 1 TO 100\r
+        pagshx(pageactive) = SIN(a / 10) * 10 + 10\r
+        pagshy(pageactive) = a\r
+        shpage (pageactive)\r
+        SOUND 0, 1\r
+        IF INKEY$ <> "" THEN SYSTEM\r
+    NEXT a\r
+\r
+    GOTO 4\r
 END SUB\r
 \r
-FUNCTION getflin ' Get free line\r
+FUNCTION getflin% ' Get free line\r
 2\r
-IF stpn > 1000 THEN stpn = 1\r
-IF st$(stpn) = "" THEN\r
-  getflin = stpn\r
-  stpn = stpn + 1\r
-ELSE\r
-  stpn = stpn + 1\r
-  GOTO 2\r
-END IF\r
+    IF stpn > 1000 THEN\r
+        stpn = 1\r
+    END IF\r
+    IF st$(stpn) = "" THEN\r
+        getflin% = stpn\r
+        stpn = stpn + 1\r
+    ELSE\r
+        stpn = stpn + 1\r
+        GOTO 2\r
+    END IF\r
 END FUNCTION\r
 \r
 FUNCTION getline$ (w, l)\r
-IF pag(w, l) = 0 THEN\r
-  getline$ = ""\r
-ELSE\r
-  getline$ = st$(pag(w, l))\r
-END IF\r
+    IF pag(w, l) = 0 THEN\r
+        getline$ = ""\r
+    ELSE\r
+        getline$ = st$(pag(w, l))\r
+    END IF\r
 END FUNCTION\r
 \r
 SUB loadfile (file$, d)\r
 \r
-OPEN file$ FOR INPUT AS #1\r
-FOR a = 1 TO 1000\r
-  IF EOF(1) <> 0 THEN GOTO 3\r
-  LINE INPUT #1, a$\r
-  sendline d, a, a$\r
-NEXT a\r
+    OPEN file$ FOR INPUT AS #1\r
+    FOR a = 1 TO 1000\r
+        IF EOF(1) <> 0 THEN\r
+            GOTO 3\r
+        END IF\r
+        LINE INPUT #1, a$\r
+        sendline d, a, a$\r
+    NEXT a\r
 3\r
-CLOSE #1\r
 \r
-FOR b = a TO 1000\r
-  sendline d, b, ""\r
-NEXT b\r
+    CLOSE #1\r
+\r
+    FOR b = a TO 1000\r
+        sendline d, b, ""\r
+    NEXT b\r
 END SUB\r
 \r
 SUB refresh\r
-CLS\r
-FOR a = 1 TO 10\r
-IF pagon(a) > 0 THEN shpage (a)\r
-NEXT a\r
+    CLS\r
+    FOR a = 1 TO 10\r
+        IF pagon(a) > 0 THEN\r
+            shpage (a)\r
+        END IF\r
+    NEXT a\r
 END SUB\r
 \r
 SUB sendline (w, l, newstring$) ' window, lineNum, lineItself\r
-                        ' send string into window memory\r
-a$ = newstring$\r
+                                ' send string into window memory\r
+    a$ = newstring$\r
 \r
-IF a$ = SPACE$(LEN(a$)) THEN a$ = ""\r
+    IF a$ = SPACE$(LEN(a$)) THEN\r
+        a$ = ""\r
+    END IF\r
 \r
-IF LEN(a$) > 0 THEN\r
+    IF LEN(a$) > 0 THEN\r
 5\r
-  IF RIGHT$(a$, 1) = " " THEN\r
-    a$ = LEFT$(a$, LEN(a$) - 1)\r
-    GOTO 5\r
-  END IF\r
-END IF\r
-\r
-IF a$ = "" THEN\r
-  IF pag(w, l) > 0 THEN st$(pag(w, l)) = "": pag(w, l) = 0\r
-ELSE\r
-  IF pag(w, l) = 0 THEN pag(w, l) = getflin\r
-  st$(pag(w, l)) = a$\r
-END IF\r
+        IF RIGHT$(a$, 1) = " " THEN\r
+            a$ = LEFT$(a$, LEN(a$) - 1)\r
+            GOTO 5\r
+        END IF\r
+    END IF\r
+\r
+    IF a$ = "" THEN\r
+        IF pag(w, l) > 0 THEN\r
+            st$(pag(w, l)) = "": pag(w, l) = 0\r
+        END IF\r
+    ELSE\r
+        IF pag(w, l) = 0 THEN\r
+            pag(w, l) = getflin%\r
+        END IF\r
+        st$(pag(w, l)) = a$\r
+    END IF\r
 END SUB\r
 \r
 SUB shpage (page)\r
-IF page = pageactive THEN bg = 1 ELSE bg = 0\r
-\r
-x = pagx(page)\r
-y = pagy(page)\r
-xl = pagxs(page)\r
-yl = pagys(page)\r
-e$ = pagtitle$(page)\r
-\r
-COLOR 11, bg\r
-\r
-a$ = ""\r
-d$ = ""\r
-FOR a = 1 TO xl - 2\r
-a$ = a$ + CHR$(205)\r
-NEXT a\r
-b$ = CHR$(201) + a$ + CHR$(187)\r
-c$ = CHR$(200) + a$ + CHR$(188)\r
-\r
-LOCATE y, x\r
-PRINT b$\r
-LOCATE y + yl - 1, x\r
-PRINT c$\r
-\r
-FOR a = 1 TO yl - 2\r
-  LOCATE y + a, x\r
-  d$ = getline(page, a + pagshy(page))\r
-  d$ = d$ + SPACE$(300)\r
-  d$ = RIGHT$(d$, LEN(d$) - pagshx(page))\r
-  d$ = LEFT$(d$, xl - 2)\r
-  PRINT CHR$(186) + d$ + CHR$(186)\r
-NEXT a\r
-\r
-xt = INT(x + (xl / 2) - (LEN(e$) / 2) - 2)\r
-LOCATE y, xt\r
-PRINT "[ "\r
-xt = xt + 2\r
-\r
-COLOR 10\r
-LOCATE y, xt\r
-PRINT e$\r
-\r
-xt = xt + LEN(e$)\r
-COLOR 11\r
-LOCATE y, xt\r
-PRINT " ]"\r
-COLOR 7, 0\r
+    IF page = pageactive THEN\r
+        bg = 1\r
+    ELSE\r
+        bg = 0\r
+    END IF\r
+\r
+    x = pagx(page)\r
+    y = pagy(page)\r
+    xl = pagxs(page)\r
+    yl = pagys(page)\r
+    e$ = pagtitle$(page)\r
+\r
+    COLOR 11, bg\r
+\r
+    a$ = ""\r
+    d$ = ""\r
+    FOR a = 1 TO xl - 2\r
+        a$ = a$ + CHR$(205)\r
+    NEXT a\r
+    b$ = CHR$(201) + a$ + CHR$(187)\r
+    c$ = CHR$(200) + a$ + CHR$(188)\r
+\r
+    LOCATE y, x\r
+    PRINT b$\r
+    LOCATE y + yl - 1, x\r
+    PRINT c$\r
+\r
+    FOR a = 1 TO yl - 2\r
+        LOCATE y + a, x\r
+        d$ = getline$(page, a + pagshy(page))\r
+        d$ = d$ + SPACE$(300)\r
+        d$ = RIGHT$(d$, LEN(d$) - pagshx(page))\r
+        d$ = LEFT$(d$, xl - 2)\r
+        PRINT CHR$(186) + d$ + CHR$(186)\r
+    NEXT a\r
+\r
+    xt = INT(x + (xl / 2) - (LEN(e$) / 2) - 2)\r
+    LOCATE y, xt\r
+    PRINT "[ "\r
+    xt = xt + 2\r
+\r
+    COLOR 10\r
+    LOCATE y, xt\r
+    PRINT e$\r
+\r
+    xt = xt + LEN(e$)\r
+    COLOR 11\r
+    LOCATE y, xt\r
+    PRINT " ]"\r
+    COLOR 7, 0\r
 END SUB\r
 \r
 SUB start\r
-WIDTH 80, 50\r
-VIEW PRINT 1 TO 50\r
+    WIDTH 80, 50\r
+    VIEW PRINT 1 TO 50\r
 \r
-FOR a = 1 TO stamo\r
-st$(a) = ""\r
-NEXT a\r
+    FOR a = 1 TO stamo\r
+        st$(a) = ""\r
+    NEXT a\r
 \r
-stpn = 1\r
+    stpn = 1\r
 END SUB\r
 \r
index 97d958a..54895ba 100755 (executable)
@@ -1,34 +1,52 @@
+' Plays entered text in morse code audio beeps using PC-speaker.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2003, Initial version\r
+' 2024.08, Improved program readability using AI\r
+\r
+\r
 ' Svjatoslav Agejenko 2003\r
 \r
-DECLARE SUB say ()\r
-DECLARE SUB laus (a$)\r
-DECLARE SUB char (a!)\r
+DECLARE SUB say()\r
+DECLARE SUB laus(a$)\r
+DECLARE SUB char(a!)\r
 DIM SHARED mors(0 TO 255, 0 TO 9)\r
 DIM SHARED spd\r
 spd = 1\r
 CLS\r
 \r
+' Open the Morse code file for reading\r
 OPEN "morse.txt" FOR INPUT AS #1\r
+\r
+' Label to read each line from the file\r
 2\r
 IF EOF(1) THEN GOTO 1\r
 LINE INPUT #1, a$\r
 \r
+' Process each character in the current line\r
 FOR b = 1 TO LEN(a$)\r
-c = ASC(RIGHT$(LEFT$(a$, b), 1))\r
-IF b = 1 THEN m = c\r
-IF b > 2 THEN\r
-d = 0\r
-IF c = ASC(".") THEN d = 1\r
-IF c = ASC("-") THEN d = 2\r
-mors(m, b - 2) = d\r
-END IF\r
+    c = ASC(RIGHT$(LEFT$(a$, b), 1))\r
+    IF b = 1 THEN m = c\r
+    IF b > 2 THEN\r
+        d = 0\r
+        IF c = ASC(".") THEN d = 1\r
+        IF c = ASC("-") THEN d = 2\r
+        mors(m, b - 2) = d\r
+    END IF\r
 NEXT b\r
 GOTO 2\r
+\r
+' Label to close the file\r
 1\r
 CLOSE\r
 \r
-\r
+' Prompt user for input\r
 PRINT "Type '.bye' to quit"\r
+\r
+' Main loop to read and process user input\r
 3\r
 PRINT ""\r
 INPUT "", a$\r
@@ -36,30 +54,31 @@ IF a$ = ".bye" THEN SYSTEM
 laus a$\r
 GOTO 3\r
 \r
-SUB char (a)\r
-PRINT CHR$(a);\r
-FOR b = 0 TO 9\r
-IF mors(a, b) = 1 THEN\r
-SOUND 1000, 1 * spd\r
-SOUND 0, 1 * spd\r
-END IF\r
+' Subroutine to play Morse code for a single character\r
+SUB char(a)\r
+    PRINT CHR$(a);\r
+    FOR b = 0 TO 9\r
+        IF mors(a, b) = 1 THEN\r
+            SOUND 1000, 1 * spd\r
+            SOUND 0, 1 * spd\r
+        END IF\r
 \r
-IF mors(a, b) = 2 THEN\r
-SOUND 1000, 3 * spd\r
-SOUND 0, 1 * spd\r
-END IF\r
-NEXT b\r
+        IF mors(a, b) = 2 THEN\r
+            SOUND 1000, 3 * spd\r
+            SOUND 0, 1 * spd\r
+        END IF\r
+    NEXT b\r
 \r
-FOR a = 0 TO 160\r
-SOUND 0, .1\r
-NEXT a\r
+    ' Short pause between Morse code characters\r
+    FOR a = 0 TO 160\r
+        SOUND 0, .1\r
+    NEXT a\r
 END SUB\r
 \r
-SUB laus (a$)\r
-\r
-FOR b = 1 TO LEN(a$)\r
-c = ASC(RIGHT$(LEFT$(a$, b), 1))\r
-char c\r
-NEXT b\r
+' Subroutine to process and play Morse code for an entire string\r
+SUB laus(a$)\r
+    FOR b = 1 TO LEN(a$)\r
+        c = ASC(RIGHT$(LEFT$(a$, b), 1))\r
+        char c\r
+    NEXT b\r
 END SUB\r
-\r
index 6d5baf1..e8b12fb 100755 (executable)
@@ -1,12 +1,13 @@
-CHDIR ".\qbasicapps\simulation\life"\r
-\r
-\r
-' Life simulator/editor\r
-' made by Svjatoslav Agejenko\r
-' in 2001\r
-' H-Page: svjatoslav.eu\r
-' E-Mail: svjatoslav@svjatoslav.eu\r
\r
+' Conway's Game of Life.\r
+' It has world editor, and can save/load worlds.\r
+'\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2001, Initial version\r
+' 2024.08, Improved program readability using AI\r
 \r
 ' in observing mode use keys:\r
 ' ---------------------------\r
@@ -21,7 +22,6 @@ CHDIR ".\qbasicapps\simulation\life"
 ' e - switch to edit mode\r
 ' q - quit\r
 \r
-\r
 ' in edit mode use keys:\r
 ' ----------------------\r
 \r
@@ -32,7 +32,6 @@ CHDIR ".\qbasicapps\simulation\life"
 ' SPACE - toggle cell on/off\r
 ' ESC - return to observing mode\r
 \r
-\r
 ' in select mode use keys:\r
 ' ------------------------\r
 \r
@@ -42,103 +41,103 @@ CHDIR ".\qbasicapps\simulation\life"
 ' x - cut\r
 ' ESC - return to edit mode\r
 \r
-\r
-DECLARE SUB load ()\r
-DECLARE SUB wri ()\r
-DECLARE SUB shbuf ()\r
+DECLARE SUB loadFile ()\r
+DECLARE SUB writeFile ()\r
+DECLARE SUB showBuffer ()\r
 DEFINT A-Z\r
 \r
-DECLARE SUB sel (x, y)\r
-DECLARE SUB cle ()\r
-DECLARE SUB ed ()\r
-DECLARE SUB disp ()\r
-DECLARE SUB cl ()\r
-DECLARE SUB proc ()\r
-DECLARE SUB start ()\r
-DIM SHARED buf1(1 TO 50, 1 TO 50)\r
-DIM SHARED buf2(1 TO 50, 1 TO 50)\r
-DIM SHARED mill\r
-DIM SHARED frm\r
-DIM SHARED ski\r
-DIM SHARED buf3(0 TO 50, 0 TO 50)\r
-DIM SHARED bufxs, bufys\r
-start\r
+DECLARE SUB selectMode (x, y)\r
+DECLARE SUB clearBuffers ()\r
+DECLARE SUB editMode ()\r
+DECLARE SUB displayGrid ()\r
+DECLARE SUB clearLine ()\r
+DECLARE SUB processLife ()\r
+DECLARE SUB initialize ()\r
+DIM SHARED buffer1(1 TO 50, 1 TO 50)\r
+DIM SHARED buffer2(1 TO 50, 1 TO 50)\r
+DIM SHARED millisecond\r
+DIM SHARED frame\r
+DIM SHARED skip\r
+DIM SHARED buffer3(0 TO 50, 0 TO 50)\r
+DIM SHARED bufferXSize, bufferYSize\r
+initialize\r
 \r
 1\r
-proc\r
-frm = frm + 1\r
+processLife\r
+frame = frame + 1\r
 \r
 2\r
 LOCATE 1, 27\r
-PRINT "frame:" + STR$(frm) + "   "\r
+PRINT "frame:" + STR$(frame) + "   "\r
 LOCATE 2, 27\r
-PRINT "skip:" + STR$(ski) + "   "\r
-\r
+PRINT "skip:" + STR$(skip) + "   "\r
 \r
-a$ = INKEY$\r
+key$ = INKEY$\r
 \r
-IF a$ = "s" THEN\r
-LOCATE 5, 27\r
-INPUT "skip ", ski\r
-cl\r
+IF key$ = "s" THEN\r
+    LOCATE 5, 27\r
+    INPUT "skip ", skip\r
+    clearLine\r
 END IF\r
 \r
-IF a$ = "q" THEN\r
-SYSTEM\r
+IF key$ = "q" THEN\r
+    SYSTEM\r
 END IF\r
 \r
-IF a$ = "n" THEN GOTO 1\r
+IF key$ = "n" THEN GOTO 1\r
 \r
-IF a$ = "c" THEN cle\r
+IF key$ = "c" THEN clearBuffers\r
 \r
-IF a$ = "e" THEN ed\r
+IF key$ = "e" THEN editMode\r
 \r
-IF a$ = "z" THEN ski = 0\r
+IF key$ = "z" THEN skip = 0\r
 \r
-IF a$ = "x" THEN ski = 10000\r
+IF key$ = "x" THEN skip = 10000\r
 \r
-IF a$ = "w" THEN wri\r
+IF key$ = "w" THEN writeFile\r
 \r
-IF a$ = "l" THEN load\r
+IF key$ = "l" THEN loadFile\r
 \r
-IF ski > 0 THEN ski = ski - 1: GOTO 1\r
+IF skip > 0 THEN\r
+    skip = skip - 1\r
+    GOTO 1\r
+END IF\r
 GOTO 2\r
 \r
-SUB cl\r
-LOCATE 5, 27\r
-PRINT "              "\r
-END SUB\r
-\r
-SUB cle\r
+SUB clearBuffers\r
 \r
 FOR y = 1 TO 50\r
-FOR x = 1 TO 50\r
-buf1(x, y) = 0\r
-buf2(x, y) = 0\r
-NEXT x\r
+    FOR x = 1 TO 50\r
+        buffer1(x, y) = 0\r
+        buffer2(x, y) = 0\r
+    NEXT x\r
 NEXT y\r
 \r
-mill = 0\r
-frm = 0\r
-ski = 0\r
+millisecond = 0\r
+frame = 0\r
+skip = 0\r
 \r
-disp\r
+displayGrid\r
 END SUB\r
 \r
-SUB disp\r
+SUB clearLine\r
+LOCATE 5, 27\r
+PRINT "              "\r
+END SUB\r
+\r
+SUB displayGrid\r
 \r
 FOR y = 1 TO 50\r
-FOR x = 1 TO 50\r
-IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)\r
-IF c = 0 THEN c = 1 ELSE c = 10\r
-LINE (x * 4, y * 4)-(x * 4 + 2, y * 4 + 2), c, BF\r
-NEXT x\r
+    FOR x = 1 TO 50\r
+        IF millisecond = 0 THEN clr = buffer1(x, y) ELSE clr = buffer2(x, y)\r
+        IF clr = 0 THEN clr = 1 ELSE clr = 10\r
+        LINE (x * 4, y * 4)-(x * 4 + 2, y * 4 + 2), clr, BF\r
+    NEXT x\r
 NEXT y\r
 \r
-\r
 END SUB\r
 \r
-SUB ed\r
+SUB editMode\r
 x = 25\r
 y = 25\r
 3\r
@@ -147,49 +146,49 @@ IF y < 1 THEN y = 1
 IF x > 50 THEN x = 50\r
 IF y > 49 THEN y = 49\r
 \r
-IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)\r
-IF c = 0 THEN c = 1 ELSE c = 10\r
-LINE (x * 4, y * 4)-(x * 4 + 2, y * 4 + 2), c, BF\r
+IF millisecond = 0 THEN clr = buffer1(x, y) ELSE clr = buffer2(x, y)\r
+IF clr = 0 THEN clr = 1 ELSE clr = 10\r
+LINE (x * 4, y * 4)-(x * 4 + 2, y * 4 + 2), clr, BF\r
 \r
 LINE (x * 4 - 1, y * 4 - 1)-(x * 4 + 3, y * 4 + 3), 14, B\r
 4\r
-a$ = INKEY$\r
-IF a$ = "" THEN GOTO 4\r
+key$ = INKEY$\r
+IF key$ = "" THEN GOTO 4\r
 \r
 LINE (x * 4 - 1, y * 4 - 1)-(x * 4 + 3, y * 4 + 3), 0, B\r
 \r
-IF a$ = CHR$(0) + "M" THEN x = x + 1\r
-IF a$ = CHR$(0) + "K" THEN x = x - 1\r
-IF a$ = CHR$(0) + "P" THEN y = y + 1\r
-IF a$ = CHR$(0) + "H" THEN y = y - 1\r
-IF a$ = "6" THEN x = x + 8\r
-IF a$ = "4" THEN x = x - 8\r
-IF a$ = "2" THEN y = y + 8\r
-IF a$ = "8" THEN y = y - 8\r
-\r
-IF a$ = CHR$(27) THEN GOTO 5\r
-IF a$ = "s" THEN sel x, y\r
-\r
-IF a$ = "v" THEN\r
-FOR y1 = 0 TO bufys\r
-FOR x1 = 0 TO bufxs\r
-c = buf3(x1, y1)\r
-x2 = x1 + x\r
-y2 = y1 + y\r
-\r
-IF (x2 < 50) AND (y2 < 50) THEN\r
-IF mill = 0 THEN buf1(x2, y2) = c ELSE buf2(x2, y2) = c\r
+IF key$ = CHR$(0) + "M" THEN x = x + 1\r
+IF key$ = CHR$(0) + "K" THEN x = x - 1\r
+IF key$ = CHR$(0) + "P" THEN y = y + 1\r
+IF key$ = CHR$(0) + "H" THEN y = y - 1\r
+IF key$ = "6" THEN x = x + 8\r
+IF key$ = "4" THEN x = x - 8\r
+IF key$ = "2" THEN y = y + 8\r
+IF key$ = "8" THEN y = y - 8\r
+\r
+IF key$ = CHR$(27) THEN GOTO 5\r
+IF key$ = "s" THEN selectMode x, y\r
+\r
+IF key$ = "v" THEN\r
+    FOR y1 = 0 TO bufferYSize\r
+        FOR x1 = 0 TO bufferXSize\r
+            clr = buffer3(x1, y1)\r
+            x2 = x1 + x\r
+            y2 = y1 + y\r
+\r
+            IF (x2 < 50) AND (y2 < 50) THEN\r
+                IF millisecond = 0 THEN buffer1(x2, y2) = clr ELSE buffer2(x2, y2) = clr\r
+            END IF\r
+\r
+        NEXT x1\r
+    NEXT y1\r
+    displayGrid\r
 END IF\r
 \r
-NEXT x1\r
-NEXT y1\r
-disp\r
-END IF\r
-\r
-IF a$ = " " THEN\r
-IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)\r
-IF c = 1 THEN c = 0 ELSE c = 1\r
-IF mill = 0 THEN buf1(x, y) = c ELSE buf2(x, y) = c\r
+IF key$ = " " THEN\r
+    IF millisecond = 0 THEN clr = buffer1(x, y) ELSE clr = buffer2(x, y)\r
+    IF clr = 1 THEN clr = 0 ELSE clr = 1\r
+    IF millisecond = 0 THEN buffer1(x, y) = clr ELSE buffer2(x, y) = clr\r
 END IF\r
 \r
 GOTO 3\r
@@ -197,86 +196,97 @@ GOTO 3
 \r
 END SUB\r
 \r
-SUB load\r
+SUB initialize\r
+SCREEN 13\r
+RANDOMIZE TIMER\r
+\r
+bufferXSize = 0\r
+bufferYSize = 0\r
+\r
+clearBuffers\r
+\r
+END SUB\r
+\r
+SUB loadFile\r
 \r
-cle\r
+clearBuffers\r
 LOCATE 5, 27\r
-INPUT "file ", f$\r
-cl\r
+INPUT "file ", filename$\r
+clearLine\r
 \r
 y = 1\r
-OPEN f$ FOR INPUT AS #1\r
+OPEN filename$ FOR INPUT AS #1\r
 9\r
 IF EOF(1) <> 0 THEN GOTO 10\r
 \r
-LINE INPUT #1, a$\r
+LINE INPUT #1, line$\r
 \r
-FOR x = 1 TO LEN(a$)\r
-B$ = RIGHT$(LEFT$(a$, x), 1)\r
-IF B$ = "#" THEN c = 1 ELSE c = 0\r
-IF mill = 0 THEN buf1(x, y) = c ELSE buf2(x, y) = c\r
+FOR x = 1 TO LEN(line$)\r
+    char$ = RIGHT$(LEFT$(line$, x), 1)\r
+    IF char$ = "#" THEN clr = 1 ELSE clr = 0\r
+    IF millisecond = 0 THEN buffer1(x, y) = clr ELSE buffer2(x, y) = clr\r
 NEXT x\r
 y = y + 1\r
 \r
 GOTO 9\r
 10\r
 CLOSE #1\r
-disp\r
+displayGrid\r
 \r
 END SUB\r
 \r
-SUB proc\r
-\r
-IF mill = 0 THEN\r
-FOR y = 2 TO 48\r
-FOR x = 2 TO 49\r
-IF buf1(x - 1, y - 1) = 1 THEN c = 1 ELSE c = 0\r
-IF buf1(x, y - 1) = 1 THEN c = c + 1\r
-IF buf1(x + 1, y - 1) = 1 THEN c = c + 1\r
-IF buf1(x - 1, y) = 1 THEN c = c + 1\r
-IF buf1(x + 1, y) = 1 THEN c = c + 1\r
-IF buf1(x - 1, y + 1) = 1 THEN c = c + 1\r
-IF buf1(x, y + 1) = 1 THEN c = c + 1\r
-IF buf1(x + 1, y + 1) = 1 THEN c = c + 1\r
-\r
-IF buf1(x, y) = 1 THEN\r
-IF c = 2 OR c = 3 THEN buf2(x, y) = 1 ELSE buf2(x, y) = 0\r
+SUB processLife\r
+\r
+IF millisecond = 0 THEN\r
+    FOR y = 2 TO 48\r
+        FOR x = 2 TO 49\r
+            IF buffer1(x - 1, y - 1) = 1 THEN count = 1 ELSE count = 0\r
+            IF buffer1(x, y - 1) = 1 THEN count = count + 1\r
+            IF buffer1(x + 1, y - 1) = 1 THEN count = count + 1\r
+            IF buffer1(x - 1, y) = 1 THEN count = count + 1\r
+            IF buffer1(x + 1, y) = 1 THEN count = count + 1\r
+            IF buffer1(x - 1, y + 1) = 1 THEN count = count + 1\r
+            IF buffer1(x, y + 1) = 1 THEN count = count + 1\r
+            IF buffer1(x + 1, y + 1) = 1 THEN count = count + 1\r
+\r
+            IF buffer1(x, y) = 1 THEN\r
+                IF count = 2 OR count = 3 THEN buffer2(x, y) = 1 ELSE buffer2(x, y) = 0\r
+            ELSE\r
+                IF count = 3 THEN buffer2(x, y) = 1 ELSE buffer2(x, y) = 0\r
+            END IF\r
+\r
+        NEXT x\r
+    NEXT y\r
+    millisecond = 1\r
+    displayGrid\r
 ELSE\r
-IF c = 3 THEN buf2(x, y) = 1 ELSE buf2(x, y) = 0\r
-END IF\r
-\r
-NEXT x\r
-NEXT y\r
-mill = 1\r
-disp\r
-ELSE\r
-\r
-FOR y = 2 TO 48\r
-FOR x = 2 TO 49\r
-IF buf2(x - 1, y - 1) = 1 THEN c = 1 ELSE c = 0\r
-IF buf2(x, y - 1) = 1 THEN c = c + 1\r
-IF buf2(x + 1, y - 1) = 1 THEN c = c + 1\r
-IF buf2(x - 1, y) = 1 THEN c = c + 1\r
-IF buf2(x + 1, y) = 1 THEN c = c + 1\r
-IF buf2(x - 1, y + 1) = 1 THEN c = c + 1\r
-IF buf2(x, y + 1) = 1 THEN c = c + 1\r
-IF buf2(x + 1, y + 1) = 1 THEN c = c + 1\r
-\r
-IF buf2(x, y) = 1 THEN\r
-IF c = 2 OR c = 3 THEN buf1(x, y) = 1 ELSE buf1(x, y) = 0\r
-ELSE\r
-IF c = 3 THEN buf1(x, y) = 1 ELSE buf1(x, y) = 0\r
-END IF\r
-NEXT x\r
-NEXT y\r
 \r
-mill = 0\r
-disp\r
+    FOR y = 2 TO 48\r
+        FOR x = 2 TO 49\r
+            IF buffer2(x - 1, y - 1) = 1 THEN count = 1 ELSE count = 0\r
+            IF buffer2(x, y - 1) = 1 THEN count = count + 1\r
+            IF buffer2(x + 1, y - 1) = 1 THEN count = count + 1\r
+            IF buffer2(x - 1, y) = 1 THEN count = count + 1\r
+            IF buffer2(x + 1, y) = 1 THEN count = count + 1\r
+            IF buffer2(x - 1, y + 1) = 1 THEN count = count + 1\r
+            IF buffer2(x, y + 1) = 1 THEN count = count + 1\r
+            IF buffer2(x + 1, y + 1) = 1 THEN count = count + 1\r
+\r
+            IF buffer2(x, y) = 1 THEN\r
+                IF count = 2 OR count = 3 THEN buffer1(x, y) = 1 ELSE buffer1(x, y) = 0\r
+            ELSE\r
+                IF count = 3 THEN buffer1(x, y) = 1 ELSE buffer1(x, y) = 0\r
+            END IF\r
+        NEXT x\r
+    NEXT y\r
+\r
+    millisecond = 0\r
+    displayGrid\r
 END IF\r
 \r
 END SUB\r
 \r
-SUB sel (x, y)\r
+SUB selectMode (x, y)\r
 x1 = x * 4 - 1\r
 y1 = y * 4 - 1\r
 x2 = x + 2\r
@@ -288,108 +298,93 @@ y3 = y2 * 4 + 3
 \r
 LINE (x1, y1)-(x3, y3), 14, B\r
 8\r
-a$ = INKEY$\r
-IF a$ = "" THEN GOTO 8\r
+key$ = INKEY$\r
+IF key$ = "" THEN GOTO 8\r
 LINE (x1, y1)-(x3, y3), 0, B\r
 \r
-IF a$ = CHR$(0) + "M" THEN x2 = x2 + 1\r
-IF a$ = CHR$(0) + "K" THEN x2 = x2 - 1\r
-IF a$ = CHR$(0) + "P" THEN y2 = y2 + 1\r
-IF a$ = CHR$(0) + "H" THEN y2 = y2 - 1\r
-\r
-IF a$ = "6" THEN x2 = x2 + 8\r
-IF a$ = "4" THEN x2 = x2 - 8\r
-IF a$ = "2" THEN y2 = y2 + 8\r
-IF a$ = "8" THEN y2 = y2 - 8\r
-\r
-IF a$ = CHR$(27) THEN GOTO 7\r
-IF a$ = "c" THEN\r
-bufxs = x2 - x\r
-bufys = y2 - y\r
-\r
-FOR y4 = y TO y2\r
-FOR x4 = x TO x2\r
-IF mill = 0 THEN c = buf1(x4, y4) ELSE c = buf2(x4, y4)\r
-buf3(x4 - x, y4 - y) = c\r
-NEXT x4\r
-NEXT y4\r
-shbuf\r
+IF key$ = CHR$(0) + "M" THEN x2 = x2 + 1\r
+IF key$ = CHR$(0) + "K" THEN x2 = x2 - 1\r
+IF key$ = CHR$(0) + "P" THEN y2 = y2 + 1\r
+IF key$ = CHR$(0) + "H" THEN y2 = y2 - 1\r
+\r
+IF key$ = "6" THEN x2 = x2 + 8\r
+IF key$ = "4" THEN x2 = x2 - 8\r
+IF key$ = "2" THEN y2 = y2 + 8\r
+IF key$ = "8" THEN y2 = y2 - 8\r
+\r
+IF key$ = CHR$(27) THEN GOTO 7\r
+IF key$ = "c" THEN\r
+    bufferXSize = x2 - x\r
+    bufferYSize = y2 - y\r
+\r
+    FOR y4 = y TO y2\r
+        FOR x4 = x TO x2\r
+            IF millisecond = 0 THEN clr = buffer1(x4, y4) ELSE clr = buffer2(x4, y4)\r
+            buffer3(x4 - x, y4 - y) = clr\r
+        NEXT x4\r
+    NEXT y4\r
+    showBuffer\r
 END IF\r
 \r
-IF a$ = "x" THEN\r
-bufxs = x2 - x\r
-bufys = y2 - y\r
-\r
-FOR y4 = y TO y2\r
-FOR x4 = x TO x2\r
-IF mill = 0 THEN c = buf1(x4, y4): buf1(x4, y4) = 0 ELSE c = buf2(x4, y4): buf2(x4, y4) = 0\r
-buf3(x4 - x, y4 - y) = c\r
-NEXT x4\r
-NEXT y4\r
-shbuf\r
-disp\r
+IF key$ = "x" THEN\r
+    bufferXSize = x2 - x\r
+    bufferYSize = y2 - y\r
+\r
+    FOR y4 = y TO y2\r
+        FOR x4 = x TO x2\r
+            IF millisecond = 0 THEN clr = buffer1(x4, y4): buffer1(x4, y4) = 0 ELSE clr = buffer2(x4, y4): buffer2(x4, y4) = 0\r
+            buffer3(x4 - x, y4 - y) = clr\r
+        NEXT x4\r
+    NEXT y4\r
+    showBuffer\r
+    displayGrid\r
 END IF\r
 \r
-\r
-\r
 GOTO 6\r
 7\r
 \r
 END SUB\r
 \r
-SUB shbuf\r
+SUB showBuffer\r
 \r
 'PRINT bufxs\r
 'PRINT bufys\r
 \r
-x = bufxs\r
+x = bufferXSize\r
 IF x > 15 THEN x = 15\r
-y = bufys\r
+y = bufferYSize\r
 IF y > 15 THEN y = 15\r
 \r
 LINE (204, 99)-(319, 199), 0, BF\r
-LINE (204, 99)-(208 + 4 * bufxs, 103 + 4 * bufys), 14, B\r
+LINE (204, 99)-(208 + 4 * bufferXSize, 103 + 4 * bufferYSize), 14, B\r
 \r
 FOR y2 = 0 TO y\r
-FOR x2 = 0 TO x\r
-c = buf3(x2, y2)\r
-IF c = 0 THEN c = 1 ELSE c = 10\r
-LINE (x2 * 4 + 205, y2 * 4 + 100)-(x2 * 4 + 2 + 205, y2 * 4 + 2 + 100), c, BF\r
-NEXT x2\r
+    FOR x2 = 0 TO x\r
+        clr = buffer3(x2, y2)\r
+        IF clr = 0 THEN clr = 1 ELSE clr = 10\r
+        LINE (x2 * 4 + 205, y2 * 4 + 100)-(x2 * 4 + 2 + 205, y2 * 4 + 2 + 100), clr, BF\r
+    NEXT x2\r
 NEXT y2\r
 \r
-\r
-END SUB\r
-\r
-SUB start\r
-SCREEN 13\r
-RANDOMIZE TIMER\r
-\r
-bufxs = 0\r
-bufys = 0\r
-\r
-cle\r
-\r
 END SUB\r
 \r
-SUB wri\r
+SUB writeFile\r
 LOCATE 5, 27\r
-INPUT "file ", f$\r
-cl\r
+INPUT "file ", filename$\r
+clearLine\r
 \r
-OPEN f$ FOR OUTPUT AS #1\r
+OPEN filename$ FOR OUTPUT AS #1\r
 \r
 FOR y = 1 TO 50\r
-a$ = ""\r
-FOR x = 1 TO 50\r
-IF mill = 0 THEN c = buf1(x, y) ELSE c = buf2(x, y)\r
-IF c = 0 THEN a$ = a$ + "." ELSE a$ = a$ + "#"\r
-NEXT x\r
-PRINT #1, a$\r
+    line$ = ""\r
+    FOR x = 1 TO 50\r
+        IF millisecond = 0 THEN clr = buffer1(x, y) ELSE clr = buffer2(x, y)\r
+        IF clr = 0 THEN line$ = line$ + "." ELSE line$ = line$ + "#"\r
+    NEXT x\r
+    PRINT #1, line$\r
 NEXT y\r
 \r
 CLOSE #1\r
 \r
-\r
 END SUB\r
 \r
index 79302eb..272e0cb 100755 (executable)
@@ -1,16 +1,25 @@
+' Program to play sound that resembles alarm.\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' ?, Initial version\r
+' 2024.08, Improved program readability using AI\r
+\r
 SCREEN 1\r
 CLS\r
-a = 40\r
-1\r
-SOUND a, .3\r
-SOUND 200, 1\r
-a = a + 100\r
-IF a > 1000 THEN GOTO 2\r
-GOTO 1\r
-2\r
-SOUND a, .3\r
-SOUND 500, .2\r
-a = a - 10\r
-IF a < 200 THEN GOTO 1\r
-GOTO 2\r
+frequency = 40\r
+StartLoop:\r
+    SOUND frequency, .3\r
+    SOUND 200, 1\r
+    frequency = frequency + 100\r
+    IF frequency > 1000 THEN GOTO DecreaseFrequency\r
+    GOTO StartLoop\r
 \r
+DecreaseFrequency:\r
+    SOUND frequency, .3\r
+    SOUND 500, .2\r
+    frequency = frequency - 10\r
+    IF frequency < 200 THEN GOTO StartLoop\r
+    GOTO DecreaseFrequency\r