Better documentation for mouse driver
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Tue, 29 Jul 2025 13:54:07 +0000 (16:54 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Tue, 29 Jul 2025 13:54:07 +0000 (16:54 +0300)
12 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 [new file with mode: 0644]
Miscellaneous/Mouse driver/mousedrv.bas
Miscellaneous/Mouse driver/qbext.asm

index 33cbe98..05be623 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-29 ti 06:41 -->
+<!-- 2025-07-29 ti 16:03 -->
 <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="#orge4c43a4">1. Fractal circles</a></li>
-<li><a href="#org894e516">2. Fractal circles animated</a></li>
-<li><a href="#orge04687d">3. Fractal of squares</a></li>
-<li><a href="#org9c796a9">4. Fractal of squares animated</a></li>
-<li><a href="#org6b507f3">5. Fractal of trees</a></li>
+<li><a href="#org6b5da24">1. Fractal circles</a></li>
+<li><a href="#org4ccbf5e">2. Fractal circles animated</a></li>
+<li><a href="#orgc14e984">3. Fractal of squares</a></li>
+<li><a href="#orgb305042">4. Fractal of squares animated</a></li>
+<li><a href="#org7b1aff1">5. Fractal of trees</a></li>
 </ul>
 </div>
 </div>
 </style>
 
 
-<div id="outline-container-orge4c43a4" class="outline-2">
-<h2 id="orge4c43a4"><span class="section-number-2">1.</span> Fractal circles</h2>
+<div id="outline-container-org6b5da24" class="outline-2">
+<h2 id="org6b5da24"><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="org10abd1c" class="figure">
+<div id="orgd6628aa" 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-org894e516" class="outline-2">
-<h2 id="org894e516"><span class="section-number-2">2.</span> Fractal circles animated</h2>
+<div id="outline-container-org4ccbf5e" class="outline-2">
+<h2 id="org4ccbf5e"><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-orge04687d" class="outline-2">
-<h2 id="orge04687d"><span class="section-number-2">3.</span> Fractal of squares</h2>
+<div id="outline-container-orgc14e984" class="outline-2">
+<h2 id="orgc14e984"><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="org0c1f39e" class="figure">
+<div id="orgae6b11b" 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="orge6bc79a" class="figure">
+<div id="org7f2ac54" 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-org9c796a9" class="outline-2">
-<h2 id="org9c796a9"><span class="section-number-2">4.</span> Fractal of squares animated</h2>
+<div id="outline-container-orgb305042" class="outline-2">
+<h2 id="orgb305042"><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-org6b507f3" class="outline-2">
-<h2 id="org6b507f3"><span class="section-number-2">5.</span> Fractal of trees</h2>
+<div id="outline-container-org7b1aff1" class="outline-2">
+<h2 id="org7b1aff1"><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-29 ti 06:41</p>
+<p class="date">Created: 2025-07-29 ti 16:03</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 0ef61ed..6cfeb81 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-29 ti 06:41 -->
+<!-- 2025-07-29 ti 16:04 -->
 <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="#orgcf596f5">1. Spiral with increasing density</a></li>
-<li><a href="#org0afe5c2">2. Spiral with varying height</a></li>
-<li><a href="#org1de700b">3. Shaded spiral</a></li>
-<li><a href="#orge60ab97">4. Sphere forming spiral</a></li>
-<li><a href="#orgf158dad">5. Textured spherical spiral</a></li>
-<li><a href="#org6611bd5">6. Textured and shaded spherical spiral</a></li>
+<li><a href="#orge1c351f">1. Spiral with increasing density</a></li>
+<li><a href="#org3179eac">2. Spiral with varying height</a></li>
+<li><a href="#orgd7fcc05">3. Shaded spiral</a></li>
+<li><a href="#orgbb9678e">4. Sphere forming spiral</a></li>
+<li><a href="#orgffc6b61">5. Textured spherical spiral</a></li>
+<li><a href="#orgb1aa930">6. Textured and shaded spherical spiral</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-orgcf596f5" class="outline-2">
-<h2 id="orgcf596f5"><span class="section-number-2">1.</span> Spiral with increasing density</h2>
+<div id="outline-container-orge1c351f" class="outline-2">
+<h2 id="orge1c351f"><span class="section-number-2">1.</span> Spiral with increasing density</h2>
 <div class="outline-text-2" id="text-1">
 
-<div id="orgc11a2d7" class="figure">
+<div id="org7fe9118" 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-org0afe5c2" class="outline-2">
-<h2 id="org0afe5c2"><span class="section-number-2">2.</span> Spiral with varying height</h2>
+<div id="outline-container-org3179eac" class="outline-2">
+<h2 id="org3179eac"><span class="section-number-2">2.</span> Spiral with varying height</h2>
 <div class="outline-text-2" id="text-2">
 
-<div id="orgb06fd3e" class="figure">
+<div id="orga2c24d2" 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-org1de700b" class="outline-2">
-<h2 id="org1de700b"><span class="section-number-2">3.</span> Shaded spiral</h2>
+<div id="outline-container-orgd7fcc05" class="outline-2">
+<h2 id="orgd7fcc05"><span class="section-number-2">3.</span> Shaded spiral</h2>
 <div class="outline-text-2" id="text-3">
 
-<div id="org071b93e" class="figure">
+<div id="org77fa3e4" 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-orge60ab97" class="outline-2">
-<h2 id="orge60ab97"><span class="section-number-2">4.</span> Sphere forming spiral</h2>
+<div id="outline-container-orgbb9678e" class="outline-2">
+<h2 id="orgbb9678e"><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="orgb6c2a3b" class="figure">
+<div id="org4e5ebfc" 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="orgc533828" class="figure">
+<div id="org0ae594d" 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-orgf158dad" class="outline-2">
-<h2 id="orgf158dad"><span class="section-number-2">5.</span> Textured spherical spiral</h2>
+<div id="outline-container-orgffc6b61" class="outline-2">
+<h2 id="orgffc6b61"><span class="section-number-2">5.</span> Textured spherical spiral</h2>
 <div class="outline-text-2" id="text-5">
 
-<div id="org08103c6" class="figure">
+<div id="org6467b0a" 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-org6611bd5" class="outline-2">
-<h2 id="org6611bd5"><span class="section-number-2">6.</span> Textured and shaded spherical spiral</h2>
+<div id="outline-container-orgb1aa930" class="outline-2">
+<h2 id="orgb1aa930"><span class="section-number-2">6.</span> Textured and shaded spherical spiral</h2>
 <div class="outline-text-2" id="text-6">
 
-<div id="org4e4231e" class="figure">
+<div id="org341d209" 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-29 ti 06:41</p>
+<p class="date">Created: 2025-07-29 ti 16:04</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index aa0541b..1c4a090 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-29 ti 06:42 -->
+<!-- 2025-07-29 ti 16:04 -->
 <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="#orgdf6232c">1. Circular waves</a></li>
-<li><a href="#orgdef712c">2. Diamond square clouds</a></li>
-<li><a href="#org92cc251">3. Old paper</a></li>
-<li><a href="#org99a4221">4. Wood</a></li>
-<li><a href="#orgf68cc9d">5. Yellow flame</a></li>
+<li><a href="#org7a60866">1. Circular waves</a></li>
+<li><a href="#org33c2078">2. Diamond square clouds</a></li>
+<li><a href="#orga8bafca">3. Old paper</a></li>
+<li><a href="#org4ac15df">4. Wood</a></li>
+<li><a href="#org7e3a64f">5. Yellow flame</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-orgdf6232c" class="outline-2">
-<h2 id="orgdf6232c"><span class="section-number-2">1.</span> Circular waves</h2>
+<div id="outline-container-org7a60866" class="outline-2">
+<h2 id="org7a60866"><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-orgdef712c" class="outline-2">
-<h2 id="orgdef712c"><span class="section-number-2">2.</span> Diamond square clouds</h2>
+<div id="outline-container-org33c2078" class="outline-2">
+<h2 id="org33c2078"><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-org92cc251" class="outline-2">
-<h2 id="org92cc251"><span class="section-number-2">3.</span> Old paper</h2>
+<div id="outline-container-orga8bafca" class="outline-2">
+<h2 id="orga8bafca"><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-org99a4221" class="outline-2">
-<h2 id="org99a4221"><span class="section-number-2">4.</span> Wood</h2>
+<div id="outline-container-org4ac15df" class="outline-2">
+<h2 id="org4ac15df"><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-orgf68cc9d" class="outline-2">
-<h2 id="orgf68cc9d"><span class="section-number-2">5.</span> Yellow flame</h2>
+<div id="outline-container-org7e3a64f" class="outline-2">
+<h2 id="org7e3a64f"><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-29 ti 06:42</p>
+<p class="date">Created: 2025-07-29 ti 16:04</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 639bfc4..a62579a 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-29 ti 06:42 -->
+<!-- 2025-07-29 ti 16:05 -->
 <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="#orgc26a1fd">1. Operating principle</a>
+<li><a href="#org00c21c4">1. Operating principle</a>
 <ul>
-<li><a href="#org31c5b69">1.1. Rectangular city</a></li>
-<li><a href="#orga8661f4">1.2. Hexagonal city</a></li>
+<li><a href="#org15ec995">1.1. Rectangular city</a></li>
+<li><a href="#org566efa4">1.2. Hexagonal city</a></li>
 </ul>
 </li>
-<li><a href="#orgb79799c">2. Scene description language</a>
+<li><a href="#orgaca8d69">2. Scene description language</a>
 <ul>
-<li><a href="#org7173fc6">2.1. here</a></li>
-<li><a href="#org3e7173a">2.2. p</a></li>
-<li><a href="#org7dac96c">2.3. f</a></li>
-<li><a href="#org2793f8d">2.4. warn</a></li>
-<li><a href="#org17b4720">2.5. end</a></li>
-<li><a href="#orge048b17">2.6. mtl</a></li>
-<li><a href="#orgb5bdd20">2.7. mtlrnd</a></li>
-<li><a href="#org93b7719">2.8. obj</a></li>
-<li><a href="#orgcba6920">2.9. rnd</a></li>
-<li><a href="#org9220bb9">2.10. #</a></li>
-<li><a href="#org59f3555">2.11. out</a></li>
-<li><a href="#orga51e314">2.12. set</a></li>
-<li><a href="#org4e1ea52">2.13. variables usage</a></li>
-<li><a href="#org86ce053">2.14. cmp</a></li>
-<li><a href="#orgddc82bb">2.15. ?</a></li>
-<li><a href="#org6188d94">2.16. dum</a></li>
+<li><a href="#orga7672bb">2.1. here</a></li>
+<li><a href="#org75c4d85">2.2. p</a></li>
+<li><a href="#orgd312cd6">2.3. f</a></li>
+<li><a href="#org2bcb25f">2.4. warn</a></li>
+<li><a href="#org3b35c8f">2.5. end</a></li>
+<li><a href="#orgad8644e">2.6. mtl</a></li>
+<li><a href="#org43244cd">2.7. mtlrnd</a></li>
+<li><a href="#org110ad5d">2.8. obj</a></li>
+<li><a href="#org70c0be0">2.9. rnd</a></li>
+<li><a href="#org0d1dc55">2.10. #</a></li>
+<li><a href="#org83b8466">2.11. out</a></li>
+<li><a href="#org3bfdb4c">2.12. set</a></li>
+<li><a href="#orgfc040ed">2.13. variables usage</a></li>
+<li><a href="#org2bb2004">2.14. cmp</a></li>
+<li><a href="#orge11ca35">2.15. ?</a></li>
+<li><a href="#org6e2e93c">2.16. dum</a></li>
 </ul>
 </li>
-<li><a href="#orgbf7aeba">3. Installation</a>
+<li><a href="#org1fdc27a">3. Installation</a>
 <ul>
-<li><a href="#org2bd0251">3.1. System requirements</a></li>
-<li><a href="#org22e403e">3.2. Directory layout</a></li>
+<li><a href="#orgbf08478">3.1. System requirements</a></li>
+<li><a href="#org3dc8f23">3.2. Directory layout</a></li>
 </ul>
 </li>
-<li><a href="#orgd314fba">4. Usage</a></li>
+<li><a href="#org2417251">4. Usage</a></li>
 </ul>
 </div>
 </div>
@@ -1157,8 +1157,8 @@ hsAddReviewPanels();
 </style>
 
 
-<div id="outline-container-orgc26a1fd" class="outline-2">
-<h2 id="orgc26a1fd"><span class="section-number-2">1.</span> Operating principle</h2>
+<div id="outline-container-org00c21c4" class="outline-2">
+<h2 id="org00c21c4"><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-org31c5b69" class="outline-3">
-<h3 id="org31c5b69"><span class="section-number-3">1.1.</span> Rectangular city</h3>
+<div id="outline-container-org15ec995" class="outline-3">
+<h3 id="org15ec995"><span class="section-number-3">1.1.</span> Rectangular city</h3>
 <div class="outline-text-3" id="text-1-1">
 
-<div id="org418c227" class="figure">
+<div id="org0e5ea21" class="figure">
 <p><img src="rectangular city, 1.jpeg" alt="rectangular city, 1.jpeg" class="responsive-img" />
 </p>
 </div>
 
 
-<div id="orgeb81080" class="figure">
+<div id="orga4f3392" class="figure">
 <p><img src="rectangular city, 2.jpeg" alt="rectangular city, 2.jpeg" class="responsive-img" />
 </p>
 </div>
 
 
-<div id="org07af2c6" class="figure">
+<div id="org63a213f" 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-orga8661f4" class="outline-3">
-<h3 id="orga8661f4"><span class="section-number-3">1.2.</span> Hexagonal city</h3>
+<div id="outline-container-org566efa4" class="outline-3">
+<h3 id="org566efa4"><span class="section-number-3">1.2.</span> Hexagonal city</h3>
 <div class="outline-text-3" id="text-1-2">
 
-<div id="org0434c28" class="figure">
+<div id="org54048ec" class="figure">
 <p><img src="hexagonal city, 1.jpeg" alt="hexagonal city, 1.jpeg" class="responsive-img" />
 </p>
 </div>
 
 
-<div id="orgc534ca4" class="figure">
+<div id="org0ec8298" class="figure">
 <p><img src="hexagonal city, 2.jpeg" alt="hexagonal city, 2.jpeg" class="responsive-img" />
 </p>
 </div>
 
 
-<div id="org0d7ce19" class="figure">
+<div id="org2b59f15" 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-orgb79799c" class="outline-2">
-<h2 id="orgb79799c"><span class="section-number-2">2.</span> Scene description language</h2>
+<div id="outline-container-orgaca8d69" class="outline-2">
+<h2 id="orgaca8d69"><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-org7173fc6" class="outline-3">
-<h3 id="org7173fc6"><span class="section-number-3">2.1.</span> here</h3>
+<div id="outline-container-orga7672bb" class="outline-3">
+<h3 id="orga7672bb"><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-org3e7173a" class="outline-3">
-<h3 id="org3e7173a"><span class="section-number-3">2.2.</span> p</h3>
+<div id="outline-container-org75c4d85" class="outline-3">
+<h3 id="org75c4d85"><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-org7dac96c" class="outline-3">
-<h3 id="org7dac96c"><span class="section-number-3">2.3.</span> f</h3>
+<div id="outline-container-orgd312cd6" class="outline-3">
+<h3 id="orgd312cd6"><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-org2793f8d" class="outline-3">
-<h3 id="org2793f8d"><span class="section-number-3">2.4.</span> warn</h3>
+<div id="outline-container-org2bcb25f" class="outline-3">
+<h3 id="org2bcb25f"><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-org17b4720" class="outline-3">
-<h3 id="org17b4720"><span class="section-number-3">2.5.</span> end</h3>
+<div id="outline-container-org3b35c8f" class="outline-3">
+<h3 id="org3b35c8f"><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-orge048b17" class="outline-3">
-<h3 id="orge048b17"><span class="section-number-3">2.6.</span> mtl</h3>
+<div id="outline-container-orgad8644e" class="outline-3">
+<h3 id="orgad8644e"><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-orgb5bdd20" class="outline-3">
-<h3 id="orgb5bdd20"><span class="section-number-3">2.7.</span> mtlrnd</h3>
+<div id="outline-container-org43244cd" class="outline-3">
+<h3 id="org43244cd"><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-org93b7719" class="outline-3">
-<h3 id="org93b7719"><span class="section-number-3">2.8.</span> obj</h3>
+<div id="outline-container-org110ad5d" class="outline-3">
+<h3 id="org110ad5d"><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="org1ecdca9" class="figure">
+<div id="org8581f80" class="figure">
 <p><img src="rotation.png" alt="rotation.png" />
 </p>
 </div>
 </div>
 </div>
-<div id="outline-container-orgcba6920" class="outline-3">
-<h3 id="orgcba6920"><span class="section-number-3">2.9.</span> rnd</h3>
+<div id="outline-container-org70c0be0" class="outline-3">
+<h3 id="org70c0be0"><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-org9220bb9" class="outline-3">
-<h3 id="org9220bb9"><span class="section-number-3">2.10.</span> #</h3>
+<div id="outline-container-org0d1dc55" class="outline-3">
+<h3 id="org0d1dc55"><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-org59f3555" class="outline-3">
-<h3 id="org59f3555"><span class="section-number-3">2.11.</span> out</h3>
+<div id="outline-container-org83b8466" class="outline-3">
+<h3 id="org83b8466"><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-orga51e314" class="outline-3">
-<h3 id="orga51e314"><span class="section-number-3">2.12.</span> set</h3>
+<div id="outline-container-org3bfdb4c" class="outline-3">
+<h3 id="org3bfdb4c"><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-org4e1ea52" class="outline-3">
-<h3 id="org4e1ea52"><span class="section-number-3">2.13.</span> variables usage</h3>
+<div id="outline-container-orgfc040ed" class="outline-3">
+<h3 id="orgfc040ed"><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-org86ce053" class="outline-3">
-<h3 id="org86ce053"><span class="section-number-3">2.14.</span> cmp</h3>
+<div id="outline-container-org2bb2004" class="outline-3">
+<h3 id="org2bb2004"><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-orgddc82bb" class="outline-3">
-<h3 id="orgddc82bb"><span class="section-number-3">2.15.</span> ?</h3>
+<div id="outline-container-orge11ca35" class="outline-3">
+<h3 id="orge11ca35"><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-org6188d94" class="outline-3">
-<h3 id="org6188d94"><span class="section-number-3">2.16.</span> dum</h3>
+<div id="outline-container-org6e2e93c" class="outline-3">
+<h3 id="org6e2e93c"><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-orgbf7aeba" class="outline-2">
-<h2 id="orgbf7aeba"><span class="section-number-2">3.</span> Installation</h2>
+<div id="outline-container-org1fdc27a" class="outline-2">
+<h2 id="org1fdc27a"><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-org2bd0251" class="outline-3">
-<h3 id="org2bd0251"><span class="section-number-3">3.1.</span> System requirements</h3>
+<div id="outline-container-orgbf08478" class="outline-3">
+<h3 id="orgbf08478"><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-org22e403e" class="outline-3">
-<h3 id="org22e403e"><span class="section-number-3">3.2.</span> Directory layout</h3>
+<div id="outline-container-org3dc8f23" class="outline-3">
+<h3 id="org3dc8f23"><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-orgd314fba" class="outline-2">
-<h2 id="orgd314fba"><span class="section-number-2">4.</span> Usage</h2>
+<div id="outline-container-org2417251" class="outline-2">
+<h2 id="org2417251"><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-29 ti 06:42</p>
+<p class="date">Created: 2025-07-29 ti 16:05</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 979f11d..8d49030 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-29 ti 06:43 -->
+<!-- 2025-07-29 ti 16:05 -->
 <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="#orgb93cd08">1. Rotating exclamation mark</a></li>
-<li><a href="#org0559a58">2. 3D bouncing ball</a></li>
-<li><a href="#orgd0abed8">3. 3D text in a room</a></li>
-<li><a href="#orge24ac53">4. 3D bouncing cubes on grid floor</a></li>
-<li><a href="#org351cde8">5. Matrix math for rotation in 3D space</a></li>
-<li><a href="#orga499e0b">6. Maze explorer</a></li>
-<li><a href="#org88987d3">7. Tank animation</a></li>
-<li><a href="#org12c45e5">8. Tiled room</a></li>
+<li><a href="#orgdd8cb02">1. Rotating exclamation mark</a></li>
+<li><a href="#org4d0cd09">2. 3D bouncing ball</a></li>
+<li><a href="#orga69214a">3. 3D text in a room</a></li>
+<li><a href="#orga2dee81">4. 3D bouncing cubes on grid floor</a></li>
+<li><a href="#org0f8c735">5. Matrix math for rotation in 3D space</a></li>
+<li><a href="#org710611f">6. Maze explorer</a></li>
+<li><a href="#org5223306">7. Tank animation</a></li>
+<li><a href="#org17a1c70">8. Tiled room</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-orgb93cd08" class="outline-2">
-<h2 id="orgb93cd08"><span class="section-number-2">1.</span> Rotating exclamation mark</h2>
+<div id="outline-container-orgdd8cb02" class="outline-2">
+<h2 id="orgdd8cb02"><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-org0559a58" class="outline-2">
-<h2 id="org0559a58"><span class="section-number-2">2.</span> 3D bouncing ball</h2>
+<div id="outline-container-org4d0cd09" class="outline-2">
+<h2 id="org4d0cd09"><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-orgd0abed8" class="outline-2">
-<h2 id="orgd0abed8"><span class="section-number-2">3.</span> 3D text in a room</h2>
+<div id="outline-container-orga69214a" class="outline-2">
+<h2 id="orga69214a"><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-orge24ac53" class="outline-2">
-<h2 id="orge24ac53"><span class="section-number-2">4.</span> 3D bouncing cubes on grid floor</h2>
+<div id="outline-container-orga2dee81" class="outline-2">
+<h2 id="orga2dee81"><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-org351cde8" class="outline-2">
-<h2 id="org351cde8"><span class="section-number-2">5.</span> Matrix math for rotation in 3D space</h2>
+<div id="outline-container-org0f8c735" class="outline-2">
+<h2 id="org0f8c735"><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-orga499e0b" class="outline-2">
-<h2 id="orga499e0b"><span class="section-number-2">6.</span> Maze explorer</h2>
+<div id="outline-container-org710611f" class="outline-2">
+<h2 id="org710611f"><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="org722cab7" class="figure">
+<div id="orgad4d17f" 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-org88987d3" class="outline-2">
-<h2 id="org88987d3"><span class="section-number-2">7.</span> Tank animation</h2>
+<div id="outline-container-org5223306" class="outline-2">
+<h2 id="org5223306"><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-org12c45e5" class="outline-2">
-<h2 id="org12c45e5"><span class="section-number-2">8.</span> Tiled room</h2>
+<div id="outline-container-org17a1c70" class="outline-2">
+<h2 id="org17a1c70"><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-29 ti 06:43</p>
+<p class="date">Created: 2025-07-29 ti 16:05</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 584ae1c..f5509d7 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-29 ti 06:43 -->
+<!-- 2025-07-29 ti 16:05 -->
 <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="#org6e74448">1. Galaxy explorer</a></li>
-<li><a href="#org326a757">2. Rocket simulator</a></li>
-<li><a href="#orgd248793">3. Stars</a></li>
-<li><a href="#org7441c56">4. Universe explorer</a></li>
+<li><a href="#orgc556a1b">1. Galaxy explorer</a></li>
+<li><a href="#orgb69772c">2. Rocket simulator</a></li>
+<li><a href="#orgefe80cb">3. Stars</a></li>
+<li><a href="#org4d721c2">4. Universe explorer</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-org6e74448" class="outline-2">
-<h2 id="org6e74448"><span class="section-number-2">1.</span> Galaxy explorer</h2>
+<div id="outline-container-orgc556a1b" class="outline-2">
+<h2 id="orgc556a1b"><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="orgaf1e200" class="figure">
+<div id="org3b42f4d" 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-org326a757" class="outline-2">
-<h2 id="org326a757"><span class="section-number-2">2.</span> Rocket simulator</h2>
+<div id="outline-container-orgb69772c" class="outline-2">
+<h2 id="orgb69772c"><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-orgd248793" class="outline-2">
-<h2 id="orgd248793"><span class="section-number-2">3.</span> Stars</h2>
+<div id="outline-container-orgefe80cb" class="outline-2">
+<h2 id="orgefe80cb"><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-org7441c56" class="outline-2">
-<h2 id="org7441c56"><span class="section-number-2">4.</span> Universe explorer</h2>
+<div id="outline-container-org4d721c2" class="outline-2">
+<h2 id="org4d721c2"><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="orgf7531c9" class="figure">
+<div id="org57b2194" 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="org6e10fc6" class="figure">
+<div id="orgb0be70b" 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="orge207011" class="figure">
+<div id="org0c3a3b8" 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-29 ti 06:43</p>
+<p class="date">Created: 2025-07-29 ti 16:05</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index bbc6380..f1b5f9a 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-29 ti 06:43 -->
+<!-- 2025-07-29 ti 16:06 -->
 <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="#org69dfe12">1. 2D graph</a></li>
-<li><a href="#orgb8c9d7f">2. 3D graph</a></li>
-<li><a href="#org64fee3d">3. Deriviative calculator</a></li>
-<li><a href="#org99e1486">4. Sine and cosine table</a></li>
+<li><a href="#org897d1b0">1. 2D graph</a></li>
+<li><a href="#orgefadea3">2. 3D graph</a></li>
+<li><a href="#orgc65037c">3. Deriviative calculator</a></li>
+<li><a href="#org0fb749d">4. Sine and cosine table</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-org69dfe12" class="outline-2">
-<h2 id="org69dfe12"><span class="section-number-2">1.</span> 2D graph</h2>
+<div id="outline-container-org897d1b0" class="outline-2">
+<h2 id="org897d1b0"><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="orgff40591" class="figure">
+<div id="orga16bf9b" 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-orgb8c9d7f" class="outline-2">
-<h2 id="orgb8c9d7f"><span class="section-number-2">2.</span> 3D graph</h2>
+<div id="outline-container-orgefadea3" class="outline-2">
+<h2 id="orgefadea3"><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="org6ac00d6" class="figure">
+<div id="orgf0d1ada" 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-org64fee3d" class="outline-2">
-<h2 id="org64fee3d"><span class="section-number-2">3.</span> Deriviative calculator</h2>
+<div id="outline-container-orgc65037c" class="outline-2">
+<h2 id="orgc65037c"><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="org8417cc1" class="figure">
+<div id="orgc7ba304" 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-org99e1486" class="outline-2">
-<h2 id="org99e1486"><span class="section-number-2">4.</span> Sine and cosine table</h2>
+<div id="outline-container-org0fb749d" class="outline-2">
+<h2 id="org0fb749d"><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="org844353d" class="figure">
+<div id="org4273963" 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-29 ti 06:43</p>
+<p class="date">Created: 2025-07-29 ti 16:06</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index d3cd851..2c6f3b0 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-29 ti 06:43 -->
+<!-- 2025-07-29 ti 16:06 -->
 <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="#org7d871ab">1. Explosion simulator</a></li>
-<li><a href="#org30edadb">2. Gravity in 2D</a></li>
-<li><a href="#orgae9b19c">3. Gravity in 3D</a></li>
-<li><a href="#orgaa05529">4. Interference</a></li>
-<li><a href="#org4100662">5. Interferogram</a></li>
-<li><a href="#orgc8f7a90">6. Surface tension</a></li>
-<li><a href="#org629d730">7. Wave 1</a></li>
-<li><a href="#orga165433">8. Wave 2</a></li>
+<li><a href="#org8ca8926">1. Explosion simulator</a></li>
+<li><a href="#org4f9f0fc">2. Gravity in 2D</a></li>
+<li><a href="#orgfef3869">3. Gravity in 3D</a></li>
+<li><a href="#org542ea2e">4. Interference</a></li>
+<li><a href="#orgbd90d7c">5. Interferogram</a></li>
+<li><a href="#orge493555">6. Surface tension</a></li>
+<li><a href="#org71a85af">7. Wave 1</a></li>
+<li><a href="#orge75165a">8. Wave 2</a></li>
 </ul>
 </div>
 </div>
   }
 </style>
 
