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