file name that is easier to parse in DOS
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 29 Jun 2025 16:07:31 +0000 (19:07 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 29 Jun 2025 16:07:31 +0000 (19:07 +0300)
Miscellaneous/Windowing system.bas [deleted file]
Miscellaneous/wsystem.bas [new file with mode: 0755]

diff --git a/Miscellaneous/Windowing system.bas b/Miscellaneous/Windowing system.bas
deleted file mode 100755 (executable)
index c5c9332..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-' Text mode windowing system. Each window can display text file.\r
-' Window content can be scrolled horizontally and vertically.\r
-' Window can have arbitrary size and location on the screen.\r
-'\r
-' By Svjatoslav Agejenko.\r
-' Email: svjatoslav@svjatoslav.eu\r
-' Homepage: http://www.svjatoslav.eu\r
-\r
-' Changelog:\r
-' 2003, Initial version\r
-' 2024, Improved program readability using AI\r
-\r
-DECLARE SUB demo ()\r
-DECLARE FUNCTION getline$ (w%, l%)\r
-DECLARE SUB loadfile (file$, d%)\r
-DECLARE SUB sendline (w%, l%, newstring$)\r
-DECLARE FUNCTION getflin% ()\r
-DECLARE SUB refresh ()\r
-DECLARE FUNCTION addpage% (x%, y%, xs%, ys%, title$)\r
-DECLARE SUB box (x%, y%, xl%, yl%, e$)\r
-DEFINT A-Z\r
-DECLARE SUB shpage (a)\r
-DECLARE SUB start ()\r
-\r
-DIM SHARED stamo\r
-stamo = 5000\r
-DIM SHARED st$(1 TO stamo)\r
-DIM SHARED stpn\r
-\r
-DIM SHARED pag(1 TO 10, 1 TO 1000)\r
-DIM SHARED pagx(1 TO 10), pagy(1 TO 10), pagxs(1 TO 10), pagys(1 TO 10)\r
-DIM SHARED pagon(1 TO 10)\r
-DIM SHARED pagtitle$(1 TO 10)\r
-\r
-DIM SHARED pagshx(1 TO 10)      ' x & y shift\r
-DIM SHARED pagshy(1 TO 10)\r
-\r
-DIM SHARED pageactive            ' active page\r
-\r
-start\r
-\r
-demo\r
-\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
-\r
-    addpage% = b\r
-END FUNCTION\r
-\r
-SUB clrwnd (w)\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
-    ' Create three windows with different sizes and titles\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
-    ' Load the same file into all windows\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
-    ' Animate the windows by shifting their content\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
-2\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
-    ' Retrieve the line from the window memory\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
-    ' Load a file into the window memory\r
-\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
-\r
-    CLOSE #1\r
-\r
-    ' Fill the remaining lines with empty strings\r
-    FOR b = a TO 1000\r
-        sendline d, b, ""\r
-    NEXT b\r
-END SUB\r
-\r
-SUB refresh\r
-    ' Redraw all active windows\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
-\r
-    ' Remove trailing spaces from the string\r
-    IF a$ = SPACE$(LEN(a$)) THEN\r
-        a$ = ""\r
-    END IF\r
-\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
-    ' Update the window memory with the new string\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
-    ' Draw the specified window on the screen\r
-\r
-    ' Determine background color based on active page\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
-    ' Draw the window border\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
-    ' Draw the window content\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
-    ' Draw the window title\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
-    ' Initialize the screen and shared memory\r
-    WIDTH 80, 50\r
-    VIEW PRINT 1 TO 50\r
-\r
-    FOR a = 1 TO stamo\r
-        st$(a) = ""\r
-    NEXT a\r
-\r
-    stpn = 1\r
-END SUB
\ No newline at end of file
diff --git a/Miscellaneous/wsystem.bas b/Miscellaneous/wsystem.bas
new file mode 100755 (executable)
index 0000000..c5c9332
--- /dev/null
@@ -0,0 +1,252 @@
+' Text mode windowing system. Each window can display text file.\r
+' Window content can be scrolled horizontally and vertically.\r
+' Window can have arbitrary size and location on the screen.\r
+'\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+\r
+' Changelog:\r
+' 2003, Initial version\r
+' 2024, Improved program readability using AI\r
+\r
+DECLARE SUB demo ()\r
+DECLARE FUNCTION getline$ (w%, l%)\r
+DECLARE SUB loadfile (file$, d%)\r
+DECLARE SUB sendline (w%, l%, newstring$)\r
+DECLARE FUNCTION getflin% ()\r
+DECLARE SUB refresh ()\r
+DECLARE FUNCTION addpage% (x%, y%, xs%, ys%, title$)\r
+DECLARE SUB box (x%, y%, xl%, yl%, e$)\r
+DEFINT A-Z\r
+DECLARE SUB shpage (a)\r
+DECLARE SUB start ()\r
+\r
+DIM SHARED stamo\r
+stamo = 5000\r
+DIM SHARED st$(1 TO stamo)\r
+DIM SHARED stpn\r
+\r
+DIM SHARED pag(1 TO 10, 1 TO 1000)\r
+DIM SHARED pagx(1 TO 10), pagy(1 TO 10), pagxs(1 TO 10), pagys(1 TO 10)\r
+DIM SHARED pagon(1 TO 10)\r
+DIM SHARED pagtitle$(1 TO 10)\r
+\r
+DIM SHARED pagshx(1 TO 10)      ' x & y shift\r
+DIM SHARED pagshy(1 TO 10)\r
+\r
+DIM SHARED pageactive            ' active page\r
+\r
+start\r
+\r
+demo\r
+\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
+\r
+    addpage% = b\r
+END FUNCTION\r
+\r
+SUB clrwnd (w)\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
+    ' Create three windows with different sizes and titles\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
+    ' Load the same file into all windows\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
+    ' Animate the windows by shifting their content\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
+2\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
+    ' Retrieve the line from the window memory\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
+    ' Load a file into the window memory\r
+\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
+\r
+    CLOSE #1\r
+\r
+    ' Fill the remaining lines with empty strings\r
+    FOR b = a TO 1000\r
+        sendline d, b, ""\r
+    NEXT b\r
+END SUB\r
+\r
+SUB refresh\r
+    ' Redraw all active windows\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
+\r
+    ' Remove trailing spaces from the string\r
+    IF a$ = SPACE$(LEN(a$)) THEN\r
+        a$ = ""\r
+    END IF\r
+\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
+    ' Update the window memory with the new string\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
+    ' Draw the specified window on the screen\r
+\r
+    ' Determine background color based on active page\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
+    ' Draw the window border\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
+    ' Draw the window content\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
+    ' Draw the window title\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
+    ' Initialize the screen and shared memory\r
+    WIDTH 80, 50\r
+    VIEW PRINT 1 TO 50\r
+\r
+    FOR a = 1 TO stamo\r
+        st$(a) = ""\r
+    NEXT a\r
+\r
+    stpn = 1\r
+END SUB
\ No newline at end of file