-<div id="outline-container-org7d871ab" class="outline-2">
-<h2 id="org7d871ab"><span class="section-number-2">1.</span> Explosion simulator</h2>
+<div id="outline-container-org8ca8926" class="outline-2">
+<h2 id="org8ca8926"><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="org3f7a424" class="figure">
+<div id="org9089fc2" 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-org30edadb" class="outline-2">
-<h2 id="org30edadb"><span class="section-number-2">2.</span> Gravity in 2D</h2>
+<div id="outline-container-org4f9f0fc" class="outline-2">
+<h2 id="org4f9f0fc"><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="org8b7ec82" class="figure">
+<div id="org69e9140" 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-orgae9b19c" class="outline-2">
-<h2 id="orgae9b19c"><span class="section-number-2">3.</span> Gravity in 3D</h2>
+<div id="outline-container-orgfef3869" class="outline-2">
+<h2 id="orgfef3869"><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-orgaa05529" class="outline-2">
-<h2 id="orgaa05529"><span class="section-number-2">4.</span> Interference</h2>
+<div id="outline-container-org542ea2e" class="outline-2">
+<h2 id="org542ea2e"><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-org4100662" class="outline-2">
-<h2 id="org4100662"><span class="section-number-2">5.</span> Interferogram</h2>
+<div id="outline-container-orgbd90d7c" class="outline-2">
+<h2 id="orgbd90d7c"><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="orge499999" class="figure">
+<div id="orgaa739a1" 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-orgc8f7a90" class="outline-2">
-<h2 id="orgc8f7a90"><span class="section-number-2">6.</span> Surface tension</h2>
+<div id="outline-container-orge493555" class="outline-2">
+<h2 id="orge493555"><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="orga9b29a2" class="figure">
+<div id="org68aff70" 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-org629d730" class="outline-2">
-<h2 id="org629d730"><span class="section-number-2">7.</span> Wave 1</h2>
+<div id="outline-container-org71a85af" class="outline-2">
+<h2 id="org71a85af"><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="org19c785a" class="figure">
+<div id="org5e50025" 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-orga165433" class="outline-2">
-<h2 id="orga165433"><span class="section-number-2">8.</span> Wave 2</h2>
+<div id="outline-container-orge75165a" class="outline-2">
+<h2 id="orge75165a"><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="org927ae1b" class="figure">
+<div id="org32a98d3" 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-29 ti 06:43</p>
+<p class="date">Created: 2025-07-29 ti 16:06</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
index 53b492c..b59e85b 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-29 ti 06:44 -->
+<!-- 2025-07-29 ti 16:07 -->
 <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="#org73b00ab">1. Implemented logical operations</a>
