-' 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
\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
-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
' e - switch to edit mode\r
' q - quit\r
\r
-\r
' in edit mode use keys:\r
' ----------------------\r
\r
' SPACE - toggle cell on/off\r
' ESC - return to observing mode\r
\r
-\r
' in select mode use keys:\r
' ------------------------\r
\r
' 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
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
\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
\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