Describe windowing system and networking.
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Wed, 30 Jul 2025 09:25:25 +0000 (12:25 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Wed, 30 Jul 2025 09:25:25 +0000 (12:25 +0300)
21 files changed:
2D GFX/Fractals/index.html
2D GFX/Spirals/index.html
2D GFX/Textures/index.html
3D GFX/3D Synthezier/doc/index.html
3D GFX/Miscellaneous/index.html
3D GFX/Space/index.html
Math/Plotting/index.html
Math/Simulation/index.html
Math/Truth table/index.html
Miscellaneous/Mouse driver/index.html
Miscellaneous/Windowing system.bas [new file with mode: 0755]
Miscellaneous/Windowing system.webm [new file with mode: 0644]
Miscellaneous/windowing system.bas [deleted file]
Miscellaneous/windowing system.webm [deleted file]
Networking/LPT pin control.png [new file with mode: 0644]
Networking/Morse.bas [new file with mode: 0755]
Networking/Morse.png [new file with mode: 0644]
Networking/Morse.txt [new file with mode: 0644]
Networking/morse.bas [deleted file]
Networking/morse.txt [deleted file]
index.org

index f435ae9..14c08e3 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:26 -->
+<!-- 2025-07-30 ke 08:54 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Fractals</title>
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#org2fe1e79">1. Fractal circles</a></li>
-<li><a href="#org73755e2">2. Fractal circles animated</a></li>
-<li><a href="#orgf1a7d5c">3. Fractal of squares</a></li>
-<li><a href="#org621eb5a">4. Fractal of squares animated</a></li>
-<li><a href="#org5ccd9b9">5. Fractal of trees</a></li>
+<li><a href="#org9db4739">1. Fractal circles</a></li>
+<li><a href="#org701e05b">2. Fractal circles animated</a></li>
+<li><a href="#org18874d5">3. Fractal of squares</a></li>
+<li><a href="#orgc9aa92c">4. Fractal of squares animated</a></li>
+<li><a href="#org95a64d0">5. Fractal of trees</a></li>
 </ul>
 </div>
 </div>
 </style>
 
 
-<div id="outline-container-org2fe1e79" class="outline-2">
-<h2 id="org2fe1e79"><span class="section-number-2">1.</span> Fractal circles</h2>
+<div id="outline-container-org9db4739" class="outline-2">
+<h2 id="org9db4739"><span class="section-number-2">1.</span> Fractal circles</h2>
 <div class="outline-text-2" id="text-1">
 <p>
 This QBasic program generates a visually captivating spiral fractal
@@ -247,7 +247,7 @@ geometry, recursive programming, and graphical design.
 </p>
 
 
-<div id="org8f2cc6f" class="figure">
+<div id="org0b4ece3" class="figure">
 <p><a href="fractal circles.bas" class="responsive-img"><img src="fractal%20circles.png" alt="fractal%20circles.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -266,8 +266,8 @@ indefinitely.</dd>
 </div>
 </div>
 
-<div id="outline-container-org73755e2" class="outline-2">
-<h2 id="org73755e2"><span class="section-number-2">2.</span> Fractal circles animated</h2>
+<div id="outline-container-org701e05b" class="outline-2">
+<h2 id="org701e05b"><span class="section-number-2">2.</span> Fractal circles animated</h2>
 <div class="outline-text-2" id="text-2">
 <p>
 This QBasic program creates an animated fractal composed of circles,
@@ -287,29 +287,29 @@ system to control the animation's progression.
 </div>
 </div>
 
-<div id="outline-container-orgf1a7d5c" class="outline-2">
-<h2 id="orgf1a7d5c"><span class="section-number-2">3.</span> Fractal of squares</h2>
+<div id="outline-container-org18874d5" class="outline-2">
+<h2 id="org18874d5"><span class="section-number-2">3.</span> Fractal of squares</h2>
 <div class="outline-text-2" id="text-3">
 <p>
 This QBasic program generates and displays a fractal pattern composed of squares.
 </p>
 
 
-<div id="orgc270021" class="figure">
+<div id="org8c7f23b" class="figure">
 <p><a href="fractal squares.bas" class="responsive-img"><img src="fractal%20squares,%201.png" alt="fractal%20squares,%201.png" class="responsive-img" /></a>
 </p>
 </div>
 
 
-<div id="org72f21bc" class="figure">
+<div id="org7f10394" class="figure">
 <p><a href="fractal squares.bas" class="responsive-img"><img src="fractal%20squares,%202.png" alt="fractal%20squares,%202.png" class="responsive-img" /></a>
 </p>
 </div>
 </div>
 </div>
 
-<div id="outline-container-org621eb5a" class="outline-2">
-<h2 id="org621eb5a"><span class="section-number-2">4.</span> Fractal of squares animated</h2>
+<div id="outline-container-orgc9aa92c" class="outline-2">
+<h2 id="orgc9aa92c"><span class="section-number-2">4.</span> Fractal of squares animated</h2>
 <div class="outline-text-2" id="text-4">
 <p>
 This QBasic program generates an animated fractal pattern composed of
@@ -331,8 +331,8 @@ resulting in a dynamic and ever-changing geometric pattern.
 </div>
 </div>
 
-<div id="outline-container-org5ccd9b9" class="outline-2">
-<h2 id="org5ccd9b9"><span class="section-number-2">5.</span> Fractal of trees</h2>
+<div id="outline-container-org95a64d0" class="outline-2">
+<h2 id="org95a64d0"><span class="section-number-2">5.</span> Fractal of trees</h2>
 <div class="outline-text-2" id="text-5">
 <p>
 QBasic program that generates a visually appealing fractal tree
@@ -355,7 +355,7 @@ resembles a tree, with branches that grow and change over time.
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:26</p>
+<p class="date">Created: 2025-07-30 ke 08:54</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 1fe8864..3508025 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:26 -->
+<!-- 2025-07-30 ke 08:54 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Spiral series</title>
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#org54f8ae1">1. Spiral with increasing density</a></li>
-<li><a href="#org6118e5d">2. Spiral with varying height</a></li>
-<li><a href="#org1d70e03">3. Shaded spiral</a></li>
-<li><a href="#org389ad3f">4. Sphere forming spiral</a></li>
-<li><a href="#orgf6c6e9b">5. Textured spherical spiral</a></li>
-<li><a href="#orgb58c1d6">6. Textured and shaded spherical spiral</a></li>
+<li><a href="#org5adfb8a">1. Spiral with increasing density</a></li>
+<li><a href="#orgda27966">2. Spiral with varying height</a></li>
+<li><a href="#orgc02cc8c">3. Shaded spiral</a></li>
+<li><a href="#org82de458">4. Sphere forming spiral</a></li>
+<li><a href="#org2c1423d">5. Textured spherical spiral</a></li>
+<li><a href="#org48d246f">6. Textured and shaded spherical spiral</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-org54f8ae1" class="outline-2">
-<h2 id="org54f8ae1"><span class="section-number-2">1.</span> Spiral with increasing density</h2>
+<div id="outline-container-org5adfb8a" class="outline-2">
+<h2 id="org5adfb8a"><span class="section-number-2">1.</span> Spiral with increasing density</h2>
 <div class="outline-text-2" id="text-1">
 
-<div id="org0585709" class="figure">
+<div id="org029fdf0" class="figure">
 <p><img src="spiral.png" alt="spiral.png" class="responsive-img" />
 </p>
 </div>
@@ -320,11 +320,11 @@ userInput$ = <span style="color: #88aaee;">INPUT$</span>(1)
 </div>
 </div>
 
-<div id="outline-container-org6118e5d" class="outline-2">
-<h2 id="org6118e5d"><span class="section-number-2">2.</span> Spiral with varying height</h2>
+<div id="outline-container-orgda27966" class="outline-2">
+<h2 id="orgda27966"><span class="section-number-2">2.</span> Spiral with varying height</h2>
 <div class="outline-text-2" id="text-2">
 
-<div id="org3dd6e24" class="figure">
+<div id="orgabbae9a" class="figure">
 <p><img src="spiral, 2.png" alt="spiral, 2.png" class="responsive-img" />
 </p>
 </div>
@@ -391,11 +391,11 @@ a$ = <span style="color: #88aaee;">INPUT$</span>(1)
 </div>
 </div>
 
-<div id="outline-container-org1d70e03" class="outline-2">
-<h2 id="org1d70e03"><span class="section-number-2">3.</span> Shaded spiral</h2>
+<div id="outline-container-orgc02cc8c" class="outline-2">
+<h2 id="orgc02cc8c"><span class="section-number-2">3.</span> Shaded spiral</h2>
 <div class="outline-text-2" id="text-3">
 
-<div id="orgee00171" class="figure">
+<div id="orgedfa863" class="figure">
 <p><img src="spiral, 3.png" alt="spiral, 3.png" class="responsive-img" />
 </p>
 </div>
@@ -497,8 +497,8 @@ a$ = <span style="color: #88aaee;">INPUT$</span>(1)
 </div>
 </div>
 
-<div id="outline-container-org389ad3f" class="outline-2">
-<h2 id="org389ad3f"><span class="section-number-2">4.</span> Sphere forming spiral</h2>
+<div id="outline-container-org82de458" class="outline-2">
+<h2 id="org82de458"><span class="section-number-2">4.</span> Sphere forming spiral</h2>
 <div class="outline-text-2" id="text-4">
 <p>
 Similar to previous spiral, Line segments are connected between the
@@ -507,7 +507,7 @@ multiple linked spherical shapes. Initially point cloud in shown:
 </p>
 
 
-<div id="orgbe7e9cf" class="figure">
+<div id="org7ed384e" class="figure">
 <p><img src="spiral, 4, 1.png" alt="spiral, 4, 1.png" class="responsive-img" />
 </p>
 </div>
@@ -517,7 +517,7 @@ In the next step, points are connected using lines:
 </p>
 
 
-<div id="org4f104c6" class="figure">
+<div id="orgd650278" class="figure">
 <p><img src="spiral, 4, 2.png" alt="spiral, 4, 2.png" class="responsive-img" />
 </p>
 </div>
@@ -622,11 +622,11 @@ a$ = <span style="color: #88aaee;">INPUT$</span>(1)
 </div>
 </div>
 
-<div id="outline-container-orgf6c6e9b" class="outline-2">
-<h2 id="orgf6c6e9b"><span class="section-number-2">5.</span> Textured spherical spiral</h2>
+<div id="outline-container-org2c1423d" class="outline-2">
+<h2 id="org2c1423d"><span class="section-number-2">5.</span> Textured spherical spiral</h2>
 <div class="outline-text-2" id="text-5">
 
-<div id="orgb8c2517" class="figure">
+<div id="org081a30f" class="figure">
 <p><img src="spiral, 5.png" alt="spiral, 5.png" class="responsive-img" />
 </p>
 </div>
@@ -749,11 +749,11 @@ a$ = <span style="color: #88aaee;">INPUT$</span>(1)
 </div>
 </div>
 
-<div id="outline-container-orgb58c1d6" class="outline-2">
-<h2 id="orgb58c1d6"><span class="section-number-2">6.</span> Textured and shaded spherical spiral</h2>
+<div id="outline-container-org48d246f" class="outline-2">
+<h2 id="org48d246f"><span class="section-number-2">6.</span> Textured and shaded spherical spiral</h2>
 <div class="outline-text-2" id="text-6">
 
-<div id="org2bbe148" class="figure">
+<div id="orgdd30f60" class="figure">
 <p><img src="spiral, 6.png" alt="spiral, 6.png" class="responsive-img" />
 </p>
 </div>
@@ -937,7 +937,7 @@ yStep2 = (oppositePointY2 - oppositePointY1) / stepCount
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:26</p>
+<p class="date">Created: 2025-07-30 ke 08:54</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 5673da2..913d1b4 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:27 -->
+<!-- 2025-07-30 ke 08:54 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Algorithmic textures</title>
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#org0c3cbb8">1. Circular waves</a></li>
-<li><a href="#org1794e9e">2. Diamond square clouds</a></li>
-<li><a href="#org678fcb5">3. Old paper</a></li>
-<li><a href="#org8bb43c5">4. Wood</a></li>
-<li><a href="#org4dd8abb">5. Yellow flame</a></li>
+<li><a href="#org194bd84">1. Circular waves</a></li>
+<li><a href="#org6816183">2. Diamond square clouds</a></li>
+<li><a href="#org80d23b0">3. Old paper</a></li>
+<li><a href="#org8cffacc">4. Wood</a></li>
+<li><a href="#org2f5742a">5. Yellow flame</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-org0c3cbb8" class="outline-2">
-<h2 id="org0c3cbb8"><span class="section-number-2">1.</span> Circular waves</h2>
+<div id="outline-container-org194bd84" class="outline-2">
+<h2 id="org194bd84"><span class="section-number-2">1.</span> Circular waves</h2>
 <div class="outline-text-2" id="text-1">
 <p>
 This QBasic program creates visually captivating circular wave
@@ -313,8 +313,8 @@ algorithms can produce intricate and visually appealing results.
 </div>
 </div>
 
-<div id="outline-container-org1794e9e" class="outline-2">
-<h2 id="org1794e9e"><span class="section-number-2">2.</span> Diamond square clouds</h2>
+<div id="outline-container-org6816183" class="outline-2">
+<h2 id="org6816183"><span class="section-number-2">2.</span> Diamond square clouds</h2>
 <div class="outline-text-2" id="text-2">
 <p>
 This QBasic program demonstrates the Diamond-Square algorithm, a
@@ -429,8 +429,8 @@ WAITa$ = <span style="color: #88aaee;">INPUT$</span>(1)
 </div>
 </div>
 
-<div id="outline-container-org678fcb5" class="outline-2">
-<h2 id="org678fcb5"><span class="section-number-2">3.</span> Old paper</h2>
+<div id="outline-container-org80d23b0" class="outline-2">
+<h2 id="org80d23b0"><span class="section-number-2">3.</span> Old paper</h2>
 <div class="outline-text-2" id="text-3">
 <p>
 This QBasic program generates a procedural texture that simulates the
@@ -527,8 +527,8 @@ inputKey$ = <span style="color: #88aaee;">INPUT$</span>(1)
 </div>
 </div>
 
-<div id="outline-container-org8bb43c5" class="outline-2">
-<h2 id="org8bb43c5"><span class="section-number-2">4.</span> Wood</h2>
+<div id="outline-container-org8cffacc" class="outline-2">
+<h2 id="org8cffacc"><span class="section-number-2">4.</span> Wood</h2>
 <div class="outline-text-2" id="text-4">
 <p>
 This QBasic program creates a visually appealing simulation of a wood
@@ -622,8 +622,8 @@ exitKey$ = <span style="color: #88aaee;">INPUT$</span>(1)
 </div>
 </div>
 
-<div id="outline-container-org4dd8abb" class="outline-2">
-<h2 id="org4dd8abb"><span class="section-number-2">5.</span> Yellow flame</h2>
+<div id="outline-container-org2f5742a" class="outline-2">
+<h2 id="org2f5742a"><span class="section-number-2">5.</span> Yellow flame</h2>
 <div class="outline-text-2" id="text-5">
 <p>
 "Yellow Flame" is a visually captivating program written in QBasic
@@ -702,7 +702,7 @@ userInput$ = <span style="color: #88aaee;">INPUT$</span>(1)
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:27</p>
+<p class="date">Created: 2025-07-30 ke 08:54</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 3c57508..1e0b353 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:28 -->
+<!-- 2025-07-30 ke 08:55 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>3D Synthezier</title>
@@ -1103,39 +1103,39 @@ hsAddReviewPanels();
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#org78807ca">1. Operating principle</a>
+<li><a href="#orgd9b8680">1. Operating principle</a>
 <ul>
-<li><a href="#org46eca90">1.1. Rectangular city</a></li>
-<li><a href="#org94c04e0">1.2. Hexagonal city</a></li>
+<li><a href="#org0e66f66">1.1. Rectangular city</a></li>
+<li><a href="#orgd699ac6">1.2. Hexagonal city</a></li>
 </ul>
 </li>
-<li><a href="#org48195f6">2. Scene description language</a>
+<li><a href="#org069cbd6">2. Scene description language</a>
 <ul>
-<li><a href="#orgb7682d2">2.1. here</a></li>
-<li><a href="#org2c14946">2.2. p</a></li>
-<li><a href="#org565bbc0">2.3. f</a></li>
-<li><a href="#orgaad889e">2.4. warn</a></li>
-<li><a href="#orgdc1508d">2.5. end</a></li>
-<li><a href="#org38c48ba">2.6. mtl</a></li>
-<li><a href="#orgc83b2cb">2.7. mtlrnd</a></li>
-<li><a href="#orgf0b21fa">2.8. obj</a></li>
-<li><a href="#org14ccff1">2.9. rnd</a></li>
-<li><a href="#org2e86e29">2.10. #</a></li>
-<li><a href="#org56323b2">2.11. out</a></li>
-<li><a href="#org5fbc50a">2.12. set</a></li>
-<li><a href="#org1ed5ed3">2.13. variables usage</a></li>
-<li><a href="#org69e43cc">2.14. cmp</a></li>
-<li><a href="#org9461186">2.15. ?</a></li>
-<li><a href="#org1182375">2.16. dum</a></li>
+<li><a href="#org42a8697">2.1. here</a></li>
+<li><a href="#org6a8395b">2.2. p</a></li>
+<li><a href="#orgf8e5df6">2.3. f</a></li>
+<li><a href="#org5b684c9">2.4. warn</a></li>
+<li><a href="#orgd6c7f9d">2.5. end</a></li>
+<li><a href="#org6d38d71">2.6. mtl</a></li>
+<li><a href="#org0839b89">2.7. mtlrnd</a></li>
+<li><a href="#orgaee3ec5">2.8. obj</a></li>
+<li><a href="#org439d79f">2.9. rnd</a></li>
+<li><a href="#orgeff8de3">2.10. #</a></li>
+<li><a href="#org3fddc12">2.11. out</a></li>
+<li><a href="#org3a377b2">2.12. set</a></li>
+<li><a href="#orgd1088af">2.13. variables usage</a></li>
+<li><a href="#org8dabc15">2.14. cmp</a></li>
+<li><a href="#orgcf941b0">2.15. ?</a></li>
+<li><a href="#org5316ce5">2.16. dum</a></li>
 </ul>
 </li>
-<li><a href="#orgd87df4f">3. Installation</a>
+<li><a href="#org1509f08">3. Installation</a>
 <ul>
-<li><a href="#org9830b9c">3.1. System requirements</a></li>
-<li><a href="#orgb652d95">3.2. Directory layout</a></li>
+<li><a href="#org938ea8f">3.1. System requirements</a></li>
+<li><a href="#orgcf089f3">3.2. Directory layout</a></li>
 </ul>
 </li>
-<li><a href="#org66f534e">4. Usage</a></li>
+<li><a href="#org393308b">4. Usage</a></li>
 </ul>
 </div>
 </div>
@@ -1157,8 +1157,8 @@ hsAddReviewPanels();
 </style>
 
 
-<div id="outline-container-org78807ca" class="outline-2">
-<h2 id="org78807ca"><span class="section-number-2">1.</span> Operating principle</h2>
+<div id="outline-container-orgd9b8680" class="outline-2">
+<h2 id="orgd9b8680"><span class="section-number-2">1.</span> Operating principle</h2>
 <div class="outline-text-2" id="text-1">
 <p>
 Parses scene definition language and creates 3D world based on
@@ -1221,60 +1221,60 @@ They were produced by importing generated <a href="https://en.wikipedia.org/wiki
 </p>
 </div>
 
-<div id="outline-container-org46eca90" class="outline-3">
-<h3 id="org46eca90"><span class="section-number-3">1.1.</span> Rectangular city</h3>
+<div id="outline-container-org0e66f66" class="outline-3">
+<h3 id="org0e66f66"><span class="section-number-3">1.1.</span> Rectangular city</h3>
 <div class="outline-text-3" id="text-1-1">
 
-<div id="org8745536" class="figure">
+<div id="orgddb612b" class="figure">
 <p><img src="rectangular city, 1.jpeg" alt="rectangular city, 1.jpeg" class="responsive-img" />
 </p>
 </div>
 
 
-<div id="org4ff5365" class="figure">
+<div id="org491aa98" class="figure">
 <p><img src="rectangular city, 2.jpeg" alt="rectangular city, 2.jpeg" class="responsive-img" />
 </p>
 </div>
 
 
-<div id="org02ce698" class="figure">
+<div id="org4934254" class="figure">
 <p><img src="rectangular city, 3.jpeg" alt="rectangular city, 3.jpeg" class="responsive-img" />
 </p>
 </div>
 </div>
 </div>
-<div id="outline-container-org94c04e0" class="outline-3">
-<h3 id="org94c04e0"><span class="section-number-3">1.2.</span> Hexagonal city</h3>
+<div id="outline-container-orgd699ac6" class="outline-3">
+<h3 id="orgd699ac6"><span class="section-number-3">1.2.</span> Hexagonal city</h3>
 <div class="outline-text-3" id="text-1-2">
 
-<div id="org70ad015" class="figure">
+<div id="org8c2b994" class="figure">
 <p><img src="hexagonal city, 1.jpeg" alt="hexagonal city, 1.jpeg" class="responsive-img" />
 </p>
 </div>
 
 
-<div id="org2524773" class="figure">
+<div id="org36089f7" class="figure">
 <p><img src="hexagonal city, 2.jpeg" alt="hexagonal city, 2.jpeg" class="responsive-img" />
 </p>
 </div>
 
 
-<div id="orgb3dfdcf" class="figure">
+<div id="orge9eded1" class="figure">
 <p><img src="hexagonal city, 3.jpeg" alt="hexagonal city, 3.jpeg" class="responsive-img" />
 </p>
 </div>
 </div>
 </div>
 </div>
-<div id="outline-container-org48195f6" class="outline-2">
-<h2 id="org48195f6"><span class="section-number-2">2.</span> Scene description language</h2>
+<div id="outline-container-org069cbd6" class="outline-2">
+<h2 id="org069cbd6"><span class="section-number-2">2.</span> Scene description language</h2>
 <div class="outline-text-2" id="text-2">
 <p>
 See also examples.
 </p>
 </div>
-<div id="outline-container-orgb7682d2" class="outline-3">
-<h3 id="orgb7682d2"><span class="section-number-3">2.1.</span> here</h3>
+<div id="outline-container-org42a8697" class="outline-3">
+<h3 id="org42a8697"><span class="section-number-3">2.1.</span> here</h3>
 <div class="outline-text-3" id="text-2-1">
 <pre class="example">
 here
@@ -1285,8 +1285,8 @@ defines new segment
 </p>
 </div>
 </div>
-<div id="outline-container-org2c14946" class="outline-3">
-<h3 id="org2c14946"><span class="section-number-3">2.2.</span> p</h3>
+<div id="outline-container-org6a8395b" class="outline-3">
+<h3 id="org6a8395b"><span class="section-number-3">2.2.</span> p</h3>
 <div class="outline-text-3" id="text-2-2">
 <pre class="example">
 p  x y z
@@ -1297,8 +1297,8 @@ defines new point
 </p>
 </div>
 </div>
-<div id="outline-container-org565bbc0" class="outline-3">
-<h3 id="org565bbc0"><span class="section-number-3">2.3.</span> f</h3>
+<div id="outline-container-orgf8e5df6" class="outline-3">
+<h3 id="orgf8e5df6"><span class="section-number-3">2.3.</span> f</h3>
 <div class="outline-text-3" id="text-2-3">
 <pre class="example">
 f  p1 p2 p3 p4
@@ -1309,8 +1309,8 @@ defines new polygon,  p4  may be unused
 </p>
 </div>
 </div>
-<div id="outline-container-orgaad889e" class="outline-3">
-<h3 id="orgaad889e"><span class="section-number-3">2.4.</span> warn</h3>
+<div id="outline-container-org5b684c9" class="outline-3">
+<h3 id="org5b684c9"><span class="section-number-3">2.4.</span> warn</h3>
 <div class="outline-text-3" id="text-2-4">
 <pre class="example">
 warn  &lt;message&gt;
@@ -1321,8 +1321,8 @@ displays warning message, and wait for key
 </p>
 </div>
 </div>
-<div id="outline-container-orgdc1508d" class="outline-3">
-<h3 id="orgdc1508d"><span class="section-number-3">2.5.</span> end</h3>
+<div id="outline-container-orgd6c7f9d" class="outline-3">
+<h3 id="orgd6c7f9d"><span class="section-number-3">2.5.</span> end</h3>
 <div class="outline-text-3" id="text-2-5">
 <pre class="example">
 end
@@ -1333,8 +1333,8 @@ terminates parser
 </p>
 </div>
 </div>
-<div id="outline-container-org38c48ba" class="outline-3">
-<h3 id="org38c48ba"><span class="section-number-3">2.6.</span> mtl</h3>
+<div id="outline-container-org6d38d71" class="outline-3">
+<h3 id="org6d38d71"><span class="section-number-3">2.6.</span> mtl</h3>
 <div class="outline-text-3" id="text-2-6">
 <pre class="example">
 mtl  material
@@ -1345,8 +1345,8 @@ selects material
 </p>
 </div>
 </div>
-<div id="outline-container-orgc83b2cb" class="outline-3">
-<h3 id="orgc83b2cb"><span class="section-number-3">2.7.</span> mtlrnd</h3>
+<div id="outline-container-org0839b89" class="outline-3">
+<h3 id="org0839b89"><span class="section-number-3">2.7.</span> mtlrnd</h3>
 <div class="outline-text-3" id="text-2-7">
 <pre class="example">
 mtlrnd  material ...
@@ -1357,8 +1357,8 @@ selects random material from list
 </p>
 </div>
 </div>
-<div id="outline-container-orgf0b21fa" class="outline-3">
-<h3 id="orgf0b21fa"><span class="section-number-3">2.8.</span> obj</h3>
+<div id="outline-container-orgaee3ec5" class="outline-3">
+<h3 id="orgaee3ec5"><span class="section-number-3">2.8.</span> obj</h3>
 <div class="outline-text-3" id="text-2-8">
 <pre class="example">
 obj  object xz45 xy20 x+3 y*2
@@ -1373,14 +1373,14 @@ directly from file, and not chached, to allow loading of greater than
 </p>
 
 
-<div id="org9a80874" class="figure">
+<div id="orga6f9f50" class="figure">
 <p><img src="rotation.png" alt="rotation.png" />
 </p>
 </div>
 </div>
 </div>
-<div id="outline-container-org14ccff1" class="outline-3">
-<h3 id="org14ccff1"><span class="section-number-3">2.9.</span> rnd</h3>
+<div id="outline-container-org439d79f" class="outline-3">
+<h3 id="org439d79f"><span class="section-number-3">2.9.</span> rnd</h3>
 <div class="outline-text-3" id="text-2-9">
 <pre class="example">
 rnd  p^1^2^3 p^7^2^1
@@ -1391,8 +1391,8 @@ select random command to execute, ^ will be converted to spaces.
 </p>
 </div>
 </div>
-<div id="outline-container-org2e86e29" class="outline-3">
-<h3 id="org2e86e29"><span class="section-number-3">2.10.</span> #</h3>
+<div id="outline-container-orgeff8de3" class="outline-3">
+<h3 id="orgeff8de3"><span class="section-number-3">2.10.</span> #</h3>
 <div class="outline-text-3" id="text-2-10">
 <pre class="example">
 # whatever text
@@ -1403,8 +1403,8 @@ comment
 </p>
 </div>
 </div>
-<div id="outline-container-org56323b2" class="outline-3">
-<h3 id="org56323b2"><span class="section-number-3">2.11.</span> out</h3>
+<div id="outline-container-org3fddc12" class="outline-3">
+<h3 id="org3fddc12"><span class="section-number-3">2.11.</span> out</h3>
 <div class="outline-text-3" id="text-2-11">
 <pre class="example">
 out  file
@@ -1415,8 +1415,8 @@ specify output file name, must be first command
 </p>
 </div>
 </div>
-<div id="outline-container-org5fbc50a" class="outline-3">
-<h3 id="org5fbc50a"><span class="section-number-3">2.12.</span> set</h3>
+<div id="outline-container-org3a377b2" class="outline-3">
+<h3 id="org3a377b2"><span class="section-number-3">2.12.</span> set</h3>
 <div class="outline-text-3" id="text-2-12">
 <pre class="example">
 set  variable  contents
@@ -1428,8 +1428,8 @@ string. max variables is 100. first is 0.
 </p>
 </div>
 </div>
-<div id="outline-container-org1ed5ed3" class="outline-3">
-<h3 id="org1ed5ed3"><span class="section-number-3">2.13.</span> variables usage</h3>
+<div id="outline-container-orgd1088af" class="outline-3">
+<h3 id="orgd1088af"><span class="section-number-3">2.13.</span> variables usage</h3>
 <div class="outline-text-3" id="text-2-13">
 <pre class="example">
 anycommand %1 anything
@@ -1440,8 +1440,8 @@ inserts variable 1 contents info line
 </p>
 </div>
 </div>
-<div id="outline-container-org69e43cc" class="outline-3">
-<h3 id="org69e43cc"><span class="section-number-3">2.14.</span> cmp</h3>
+<div id="outline-container-org8dabc15" class="outline-3">
+<h3 id="org8dabc15"><span class="section-number-3">2.14.</span> cmp</h3>
 <div class="outline-text-3" id="text-2-14">
 <pre class="example">
 cmp  flag string1 string2
@@ -1452,8 +1452,8 @@ compares strings, and inserts TRUE to flag, if they are equal, else inserts FALS
 </p>
 </div>
 </div>
-<div id="outline-container-org9461186" class="outline-3">
-<h3 id="org9461186"><span class="section-number-3">2.15.</span> ?</h3>
+<div id="outline-container-orgcf941b0" class="outline-3">
+<h3 id="orgcf941b0"><span class="section-number-3">2.15.</span> ?</h3>
 <div class="outline-text-3" id="text-2-15">
 <pre class="example">
 ?flag anycommand
@@ -1468,8 +1468,8 @@ exapmle: ?3 obj car z*2 xy45
 </p>
 </div>
 </div>
-<div id="outline-container-org1182375" class="outline-3">
-<h3 id="org1182375"><span class="section-number-3">2.16.</span> dum</h3>
+<div id="outline-container-org5316ce5" class="outline-3">
+<h3 id="org5316ce5"><span class="section-number-3">2.16.</span> dum</h3>
 <div class="outline-text-3" id="text-2-16">
 <pre class="example">
 dum
@@ -1482,16 +1482,16 @@ dummy function, does notheing
 </div>
 </div>
 
-<div id="outline-container-orgd87df4f" class="outline-2">
-<h2 id="orgd87df4f"><span class="section-number-2">3.</span> Installation</h2>
+<div id="outline-container-org1509f08" class="outline-2">
+<h2 id="org1509f08"><span class="section-number-2">3.</span> Installation</h2>
 <div class="outline-text-2" id="text-3">
 <p>
 Edit <b>bin/3dparse.bas</b> file and update include path in there.
 </p>
 </div>
 
-<div id="outline-container-org9830b9c" class="outline-3">
-<h3 id="org9830b9c"><span class="section-number-3">3.1.</span> System requirements</h3>
+<div id="outline-container-org938ea8f" class="outline-3">
+<h3 id="org938ea8f"><span class="section-number-3">3.1.</span> System requirements</h3>
 <div class="outline-text-3" id="text-3-1">
 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
 
@@ -1522,8 +1522,8 @@ Edit <b>bin/3dparse.bas</b> file and update include path in there.
 </div>
 </div>
 
-<div id="outline-container-orgb652d95" class="outline-3">
-<h3 id="orgb652d95"><span class="section-number-3">3.2.</span> Directory layout</h3>
+<div id="outline-container-orgcf089f3" class="outline-3">
+<h3 id="orgcf089f3"><span class="section-number-3">3.2.</span> Directory layout</h3>
 <div class="outline-text-3" id="text-3-2">
 <dl class="org-dl">
 <dt>bin</dt><dd><dl class="org-dl">
@@ -1540,8 +1540,8 @@ Edit <b>bin/3dparse.bas</b> file and update include path in there.
 </div>
 </div>
 
-<div id="outline-container-org66f534e" class="outline-2">
-<h2 id="org66f534e"><span class="section-number-2">4.</span> Usage</h2>
+<div id="outline-container-org393308b" class="outline-2">
+<h2 id="org393308b"><span class="section-number-2">4.</span> Usage</h2>
 <div class="outline-text-2" id="text-4">
 <p>
 Make sure you have QB binaries in your PATH.  Execute
@@ -1566,7 +1566,7 @@ Visualize scene with your favourite renderer.
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:28</p>
+<p class="date">Created: 2025-07-30 ke 08:55</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 7b85e61..69acd20 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:28 -->
+<!-- 2025-07-30 ke 08:55 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Miscellaneous 3D graphics demos</title>
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#org25474e2">1. Rotating exclamation mark</a></li>
-<li><a href="#org2059fc3">2. 3D bouncing ball</a></li>
-<li><a href="#org610130b">3. 3D text in a room</a></li>
-<li><a href="#orgaad53b1">4. 3D bouncing cubes on grid floor</a></li>
-<li><a href="#org762cf9b">5. Matrix math for rotation in 3D space</a></li>
-<li><a href="#org3efb169">6. Maze explorer</a></li>
-<li><a href="#orgaef8001">7. Tank animation</a></li>
-<li><a href="#orga3b9efe">8. Tiled room</a></li>
+<li><a href="#orgc78d249">1. Rotating exclamation mark</a></li>
+<li><a href="#orgb2f9057">2. 3D bouncing ball</a></li>
+<li><a href="#org194c108">3. 3D text in a room</a></li>
+<li><a href="#org2544c8a">4. 3D bouncing cubes on grid floor</a></li>
+<li><a href="#orgdf2dd1e">5. Matrix math for rotation in 3D space</a></li>
+<li><a href="#org28227eb">6. Maze explorer</a></li>
+<li><a href="#orge1c373c">7. Tank animation</a></li>
+<li><a href="#org853da96">8. Tiled room</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-org25474e2" class="outline-2">
-<h2 id="org25474e2"><span class="section-number-2">1.</span> Rotating exclamation mark</h2>
+<div id="outline-container-orgc78d249" class="outline-2">
+<h2 id="orgc78d249"><span class="section-number-2">1.</span> Rotating exclamation mark</h2>
 <div class="outline-text-2" id="text-1">
 <p>
 Wireframe 3D model of a rotating exclamation mark.
@@ -258,8 +258,8 @@ Wireframe 3D model of a rotating exclamation mark.
 </div>
 </div>
 
-<div id="outline-container-org2059fc3" class="outline-2">
-<h2 id="org2059fc3"><span class="section-number-2">2.</span> 3D bouncing ball</h2>
+<div id="outline-container-orgb2f9057" class="outline-2">
+<h2 id="orgb2f9057"><span class="section-number-2">2.</span> 3D bouncing ball</h2>
 <div class="outline-text-2" id="text-2">
 <p>
 This QBasic program creates a visually engaging 3D animation of a
@@ -280,8 +280,8 @@ of early computer graphics techniques.
 </div>
 </div>
 
-<div id="outline-container-org610130b" class="outline-2">
-<h2 id="org610130b"><span class="section-number-2">3.</span> 3D text in a room</h2>
+<div id="outline-container-org194c108" class="outline-2">
+<h2 id="org194c108"><span class="section-number-2">3.</span> 3D text in a room</h2>
 <div class="outline-text-2" id="text-3">
 <p>
 Wireframe 3D text hanging in a wireframe 3D room. User can look and
@@ -301,8 +301,8 @@ fly around in all directions.
 </div>
 </div>
 
-<div id="outline-container-orgaad53b1" class="outline-2">
-<h2 id="orgaad53b1"><span class="section-number-2">4.</span> 3D bouncing cubes on grid floor</h2>
+<div id="outline-container-org2544c8a" class="outline-2">
+<h2 id="org2544c8a"><span class="section-number-2">4.</span> 3D bouncing cubes on grid floor</h2>
 <div class="outline-text-2" id="text-4">
 <p>
 3D wireframe cubes bouncing on a grid floor, creating an immersive and
@@ -322,8 +322,8 @@ dynamic visual effect.
 </div>
 </div>
 
-<div id="outline-container-org762cf9b" class="outline-2">
-<h2 id="org762cf9b"><span class="section-number-2">5.</span> Matrix math for rotation in 3D space</h2>
+<div id="outline-container-orgdf2dd1e" class="outline-2">
+<h2 id="orgdf2dd1e"><span class="section-number-2">5.</span> Matrix math for rotation in 3D space</h2>
 <div class="outline-text-2" id="text-5">
 <p>
 Instead of combining simple 2D rotors, pixels in this 3D space are
@@ -343,8 +343,8 @@ rotated by using matrix multiplications.
 </div>
 </div>
 
-<div id="outline-container-org3efb169" class="outline-2">
-<h2 id="org3efb169"><span class="section-number-2">6.</span> Maze explorer</h2>
+<div id="outline-container-org28227eb" class="outline-2">
+<h2 id="org28227eb"><span class="section-number-2">6.</span> Maze explorer</h2>
 <div class="outline-text-2" id="text-6">
 <p>
 The Evolving 3D Maze Explorer is a QBasic program that generates and
@@ -355,7 +355,7 @@ changes as they navigate through it.
 </p>
 
 
-<div id="orgae27554" class="figure">
+<div id="orgd31decb" class="figure">
 <p><a href="Maze%20explorer.bas" class="responsive-img"><img src="Maze%20explorer.png" alt="Maze%20explorer.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -366,8 +366,8 @@ changes as they navigate through it.
 </div>
 </div>
 
-<div id="outline-container-orgaef8001" class="outline-2">
-<h2 id="orgaef8001"><span class="section-number-2">7.</span> Tank animation</h2>
+<div id="outline-container-orge1c373c" class="outline-2">
+<h2 id="orge1c373c"><span class="section-number-2">7.</span> Tank animation</h2>
 <div class="outline-text-2" id="text-7">
 <p>
 Animated tank driving through the bridge back and forward. User can
@@ -387,8 +387,8 @@ look and fly around in all directions.
 </div>
 </div>
 
-<div id="outline-container-orga3b9efe" class="outline-2">
-<h2 id="orga3b9efe"><span class="section-number-2">8.</span> Tiled room</h2>
+<div id="outline-container-org853da96" class="outline-2">
+<h2 id="org853da96"><span class="section-number-2">8.</span> Tiled room</h2>
 <div class="outline-text-2" id="text-8">
 <p>
 Room with some tiles on the wall and on the floor. User can freely fly
@@ -409,7 +409,7 @@ around.
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:28</p>
+<p class="date">Created: 2025-07-30 ke 08:55</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index b4d79a4..7355761 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:28 -->
+<!-- 2025-07-30 ke 08:56 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Space themed 3D graphics</title>
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#org30fd979">1. Galaxy explorer</a></li>
-<li><a href="#org88a2631">2. Rocket simulator</a></li>
-<li><a href="#org251d15f">3. Stars</a></li>
-<li><a href="#orge766e15">4. Universe explorer</a></li>
+<li><a href="#orgc0d8309">1. Galaxy explorer</a></li>
+<li><a href="#org4cc6b4a">2. Rocket simulator</a></li>
+<li><a href="#org53ccbc2">3. Stars</a></li>
+<li><a href="#orge2db8d0">4. Universe explorer</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-org30fd979" class="outline-2">
-<h2 id="org30fd979"><span class="section-number-2">1.</span> Galaxy explorer</h2>
+<div id="outline-container-orgc0d8309" class="outline-2">
+<h2 id="orgc0d8309"><span class="section-number-2">1.</span> Galaxy explorer</h2>
 <div class="outline-text-2" id="text-1">
 <p>
 This QBasic program renders a navigable 3D point cloud galaxy,
@@ -245,7 +245,7 @@ galaxy with stars distributed in a spiral pattern.
 </p>
 
 
-<div id="org8075f21" class="figure">
+<div id="org12a0c2b" class="figure">
 <p><a href="Galaxy%20explorer.bas" class="responsive-img"><img src="Galaxy%20explorer.png" alt="Galaxy%20explorer.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -256,8 +256,8 @@ galaxy with stars distributed in a spiral pattern.
 </div>
 </div>
 
-<div id="outline-container-org88a2631" class="outline-2">
-<h2 id="org88a2631"><span class="section-number-2">2.</span> Rocket simulator</h2>
+<div id="outline-container-org4cc6b4a" class="outline-2">
+<h2 id="org4cc6b4a"><span class="section-number-2">2.</span> Rocket simulator</h2>
 <div class="outline-text-2" id="text-2">
 <p>
 QBasic program that simulates the takeoff and flight of a rocket from
@@ -279,8 +279,8 @@ observe the rocket's trajectory from various angles.
 </div>
 </div>
 
-<div id="outline-container-org251d15f" class="outline-2">
-<h2 id="org251d15f"><span class="section-number-2">3.</span> Stars</h2>
+<div id="outline-container-org53ccbc2" class="outline-2">
+<h2 id="org53ccbc2"><span class="section-number-2">3.</span> Stars</h2>
 <div class="outline-text-2" id="text-3">
 <p>
 The 3D Starfield Simulation is a QBasic program that creates a
@@ -320,8 +320,8 @@ based on its distance, with closer stars appearing brighter.</dd>
 </div>
 </div>
 
-<div id="outline-container-orge766e15" class="outline-2">
-<h2 id="orge766e15"><span class="section-number-2">4.</span> Universe explorer</h2>
+<div id="outline-container-orge2db8d0" class="outline-2">
+<h2 id="orge2db8d0"><span class="section-number-2">4.</span> Universe explorer</h2>
 <div class="outline-text-2" id="text-4">
 <p>
 This QBasic program that simulates a navigable 3D universe. Users can
@@ -358,19 +358,19 @@ limiting the number of rendered objects based on distance.</dd>
 </dl>
 
 
-<div id="org1d03aa9" class="figure">
+<div id="orgc4b3925" class="figure">
 <p><a href="Universe%20explorer/Universe%20explorer.bas" class="responsive-img"><img src="Universe%20explorer/1.png" alt="1.png" class="responsive-img" /></a>
 </p>
 </div>
 
 
-<div id="orgfd4d2e7" class="figure">
+<div id="org872ba15" class="figure">
 <p><a href="Universe%20explorer/Universe%20explorer.bas" class="responsive-img"><img src="Universe%20explorer/2.png" alt="2.png" class="responsive-img" /></a>
 </p>
 </div>
 
 
-<div id="org5e18244" class="figure">
+<div id="org472a2f8" class="figure">
 <p><a href="Universe%20explorer/Universe%20explorer.bas" class="responsive-img"><img src="Universe%20explorer/3.png" alt="3.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -382,7 +382,7 @@ limiting the number of rendered objects based on distance.</dd>
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:28</p>
+<p class="date">Created: 2025-07-30 ke 08:56</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 13be060..ff4d269 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:28 -->
+<!-- 2025-07-30 ke 08:56 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Plotting</title>
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#org65b8689">1. 2D graph</a></li>
-<li><a href="#org06c1f4f">2. 3D graph</a></li>
-<li><a href="#org6408b27">3. Deriviative calculator</a></li>
-<li><a href="#org0cf4d12">4. Sine and cosine table</a></li>
+<li><a href="#org606157c">1. 2D graph</a></li>
+<li><a href="#org8371fa8">2. 3D graph</a></li>
+<li><a href="#org6fcf670">3. Deriviative calculator</a></li>
+<li><a href="#orgd112640">4. Sine and cosine table</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-org65b8689" class="outline-2">
-<h2 id="org65b8689"><span class="section-number-2">1.</span> 2D graph</h2>
+<div id="outline-container-org606157c" class="outline-2">
+<h2 id="org606157c"><span class="section-number-2">1.</span> 2D graph</h2>
 <div class="outline-text-2" id="text-1">
 <p>
 The 2D Graph Plotter is a simple yet effective program written in
@@ -251,7 +251,7 @@ based on a user-defined mathematical function.
 </p>
 
 
-<div id="orgee145ab" class="figure">
+<div id="org9b4bdcf" class="figure">
 <p><a href="2D%20graph%20plot.bas" class="responsive-img"><img src="2D%20graph%20plot.png" alt="2D%20graph%20plot.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -262,8 +262,8 @@ based on a user-defined mathematical function.
 </div>
 </div>
 
-<div id="outline-container-org06c1f4f" class="outline-2">
-<h2 id="org06c1f4f"><span class="section-number-2">2.</span> 3D graph</h2>
+<div id="outline-container-org8371fa8" class="outline-2">
+<h2 id="org8371fa8"><span class="section-number-2">2.</span> 3D graph</h2>
 <div class="outline-text-2" id="text-2">
 <p>
 The 3D Heightmap Explorer is a QBasic program designed to visualize
@@ -299,7 +299,7 @@ grid.
 </p>
 
 
-<div id="org644fa95" class="figure">
+<div id="org21a4083" class="figure">
 <p><a href="3D%20graph.bas" class="responsive-img"><img src="3D%20graph.png" alt="3D%20graph.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -310,8 +310,8 @@ grid.
 </div>
 </div>
 
-<div id="outline-container-org6408b27" class="outline-2">
-<h2 id="org6408b27"><span class="section-number-2">3.</span> Deriviative calculator</h2>
+<div id="outline-container-org6fcf670" class="outline-2">
+<h2 id="org6fcf670"><span class="section-number-2">3.</span> Deriviative calculator</h2>
 <div class="outline-text-2" id="text-3">
 <p>
 This QBasic program is designed to compute and plot an arbitrary
@@ -324,7 +324,7 @@ visualized.
 </p>
 
 
-<div id="org1bcfc49" class="figure">
+<div id="org2f0f312" class="figure">
 <p><a href="Deriviative%20calculator.bas" class="responsive-img"><img src="Deriviative%20calculator.png" alt="Deriviative%20calculator.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -335,8 +335,8 @@ visualized.
 </div>
 </div>
 
-<div id="outline-container-org0cf4d12" class="outline-2">
-<h2 id="org0cf4d12"><span class="section-number-2">4.</span> Sine and cosine table</h2>
+<div id="outline-container-orgd112640" class="outline-2">
+<h2 id="orgd112640"><span class="section-number-2">4.</span> Sine and cosine table</h2>
 <div class="outline-text-2" id="text-4">
 <p>
 The SIN &amp; COS Table Generator is a QBasic program designed to visually
@@ -346,7 +346,7 @@ visual representation of these fundamental trigonometric functions.
 </p>
 
 
-<div id="org79d6d5f" class="figure">
+<div id="org7b2669b" class="figure">
 <p><a href="Sine%20and%20cosine%20table.bas" class="responsive-img"><img src="Sine%20and%20cosine%20table.png" alt="Sine%20and%20cosine%20table.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -358,7 +358,7 @@ visual representation of these fundamental trigonometric functions.
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:28</p>
+<p class="date">Created: 2025-07-30 ke 08:56</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 9bf6f7a..d446fdb 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:29 -->
+<!-- 2025-07-30 ke 08:56 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Simulation</title>
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#orgc0dba4b">1. Explosion simulator</a></li>
-<li><a href="#org3ead4ff">2. Gravity in 2D</a></li>
-<li><a href="#org8e097c6">3. Gravity in 3D</a></li>
-<li><a href="#orgd16724c">4. Interference</a></li>
-<li><a href="#org313d23c">5. Interferogram</a></li>
-<li><a href="#org0fd9b44">6. Surface tension</a></li>
-<li><a href="#org1e3088a">7. Wave 1</a></li>
-<li><a href="#orgd5c33be">8. Wave 2</a></li>
+<li><a href="#org68d895a">1. Explosion simulator</a></li>
+<li><a href="#orgf6ba3ac">2. Gravity in 2D</a></li>
+<li><a href="#orgc96821f">3. Gravity in 3D</a></li>
+<li><a href="#org0b3ffba">4. Interference</a></li>
+<li><a href="#orga57850a">5. Interferogram</a></li>
+<li><a href="#org602eb83">6. Surface tension</a></li>
+<li><a href="#org468ff0b">7. Wave 1</a></li>
+<li><a href="#orgc8f6c62">8. Wave 2</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-orgc0dba4b" class="outline-2">
-<h2 id="orgc0dba4b"><span class="section-number-2">1.</span> Explosion simulator</h2>
+<div id="outline-container-org68d895a" class="outline-2">
+<h2 id="org68d895a"><span class="section-number-2">1.</span> Explosion simulator</h2>
 <div class="outline-text-2" id="text-1">
 <p>
 This QBasic program simulates the propagation of shock waves in a gas
@@ -265,7 +265,7 @@ conditions by setting velocities to zero at wall boundaries.
 </p>
 
 
-<div id="org48d720d" class="figure">
+<div id="org6df3fa0" class="figure">
 <p><a href="Explosion%20simulator.bas" class="responsive-img"><img src="Explosion%20simulator.png" alt="Explosion%20simulator.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -276,8 +276,8 @@ conditions by setting velocities to zero at wall boundaries.
 </div>
 </div>
 
-<div id="outline-container-org3ead4ff" class="outline-2">
-<h2 id="org3ead4ff"><span class="section-number-2">2.</span> Gravity in 2D</h2>
+<div id="outline-container-orgf6ba3ac" class="outline-2">
+<h2 id="orgf6ba3ac"><span class="section-number-2">2.</span> Gravity in 2D</h2>
 <div class="outline-text-2" id="text-2">
 <p>
 The Gravitation Simulation program is a simple yet insightful QBasic
@@ -289,7 +289,7 @@ educational tool for understanding basic orbital mechanics.
 </p>
 
 
-<div id="org2a562db" class="figure">
+<div id="org5d1eb55" class="figure">
 <p><a href="Gravity%20in%202D.bas" class="responsive-img"><img src="Gravity%20in%202D.png" alt="Gravity%20in%202D.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -300,8 +300,8 @@ educational tool for understanding basic orbital mechanics.
 </div>
 </div>
 
-<div id="outline-container-org8e097c6" class="outline-2">
-<h2 id="org8e097c6"><span class="section-number-2">3.</span> Gravity in 3D</h2>
+<div id="outline-container-orgc96821f" class="outline-2">
+<h2 id="orgc96821f"><span class="section-number-2">3.</span> Gravity in 3D</h2>
 <div class="outline-text-2" id="text-3">
 <p>
 This QBasic program simulates the gravitational interactions between
@@ -335,8 +335,8 @@ will reach stable configuration.
 </div>
 </div>
 
-<div id="outline-container-orgd16724c" class="outline-2">
-<h2 id="orgd16724c"><span class="section-number-2">4.</span> Interference</h2>
+<div id="outline-container-org0b3ffba" class="outline-2">
+<h2 id="org0b3ffba"><span class="section-number-2">4.</span> Interference</h2>
 <div class="outline-text-2" id="text-4">
 <p>
 This QBasic program simulates the interference pattern created by two
@@ -364,8 +364,8 @@ displayed as a third waveform.
 </div>
 </div>
 
-<div id="outline-container-org313d23c" class="outline-2">
-<h2 id="org313d23c"><span class="section-number-2">5.</span> Interferogram</h2>
+<div id="outline-container-orga57850a" class="outline-2">
+<h2 id="orga57850a"><span class="section-number-2">5.</span> Interferogram</h2>
 <div class="outline-text-2" id="text-5">
 <p>
 This QBasic program simulates the interference pattern created by
@@ -375,7 +375,7 @@ used in physics and engineering to analyze wave interactions.
 </p>
 
 
-<div id="orgb25dfec" class="figure">
+<div id="org2acd9c4" class="figure">
 <p><a href="Interferogram.bas" class="responsive-img"><img src="Interferogram.png" alt="Interferogram.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -386,8 +386,8 @@ used in physics and engineering to analyze wave interactions.
 </div>
 </div>
 
-<div id="outline-container-org0fd9b44" class="outline-2">
-<h2 id="org0fd9b44"><span class="section-number-2">6.</span> Surface tension</h2>
+<div id="outline-container-org602eb83" class="outline-2">
+<h2 id="org602eb83"><span class="section-number-2">6.</span> Surface tension</h2>
 <div class="outline-text-2" id="text-6">
 <p>
 This QBasic program simulates the behavior of water spills and the
@@ -411,7 +411,7 @@ water cell if surrounded by a high density of water cells.
 </p>
 
 
-<div id="orge93ab50" class="figure">
+<div id="org0329a16" class="figure">
 <p><a href="Surface%20tension.bas" class="responsive-img"><img src="Surface%20tension.png" alt="Surface%20tension.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -422,8 +422,8 @@ water cell if surrounded by a high density of water cells.
 </div>
 </div>
 
-<div id="outline-container-org1e3088a" class="outline-2">
-<h2 id="org1e3088a"><span class="section-number-2">7.</span> Wave 1</h2>
+<div id="outline-container-org468ff0b" class="outline-2">
+<h2 id="org468ff0b"><span class="section-number-2">7.</span> Wave 1</h2>
 <div class="outline-text-2" id="text-7">
 <p>
 This QBasic program simulates the propagation of waves across a
@@ -439,7 +439,7 @@ loss.
 </p>
 
 
-<div id="org9edcbd1" class="figure">
+<div id="orge277df4" class="figure">
 <p><a href="Wave%201.bas" class="responsive-img"><img src="Wave%201.png" alt="Wave%201.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -450,8 +450,8 @@ loss.
 </div>
 </div>
 
-<div id="outline-container-orgd5c33be" class="outline-2">
-<h2 id="orgd5c33be"><span class="section-number-2">8.</span> Wave 2</h2>
+<div id="outline-container-orgc8f6c62" class="outline-2">
+<h2 id="orgc8f6c62"><span class="section-number-2">8.</span> Wave 2</h2>
 <div class="outline-text-2" id="text-8">
 <p>
 This QBasic program simulates and visualizes the behavior of water
@@ -463,7 +463,7 @@ understanding wave mechanics.
 </p>
 
 
-<div id="orgc8f60e2" class="figure">
+<div id="org773b542" class="figure">
 <p><a href="Wave%202.bas" class="responsive-img"><img src="Wave%202.png" alt="Wave%202.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -475,7 +475,7 @@ understanding wave mechanics.
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:29</p>
+<p class="date">Created: 2025-07-30 ke 08:56</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 27ee4b5..ca59ad0 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:30 -->
+<!-- 2025-07-30 ke 08:57 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Truth table calculator</title>
@@ -1103,20 +1103,20 @@ hsAddReviewPanels();
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#org06f3ac8">1. Implemented logical operations</a>
+<li><a href="#org6ff8d10">1. Implemented logical operations</a>
 <ul>
-<li><a href="#org1be7922">1.1. Equivalent ( â‡” , 1 )</a></li>
-<li><a href="#org2bc5a82">1.2. Implies ( â‡’ , 2 )</a></li>
-<li><a href="#org786924e">1.3. OR ( âˆ¨ , 3 )</a></li>
-<li><a href="#org876a1ea">1.4. AND ( âˆ§ , 4 )</a></li>
-<li><a href="#orgcb43e80">1.5. NOT ( Â¬ , 5 )</a></li>
+<li><a href="#org34525d9">1.1. Equivalent ( â‡” , 1 )</a></li>
+<li><a href="#orgf5b7cc9">1.2. Implies ( â‡’ , 2 )</a></li>
+<li><a href="#org54f0ebb">1.3. OR ( âˆ¨ , 3 )</a></li>
+<li><a href="#org7ae6d33">1.4. AND ( âˆ§ , 4 )</a></li>
+<li><a href="#orgcd6785f">1.5. NOT ( Â¬ , 5 )</a></li>
 </ul>
 </li>
-<li><a href="#org1f8faea">2. Examples</a>
+<li><a href="#org2c0e81d">2. Examples</a>
 <ul>
-<li><a href="#org70d21cc">2.1. Example: (A âˆ§ B) âˆ¨ Â¬C</a></li>
-<li><a href="#orgdb6b43c">2.2. Example: A â‡’ (B âˆ¨ Â¬C)</a></li>
-<li><a href="#org221a1e2">2.3. Example: (A â‡” B) âˆ§ C</a></li>
+<li><a href="#org335f235">2.1. Example: (A âˆ§ B) âˆ¨ Â¬C</a></li>
+<li><a href="#orgfa48512">2.2. Example: A â‡’ (B âˆ¨ Â¬C)</a></li>
+<li><a href="#org6f17529">2.3. Example: (A â‡” B) âˆ§ C</a></li>
 </ul>
 </li>
 </ul>
@@ -1133,12 +1133,12 @@ the input variables, with the corresponding output value. Truth tables are cruci
 designing and understanding digital circuits, Boolean algebra, and logical expressions.
 </p>
 
-<div id="outline-container-org06f3ac8" class="outline-2">
-<h2 id="org06f3ac8"><span class="section-number-2">1.</span> Implemented logical operations</h2>
+<div id="outline-container-org6ff8d10" class="outline-2">
+<h2 id="org6ff8d10"><span class="section-number-2">1.</span> Implemented logical operations</h2>
 <div class="outline-text-2" id="text-1">
 </div>
-<div id="outline-container-org1be7922" class="outline-3">
-<h3 id="org1be7922"><span class="section-number-3">1.1.</span> Equivalent ( â‡” , 1 )</h3>
+<div id="outline-container-org34525d9" class="outline-3">
+<h3 id="org34525d9"><span class="section-number-3">1.1.</span> Equivalent ( â‡” , 1 )</h3>
 <div class="outline-text-3" id="text-1-1">
 <p>
 The equivalent operation, also known as logical biconditional, is true if and only if
@@ -1196,8 +1196,8 @@ Truth Table:
 </div>
 </div>
 
-<div id="outline-container-org2bc5a82" class="outline-3">
-<h3 id="org2bc5a82"><span class="section-number-3">1.2.</span> Implies ( â‡’ , 2 )</h3>
+<div id="outline-container-orgf5b7cc9" class="outline-3">
+<h3 id="orgf5b7cc9"><span class="section-number-3">1.2.</span> Implies ( â‡’ , 2 )</h3>
 <div class="outline-text-3" id="text-1-2">
 <p>
 An implication asserts that if the first proposition is true, the
@@ -1255,8 +1255,8 @@ Truth table:
 </div>
 </div>
 
-<div id="outline-container-org786924e" class="outline-3">
-<h3 id="org786924e"><span class="section-number-3">1.3.</span> OR ( âˆ¨ , 3 )</h3>
+<div id="outline-container-org54f0ebb" class="outline-3">
+<h3 id="org54f0ebb"><span class="section-number-3">1.3.</span> OR ( âˆ¨ , 3 )</h3>
 <div class="outline-text-3" id="text-1-3">
 <p>
 The OR operation, also known as logical disjunction, is true if at
@@ -1314,8 +1314,8 @@ Truth table:
 </div>
 </div>
 
-<div id="outline-container-org876a1ea" class="outline-3">
-<h3 id="org876a1ea"><span class="section-number-3">1.4.</span> AND ( âˆ§ , 4 )</h3>
+<div id="outline-container-org7ae6d33" class="outline-3">
+<h3 id="org7ae6d33"><span class="section-number-3">1.4.</span> AND ( âˆ§ , 4 )</h3>
 <div class="outline-text-3" id="text-1-4">
 <p>
 The AND operation, also known as logical conjunction, is true if and
@@ -1372,8 +1372,8 @@ Truth table:
 </div>
 </div>
 
-<div id="outline-container-orgcb43e80" class="outline-3">
-<h3 id="orgcb43e80"><span class="section-number-3">1.5.</span> NOT ( Â¬ , 5 )</h3>
+<div id="outline-container-orgcd6785f" class="outline-3">
+<h3 id="orgcd6785f"><span class="section-number-3">1.5.</span> NOT ( Â¬ , 5 )</h3>
 <div class="outline-text-3" id="text-1-5">
 <p>
 The NOT operation, also known as logical negation, inverts the value
@@ -1414,12 +1414,12 @@ Truth Table:
 </div>
 </div>
 </div>
-<div id="outline-container-org1f8faea" class="outline-2">
-<h2 id="org1f8faea"><span class="section-number-2">2.</span> Examples</h2>
+<div id="outline-container-org2c0e81d" class="outline-2">
+<h2 id="org2c0e81d"><span class="section-number-2">2.</span> Examples</h2>
 <div class="outline-text-2" id="text-2">
 </div>
-<div id="outline-container-org70d21cc" class="outline-3">
-<h3 id="org70d21cc"><span class="section-number-3">2.1.</span> Example: (A âˆ§ B) âˆ¨ Â¬C</h3>
+<div id="outline-container-org335f235" class="outline-3">
+<h3 id="org335f235"><span class="section-number-3">2.1.</span> Example: (A âˆ§ B) âˆ¨ Â¬C</h3>
 <div class="outline-text-3" id="text-2-1">
 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
 
@@ -1502,8 +1502,8 @@ Truth Table:
 </div>
 </div>
 
-<div id="outline-container-orgdb6b43c" class="outline-3">
-<h3 id="orgdb6b43c"><span class="section-number-3">2.2.</span> Example: A â‡’ (B âˆ¨ Â¬C)</h3>
+<div id="outline-container-orgfa48512" class="outline-3">
+<h3 id="orgfa48512"><span class="section-number-3">2.2.</span> Example: A â‡’ (B âˆ¨ Â¬C)</h3>
 <div class="outline-text-3" id="text-2-2">
 <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
 
@@ -1586,8 +1586,8 @@ Truth Table:
 </div>
 </div>
 
-<div id="outline-container-org221a1e2" class="outline-3">
-<h3 id="org221a1e2"><span class="section-number-3">2.3.</span> Example: (A â‡” B) âˆ§ C</h3>
+<div id="outline-container-org6f17529" class="outline-3">
+<h3 id="org6f17529"><span class="section-number-3">2.3.</span> Example: (A â‡” B) âˆ§ C</h3>
 <div class="outline-text-3" id="text-2-3">
 <p>
 Truth Table:
@@ -1676,7 +1676,7 @@ Truth Table:
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:30</p>
+<p class="date">Created: 2025-07-30 ke 08:57</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 3e67a5a..678471b 100644 (file)
@@ -3,7 +3,7 @@
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-<!-- 2025-07-30 ke 01:30 -->
+<!-- 2025-07-30 ke 08:57 -->
 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
 <title>Mouse driver for QBasic programs</title>
 <h2>Table of Contents</h2>
 <div id="text-table-of-contents" role="doc-toc">
 <ul>
-<li><a href="#org1fde56c">1. Overview</a></li>
-<li><a href="#org388eb3d">2. High-level idea</a></li>
-<li><a href="#org961c40e">3. Terminate and Stay Resident module</a></li>
-<li><a href="#org03180d5">4. QBasic demonstration program</a></li>
+<li><a href="#orgf16be01">1. Overview</a></li>
+<li><a href="#org6d01472">2. High-level idea</a></li>
+<li><a href="#orgc61712f">3. Terminate and Stay Resident module</a></li>
+<li><a href="#org6191dd0">4. QBasic demonstration program</a></li>
 </ul>
 </div>
 </div>
 
-<div id="outline-container-org1fde56c" class="outline-2">
-<h2 id="org1fde56c"><span class="section-number-2">1.</span> Overview</h2>
+<div id="outline-container-orgf16be01" class="outline-2">
+<h2 id="orgf16be01"><span class="section-number-2">1.</span> Overview</h2>
 <div class="outline-text-2" id="text-1">
 <p>
 QBasic, a popular programming language in the DOS era, lacks native
@@ -230,8 +230,8 @@ workaround that allows QBasic to use mouse input.
 </div>
 </div>
 
-<div id="outline-container-org388eb3d" class="outline-2">
-<h2 id="org388eb3d"><span class="section-number-2">2.</span> High-level idea</h2>
+<div id="outline-container-org6d01472" class="outline-2">
+<h2 id="org6d01472"><span class="section-number-2">2.</span> High-level idea</h2>
 <div class="outline-text-2" id="text-2">
 <p>
 Workaround to access mouse involves a Terminate and Stay Resident
@@ -264,8 +264,8 @@ TSR keeps updating it with latest mouse state simultaneously.
 </div>
 </div>
 
-<div id="outline-container-org961c40e" class="outline-2">
-<h2 id="org961c40e"><span class="section-number-2">3.</span> Terminate and Stay Resident module</h2>
+<div id="outline-container-orgc61712f" class="outline-2">
+<h2 id="orgc61712f"><span class="section-number-2">3.</span> Terminate and Stay Resident module</h2>
 <div class="outline-text-2" id="text-3">
 <p>
 A DOS TSR program that hooks into the system's interrupt mechanism to
@@ -280,12 +280,79 @@ Files:
 <li><a href="qbext.asm">qbext.asm - x86 Assembly source code</a></li>
 <li><a href="qbext.com">qbext.com - binary COM executable for DOS</a></li>
 </ul>
+
+
+<p>
+Here is the detailed technical specification for an in-memory table
+used to exchange mouse coordinates between a TSR program and a QBasic
+program.
+</p>
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col  class="org-right" />
+
+<col  class="org-right" />
+
+<col  class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-right">Offset</th>
+<th scope="col" class="org-right">Size (bytes)</th>
+<th scope="col" class="org-left">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="org-right">0x00</td>
+<td class="org-right">2</td>
+<td class="org-left">Magic Number (1983)</td>
+</tr>
+
+<tr>
+<td class="org-right">0x02</td>
+<td class="org-right">2</td>
+<td class="org-left">Horizontal Movement (X)</td>
+</tr>
+
+<tr>
+<td class="org-right">0x04</td>
+<td class="org-right">2</td>
+<td class="org-left">Vertical Movement (Y)</td>
+</tr>
+
+<tr>
+<td class="org-right">0x06</td>
+<td class="org-right">2</td>
+<td class="org-left">Button Status</td>
+</tr>
+
+<tr>
+<td class="org-right">0x08</td>
+<td class="org-right">1</td>
+<td class="org-left">Update counter</td>
+</tr>
+</tbody>
+</table>
+
+<dl class="org-dl">
+<dt>Update counter</dt><dd>Signals to the QBasic program that new mouse data
+is available in the shared memory table. It ensures that the QBasic
+program only reads fresh data and avoids processing outdated or
+repeated data. When the TSR updates the mouse data, it increments
+this flag by 1 to signal the QBasic program that new data is
+available. QBasic can compare this number against last retrieved
+value. If value has been increased, then there had been update
+meanwhile.</dd>
+</dl>
 </div>
 </div>
 
-
-<div id="outline-container-org03180d5" class="outline-2">
-<h2 id="org03180d5"><span class="section-number-2">4.</span> QBasic demonstration program</h2>
+<div id="outline-container-org6191dd0" class="outline-2">
+<h2 id="org6191dd0"><span class="section-number-2">4.</span> QBasic demonstration program</h2>
 <div class="outline-text-2" id="text-4">
 <p>
 A QBasic program that reads mouse data from the memory location
@@ -295,7 +362,7 @@ clicks.
 
 
 
-<div id="org29d9d17" class="figure">
+<div id="org290bca1" class="figure">
 <p><a href="mousedrv.bas" class="responsive-img"><img src="screenshot.png" alt="screenshot.png" class="responsive-img" /></a>
 </p>
 </div>
@@ -303,11 +370,20 @@ clicks.
 <p>
 <a href="mousedrv.bas">mousedrv.bas - source code</a>
 </p>
+
+<p>
+Here are more practical examples where this mouse driver is being
+used: Within <a href="https://www3.svjatoslav.eu/projects/qbasicapps/3D%20GFX/Space/index.html">Space themed 3D graphics</a>, see:
+</p>
+<ul class="org-ul">
+<li>Galaxy explorer</li>
+<li>Universe explorer</li>
+</ul>
 </div>
 </div>
 </div>
 <div id="postamble" class="status">
-<p class="date">Created: 2025-07-30 ke 01:30</p>
+<p class="date">Created: 2025-07-30 ke 08:57</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
diff --git a/Miscellaneous/Windowing system.bas b/Miscellaneous/Windowing system.bas
new file mode 100755 (executable)
index 0000000..ff0d067
--- /dev/null
@@ -0,0 +1,274 @@
+' 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
+' This program is free software: released under Creative Commons Zero (CC0) license\r
+' by Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+\r
+' Changelog:\r
+' 2003, Initial version\r
+' 2024-2025, Improved program readability\r
+\r
+DECLARE SUB demo ()\r
+DECLARE FUNCTION GetLineFromWindow$ (windowNum%, lineNum%)\r
+DECLARE SUB LoadFileIntoWindow (fileName$, windowNum%)\r
+DECLARE SUB SendLineToWindow (windowNum%, lineNum%, newString$)\r
+DECLARE FUNCTION GetFreeLineIndex% ()\r
+DECLARE SUB RefreshAllWindows ()\r
+DECLARE FUNCTION AddWindow% (x%, y%, widt%, haigh%, title$)\r
+DECLARE SUB DrawBox (x%, y%, widt%, haigh%, edgeStyle$)\r
+DEFINT A-Z\r
+DECLARE SUB ShowWindow (windowNum)\r
+DECLARE SUB InitializeSystem ()\r
+\r
+' Global variables for text storage\r
+DIM SHARED maxStorage%\r
+maxStorage% = 5000\r
+DIM SHARED textStorage$(1 TO maxStorage%)\r
+DIM SHARED storagePointer%\r
+\r
+' Window-related global arrays\r
+DIM SHARED windowData(1 TO 10, 1 TO 1000)      ' Stores line indices for each window\r
+DIM SHARED windowX(1 TO 10), windowY(1 TO 10)  ' Position of each window\r
+DIM SHARED windowWidth(1 TO 10), windowHeight(1 TO 10)  ' Size of each window\r
+DIM SHARED windowActiveStatus(1 TO 10)         ' Whether window is active\r
+DIM SHARED windowTitle$(1 TO 10)               ' Title of each window\r
+\r
+' Window scrolling/shifting\r
+DIM SHARED windowShiftX(1 TO 10)      ' Horizontal shift\r
+DIM SHARED windowShiftY(1 TO 10)      ' Vertical shift\r
+\r
+DIM SHARED currentActiveWindow%       ' Currently active window for display\r
+\r
+InitializeSystem\r
+\r
+demo\r
+\r
+FUNCTION AddWindow% (x%, y%, widt%, heigh%, title$)\r
+    ' Adds a new window to the system\r
+\r
+    ' Find an empty window slot\r
+    FOR windowNum% = 1 TO 10\r
+        IF windowActiveStatus(windowNum%) = 0 THEN\r
+            foundWindow% = windowNum%\r
+            GOTO FoundEmptySlot\r
+        END IF\r
+    NEXT windowNum%\r
+\r
+FoundEmptySlot:\r
+    ' Initialize the window properties\r
+    windowActiveStatus(foundWindow%) = 1\r
+    windowX(foundWindow%) = x%\r
+    windowY(foundWindow%) = y%\r
+    windowWidth(foundWindow%) = widt%\r
+    windowHeight(foundWindow%) = heigh%\r
+    windowTitle$(foundWindow%) = title$\r
+\r
+    ' Return the window number\r
+    AddWindow% = foundWindow%\r
+END FUNCTION\r
+\r
+SUB ClearWindowContent (windowNum%)\r
+    ' Clears all content from a window\r
+\r
+    FOR lineNum% = 1 TO 1000\r
+        IF windowData(windowNum%, lineNum%) > 0 THEN\r
+            textStorage$(windowData(windowNum%, lineNum%)) = ""\r
+            windowData(windowNum%, lineNum%) = 0\r
+        END IF\r
+    NEXT lineNum%\r
+END SUB\r
+\r
+SUB demo\r
+    ' Create three windows with different sizes and titles\r
+    window1% = AddWindow%(1, 1, 30, 10, "window 1.")\r
+    window2% = AddWindow%(1, 12, 80, 30, "second window")\r
+    window3% = AddWindow%(31, 2, 30, 10, "last window")\r
+\r
+    ' Load the same file into all windows\r
+    LoadFileIntoWindow "wsystem.bas", window2%\r
+    LoadFileIntoWindow "wsystem.bas", window1%\r
+    LoadFileIntoWindow "wsystem.bas", window3%\r
+\r
+AnimateWindows:\r
+    ' Randomly select an active window to animate\r
+    currentActiveWindow% = INT(RND * 3) + 1\r
+    RefreshAllWindows\r
+\r
+    ' Animate the windows by shifting their content\r
+    FOR animationFrame% = 1 TO 100\r
+        windowShiftX(currentActiveWindow%) = SIN(animationFrame% / 10) * 10 + 10\r
+        windowShiftY(currentActiveWindow%) = animationFrame%\r
+        ShowWindow currentActiveWindow%\r
+        ' split-second delay\r
+        SOUND 0, 1\r
+        IF INKEY$ <> "" THEN SYSTEM\r
+    NEXT animationFrame%\r
+\r
+    GOTO AnimateWindows\r
+END SUB\r
+\r
+FUNCTION GetFreeLineIndex%\r
+    ' Finds a free line in text storage\r
+\r
+FindNextLine:\r
+    IF storagePointer% > 1000 THEN\r
+        storagePointer% = 1\r
+    END IF\r
+\r
+    IF textStorage$(storagePointer%) = "" THEN\r
+        GetFreeLineIndex% = storagePointer%\r
+        storagePointer% = storagePointer% + 1\r
+    ELSE\r
+        storagePointer% = storagePointer% + 1\r
+        GOTO FindNextLine\r
+    END IF\r
+END FUNCTION\r
+\r
+FUNCTION GetLineFromWindow$ (windowNum%, lineNum%)\r
+    ' Retrieve a line from a window's memory\r
+\r
+    IF windowData(windowNum%, lineNum%) = 0 THEN\r
+        GetLineFromWindow$ = ""\r
+    ELSE\r
+        GetLineFromWindow$ = textStorage$(windowData(windowNum%, lineNum%))\r
+    END IF\r
+END FUNCTION\r
+\r
+SUB LoadFileIntoWindow (fileName$, windowNum%)\r
+    ' Load a file into a window's memory\r
+\r
+    OPEN fileName$ FOR INPUT AS #1\r
+    FOR lineNum% = 1 TO 1000\r
+        IF EOF(1) <> 0 THEN\r
+            GOTO FileLoaded\r
+        END IF\r
+        LINE INPUT #1, lineContent$\r
+        SendLineToWindow windowNum%, lineNum%, lineContent$\r
+    NEXT lineNum%\r
+\r
+FileLoaded:\r
+    CLOSE #1\r
+\r
+    ' Fill the remaining lines with empty strings\r
+    FOR blankLineNum% = lineNum% TO 1000\r
+        SendLineToWindow windowNum%, blankLineNum%, ""\r
+    NEXT blankLineNum%\r
+END SUB\r
+\r
+SUB RefreshAllWindows\r
+    ' Redraw all active windows\r
+\r
+    CLS\r
+    FOR windowNum% = 1 TO 10\r
+        IF windowActiveStatus(windowNum%) > 0 THEN\r
+            ShowWindow windowNum%\r
+        END IF\r
+    NEXT windowNum%\r
+END SUB\r
+\r
+SUB SendLineToWindow (windowNum%, lineNum%, newString$)\r
+    ' Stores a string in a window's memory\r
+\r
+    lineContent$ = newString$\r
+\r
+    ' Remove trailing spaces from the string\r
+    IF lineContent$ = SPACE$(LEN(lineContent$)) THEN\r
+        lineContent$ = ""\r
+    END IF\r
+\r
+    IF LEN(lineContent$) > 0 THEN\r
+TrimRight:\r
+        IF RIGHT$(lineContent$, 1) = " " THEN\r
+            lineContent$ = LEFT$(lineContent$, LEN(lineContent$) - 1)\r
+            GOTO TrimRight\r
+        END IF\r
+    END IF\r
+\r
+    ' Update the window memory with the new string\r
+    IF lineContent$ = "" THEN\r
+        IF windowData(windowNum%, lineNum%) > 0 THEN\r
+            textStorage$(windowData(windowNum%, lineNum%)) = "": windowData(windowNum%, lineNum%) = 0\r
+        END IF\r
+    ELSE\r
+        IF windowData(windowNum%, lineNum%) = 0 THEN\r
+            windowData(windowNum%, lineNum%) = GetFreeLineIndex%\r
+        END IF\r
+        textStorage$(windowData(windowNum%, lineNum%)) = lineContent$\r
+    END IF\r
+END SUB\r
+\r
+SUB ShowWindow (windowNum%)\r
+    ' Draws a window on the screen\r
+\r
+    ' Determine background color based on active window\r
+    IF windowNum% = currentActiveWindow% THEN\r
+        bgColor% = 1\r
+    ELSE\r
+        bgColor% = 0\r
+    END IF\r
+\r
+    x% = windowX(windowNum%)\r
+    y% = windowY(windowNum%)\r
+    widt% = windowWidth(windowNum%)\r
+    heigh% = windowHeight(windowNum%)\r
+    title$ = windowTitle$(windowNum%)\r
+\r
+    COLOR 11, bgColor%\r
+\r
+    ' Create border components\r
+    FOR borderSegment% = 1 TO widt% - 2\r
+        topBottom$ = topBottom$ + CHR$(205)\r
+    NEXT borderSegment%\r
+    borderTop$ = CHR$(201) + topBottom$ + CHR$(187)\r
+    borderBottom$ = CHR$(200) + topBottom$ + CHR$(188)\r
+\r
+    ' Draw top border\r
+    LOCATE y%, x%\r
+    PRINT borderTop$\r
+\r
+    ' Draw bottom border\r
+    LOCATE y% + heigh% - 1, x%\r
+    PRINT borderBottom$\r
+\r
+    ' Draw window content\r
+    FOR lineNum% = 1 TO heigh% - 2\r
+        LOCATE y% + lineNum%, x%\r
+        lineContent$ = GetLineFromWindow$(windowNum%, lineNum% + windowShiftY(windowNum%))\r
+        lineContent$ = lineContent$ + SPACE$(300)\r
+        lineContent$ = RIGHT$(lineContent$, LEN(lineContent$) - windowShiftX(windowNum%))\r
+        lineContent$ = LEFT$(lineContent$, widt% - 2)\r
+        PRINT CHR$(186) + lineContent$ + CHR$(186)\r
+    NEXT lineNum%\r
+\r
+    ' Draw window title\r
+    titleX% = INT(x% + (widt% / 2) - (LEN(title$) / 2) - 2)\r
+    LOCATE y%, titleX%\r
+    PRINT "[ "\r
+    titleX% = titleX% + 2\r
+\r
+    COLOR 10\r
+    LOCATE y%, titleX%\r
+    PRINT title$\r
+\r
+    titleX% = titleX% + LEN(title$)\r
+    COLOR 11\r
+    LOCATE y%, titleX%\r
+    PRINT " ]"\r
+    COLOR 7, 0\r
+END SUB\r
+\r
+SUB InitializeSystem\r
+    ' Initialize the screen and shared memory\r
+\r
+    WIDTH 80, 50\r
+    VIEW PRINT 1 TO 50\r
+\r
+    FOR storageIndex% = 1 TO maxStorage%\r
+        textStorage$(storageIndex%) = ""\r
+    NEXT storageIndex%\r
+\r
+    storagePointer% = 1\r
+END SUB
\ No newline at end of file
diff --git a/Miscellaneous/Windowing system.webm b/Miscellaneous/Windowing system.webm
new file mode 100644 (file)
index 0000000..1a456bb
Binary files /dev/null and b/Miscellaneous/Windowing system.webm differ
diff --git a/Miscellaneous/windowing system.bas b/Miscellaneous/windowing system.bas
deleted file mode 100755 (executable)
index ff0d067..0000000
+++ /dev/null
@@ -1,274 +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
-' This program is free software: released under Creative Commons Zero (CC0) license\r
-' by Svjatoslav Agejenko.\r
-' Email: svjatoslav@svjatoslav.eu\r
-' Homepage: http://www.svjatoslav.eu\r
-\r
-' Changelog:\r
-' 2003, Initial version\r
-' 2024-2025, Improved program readability\r
-\r
-DECLARE SUB demo ()\r
-DECLARE FUNCTION GetLineFromWindow$ (windowNum%, lineNum%)\r
-DECLARE SUB LoadFileIntoWindow (fileName$, windowNum%)\r
-DECLARE SUB SendLineToWindow (windowNum%, lineNum%, newString$)\r
-DECLARE FUNCTION GetFreeLineIndex% ()\r
-DECLARE SUB RefreshAllWindows ()\r
-DECLARE FUNCTION AddWindow% (x%, y%, widt%, haigh%, title$)\r
-DECLARE SUB DrawBox (x%, y%, widt%, haigh%, edgeStyle$)\r
-DEFINT A-Z\r
-DECLARE SUB ShowWindow (windowNum)\r
-DECLARE SUB InitializeSystem ()\r
-\r
-' Global variables for text storage\r
-DIM SHARED maxStorage%\r
-maxStorage% = 5000\r
-DIM SHARED textStorage$(1 TO maxStorage%)\r
-DIM SHARED storagePointer%\r
-\r
-' Window-related global arrays\r
-DIM SHARED windowData(1 TO 10, 1 TO 1000)      ' Stores line indices for each window\r
-DIM SHARED windowX(1 TO 10), windowY(1 TO 10)  ' Position of each window\r
-DIM SHARED windowWidth(1 TO 10), windowHeight(1 TO 10)  ' Size of each window\r
-DIM SHARED windowActiveStatus(1 TO 10)         ' Whether window is active\r
-DIM SHARED windowTitle$(1 TO 10)               ' Title of each window\r
-\r
-' Window scrolling/shifting\r
-DIM SHARED windowShiftX(1 TO 10)      ' Horizontal shift\r
-DIM SHARED windowShiftY(1 TO 10)      ' Vertical shift\r
-\r
-DIM SHARED currentActiveWindow%       ' Currently active window for display\r
-\r
-InitializeSystem\r
-\r
-demo\r
-\r
-FUNCTION AddWindow% (x%, y%, widt%, heigh%, title$)\r
-    ' Adds a new window to the system\r
-\r
-    ' Find an empty window slot\r
-    FOR windowNum% = 1 TO 10\r
-        IF windowActiveStatus(windowNum%) = 0 THEN\r
-            foundWindow% = windowNum%\r
-            GOTO FoundEmptySlot\r
-        END IF\r
-    NEXT windowNum%\r
-\r
-FoundEmptySlot:\r
-    ' Initialize the window properties\r
-    windowActiveStatus(foundWindow%) = 1\r
-    windowX(foundWindow%) = x%\r
-    windowY(foundWindow%) = y%\r
-    windowWidth(foundWindow%) = widt%\r
-    windowHeight(foundWindow%) = heigh%\r
-    windowTitle$(foundWindow%) = title$\r
-\r
-    ' Return the window number\r
-    AddWindow% = foundWindow%\r
-END FUNCTION\r
-\r
-SUB ClearWindowContent (windowNum%)\r
-    ' Clears all content from a window\r
-\r
-    FOR lineNum% = 1 TO 1000\r
-        IF windowData(windowNum%, lineNum%) > 0 THEN\r
-            textStorage$(windowData(windowNum%, lineNum%)) = ""\r
-            windowData(windowNum%, lineNum%) = 0\r
-        END IF\r
-    NEXT lineNum%\r
-END SUB\r
-\r
-SUB demo\r
-    ' Create three windows with different sizes and titles\r
-    window1% = AddWindow%(1, 1, 30, 10, "window 1.")\r
-    window2% = AddWindow%(1, 12, 80, 30, "second window")\r
-    window3% = AddWindow%(31, 2, 30, 10, "last window")\r
-\r
-    ' Load the same file into all windows\r
-    LoadFileIntoWindow "wsystem.bas", window2%\r
-    LoadFileIntoWindow "wsystem.bas", window1%\r
-    LoadFileIntoWindow "wsystem.bas", window3%\r
-\r
-AnimateWindows:\r
-    ' Randomly select an active window to animate\r
-    currentActiveWindow% = INT(RND * 3) + 1\r
-    RefreshAllWindows\r
-\r
-    ' Animate the windows by shifting their content\r
-    FOR animationFrame% = 1 TO 100\r
-        windowShiftX(currentActiveWindow%) = SIN(animationFrame% / 10) * 10 + 10\r
-        windowShiftY(currentActiveWindow%) = animationFrame%\r
-        ShowWindow currentActiveWindow%\r
-        ' split-second delay\r
-        SOUND 0, 1\r
-        IF INKEY$ <> "" THEN SYSTEM\r
-    NEXT animationFrame%\r
-\r
-    GOTO AnimateWindows\r
-END SUB\r
-\r
-FUNCTION GetFreeLineIndex%\r
-    ' Finds a free line in text storage\r
-\r
-FindNextLine:\r
-    IF storagePointer% > 1000 THEN\r
-        storagePointer% = 1\r
-    END IF\r
-\r
-    IF textStorage$(storagePointer%) = "" THEN\r
-        GetFreeLineIndex% = storagePointer%\r
-        storagePointer% = storagePointer% + 1\r
-    ELSE\r
-        storagePointer% = storagePointer% + 1\r
-        GOTO FindNextLine\r
-    END IF\r
-END FUNCTION\r
-\r
-FUNCTION GetLineFromWindow$ (windowNum%, lineNum%)\r
-    ' Retrieve a line from a window's memory\r
-\r
-    IF windowData(windowNum%, lineNum%) = 0 THEN\r
-        GetLineFromWindow$ = ""\r
-    ELSE\r
-        GetLineFromWindow$ = textStorage$(windowData(windowNum%, lineNum%))\r
-    END IF\r
-END FUNCTION\r
-\r
-SUB LoadFileIntoWindow (fileName$, windowNum%)\r
-    ' Load a file into a window's memory\r
-\r
-    OPEN fileName$ FOR INPUT AS #1\r
-    FOR lineNum% = 1 TO 1000\r
-        IF EOF(1) <> 0 THEN\r
-            GOTO FileLoaded\r
-        END IF\r
-        LINE INPUT #1, lineContent$\r
-        SendLineToWindow windowNum%, lineNum%, lineContent$\r
-    NEXT lineNum%\r
-\r
-FileLoaded:\r
-    CLOSE #1\r
-\r
-    ' Fill the remaining lines with empty strings\r
-    FOR blankLineNum% = lineNum% TO 1000\r
-        SendLineToWindow windowNum%, blankLineNum%, ""\r
-    NEXT blankLineNum%\r
-END SUB\r
-\r
-SUB RefreshAllWindows\r
-    ' Redraw all active windows\r
-\r
-    CLS\r
-    FOR windowNum% = 1 TO 10\r
-        IF windowActiveStatus(windowNum%) > 0 THEN\r
-            ShowWindow windowNum%\r
-        END IF\r
-    NEXT windowNum%\r
-END SUB\r
-\r
-SUB SendLineToWindow (windowNum%, lineNum%, newString$)\r
-    ' Stores a string in a window's memory\r
-\r
-    lineContent$ = newString$\r
-\r
-    ' Remove trailing spaces from the string\r
-    IF lineContent$ = SPACE$(LEN(lineContent$)) THEN\r
-        lineContent$ = ""\r
-    END IF\r
-\r
-    IF LEN(lineContent$) > 0 THEN\r
-TrimRight:\r
-        IF RIGHT$(lineContent$, 1) = " " THEN\r
-            lineContent$ = LEFT$(lineContent$, LEN(lineContent$) - 1)\r
-            GOTO TrimRight\r
-        END IF\r
-    END IF\r
-\r
-    ' Update the window memory with the new string\r
-    IF lineContent$ = "" THEN\r
-        IF windowData(windowNum%, lineNum%) > 0 THEN\r
-            textStorage$(windowData(windowNum%, lineNum%)) = "": windowData(windowNum%, lineNum%) = 0\r
-        END IF\r
-    ELSE\r
-        IF windowData(windowNum%, lineNum%) = 0 THEN\r
-            windowData(windowNum%, lineNum%) = GetFreeLineIndex%\r
-        END IF\r
-        textStorage$(windowData(windowNum%, lineNum%)) = lineContent$\r
-    END IF\r
-END SUB\r
-\r
-SUB ShowWindow (windowNum%)\r
-    ' Draws a window on the screen\r
-\r
-    ' Determine background color based on active window\r
-    IF windowNum% = currentActiveWindow% THEN\r
-        bgColor% = 1\r
-    ELSE\r
-        bgColor% = 0\r
-    END IF\r
-\r
-    x% = windowX(windowNum%)\r
-    y% = windowY(windowNum%)\r
-    widt% = windowWidth(windowNum%)\r
-    heigh% = windowHeight(windowNum%)\r
-    title$ = windowTitle$(windowNum%)\r
-\r
-    COLOR 11, bgColor%\r
-\r
-    ' Create border components\r
-    FOR borderSegment% = 1 TO widt% - 2\r
-        topBottom$ = topBottom$ + CHR$(205)\r
-    NEXT borderSegment%\r
-    borderTop$ = CHR$(201) + topBottom$ + CHR$(187)\r
-    borderBottom$ = CHR$(200) + topBottom$ + CHR$(188)\r
-\r
-    ' Draw top border\r
-    LOCATE y%, x%\r
-    PRINT borderTop$\r
-\r
-    ' Draw bottom border\r
-    LOCATE y% + heigh% - 1, x%\r
-    PRINT borderBottom$\r
-\r
-    ' Draw window content\r
-    FOR lineNum% = 1 TO heigh% - 2\r
-        LOCATE y% + lineNum%, x%\r
-        lineContent$ = GetLineFromWindow$(windowNum%, lineNum% + windowShiftY(windowNum%))\r
-        lineContent$ = lineContent$ + SPACE$(300)\r
-        lineContent$ = RIGHT$(lineContent$, LEN(lineContent$) - windowShiftX(windowNum%))\r
-        lineContent$ = LEFT$(lineContent$, widt% - 2)\r
-        PRINT CHR$(186) + lineContent$ + CHR$(186)\r
-    NEXT lineNum%\r
-\r
-    ' Draw window title\r
-    titleX% = INT(x% + (widt% / 2) - (LEN(title$) / 2) - 2)\r
-    LOCATE y%, titleX%\r
-    PRINT "[ "\r
-    titleX% = titleX% + 2\r
-\r
-    COLOR 10\r
-    LOCATE y%, titleX%\r
-    PRINT title$\r
-\r
-    titleX% = titleX% + LEN(title$)\r
-    COLOR 11\r
-    LOCATE y%, titleX%\r
-    PRINT " ]"\r
-    COLOR 7, 0\r
-END SUB\r
-\r
-SUB InitializeSystem\r
-    ' Initialize the screen and shared memory\r
-\r
-    WIDTH 80, 50\r
-    VIEW PRINT 1 TO 50\r
-\r
-    FOR storageIndex% = 1 TO maxStorage%\r
-        textStorage$(storageIndex%) = ""\r
-    NEXT storageIndex%\r
-\r
-    storagePointer% = 1\r
-END SUB
\ No newline at end of file
diff --git a/Miscellaneous/windowing system.webm b/Miscellaneous/windowing system.webm
deleted file mode 100644 (file)
index 1a456bb..0000000
Binary files a/Miscellaneous/windowing system.webm and /dev/null differ
diff --git a/Networking/LPT pin control.png b/Networking/LPT pin control.png
new file mode 100644 (file)
index 0000000..cc6f9a7
Binary files /dev/null and b/Networking/LPT pin control.png differ
diff --git a/Networking/Morse.bas b/Networking/Morse.bas
new file mode 100755 (executable)
index 0000000..7d8f3b9
--- /dev/null
@@ -0,0 +1,89 @@
+' Plays entered text in morse code audio beeps using PC-speaker.\r
+' This program is free software: released under Creative Commons Zero (CC0) license\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\r
+\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
+NEXT b\r
+GOTO 2\r
+\r
+' Label to close the file\r
+1\r
+CLOSE\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
+IF a$ = ".bye" THEN SYSTEM\r
+laus a$\r
+GOTO 3\r
+\r
+' Subroutine to play Morse code for a single character\r
+SUB char(a)\r
+    PRINT CHR$(a);\r
+\r
+    ' Loop through each part of the Morse code sequence\r
+    FOR b = 0 TO 9\r
+        IF mors(a, b) = 1 THEN\r
+            ' Play short beep for a dot\r
+            SOUND 1000, 1 * spd\r
+            SOUND 0, 1 * spd\r
+        END IF\r
+\r
+        IF mors(a, b) = 2 THEN\r
+            ' Play long beep for a dash\r
+            SOUND 1000, 3 * spd\r
+            SOUND 0, 1 * spd\r
+        END IF\r
+    NEXT b\r
+\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
+' Subroutine to process and play Morse code for an entire string\r
+SUB laus(a$)\r
+    ' Loop through each character in the input string\r
+    FOR b = 1 TO LEN(a$)\r
+        c = ASC(RIGHT$(LEFT$(a$, b), 1))\r
+\r
+        ' Call char subroutine to play Morse code for the current character\r
+        char c\r
+    NEXT b\r
+END SUB
\ No newline at end of file
diff --git a/Networking/Morse.png b/Networking/Morse.png
new file mode 100644 (file)
index 0000000..ce2b441
Binary files /dev/null and b/Networking/Morse.png differ
diff --git a/Networking/Morse.txt b/Networking/Morse.txt
new file mode 100644 (file)
index 0000000..d695202
--- /dev/null
@@ -0,0 +1,36 @@
+a .-\r
+b -...\r
+c -.-.\r
+d -..\r
+e .\r
+f ..-.\r
+g --.\r
+h ....\r
+i ..\r
+j .---\r
+k -.-\r
+l .-..\r
+m --\r
+n -.\r
+o ---\r
+p .--.\r
+q --.-\r
+r .-.\r
+s ...\r
+t -\r
+u ..-\r
+v ...-\r
+w .--\r
+x -..-\r
+y -.--\r
+z --..\r
+0 -----\r
+1 .----\r
+2 ..---\r
+3 ...--\r
+4 ....-\r
+5 .....\r
+6 -....\r
+7 --...\r
+8 ---..\r
+9 ----.
\ No newline at end of file
diff --git a/Networking/morse.bas b/Networking/morse.bas
deleted file mode 100755 (executable)
index 7d8f3b9..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-' Plays entered text in morse code audio beeps using PC-speaker.\r
-' This program is free software: released under Creative Commons Zero (CC0) license\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\r
-\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
-NEXT b\r
-GOTO 2\r
-\r
-' Label to close the file\r
-1\r
-CLOSE\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
-IF a$ = ".bye" THEN SYSTEM\r
-laus a$\r
-GOTO 3\r
-\r
-' Subroutine to play Morse code for a single character\r
-SUB char(a)\r
-    PRINT CHR$(a);\r
-\r
-    ' Loop through each part of the Morse code sequence\r
-    FOR b = 0 TO 9\r
-        IF mors(a, b) = 1 THEN\r
-            ' Play short beep for a dot\r
-            SOUND 1000, 1 * spd\r
-            SOUND 0, 1 * spd\r
-        END IF\r
-\r
-        IF mors(a, b) = 2 THEN\r
-            ' Play long beep for a dash\r
-            SOUND 1000, 3 * spd\r
-            SOUND 0, 1 * spd\r
-        END IF\r
-    NEXT b\r
-\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
-' Subroutine to process and play Morse code for an entire string\r
-SUB laus(a$)\r
-    ' Loop through each character in the input string\r
-    FOR b = 1 TO LEN(a$)\r
-        c = ASC(RIGHT$(LEFT$(a$, b), 1))\r
-\r
-        ' Call char subroutine to play Morse code for the current character\r
-        char c\r
-    NEXT b\r
-END SUB
\ No newline at end of file
diff --git a/Networking/morse.txt b/Networking/morse.txt
deleted file mode 100644 (file)
index d695202..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-a .-\r
-b -...\r
-c -.-.\r
-d -..\r
-e .\r
-f ..-.\r
-g --.\r
-h ....\r
-i ..\r
-j .---\r
-k -.-\r
-l .-..\r
-m --\r
-n -.\r
-o ---\r
-p .--.\r
-q --.-\r
-r .-.\r
-s ...\r
-t -\r
-u ..-\r
-v ...-\r
-w .--\r
-x -..-\r
-y -.--\r
-z --..\r
-0 -----\r
-1 .----\r
-2 ..---\r
-3 ...--\r
-4 ....-\r
-5 .....\r
-6 -....\r
-7 --...\r
-8 ---..\r
-9 ----.
\ No newline at end of file
index fda7e27..e85a250 100644 (file)
--- a/index.org
+++ b/index.org
@@ -95,7 +95,7 @@ as pixel manipulation, geometric shapes, and simple animations.
 #+attr_latex: :width 1000px
 [[file:2D%20GFX/Hello%20friend.bas][file:2D%20GFX/Hello%20friend.png]]
 
-[[file:2D%20GFX/Hello%20friend.bas][Hello friend.bas]]
+Download source code: [[file:2D%20GFX/Hello%20friend.bas][Hello friend.bas]]
 
 #+INCLUDE: "2D GFX/Hello friend.bas" src basic-qb45
 
@@ -113,7 +113,7 @@ animated transitions and effects.
 </div>
 #+end_export
 
-[[file:2D%20GFX/People.bas][People.bas]]
+Download source code: [[file:2D%20GFX/People.bas][People.bas]]
 
 *** Stroboscope
 
@@ -127,7 +127,7 @@ diagrams.
 #+attr_latex: :width 1000px
 [[file:2D%20GFX/Stroboscope.bas][file:2D%20GFX/Stroboscope.png]]
 
-[[file:2D%20GFX/Stroboscope.bas][Stroboscope.bas]]
+Download source code: [[file:2D%20GFX/Stroboscope.bas][Stroboscope.bas]]
 
 *** Truncated cone
 
@@ -141,7 +141,7 @@ the viability of generating images of 3D shapes using code.
 #+attr_latex: :width 1000px
 [[file:2D%20GFX/Truncated%20cone.bas][file:2D%20GFX/Truncated%20cone.png]]
 
-[[file:2D%20GFX/Truncated%20cone.bas][Truncated cone.bas]]
+Download source code: [[file:2D%20GFX/Truncated%20cone.bas][Truncated cone.bas]]
 
 #+INCLUDE: "2D GFX/Truncated cone.bas" src basic-qb45
 
@@ -223,7 +223,7 @@ into RAM, allowing for the potential rendering of very large worlds.
 #+attr_latex: :width 1000px
 [[file:3D%20GFX/Swapping%203D%20engine/screenshot,%202.png]]
 
-[[file:3D%20GFX/Swapping%203D%20engine/engine.bas][engine.bas]]
+Download source code: [[file:3D%20GFX/Swapping%203D%20engine/engine.bas][engine.bas]]
 
 ** 3D land
 
@@ -289,7 +289,7 @@ specified keys to turn, look up/down, and even jump.
 #+attr_latex: :width 1000px
 [[file:3D%20GFX/Ray%20casting%20engine.bas][file:3D%20GFX/Ray%20casting%20engine.png]]
 
-[[file:3D%20GFX/Ray%20casting%20engine.bas][Ray casting engine.bas]]
+Download source code: [[file:3D%20GFX/Ray%20casting%20engine.bas][Ray casting engine.bas]]
 
 * Games
 :PROPERTIES:
@@ -636,7 +636,6 @@ but with additional extra dimension that I decided to call Q.
   vertices to define. It is the minimal object in 4D world to have
   hypervolume (aka. 4D volume).
 
-
 *** Planes or rotation in 3D world vs 4D world
 
 In 3D space, the planes of rotation correspond to rotations around the
@@ -717,6 +716,106 @@ novel planes of 4D space.
 
 Download source code: [[file:Miscellaneous/4D%20engine.bas][4D engine.bas]]
 
+** Windowing system
+
+This QBasic program implements a text mode windowing system, allowing
+users to create and manage multiple windows on the screen. Each window
+can display the contents of a text file and supports horizontal and
+vertical scrolling. The program is designed to demonstrate basic
+window management and text display functionalities in a text-based
+environment.
+
+Windows are drawn on the screen with borders and titles.
+
+The program includes a simple animation loop that shifts the content
+of the active window, creating a dynamic visual effect.
+
+#+begin_export html
+<div class="flex-center">
+  <video controls loop autoplay>
+    <source src="Miscellaneous/Windowing%20system.webm" type="video/webm">
+    Your browser does not support the video tag.
+  </video>
+</div>
+#+end_export
+
+Download source code: [[file:Miscellaneous/Windowing%20system.bas][Windowing system.bas]]
+
+** Password lock
+
+This QBasic program simulates a retro-styled rocket control system
+interface with a password protection mechanism. The program is
+designed to provide a visually engaging experience reminiscent of
+early computer systems.
+
+The password is stored in an external file (passw.dat).
+
+The program captures and processes user input for password entry,
+including handling special keys like Enter and Backspace.
+
+When the user presses Enter, the program checks the entered password
+against the stored password. If the password is correct, the program
+exits. If not, it displays an error message and decreases the number
+of remaining attempts.
+
+The user has three attempts to enter the correct password. After three
+failed attempts, the program halts and displays a "SYSTEM HALTED"
+message.
+
+#+attr_html: :class responsive-img
+#+attr_latex: :width 1000px
+[[file:Miscellaneous/Password%20lock/passw.bas][file:Miscellaneous/Password%20lock/screenshot,%201.png]]
+
+#+attr_html: :class responsive-img
+#+attr_latex: :width 1000px
+[[file:Miscellaneous/Password%20lock/passw.bas][file:Miscellaneous/Password%20lock/screenshot,%202.png]]
+
+Download source code: [[file:Miscellaneous/Password%20lock/passw.bas][passw.bas]]
+
+
+* Networking
+
+** LPT port pin control
+
+This QBasic program is designed to control the voltage on individual
+pins of an LPT (Line Print Terminal) port, commonly known as a
+parallel port. This type of port was traditionally used for connecting
+printers to computers but can also be used for simple hardware control
+tasks.
+
+The program allows users to toggle the voltage on each of the 8 pins
+of the LPT port using keys 1 through 8 on the keyboard. When a key is
+pressed, the corresponding pin's state is toggled between on (high
+voltage) and off (low voltage).
+
+The program uses bit manipulation to control individual pins.
+
+#+attr_html: :class responsive-img
+#+attr_latex: :width 1000px
+[[file:Networking/LPT%20pin%20control.bas][file:Networking/LPT%20pin%20control.png]]
+
+Download source code: [[file:Networking/LPT%20pin%20control.bas][LPT pin control.bas]]
+
+** Morse
+
+This QBasic program allows users to input text and hear it played back
+in Morse code using the PC speaker. It's a fun and educational tool
+for anyone interested in learning Morse code.
+
+It reads Morse code patterns from an external file named
+"morse.txt". Each line in the file represents a character and its
+corresponding Morse code.
+
+For each character in the input text, the program looks up its Morse
+code pattern and plays it back using the PC speaker. Dots are
+represented by short beeps, and dashes by longer beeps.
+
+#+attr_html: :class responsive-img
+#+attr_latex: :width 1000px
+[[file:Networking/Morse.bas][file:Networking/Morse.png]]
+
+Download source code: [[file:Networking/Morse.bas][Morse.bas]]
+
 * Download
 ** Getting the source code