+<li><a href="#org2e92d8c">1. Implemented logical operations</a>
 <ul>
-<li><a href="#org63ae8a0">1.1. Equivalent ( â‡” , 1 )</a></li>
-<li><a href="#org866a499">1.2. Implies ( â‡’ , 2 )</a></li>
-<li><a href="#orge1b5035">1.3. OR ( âˆ¨ , 3 )</a></li>
-<li><a href="#org07266ef">1.4. AND ( âˆ§ , 4 )</a></li>
-<li><a href="#orgb540306">1.5. NOT ( Â¬ , 5 )</a></li>
+<li><a href="#org9d90ffe">1.1. Equivalent ( â‡” , 1 )</a></li>
+<li><a href="#org625661c">1.2. Implies ( â‡’ , 2 )</a></li>
+<li><a href="#org4071cf1">1.3. OR ( âˆ¨ , 3 )</a></li>
+<li><a href="#org58ba04e">1.4. AND ( âˆ§ , 4 )</a></li>
+<li><a href="#orge0d9af8">1.5. NOT ( Â¬ , 5 )</a></li>
 </ul>
 </li>
-<li><a href="#orge23d70e">2. Examples</a>
+<li><a href="#org6b596bf">2. Examples</a>
 <ul>
-<li><a href="#org71a5e0c">2.1. Example: (A âˆ§ B) âˆ¨ Â¬C</a></li>
-<li><a href="#orgce0ea0b">2.2. Example: A â‡’ (B âˆ¨ Â¬C)</a></li>
-<li><a href="#orgad68cd0">2.3. Example: (A â‡” B) âˆ§ C</a></li>
+<li><a href="#org9e8d621">2.1. Example: (A âˆ§ B) âˆ¨ Â¬C</a></li>
+<li><a href="#org6919a8d">2.2. Example: A â‡’ (B âˆ¨ Â¬C)</a></li>
+<li><a href="#org7c7701b">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-org73b00ab" class="outline-2">
-<h2 id="org73b00ab"><span class="section-number-2">1.</span> Implemented logical operations</h2>
+<div id="outline-container-org2e92d8c" class="outline-2">
+<h2 id="org2e92d8c"><span class="section-number-2">1.</span> Implemented logical operations</h2>
 <div class="outline-text-2" id="text-1">
 </div>
-<div id="outline-container-org63ae8a0" class="outline-3">
-<h3 id="org63ae8a0"><span class="section-number-3">1.1.</span> Equivalent ( â‡” , 1 )</h3>
+<div id="outline-container-org9d90ffe" class="outline-3">
+<h3 id="org9d90ffe"><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-org866a499" class="outline-3">
-<h3 id="org866a499"><span class="section-number-3">1.2.</span> Implies ( â‡’ , 2 )</h3>
+<div id="outline-container-org625661c" class="outline-3">
+<h3 id="org625661c"><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-orge1b5035" class="outline-3">
-<h3 id="orge1b5035"><span class="section-number-3">1.3.</span> OR ( âˆ¨ , 3 )</h3>
+<div id="outline-container-org4071cf1" class="outline-3">
+<h3 id="org4071cf1"><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-org07266ef" class="outline-3">
-<h3 id="org07266ef"><span class="section-number-3">1.4.</span> AND ( âˆ§ , 4 )</h3>
+<div id="outline-container-org58ba04e" class="outline-3">
+<h3 id="org58ba04e"><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-orgb540306" class="outline-3">
-<h3 id="orgb540306"><span class="section-number-3">1.5.</span> NOT ( Â¬ , 5 )</h3>
+<div id="outline-container-orge0d9af8" class="outline-3">
+<h3 id="orge0d9af8"><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-orge23d70e" class="outline-2">
-<h2 id="orge23d70e"><span class="section-number-2">2.</span> Examples</h2>
+<div id="outline-container-org6b596bf" class="outline-2">
+<h2 id="org6b596bf"><span class="section-number-2">2.</span> Examples</h2>
 <div class="outline-text-2" id="text-2">
 </div>
-<div id="outline-container-org71a5e0c" class="outline-3">
-<h3 id="org71a5e0c"><span class="section-number-3">2.1.</span> Example: (A âˆ§ B) âˆ¨ Â¬C</h3>
+<div id="outline-container-org9e8d621" class="outline-3">
+<h3 id="org9e8d621"><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-orgce0ea0b" class="outline-3">
-<h3 id="orgce0ea0b"><span class="section-number-3">2.2.</span> Example: A â‡’ (B âˆ¨ Â¬C)</h3>
+<div id="outline-container-org6919a8d" class="outline-3">
+<h3 id="org6919a8d"><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-orgad68cd0" class="outline-3">
-<h3 id="orgad68cd0"><span class="section-number-3">2.3.</span> Example: (A â‡” B) âˆ§ C</h3>
+<div id="outline-container-org7c7701b" class="outline-3">
+<h3 id="org7c7701b"><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-29 ti 06:44</p>
+<p class="date">Created: 2025-07-29 ti 16:07</p>
 <p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
 </body>
diff --git a/Miscellaneous/Mouse driver/index.html b/Miscellaneous/Mouse driver/index.html
new file mode 100644 (file)
index 0000000..36675a3
--- /dev/null
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"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-29 ti 16:07 -->
+<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>
+<meta name="generator" content="Org Mode" />
+<style>
+  #content { max-width: 60em; margin: auto; }
+  .title  { text-align: center;
+             margin-bottom: .2em; }
+  .subtitle { text-align: center;
+              font-size: medium;
+              font-weight: bold;
+              margin-top:0; }
+  .todo   { font-family: monospace; color: red; }
+  .done   { font-family: monospace; color: green; }
+  .priority { font-family: monospace; color: orange; }
+  .tag    { background-color: #eee; font-family: monospace;
+            padding: 2px; font-size: 80%; font-weight: normal; }
+  .timestamp { color: #bebebe; }
+  .timestamp-kwd { color: #5f9ea0; }
+  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
+  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
+  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
+  .underline { text-decoration: underline; }
+  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
+  p.verse { margin-left: 3%; }
+  pre {
+    border: 1px solid #e6e6e6;
+    border-radius: 3px;
+    background-color: #f2f2f2;
+    padding: 8pt;
+    font-family: monospace;
+    overflow: auto;
+    margin: 1.2em;
+  }
+  pre.src {
+    position: relative;
+    overflow: auto;
+  }
+  pre.src:before {
+    display: none;
+    position: absolute;
+    top: -8px;
+    right: 12px;
+    padding: 3px;
+    color: #555;
+    background-color: #f2f2f299;
+  }
+  pre.src:hover:before { display: inline; margin-top: 14px;}
+  /* Languages per Org manual */
+  pre.src-asymptote:before { content: 'Asymptote'; }
+  pre.src-awk:before { content: 'Awk'; }
+  pre.src-authinfo::before { content: 'Authinfo'; }
+  pre.src-C:before { content: 'C'; }
+  /* pre.src-C++ doesn't work in CSS */
+  pre.src-clojure:before { content: 'Clojure'; }
+  pre.src-css:before { content: 'CSS'; }
+  pre.src-D:before { content: 'D'; }
+  pre.src-ditaa:before { content: 'ditaa'; }
+  pre.src-dot:before { content: 'Graphviz'; }
+  pre.src-calc:before { content: 'Emacs Calc'; }
+  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
+  pre.src-fortran:before { content: 'Fortran'; }
+  pre.src-gnuplot:before { content: 'gnuplot'; }
+  pre.src-haskell:before { content: 'Haskell'; }
+  pre.src-hledger:before { content: 'hledger'; }
+  pre.src-java:before { content: 'Java'; }
+  pre.src-js:before { content: 'Javascript'; }
+  pre.src-latex:before { content: 'LaTeX'; }
+  pre.src-ledger:before { content: 'Ledger'; }
+  pre.src-lisp:before { content: 'Lisp'; }
+  pre.src-lilypond:before { content: 'Lilypond'; }
+  pre.src-lua:before { content: 'Lua'; }
+  pre.src-matlab:before { content: 'MATLAB'; }
+  pre.src-mscgen:before { content: 'Mscgen'; }
+  pre.src-ocaml:before { content: 'Objective Caml'; }
+  pre.src-octave:before { content: 'Octave'; }
+  pre.src-org:before { content: 'Org mode'; }
+  pre.src-oz:before { content: 'OZ'; }
+  pre.src-plantuml:before { content: 'Plantuml'; }
+  pre.src-processing:before { content: 'Processing.js'; }
+  pre.src-python:before { content: 'Python'; }
+  pre.src-R:before { content: 'R'; }
+  pre.src-ruby:before { content: 'Ruby'; }
+  pre.src-sass:before { content: 'Sass'; }
+  pre.src-scheme:before { content: 'Scheme'; }
+  pre.src-screen:before { content: 'Gnu Screen'; }
+  pre.src-sed:before { content: 'Sed'; }
+  pre.src-sh:before { content: 'shell'; }
+  pre.src-sql:before { content: 'SQL'; }
+  pre.src-sqlite:before { content: 'SQLite'; }
+  /* additional languages in org.el's org-babel-load-languages alist */
+  pre.src-forth:before { content: 'Forth'; }
+  pre.src-io:before { content: 'IO'; }
+  pre.src-J:before { content: 'J'; }
+  pre.src-makefile:before { content: 'Makefile'; }
+  pre.src-maxima:before { content: 'Maxima'; }
+  pre.src-perl:before { content: 'Perl'; }
+  pre.src-picolisp:before { content: 'Pico Lisp'; }
+  pre.src-scala:before { content: 'Scala'; }
+  pre.src-shell:before { content: 'Shell Script'; }
+  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
+  /* additional language identifiers per "defun org-babel-execute"
+       in ob-*.el */
+  pre.src-cpp:before  { content: 'C++'; }
+  pre.src-abc:before  { content: 'ABC'; }
+  pre.src-coq:before  { content: 'Coq'; }
+  pre.src-groovy:before  { content: 'Groovy'; }
+  /* additional language identifiers from org-babel-shell-names in
+     ob-shell.el: ob-shell is the only babel language using a lambda to put
+     the execution function name together. */
+  pre.src-bash:before  { content: 'bash'; }
+  pre.src-csh:before  { content: 'csh'; }
+  pre.src-ash:before  { content: 'ash'; }
+  pre.src-dash:before  { content: 'dash'; }
+  pre.src-ksh:before  { content: 'ksh'; }
+  pre.src-mksh:before  { content: 'mksh'; }
+  pre.src-posh:before  { content: 'posh'; }
+  /* Additional Emacs modes also supported by the LaTeX listings package */
+  pre.src-ada:before { content: 'Ada'; }
+  pre.src-asm:before { content: 'Assembler'; }
+  pre.src-caml:before { content: 'Caml'; }
+  pre.src-delphi:before { content: 'Delphi'; }
+  pre.src-html:before { content: 'HTML'; }
+  pre.src-idl:before { content: 'IDL'; }
+  pre.src-mercury:before { content: 'Mercury'; }
+  pre.src-metapost:before { content: 'MetaPost'; }
+  pre.src-modula-2:before { content: 'Modula-2'; }
+  pre.src-pascal:before { content: 'Pascal'; }
+  pre.src-ps:before { content: 'PostScript'; }
+  pre.src-prolog:before { content: 'Prolog'; }
+  pre.src-simula:before { content: 'Simula'; }
+  pre.src-tcl:before { content: 'tcl'; }
+  pre.src-tex:before { content: 'TeX'; }
+  pre.src-plain-tex:before { content: 'Plain TeX'; }
+  pre.src-verilog:before { content: 'Verilog'; }
+  pre.src-vhdl:before { content: 'VHDL'; }
+  pre.src-xml:before { content: 'XML'; }
+  pre.src-nxml:before { content: 'XML'; }
+  /* add a generic configuration mode; LaTeX export needs an additional
+     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
+  pre.src-conf:before { content: 'Configuration File'; }
+
+  table { border-collapse:collapse; }
+  caption.t-above { caption-side: top; }
+  caption.t-bottom { caption-side: bottom; }
+  td, th { vertical-align:top;  }
+  th.org-right  { text-align: center;  }
+  th.org-left   { text-align: center;   }
+  th.org-center { text-align: center; }
+  td.org-right  { text-align: right;  }
+  td.org-left   { text-align: left;   }
+  td.org-center { text-align: center; }
+  dt { font-weight: bold; }
+  .footpara { display: inline; }
+  .footdef  { margin-bottom: 1em; }
+  .figure { padding: 1em; }
+  .figure p { text-align: center; }
+  .equation-container {
+    display: table;
+    text-align: center;
+    width: 100%;
+  }
+  .equation {
+    vertical-align: middle;
+  }
+  .equation-label {
+    display: table-cell;
+    text-align: right;
+    vertical-align: middle;
+  }
+  .inlinetask {
+    padding: 10px;
+    border: 2px solid gray;
+    margin: 10px;
+    background: #ffffcc;
+  }
+  #org-div-home-and-up
+   { text-align: right; font-size: 70%; white-space: nowrap; }
+  textarea { overflow-x: auto; }
+  .linenr { font-size: smaller }
+  .code-highlighted { background-color: #ffff00; }
+  .org-info-js_info-navigation { border-style: none; }
+  #org-info-js_console-label
+    { font-size: 10px; font-weight: bold; white-space: nowrap; }
+  .org-info-js_search-highlight
+    { background-color: #ffff00; color: #000000; font-weight: bold; }
+  .org-svg { }
+</style>
+<style type="text/css">
+               body {
+                 max-width: 35cm !important;
+               }
+               #content {
+                 max-width: 80em !important;
+                 width: 90%;
+               }
+               </style>
+<link rel="stylesheet" type="text/css" href="https://thomasf.github.io/solarized-css/solarized-dark.min.css" />
+</head>
+<body>
+<div id="content" class="content">
+<h1 class="title">Mouse driver for QBasic programs</h1>
+<p>
+This TSR written in x86 assembler, allows QBasic programs to use
+mouse, by writing mouse movement and button press info to memory,
+referenced by INT 79h.  Afterwards QBasic programs can read mouse
+cursor position directly from RAM by using PEEK command.
+</p>
+</div>
+<div id="postamble" class="status">
+<p class="date">Created: 2025-07-29 ti 16:07</p>
+<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
+</div>
+</body>
+</html>
index 92d177c..e4e62ad 100755 (executable)
@@ -9,6 +9,7 @@
 '\r
 ' Changelog:\r
 ' 2004.01, Initial version\r
+' 2025, Improve program readability\r
 \r
 DECLARE SUB mousedemo ()\r
 DECLARE SUB putword (addr!, dat!)\r
@@ -19,128 +20,116 @@ DECLARE SUB start ()
 DIM SHARED extSEG, extADDR\r
 \r
 start\r
-\r
 mousedemo\r
 \r
 FUNCTION getbyte (addr)\r
-    ' This function retrieves a byte from the specified address.\r
+    ' This function retrieves a byte from the specified address in RAM.\r
     getbyte = PEEK(extADDR + addr)\r
 END FUNCTION\r
 \r
 FUNCTION getword (addr)\r
-    ' This function retrieves a word (2 bytes) from the specified address.\r
-    a = PEEK(extADDR + addr)\r
-    b = PEEK(extADDR + addr + 1)\r
-\r
-    c$ = HEX$(a)\r
-    IF LEN(c$) = 1 THEN c$ = "0" + c$\r
-    IF LEN(c$) = 0 THEN c$ = "00"\r
-\r
+    ' This function retrieves a word (2 bytes) from the specified address in RAM.\r
+    a = PEEK(extADDR + addr)        ' Read the first byte\r
+    b = PEEK(extADDR + addr + 1)    ' Read the second byte\r
+    c$ = HEX$(a)                     ' Convert the first byte to hexadecimal\r
+    IF LEN(c$) = 1 THEN c$ = "0" + c$  ' Ensure two digits\r
+    IF LEN(c$) = 0 THEN c$ = "00"       ' Ensure two digits if empty\r
     ' Combine the two bytes into a single word.\r
-    c = VAL("&H" + HEX$(b) + c$)\r
-\r
+    c = VAL("&H" + HEX$(b) + c$)     ' Combine the two bytes into a word\r
     getword = c\r
 END FUNCTION\r
 \r
 SUB mousedemo\r
     ' This subroutine demonstrates mouse movement and button clicks.\r
-\r
-    cx = 150\r
-    cy = 100\r
-    maxmove = 50\r
-\r
+    cx = 150  ' Initial x-coordinate\r
+    cy = 100  ' Initial y-coordinate\r
+    maxmove = 50  ' Maximum movement in one step\r
+    frm = 0  ' Frame counter\r
     1\r
-    frm = frm + 1\r
-\r
+    frm = frm + 1  ' Increment frame counter\r
     ' Check for user input on keyboard and exit if any key is pressed\r
     IF INKEY$ <> "" THEN SYSTEM\r
 \r
     ' Print the current coordinates and frame number.\r
     LOCATE 1, 1\r
-    PRINT cx, cy\r
-    PRINT frm\r
+    PRINT cx, cy  ' Print current x and y coordinates\r
+    PRINT frm     ' Print current frame number\r
 \r
-    ' Draw a circle at the current mouse position.\r
+    ' Erase circle at the old mouse position by drawing black circle\r
     CIRCLE (cx, cy), 10, 0\r
 \r
     ' Retrieve the x and y movement values from the mouse.\r
-    xp = getword(2)\r
-    putword 2, 0\r
-    yp = getword(4)\r
-    putword 4, 0\r
+    xp = getword(2)  ' Get horizontal movement\r
+    putword 2, 0     ' Reset horizontal movement counter\r
+    yp = getword(4)  ' Get vertical movement\r
+    putword 4, 0     ' Reset vertical movement counter\r
 \r
     ' Retrieve the button status from the mouse.\r
-    butt = getword(6)\r
-    putword 6, 0\r
+    butt = getword(6) ' Get button status\r
+    putword 6, 0     ' Reset button status\r
 \r
     ' Print the button status if a button is pressed.\r
     IF butt <> 0 THEN\r
         LOCATE 5\r
-        PRINT butt\r
+        PRINT butt  ' Print button status if pressed\r
     END IF\r
 \r
     ' Limit the mouse movement to within maxmove.\r
     IF xp < -maxmove THEN xp = -maxmove\r
     IF xp > maxmove THEN xp = maxmove\r
-    cx = cx + xp\r
+\r
+    cx = cx + xp  ' Update x-coordinate\r
 \r
     IF yp < -maxmove THEN yp = -maxmove\r
     IF yp > maxmove THEN yp = maxmove\r
-    cy = cy + yp\r
+    cy = cy + yp  ' Update y-coordinate\r
 \r
     ' Draw a circle at the new mouse position.\r
-    CIRCLE (cx, cy), 10, 10\r
+    CIRCLE (cx, cy), 10, 10  ' Draw a circle with radius 10\r
 \r
     ' Use sound command for adding short delay\r
     SOUND 0, .05\r
 \r
     ' Repeat the loop to continuously update the mouse position.\r
     GOTO 1\r
-\r
 END SUB\r
 \r
 SUB putword (addr, dat)\r
-    ' This subroutine stores a word (2 bytes) at the specified address.\r
-\r
-    b$ = HEX$(dat)\r
+    ' This subroutine stores a word (2 bytes) at the specified address in RAM.\r
+    b$ = HEX$(dat)  ' Convert data to hexadecimal\r
 \r
     2\r
-    IF LEN(b$) < 4 THEN b$ = "0" + b$: GOTO 2\r
+    IF LEN(b$) < 4 THEN b$ = "0" + b$: GOTO 2  ' Ensure four digits\r
 \r
     ' Split the word into two bytes.\r
-    n1 = VAL("&H" + LEFT$(b$, 2))\r
-    n2 = VAL("&H" + RIGHT$(b$, 2))\r
+    n1 = VAL("&H" + LEFT$(b$, 2))  ' First byte\r
+    n2 = VAL("&H" + RIGHT$(b$, 2)) ' Second byte\r
 \r
     ' Store the bytes at the specified address.\r
-    POKE (extADDR + addr), n2\r
-    POKE (extADDR + addr + 1), n1\r
-\r
+    POKE (extADDR + addr), n2  ' Store the first byte\r
+    POKE (extADDR + addr + 1), n1  ' Store the second byte\r
 END SUB\r
 \r
 SUB start\r
     ' This subroutine initializes the screen and retrieves the segment and address of the mouse driver.\r
+    SCREEN 13       ' Set graphics mode\r
+    DEF SEG = 0     ' Read from interrupt table\r
 \r
-    SCREEN 13\r
-\r
-    DEF SEG = 0     ' read first from interrupt table\r
-\r
+    ' Retrieve mouse data table address within TSR as pointed by interrupt 79h\r
     extSEG = PEEK(&H79 * 4 + 3) * 256\r
     extSEG = extSEG + PEEK(&H79 * 4 + 2)\r
+    PRINT "Segment is: " + HEX$(extSEG)  ' Print segment address\r
 \r
-    PRINT "Segment is: " + HEX$(extSEG)\r
-\r
+    ' Retrieve the offset address of the mouse driver.\r
     extADDR = PEEK(&H79 * 4 + 1) * 256\r
     extADDR = extADDR + PEEK(&H79 * 4 + 0)\r
+    PRINT "relative address is:"; extADDR  ' Print offset address\r
+    DEF SEG = extSEG  ' Set segment for memory access\r
 \r
-    PRINT "relative address is:"; extADDR\r
-\r
-    DEF SEG = extSEG\r
-\r
-    ' Check if the mouse driver is loaded.\r
+    ' Check if the mouse driver is loaded by verifying the magic number (1983).\r
     IF getword(0) <> 1983 THEN\r
         PRINT "FATAL ERROR: you must load"\r
         PRINT "QBasic extension TSR first!"\r
-        SYSTEM\r
+        SYSTEM  ' Exit program if mouse driver is not loaded\r
     END IF\r
-\r
-END SUB
\ No newline at end of file
+END SUB\r
index 57dd874..89fb13f 100644 (file)
-; TSR hack that allows QBasic programs to use mouse.\r
-; Made by Svjatoslav Agejenko\r
-; in 2004.01\r
-; Homepage: http://svjatoslav.eu\r
\r
-\r
-org 100h\r
-\r
-myint = 79h     ; interrupt to hook, becomes pointer to data table\r
-\r
-\r
-       mov     dx, msg\r
-       mov     ah, 9\r
-       int     21h\r
-\r
-        mov     ax, 0           ; Saves old interrupt vector\r
-        mov     es, ax\r
-        mov     eax, [es:32]\r
-        mov     [oldVector], eax \r
-\r
-        cli\r
-        mov     ax, cs          ; Set new interrupt vector for IRQ 0\r
-        shl     eax, 16\r
-        mov     ax, custom\r
-        mov     [es:32], eax\r
-        mov     ax, dataTable   ; Set interrupt vector for INT 79 (default)\r
-        mov     [es:4 * myint], eax\r
-        sti\r
-\r
-        mov     ax, endPointer  ; Calculate needed memory size, become TSR\r
-        add     ax, 32\r
-        mov     dx, 0\r
-        mov     bx, 16\r
-        div     bx\r
-        mov     dx, ax\r
-        mov     ax, 3100h\r
-        int     21h\r
+; DOS Terminate and Stay Resident (TSR) program that allows QBasic to read mouse input.\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
+; 2004.01, Initial version\r
+; 2025, Improved program readability\r
 \r
+\r
+\r
+org 100h                            ; Origin set to 100h for COM files\r
+myint = 79h                         ; Define interrupt number to hook for data table\r
+\r
+    ; Display startup message\r
+       mov     dx, msg                     ; DX points to the message to display\r
+       mov     ah, 9                       ; AH = 9 to display string\r
+       int     21h                         ; Call DOS interrupt to display message\r
+\r
+    ; Save old interrupt vector so that we can call in from new interrupt handler\r
+    mov     ax, 0                   ; AX = 0 to access interrupt vector table\r
+    mov     es, ax                  ; ES set to interrupt vector segment\r
+    mov     eax, [es:32]            ; Save old interrupt vector at offset 32h\r
+    mov     [oldVector], eax\r
+\r
+    ; Install our TSR as a new timer interrupt handler  (IRQ 0)\r
+    cli                             ; Temporarily disable interrupts to safely update vector\r
+    mov     ax, cs                  ; AX = code segment\r
+    shl     eax, 16                 ; Shift left by 16 to make room for offset\r
+    mov     ax, custom              ; AX = offset of custom handler\r
+    mov     [es:32], eax            ; Set new interrupt vector for IRQ 0\r
+\r
+    ; Here we use interrupt table (Interrupt # 79h) to point to data structure with mouse info within our TSR.\r
+    ; QBasic can then also read interrupt table and locate this important data structure within the RAM to read mouse status.\r
+    ; Here we hope that nobody else is using interrupt 79h, so that we can use it as a pointer to RAM instead.\r
+    mov     ax, dataTable           ; AX = offset of data table\r
+    mov     [es:4 * myint], eax     ; Set interrupt vector for INT 79h\r
+    sti                             ; Re-enable interrupts\r
+\r
+    ; Calculate RAM size that this TSR needs and tell DOS to make this program resident.\r
+    mov     ax, endPointer          ; Calculate memory size needed by TSR\r
+    add     ax, 32                  ; Add 32 bytes for safety margin\r
+    mov     dx, 0                   ; DX = 0 for division\r
+    mov     bx, 16                  ; BX = 16 for paragraph alignment\r
+    div     bx                      ; Divide AX by BX, result in AX\r
+    mov     dx, ax                  ; DX = memory size in paragraphs\r
+    mov     ax, 3100h               ; AX = function 31h (Keep Program Resident)\r
+    int     21h                     ; Call DOS to terminate and stay resident\r
+\r
+\r
+; Following code gets executed by timer interrupt in background multiple times per second\r
 custom:\r
-        pushf                   ; Execute default code in old int vector\r
-        call    dword [cs:oldVector]\r
-\r
-        cmp     [cs:isRunning], 0 ; Check if custom routine is already active\r
-        jne     EndOfRoutine\r
-\r
-        mov     [cs:isRunning], 1 ; Set active flag\r
-        pusha\r
-        push    ds\r
-        push    es\r
-\r
-               cli \r
-        mov     ax, 0bh         ; Read Mouse Motion Counters\r
-        int     33h\r
-        add     [CS:mouseHorisontal], cx\r
-        add     [CS:mouseVertical], dx\r
-        mov     ax, 3           ; read mouse buttons\r
-       int     33h\r
-        or      [CS:mouseButtons], bx\r
-       inc     byte [CS:updated]\r
-       sti\r
-\r
-        pop     es\r
-        pop     ds\r
-        popa\r
-        mov     [cs:isRunning], 0 ; Terminate active flag\r
-        EndOfRoutine:\r
-        iret\r
-\r
-oldVector       dd 0\r
-isRunning      db 0\r
+    pushf                           ; Save flags\r
+    call    dword [cs:oldVector]    ; Call original interrupt handler\r
+\r
+    ; Ensure that TSR is not executed multiple times simultaneously\r
+    cmp     [cs:isRunning], 0       ; Check if routine is already active\r
+    jne     EndOfRoutine            ; If active, jump to end\r
+    mov     [cs:isRunning], 1       ; Set active flag.\r
+\r
+    ; Ensure that TSR will not affert state of program that it interrupted\r
+    pusha                           ; Save all general-purpose registers\r
+    push    ds                      ; Save DS segment register\r
+    push    es                      ; Save ES segment register\r
+\r
+    ; Read mouse moevement and button states and store them to dedicated RAM table\r
+    cli                             ; Disable interrupts for safe memory access\r
+    mov     ax, 0bh                 ; AH = 0Bh, function to read mouse motion counters\r
+    int     33h                     ; Call mouse interrupt\r
+    add     [CS:mouseHorisontal], cx  ; Update horizontal movement counter\r
+    add     [CS:mouseVertical], dx  ; Update vertical movement counter\r
+    mov     ax, 3                   ; AH = 3, function to read mouse buttons\r
+       int         33h                     ; Call mouse interrupt\r
+    or      [CS:mouseButtons], bx   ; Update mouse button states\r
+       inc         byte [CS:updated]       ; Increment update flag. So that QBasic registers mouse update event.\r
+       sti                             ; Re-enable interrupts\r
 \r
+    ; Restore interrupted program state and return control to it\r
+    pop     es                      ; Restore ES segment register\r
+    pop     ds                      ; Restore DS segment register\r
+    popa                            ; Restore all general-purpose registers\r
+    mov     [cs:isRunning], 0       ; Clear active flag\r
+    EndOfRoutine:\r
+    iret                            ; Return from interrupt\r
+\r
+oldVector       dd 0                ; Storage for old interrupt vector. Our new interrupt handler will also call old handler to not break it.\r
+isRunning          db 0                ; Flag to check if routine is running\r
 dataTable:\r
-       dw 1983                 ; check number, indicates that module is loaded\r
-        mouseHorisontal dw 0\r
-        mouseVertical   dw 0\r
-        mouseButtons    dw 0\r
-       updated         db 0\r
-       \r
-\r
-endPointer:\r
-       \r
-msg:\r
-file 'readme.txt'\r
-       db '$'\r
+       dw 1983                             ; Check number indicating module is loaded\r
+    mouseHorisontal dw 0            ; Horizontal mouse movement counter\r
+    mouseVertical   dw 0            ; Vertical mouse movement counter\r
+    mouseButtons    dw 0            ; Mouse button states\r
+       updated             db 0            ; Flag indicating data was updated\r
+\r
+endPointer:                         ; End of resident code pointer\r
+\r
+msg:                                ; Message to display at start\r
+file 'readme.txt'                   ; Include content of readme.txt\r
+       db '$'                          ; End of string marker\r