docs(site): add CUSTOM_ID anchors, fix links, refresh media master
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 22 Aug 2026 16:32:56 +0000 (19:32 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sat, 22 Aug 2026 16:32:56 +0000 (19:32 +0300)
- Add kebab-case :CUSTOM_ID: slugs to headings across all index.org
  pages so exported HTML gets stable, readable anchor ids
  (index.html#fractals instead of org-generated ids)
- Replace fragile [[id:UUID]] in-page links with slug-based [[#slug]]
  links (LPT driver API table, root index overview)
- Fix "Back to BASIC applications collection" links pointing one
  directory level too shallow in category pages
- Fix Miscellaneous 3D demos link pointing to the Space page, and the
  duplicated :ID: UUID shared by the Games and Math sections
- Replace stale .png/.webm media references with recaptured
  "- Screenshot 0.png" / "- Screencast 0.mp4" files; embed videos via
  HTML5 <video> blocks
- Re-export Automated school clock v1 README.html with the current
  Org HTML exporter
- Include *.mp4 in the Tools/Update web site rsync filter
- Document the CUSTOM_ID convention in AGENTS.org

19 files changed:
2D GFX/Animations/index.org
2D GFX/Fractals/index.org
2D GFX/Spirals/index.org
2D GFX/Textures/index.org
3D GFX/3D Synthezier/doc/index.org
3D GFX/Miscellaneous/index.org
3D GFX/Space/index.org
AGENTS.org
Math/Plotting/index.org
Math/Simulation/index.org
Math/Truth table/index.org
Miscellaneous/Automated school clock/v1/README.html
Miscellaneous/Automated school clock/v1/README.org
Miscellaneous/Automated school clock/v3/tutorial.org
Miscellaneous/Mouse driver/index.org
Networking/Digital data over analog audio/index.org
Networking/LPT communication driver/index.org
Tools/Update web site
index.org

index 3daaac8..f2a9d17 100644 (file)
 </style>
 #+end_export
 
-[[file:../index.org][Back to BASIC applications collection]]
+[[file:../../index.org][Back to BASIC applications collection]]
 
 * Bump mapping
+:PROPERTIES:
+:CUSTOM_ID: bump-mapping
+:END:
 
 This QBasic program demonstrates a classic bump mapping technique,
 creating an animation where a light source moves around a textured
@@ -65,6 +68,9 @@ How It Works:
 [[file:Bump mapping.bas][Source code]]
 
 * Tree
+:PROPERTIES:
+:CUSTOM_ID: tree
+:END:
 
 This QBasic program renders a fractal tree that starts with a single
 root and branches out into a complex pattern. The program is an
@@ -79,6 +85,9 @@ beautiful structures, reminiscent of natural tree growth patterns.
 #+INCLUDE: "Tree.bas" src basic-qb45
 
 * Rotation in 2D space using trigonometry functions
+:PROPERTIES:
+:CUSTOM_ID: rotation-in-2d-space-using-trigonometry-functions
+:END:
 
 This QBasic program demonstrates the rotation of points in a 2D
 coordinate system using trigonometric functions. It simulates the
@@ -100,6 +109,9 @@ representation of how sine and cosine functions can be used to achieve
 #+INCLUDE: "2D rotation.bas" src basic-qb45
 
 * Various text mode animation effects
+:PROPERTIES:
+:CUSTOM_ID: various-text-mode-animation-effects
+:END:
 
 This QBasic program creates visually appealing text mode animations by
 overlaying various graphical effects while scrolling its own source
@@ -118,6 +130,9 @@ colors to create dynamic visual effects in a console environment.
 [[file:text mode animation.bas][Source code]]
 
 * Snowfall
+:PROPERTIES:
+:CUSTOM_ID: snowfall
+:END:
 
 This QBasic program simulates a simple snowfall effect on the
 screen. It creates a visually appealing animation where particles
@@ -157,6 +172,9 @@ What's in it for the Reader?
 #+INCLUDE: "Snowfall.bas" src basic-qb45
 
 * Screensaver
+:PROPERTIES:
+:CUSTOM_ID: screensaver
+:END:
 
 The "Mystery Screensaver" is a visually captivating animation program
 written in QBasic. It creates an intriguing screensaver effect with
@@ -179,6 +197,9 @@ engaging visual effects.
 #+INCLUDE: "Screensaver.bas" src basic-qb45
 
 * Screensaver - flying hand fans
+:PROPERTIES:
+:CUSTOM_ID: screensaver-flying-hand-fans
+:END:
 
 This QBasic program is a visually engaging screensaver that creates an
 animated display of colorful lines and patterns. The program is
@@ -200,6 +221,9 @@ personal computing.
 #+INCLUDE: "Screensaver, flying hand fans.bas" src basic-qb45
 
 * Polygon rendering
+:PROPERTIES:
+:CUSTOM_ID: polygon-rendering
+:END:
 
 This QBasic program generates and renders random polygons on the
 screen, each filled with a random color. It's a simple yet effective
@@ -220,6 +244,9 @@ rendering geometric shapes and handling randomness.
 #+INCLUDE: "Polygon.bas" src basic-qb45
 
 * Textured polygon rendering
+:PROPERTIES:
+:CUSTOM_ID: textured-polygon-rendering
+:END:
 
 The program provides a practical example of texture mapping, a
 fundamental concept in computer graphics. Readers can learn how
@@ -238,6 +265,9 @@ textures are applied to polygons.
 [[file:Polygon textured.bas][Source code]]
 
 * Yin and yang animation
+:PROPERTIES:
+:CUSTOM_ID: yin-and-yang-animation
+:END:
 
 Yin and yang is a concept that originated in Chinese philosophy,
 describing an opposite but interconnected, self-perpetuating
@@ -260,6 +290,9 @@ important for cohesion of the whole.
 #+INCLUDE: "Yin and yang.bas" src basic-qb45
 
 * Orbiting particles
+:PROPERTIES:
+:CUSTOM_ID: orbiting-particles
+:END:
 
 This QBasic program creates a visually engaging animation of particles
 orbiting around a central point. The particles are rendered as colored
@@ -280,6 +313,9 @@ mesmerizing effect.
 #+INCLUDE: "Orbiting particles.bas" src basic-qb45
 
 * DNA animation
+:PROPERTIES:
+:CUSTOM_ID: dna-animation
+:END:
 
 Animated DNA. Nowhere close to being anatomically correct, but
 resembles animation as seen in the movies :)
@@ -298,6 +334,9 @@ resembles animation as seen in the movies :)
 #+INCLUDE: "DNA.bas" src basic-qb45
 
 * Matrix
+:PROPERTIES:
+:CUSTOM_ID: matrix
+:END:
 
 Effect inspired by "The Matrix" movie.
 
@@ -313,6 +352,9 @@ Effect inspired by "The Matrix" movie.
 [[file:matrix.bas][Source code]]
 
 * Matrix - the opening scene
+:PROPERTIES:
+:CUSTOM_ID: matrix-the-opening-scene
+:END:
 
 Animation inspired by the opening scene from "The Matrix" movie: the
 phone-call trace sequence. A line of digits is gradually decoded at
@@ -332,6 +374,9 @@ sure the line is clear?" appear as the decoding progresses.
 [[file:matrix2.bas][Source code]]
 
 * Hacker
+:PROPERTIES:
+:CUSTOM_ID: hacker
+:END:
 
 Ultra-realistic hacker screen simulator! Behold da glory of a true
 hacker's terminal, brimming wif mystical green text that cascades like
@@ -349,6 +394,9 @@ a waterfall of knowledge across thy monitor.
 [[file:hacker.bas][Source code]]
 
 * Circular patterns
+:PROPERTIES:
+:CUSTOM_ID: circular-patterns
+:END:
 
 This QBasic program generates a fractal animation that looks like
 atoms. While it uses a simple formula to calculate the color of every
@@ -369,6 +417,9 @@ the circular pattern.
 [[file:circular patterns.bas][Source code]]
 
 * Sun, earth and moon
+:PROPERTIES:
+:CUSTOM_ID: sun-earth-and-moon
+:END:
 
 This QBasic program projects an animation of the sun, earth and
 moon. The moon orbits the earth, and the earth orbits the sun. The
@@ -388,6 +439,9 @@ Z-sorting.
 [[file:sun&eart.bas][Source code]]
 
 * Maze
+:PROPERTIES:
+:CUSTOM_ID: maze
+:END:
 
 This QBasic program renders an animated 3D maze. The maze grows one
 segment at a time along a randomly picked axis, each segment colored
@@ -408,6 +462,9 @@ are drawn.
 [[file:maze.BAS][Source code]]
 
 * Fancy text mode animations
+:PROPERTIES:
+:CUSTOM_ID: fancy-text-mode-animations
+:END:
 
 This QBasic program renders fancy looking text mode animations in an
 80x50 text screen. Various effects are overlaid on top of each other
index 0569bd8..27d94c8 100644 (file)
 </style>
 #+end_export
 
-[[file:../index.org][Back to BASIC applications collection]]
+[[file:../../index.org][Back to BASIC applications collection]]
 
 * Fractal circles
+:PROPERTIES:
+:CUSTOM_ID: fractal-circles
+:END:
 
 This QBasic program generates a visually captivating spiral fractal
 composed of circles. It employs a recursive algorithm to create
@@ -48,6 +51,9 @@ geometry, recursive programming, and graphical design.
 [[file:fractal circles.bas][Source code]]
 
 * Fractal circles animated
+:PROPERTIES:
+:CUSTOM_ID: fractal-circles-animated
+:END:
 
 This QBasic program creates an animated fractal composed of circles,
 demonstrating an engaging visual effect. The program uses a timer
@@ -64,6 +70,9 @@ system to control the animation's progression.
 [[file:fractal circles animated.bas][Source code]]
 
 * Fractal of squares
+:PROPERTIES:
+:CUSTOM_ID: fractal-of-squares
+:END:
 
 This QBasic program generates and displays a fractal pattern composed of squares.
 
@@ -76,6 +85,9 @@ This QBasic program generates and displays a fractal pattern composed of squares
 [[file:fractal squares.bas][file:fractal%20squares%20-%20Screenshot%201.png]]
 
 * Fractal of squares animated
+:PROPERTIES:
+:CUSTOM_ID: fractal-of-squares-animated
+:END:
 
 This QBasic program generates an animated fractal pattern composed of
 size-shifting squares. The animation creates a visually captivating
@@ -94,6 +106,9 @@ resulting in a dynamic and ever-changing geometric pattern.
 [[file:fractal squares animated.bas][Source code]]
 
 * Fractal of trees
+:PROPERTIES:
+:CUSTOM_ID: fractal-of-trees
+:END:
 
 QBasic program that generates a visually appealing fractal tree
 animation. The program creates a dynamic fractal pattern that
index ae0ab3d..cb8a4ff 100644 (file)
 </style>
 #+end_export
 
-[[file:../index.org][Back to BASIC applications collection]]
+[[file:../../index.org][Back to BASIC applications collection]]
 
 * Spiral with increasing density
+:PROPERTIES:
+:CUSTOM_ID: spiral-with-increasing-density
+:END:
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 1000px
@@ -43,6 +46,9 @@ progressively increases towards the center.
 #+INCLUDE: "spiral.bas" src basic-qb45
 
 * Spiral with varying height
+:PROPERTIES:
+:CUSTOM_ID: spiral-with-varying-height
+:END:
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 1000px
@@ -58,6 +64,9 @@ displaced by sinus function where input is the distance to the center.
 #+INCLUDE: "spiral, 2.bas" src basic-qb45
 
 * Shaded spiral
+:PROPERTIES:
+:CUSTOM_ID: shaded-spiral
+:END:
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 800px
@@ -73,6 +82,9 @@ more detail.
 #+INCLUDE: "spiral, 3.bas" src basic-qb45
 
 * Sphere forming spiral
+:PROPERTIES:
+:CUSTOM_ID: sphere-forming-spiral
+:END:
 
 Similar to previous spiral, Line segments are connected between the
 neighbors. Spiral height and width are calculated such that they form
@@ -88,6 +100,9 @@ then in the next step the points are connected using lines:
 #+INCLUDE: "spiral, 4.bas" src basic-qb45
 
 * Textured spherical spiral
+:PROPERTIES:
+:CUSTOM_ID: textured-spherical-spiral
+:END:
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 1000px
@@ -104,6 +119,9 @@ attempted.
 #+INCLUDE: "spiral, 5.bas" src basic-qb45
 
 * Textured and shaded spherical spiral
+:PROPERTIES:
+:CUSTOM_ID: textured-and-shaded-spherical-spiral
+:END:
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 1000px
index 745d9a9..1bc383f 100644 (file)
 </style>
 #+end_export
 
-[[file:../index.org][Back to BASIC applications collection]]
+[[file:../../index.org][Back to BASIC applications collection]]
 
 * Circular waves
+:PROPERTIES:
+:CUSTOM_ID: circular-waves
+:END:
 
 This QBasic program creates visually captivating circular wave
 patterns by manipulating pixel colors based on sine function
@@ -54,6 +57,9 @@ algorithms can produce intricate and visually appealing results.
 #+INCLUDE: "Circular waves.bas" src basic-qb45
 
 * Diamond square clouds
+:PROPERTIES:
+:CUSTOM_ID: diamond-square-clouds
+:END:
 
 This QBasic program demonstrates the Diamond-Square algorithm, a
 method used to generate fractal terrain or cloud surfaces. The
@@ -68,6 +74,9 @@ textures in computer graphics.
 #+INCLUDE: "Diamond square clouds.bas" src basic-qb45
 
 * Old paper
+:PROPERTIES:
+:CUSTOM_ID: old-paper
+:END:
 
 This QBasic program generates a procedural texture that simulates the
 appearance of old paper.
@@ -91,6 +100,9 @@ randomness, mimicking the fibrous texture of paper.
 #+INCLUDE: "Old paper.bas" src basic-qb45
 
 * Wood
+:PROPERTIES:
+:CUSTOM_ID: wood
+:END:
 
 This QBasic program creates a visually appealing simulation of a wood
 surface. It is designed to generate a realistic wood grain texture
@@ -104,6 +116,9 @@ using simple graphical techniques.
 #+INCLUDE: "Wood.bas" src basic-qb45
 
 * Yellow flame
+:PROPERTIES:
+:CUSTOM_ID: yellow-flame
+:END:
 
 "Yellow Flame" is a visually captivating program written in QBasic
 that generates a dynamic flame-like pattern on the screen.
index 5872d07..d48cbcc 100644 (file)
 </style>
 #+end_export
 
-[[file:../../index.org][Back to BASIC applications collection]]
+[[file:../../../index.org][Back to BASIC applications collection]]
 
 * Operating principle
+:PROPERTIES:
+:CUSTOM_ID: operating-principle
+:END:
 
 Parses scene definition language and creates 3D world based on
 it. Result will be in a [[https://en.wikipedia.org/wiki/Wavefront_.obj_file][wavefront obj file]], witch can be then
@@ -56,6 +59,9 @@ They were produced by importing generated [[https://en.wikipedia.org/wiki/Wavefr
 [[https://www.blender.org/][Blender]].
 
 ** Rectangular city
+:PROPERTIES:
+:CUSTOM_ID: rectangular-city
+:END:
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 1000px
@@ -69,6 +75,9 @@ They were produced by importing generated [[https://en.wikipedia.org/wiki/Wavefr
 #+attr_latex: :width 1000px
 [[file:rectangular city, 3.jpeg]]
 ** Hexagonal city
+:PROPERTIES:
+:CUSTOM_ID: hexagonal-city
+:END:
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 1000px
@@ -82,29 +91,56 @@ They were produced by importing generated [[https://en.wikipedia.org/wiki/Wavefr
 #+attr_latex: :width 1000px
 [[file:hexagonal city, 3.jpeg]]
 * Scene description language
+:PROPERTIES:
+:CUSTOM_ID: scene-description-language
+:END:
 See also examples.
 ** here
+:PROPERTIES:
+:CUSTOM_ID: here
+:END:
  : here
  defines new segment
 ** p
+:PROPERTIES:
+:CUSTOM_ID: p
+:END:
  : p  x y z
  defines new point
 ** f
+:PROPERTIES:
+:CUSTOM_ID: f
+:END:
  : f  p1 p2 p3 p4
  defines new polygon,  p4  may be unused
 ** warn
+:PROPERTIES:
+:CUSTOM_ID: warn
+:END:
  : warn  <message>
  displays warning message, and wait for key
 ** end
+:PROPERTIES:
+:CUSTOM_ID: end
+:END:
  : end
  terminates parser
 ** mtl
+:PROPERTIES:
+:CUSTOM_ID: mtl
+:END:
  : mtl  material
  selects material
 ** mtlrnd
+:PROPERTIES:
+:CUSTOM_ID: mtlrnd
+:END:
  : mtlrnd  material ...
  selects random material from list
 ** obj
+:PROPERTIES:
+:CUSTOM_ID: obj
+:END:
  : obj  object xz45 xy20 x+3 y*2
  includes sub object, can be rotated moved or resized, across X Y Z. If
  object name begin vith ~ then it will be loaded from current
@@ -114,37 +150,67 @@ See also examples.
 
  [[file:rotation.png]]
 ** rnd
+:PROPERTIES:
+:CUSTOM_ID: rnd
+:END:
  : rnd  p^1^2^3 p^7^2^1
  select random command to execute, ^ will be converted to spaces.
 ** #
+:PROPERTIES:
+:CUSTOM_ID: heading
+:END:
  : # whatever text
  comment
 ** out
+:PROPERTIES:
+:CUSTOM_ID: out
+:END:
  : out  file
  specify output file name, must be first command
 ** set
+:PROPERTIES:
+:CUSTOM_ID: set
+:END:
  : set  variable  contents
  set variable contents, variable must be number, contents can be
  string. max variables is 100. first is 0.
 ** variables usage
+:PROPERTIES:
+:CUSTOM_ID: variables-usage
+:END:
  : anycommand %1 anything
  inserts variable 1 contents info line
 ** cmp
+:PROPERTIES:
+:CUSTOM_ID: cmp
+:END:
  : cmp  flag string1 string2
  compares strings, and inserts TRUE to flag, if they are equal, else inserts FALSE. max 9 falgs, 0 first. Each subobject has its own flags.
 ** ?
+:PROPERTIES:
+:CUSTOM_ID: heading-2
+:END:
  : ?flag anycommand
  executes command if flag is true.
 
  exapmle: ?3 obj car z*2 xy45
 ** dum
+:PROPERTIES:
+:CUSTOM_ID: dum
+:END:
  : dum
  dummy function, does notheing
 
 * Installation
+:PROPERTIES:
+:CUSTOM_ID: installation
+:END:
 Edit *bin/3dparse.bas* file and update include path in there.
 
 ** System requirements
+:PROPERTIES:
+:CUSTOM_ID: system-requirements
+:END:
 
 | software | tested version |
 |----------+----------------|
@@ -152,6 +218,9 @@ Edit *bin/3dparse.bas* file and update include path in there.
 | QBasic   |            4.5 |
 
 ** Directory layout
+:PROPERTIES:
+:CUSTOM_ID: directory-layout
+:END:
 
 + bin ::
   + 3dparse.bas :: 3D generator main executable
@@ -163,6 +232,9 @@ Edit *bin/3dparse.bas* file and update include path in there.
 + include :: 3D objects used to compose the scene
 
 * Usage
+:PROPERTIES:
+:CUSTOM_ID: usage
+:END:
 
 Make sure you have QB binaries in your PATH.  Execute
 : bin/city1.bat
index e313e37..5dc6d57 100644 (file)
 </style>
 #+end_export
 
-[[file:../index.org][Back to BASIC applications collection]]
+[[file:../../index.org][Back to BASIC applications collection]]
 
 * Rotating exclamation mark
+:PROPERTIES:
+:CUSTOM_ID: rotating-exclamation-mark
+:END:
 
 Wireframe 3D model of a rotating exclamation mark.
 
@@ -44,6 +47,9 @@ Wireframe 3D model of a rotating exclamation mark.
 [[file:!.bas][Source code]]
 
 * 3D bouncing ball
+:PROPERTIES:
+:CUSTOM_ID: 3d-bouncing-ball
+:END:
 
 This QBasic program creates a visually engaging 3D animation of a
 point-cloud ball bouncing around the screen. The program is an example
@@ -61,6 +67,9 @@ of early computer graphics techniques.
 [[file:3D%20ball.bas][Source code]]
 
 * 3D text in a room
+:PROPERTIES:
+:CUSTOM_ID: 3d-text-in-a-room
+:END:
 
 Wireframe 3D text hanging in a wireframe 3D room. User can look and
 fly around in all directions.
@@ -77,6 +86,9 @@ fly around in all directions.
 [[file:3D%20text.bas][Source code]]
 
 * 3D bouncing cubes on grid floor
+:PROPERTIES:
+:CUSTOM_ID: 3d-bouncing-cubes-on-grid-floor
+:END:
 
 3D wireframe cubes bouncing on a grid floor, creating an immersive and
 dynamic visual effect.
@@ -93,6 +105,9 @@ dynamic visual effect.
 [[file:Bouncing%20cubes.bas][Source code]]
 
 * Matrix math for rotation in 3D space
+:PROPERTIES:
+:CUSTOM_ID: matrix-math-for-rotation-in-3d-space
+:END:
 
 Instead of combining simple 2D rotors, pixels in this 3D space are
 rotated by using matrix multiplications.
@@ -109,6 +124,9 @@ rotated by using matrix multiplications.
 [[file:Matrix%20math.bas][Source code]]
 
 * Maze explorer
+:PROPERTIES:
+:CUSTOM_ID: maze-explorer
+:END:
 
 The Evolving 3D Maze Explorer is a QBasic program that generates and
 navigates through a dynamically evolving 3D maze. This program is an
@@ -123,6 +141,9 @@ changes as they navigate through it.
 [[file:Maze explorer.bas][Source code]]
 
 * Tank animation
+:PROPERTIES:
+:CUSTOM_ID: tank-animation
+:END:
 
 Animated tank driving through the bridge back and forward. User can
 look and fly around in all directions.
@@ -139,6 +160,9 @@ look and fly around in all directions.
 [[file:Tank.bas][Source code]]
 
 * Tiled room
+:PROPERTIES:
+:CUSTOM_ID: tiled-room
+:END:
 
 Room with some tiles on the wall and on the floor. User can freely fly
 around.
index b6c9d5a..91a1def 100644 (file)
 </style>
 #+end_export
 
-[[file:../index.org][Back to BASIC applications collection]]
+[[file:../../index.org][Back to BASIC applications collection]]
 
 * Galaxy explorer
+:PROPERTIES:
+:CUSTOM_ID: galaxy-explorer
+:END:
 
 This QBasic program renders a navigable 3D point cloud galaxy,
 allowing users to explore a virtual galaxy using mouse or keyboard
@@ -42,6 +45,9 @@ galaxy with stars distributed in a spiral pattern.
 [[file:Galaxy%20explorer.bas][Source code]]
 
 * Rocket simulator
+:PROPERTIES:
+:CUSTOM_ID: rocket-simulator
+:END:
 
 QBasic program that simulates the takeoff and flight of a rocket from
 the surface of a planet. This program provides a simple yet engaging
@@ -60,6 +66,9 @@ observe the rocket's trajectory from various angles.
 [[file:Rocket simulator.bas][Source code]]
 
 * Stars
+:PROPERTIES:
+:CUSTOM_ID: stars
+:END:
 
 The 3D Starfield Simulation is a QBasic program that creates a
 visually captivating simulation of a starfield in three
@@ -92,6 +101,9 @@ How the Program Works:
 [[file:Stars.bas][Source code]]
 
 * Universe explorer
+:PROPERTIES:
+:CUSTOM_ID: universe-explorer
+:END:
 
 This QBasic program that simulates a navigable 3D universe. Users can
 freely fly through a dynamically generated universe composed of galaxy
index 3c7f290..f93ceed 100644 (file)
@@ -5,6 +5,7 @@
 
 * Purpose
 :PROPERTIES:
+:CUSTOM_ID: purpose
 :ID:       37c01b99-9f78-43c4-ad26-d43c8691db07
 :END:
 
@@ -17,6 +18,7 @@ files; each showcased program usually has a sibling screenshot
 
 * Layout
 :PROPERTIES:
+:CUSTOM_ID: layout
 :ID:       635fd7db-6abd-4212-a9ce-f908b915ac09
 :END:
 
@@ -40,36 +42,55 @@ files; each showcased program usually has a sibling screenshot
 
 * Conventions
 :PROPERTIES:
+:CUSTOM_ID: conventions
 :ID:       ce6f3b18-f106-4786-941e-06fd7c8fdb04
 :END:
 
 ** Directory and file names contain spaces
+:PROPERTIES:
+:CUSTOM_ID: directory-and-file-names-contain-spaces
+:END:
 
 Category directories and most program files use spaces and
 capitalization: ~3D GFX/Space/index.org~, ~Ray casting engine.bas~,
 ~Pomppu Paavo 2/~. Always quote paths in shell commands and scripts.
 
 ** Site pages
+:PROPERTIES:
+:CUSTOM_ID: site-pages
+:END:
 
 - Every category directory has its own ~index.org~; the root
   ~index.org~ links down into them.
 - ~index.html~ files are autogenerated by ~Tools/Update web site~ and
   are gitignored â€” never edit or commit them.
-- Cross-page links in ~index.org~ use ~[[id:<UUID>][Text]]~ for
-  in-page section targets and ~[[file:...]]~ for other pages. Relative
-  ~file:~ links with spaces appear both percent-encoded
+- Every heading carries a ~:CUSTOM_ID:~ property with a human-readable
+  kebab-case slug (e.g. ~fractals~). The HTML exporter uses it as the
+  anchor ~id~, so exported links stay readable (~index.html#fractals~)
+  and stable.
+- In-page section links use the slug: ~[[#fractals][Fractals]]~.
+  Links to other pages use ~[[file:...]]~. Relative ~file:~ links with
+  spaces appear both percent-encoded
   ~[[file:2D%20GFX/Animations/index.html][Animations]]~ and literal
   ~[[file:3D GFX/Space/index.html][...]]~ â€” match the surrounding
   page's existing style when editing.
-- Sections that need stable link targets carry a property drawer:
+- Sections that need stable cross-file ID targets additionally carry
+  an ~:ID:~ UUID in the same drawer:
   : * Fractals
   : :PROPERTIES:
+  : :CUSTOM_ID: fractals
   : :ID:       38f8f88a-3f72-4c43-91c6-08d5c7aa54e6
   : :END:
-  Generate a fresh UUID with ~python3 -c "import uuid; print(uuid.uuid4())"~
-  when adding a new linkable section.
+  When adding a new section, always give it a ~:CUSTOM_ID:~ slug
+  (lowercase, hyphen-separated, unique within the page). Generate a
+  fresh ~:ID:~ UUID with
+  ~python3 -c "import uuid; print(uuid.uuid4())"~ only when something
+  must link to it by ID.
 
 ** Showcasing a program
+:PROPERTIES:
+:CUSTOM_ID: showcasing-a-program
+:END:
 
 A showcased ~.bas~ program pairs with a screenshot or recording of
 the same base name: ~Stroboscope.bas~ + ~Stroboscope.png~,
@@ -77,6 +98,9 @@ the same base name: ~Stroboscope.bas~ + ~Stroboscope.png~,
 follow this pairing.
 
 ** Helper script naming
+:PROPERTIES:
+:CUSTOM_ID: helper-script-naming
+:END:
 
 Executable helper scripts are named as sentences with spaces, not
 kebab-case: ~Tools/Update web site~, ~Tools/Commit and push~,
@@ -86,6 +110,7 @@ kebab-case: ~Tools/Update web site~, ~Tools/Commit and push~,
 
 * Tooling
 :PROPERTIES:
+:CUSTOM_ID: tooling
 :ID:       68d4e5b1-e827-4985-8316-7628d411f556
 :END:
 
@@ -103,6 +128,7 @@ own location.
 
 * Pitfalls
 :PROPERTIES:
+:CUSTOM_ID: pitfalls
 :ID:       1fb7b768-40aa-44d3-bd55-a0d71e2f9c74
 :END:
 
index ab87dc5..7512bc5 100644 (file)
 </style>
 #+end_export
 
-[[file:../index.org][Back to BASIC applications collection]]
+[[file:../../index.org][Back to BASIC applications collection]]
 
 * 2D graph
+:PROPERTIES:
+:CUSTOM_ID: 2d-graph
+:END:
 
 The 2D Graph Plotter is a simple yet effective program written in
 QBasic that allows users to plot mathematical functions on a
@@ -41,11 +44,14 @@ based on a user-defined mathematical function.
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 1000px
-[[file:2D%20graph%20plot.bas][file:2D%20graph%20plot.png]]
+[[file:2D%20graph%20plot.bas][file:2D%20graph%20plot%20-%20Screenshot%200.png]]
 
 [[file:2D%20graph%20plot.bas][Source code]]
 
 * 3D graph
+:PROPERTIES:
+:CUSTOM_ID: 3d-graph
+:END:
 
 The 3D Heightmap Explorer is a QBasic program designed to visualize
 mathematical functions in three dimensions. It allows users to explore
@@ -77,6 +83,9 @@ grid.
 [[file:3D%20graph.bas][Source code]]
 
 * Deriviative calculator
+:PROPERTIES:
+:CUSTOM_ID: deriviative-calculator
+:END:
 
 This QBasic program is designed to compute and plot an arbitrary
 mathematical function on a 2D graph. Additionally, it calculates and
@@ -88,11 +97,14 @@ visualized.
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 1000px
-[[file:Deriviative%20calculator.bas][file:Deriviative%20calculator.png]]
+[[file:Deriviative%20calculator.bas][file:Deriviative%20calculator%20-%20Screenshot%200.png]]
 
 [[file:Deriviative%20calculator.bas][Source code]]
 
 * Sine and cosine table
+:PROPERTIES:
+:CUSTOM_ID: sine-and-cosine-table
+:END:
 
 The SIN & COS Table Generator is a QBasic program designed to visually
 plot the sine and cosine functions on a graphical screen. This program
@@ -101,6 +113,6 @@ visual representation of these fundamental trigonometric functions.
 
 #+attr_html: :class responsive-img
 #+attr_latex: :width 1000px
-[[file:Sine%20and%20cosine%20table.bas][file:Sine%20and%20cosine%20table.png]]
+[[file:Sine%20and%20cosine%20table.bas][file:Sine%20and%20cosine%20table%20-%20Screenshot%200.png]]
 
 [[file:Sine%20and%20cosine%20table.bas][Source code]]
index bfff35d..4e49fca 100644 (file)
 </style>
 #+end_export
 
-[[file:../index.org][Back to BASIC applications collection]]
+[[file:../../index.org][Back to BASIC applications collection]]
 
 * Explosion simulator
+:PROPERTIES:
+:CUSTOM_ID: explosion-simulator
+:END:
 
 This QBasic program simulates the propagation of shock waves in a gas
 within a confined space. It models the behavior of pressure and
@@ -47,13 +50,21 @@ pressure values to ensure physical realism. The pressure grid is
 updated based on the current velocities. The program handles boundary
 conditions by setting velocities to zero at wall boundaries.
 
-#+attr_html: :class responsive-img
-#+attr_latex: :width 1000px
-[[file:Explosion%20simulator.bas][file:Explosion%20simulator.png]]
+#+begin_export html
+<div class="flex-center">
+  <video controls loop autoplay>
+    <source src="Explosion simulator - Screencast 0.mp4" type="video/mp4">
+    Your browser does not support the video tag.
+  </video>
+</div>
+#+end_export
 
 [[file:Explosion%20simulator.bas][Source code]]
 
 * Gravity in 2D
+:PROPERTIES:
+:CUSTOM_ID: gravity-in-2d
+:END:
 
 The Gravitation Simulation program is a simple yet insightful QBasic
 application that simulates the gravitational interaction between a
@@ -62,13 +73,21 @@ program provides a visual representation of how gravitational forces
 influence the motion of celestial bodies, making it an excellent
 educational tool for understanding basic orbital mechanics.
 
-#+attr_html: :class responsive-img
-#+attr_latex: :width 1000px
-[[file:Gravity%20in%202D.bas][file:Gravity%20in%202D.png]]
+#+begin_export html
+<div class="flex-center">
+  <video controls loop autoplay>
+    <source src="Gravity in 2D - Screencast 0.mp4" type="video/mp4">
+    Your browser does not support the video tag.
+  </video>
+</div>
+#+end_export
 
 [[file:Gravity%20in%202D.bas][Source code]]
 
 * Gravity in 3D
+:PROPERTIES:
+:CUSTOM_ID: gravity-in-3d
+:END:
 
 This QBasic program simulates the gravitational interactions between
 spheres in a three-dimensional space. It provides a visual
@@ -86,7 +105,7 @@ will reach stable configuration.
 #+begin_export html
 <div class="flex-center">
   <video controls loop autoplay>
-    <source src="Gravity%20in%203D.webm" type="video/webm">
+    <source src="Gravity in 3D - Screencast 0.mp4" type="video/mp4">
     Your browser does not support the video tag.
   </video>
 </div>
@@ -95,6 +114,9 @@ will reach stable configuration.
 [[file:Gravity%20in%203D.bas][Source code]]
 
 * Interference
+:PROPERTIES:
+:CUSTOM_ID: interference
+:END:
 
 This QBasic program simulates the interference pattern created by two
 sine waves with slightly different frequencies. It visually
@@ -108,7 +130,7 @@ displayed as a third waveform.
 #+begin_export html
 <div class="flex-center">
   <video controls loop autoplay>
-    <source src="Interference.webm" type="video/webm">
+    <source src="Interference - Screencast 0.mp4" type="video/mp4">
     Your browser does not support the video tag.
   </video>
 </div>
@@ -117,6 +139,9 @@ displayed as a third waveform.
 [[file:Interference.bas][Source code]]
 
 * Interferogram
+:PROPERTIES:
+:CUSTOM_ID: interferogram
+:END:
 
 This QBasic program simulates the interference pattern created by
 multiple frequencies interacting with each other. The result is a
@@ -130,6 +155,9 @@ used in physics and engineering to analyze wave interactions.
 [[file:Interferogram.bas][Source code]]
 
 * Surface tension
+:PROPERTIES:
+:CUSTOM_ID: surface-tension
+:END:
 
 This QBasic program simulates the behavior of water spills and the
 subsequent effects of surface tension using cellular automata
@@ -146,13 +174,21 @@ The rules dictate that a water cell survives only if surrounded by a
 moderate density of other water cells, while an empty space becomes a
 water cell if surrounded by a high density of water cells.
 
-#+attr_html: :class responsive-img
-#+attr_latex: :width 1000px
-[[file:Surface%20tension.bas][file:Surface%20tension.png]]
+#+begin_export html
+<div class="flex-center">
+  <video controls loop autoplay>
+    <source src="Surface tension - Screencast 0.mp4" type="video/mp4">
+    Your browser does not support the video tag.
+  </video>
+</div>
+#+end_export
 
 [[file:Surface%20tension.bas][Source code]]
 
 * Wave 1
+:PROPERTIES:
+:CUSTOM_ID: wave-1
+:END:
 
 This QBasic program simulates the propagation of waves across a
 surface. It provides a visual representation of wave dynamics, which
@@ -163,13 +199,21 @@ The program updates the velocity and height of each point based on the
 calculated averages, applying a damping factor to simulate energy
 loss.
 
-#+attr_html: :class responsive-img
-#+attr_latex: :width 1000px
-[[file:Wave%201.bas][file:Wave%201.png]]
+#+begin_export html
+<div class="flex-center">
+  <video controls loop autoplay>
+    <source src="Wave 1 - Screencast 0.mp4" type="video/mp4">
+    Your browser does not support the video tag.
+  </video>
+</div>
+#+end_export
 
 [[file:Wave%201.bas][Source code]]
 
 * Wave 2
+:PROPERTIES:
+:CUSTOM_ID: wave-2
+:END:
 
 This QBasic program simulates and visualizes the behavior of water
 waves on a 2D surface. It creates a dynamic animation of water
@@ -178,8 +222,13 @@ and interact with each other. The program is an example of a simple
 physics simulation and can serve as an educational tool for
 understanding wave mechanics.
 
-#+attr_html: :class responsive-img
-#+attr_latex: :width 1000px
-[[file:Wave%202.bas][file:Wave%202.png]]
+#+begin_export html
+<div class="flex-center">
+  <video controls loop autoplay>
+    <source src="Wave 2 - Screencast 0.mp4" type="video/mp4">
+    Your browser does not support the video tag.
+  </video>
+</div>
+#+end_export
 
 [[file:Wave%202.bas][Source code]]
index be3b9c4..6b0e9c8 100644 (file)
@@ -8,7 +8,7 @@
 #+OPTIONS: H:20 num:20
 #+OPTIONS: author:nil
 
-[[file:../index.org][Back to BASIC applications collection]]
+[[file:../../index.org][Back to BASIC applications collection]]
 
 - See also: https://en.wikipedia.org/wiki/Truth_table
 
@@ -18,7 +18,13 @@ the input variables, with the corresponding output value. Truth tables are cruci
 designing and understanding digital circuits, Boolean algebra, and logical expressions.
 
 * Implemented logical operations
+:PROPERTIES:
+:CUSTOM_ID: implemented-logical-operations
+:END:
 ** Equivalent ( â‡” , 1 )
+:PROPERTIES:
+:CUSTOM_ID: equivalent-1
+:END:
 
 The equivalent operation, also known as logical biconditional, is true if and only if
 both inputs are the same. In other words, it asserts that both propositions are
@@ -34,6 +40,9 @@ Truth Table:
 | F | F | T     |
 
 ** Implies ( â‡’ , 2 )
+:PROPERTIES:
+:CUSTOM_ID: implies-2
+:END:
 
 An implication asserts that if the first proposition is true, the
 second must be true as well. If the first is false, the implication
@@ -49,6 +58,9 @@ Truth table:
 | F | F | T     |
 
 ** OR ( âˆ¨ , 3 )
+:PROPERTIES:
+:CUSTOM_ID: or-3
+:END:
 
 The OR operation, also known as logical disjunction, is true if at
 least one of the inputs is true. It asserts that if either proposition
@@ -64,6 +76,9 @@ Truth table:
 | F | F | F     |
 
 ** AND ( âˆ§ , 4 )
+:PROPERTIES:
+:CUSTOM_ID: and-4
+:END:
 
 The AND operation, also known as logical conjunction, is true if and
 only if both inputs are true.
@@ -78,6 +93,9 @@ Truth table:
 | F | F | F     |
 
 ** NOT ( Â¬ , 5 )
+:PROPERTIES:
+:CUSTOM_ID: not-5
+:END:
 
 The NOT operation, also known as logical negation, inverts the value
 of the input. If the input is true, the output is false, and vice
@@ -90,8 +108,14 @@ Truth Table:
 | T | F  |
 | F | T  |
 * Examples
+:PROPERTIES:
+:CUSTOM_ID: examples
+:END:
 
 ** Example: (A âˆ§ B) âˆ¨ Â¬C
+:PROPERTIES:
+:CUSTOM_ID: example-a-b-c
+:END:
 
 | A | B | C | (A âˆ§ B) âˆ¨ Â¬C |
 |---+---+---+--------------|
@@ -105,6 +129,9 @@ Truth Table:
 | F | F | F | T            |
 
 ** Example: A â‡’ (B âˆ¨ Â¬C)
+:PROPERTIES:
+:CUSTOM_ID: example-a-b-c-2
+:END:
 
 | A | B | C | A â‡’ (B âˆ¨ Â¬C) |
 |---+---+---+--------------|
@@ -118,6 +145,9 @@ Truth Table:
 | F | F | F | T            |
 
 ** Example: (A â‡” B) âˆ§ C
+:PROPERTIES:
+:CUSTOM_ID: example-a-b-c-3
+:END:
 
 Truth Table:
 
index d7dc1d0..4c24df2 100644 (file)
-<!doctype html>
-<html lang="en">
+<?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>
-<title>juhend</title>
-<!-- 2018-04-20 Fri 11:08 -->
-<meta charset="utf-8">
-<meta name="viewport" content="width=device-width, initial-scale=1">
-<meta name="generator" content="Org-mode">
-<meta name="author" content="Svjatoslav Agejenko">
-
-<link  href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
-<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js"></script>
+<!-- 2026-08-22 la 19:00 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>&lrm;</title>
+<meta name="author" content="Svjatoslav Agejenko" />
+<meta name="generator" content="Org Mode" />
 <style type="text/css">
-/* org mode styles on top of twbs */
-
-html {
+  #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;
-    min-height: 100%;
-}
-
-body {
-    font-size: 18px;
-    margin-bottom: 105px;
-}
-
-footer {
+    overflow: auto;
+  }
+  pre.src:before {
+    display: none;
     position: absolute;
-    bottom: 0;
+    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%;
-    height: 101px;
-    background-color: #f5f5f5;
-}
-
-footer > div {
+  }
+  .equation {
+    vertical-align: middle;
+  }
+  .equation-label {
+    display: table-cell;
+    text-align: right;
+    vertical-align: middle;
+  }
+  .inlinetask {
     padding: 10px;
-}
-
-footer p {
-    margin: 0 0 5px;
-    text-align: center;
-    font-size: 16px;
-}
-
-#table-of-contents {
-    margin-top: 20px;
-    margin-bottom: 20px;
-}
-
-blockquote p {
-    font-size: 18px;
-}
-
-pre {
-    font-size: 16px;
-}
-
-.footpara {
-    display: inline-block;
-}
-
-figcaption {
-  font-size: 16px;
-  color: #666;
-  font-style: italic;
-  padding-bottom: 15px;
-}
-
-/* from twbs docs */
-
-.bs-docs-sidebar.affix {
-    position: static;
-}
-@media (min-width: 768px) {
-    .bs-docs-sidebar {
-        padding-left: 20px;
-    }
-}
-
-/* All levels of nav */
-.bs-docs-sidebar .nav > li > a {
-    display: block;
-    padding: 4px 20px;
-    font-size: 14px;
-    font-weight: 500;
-    color: #999;
-}
-.bs-docs-sidebar .nav > li > a:hover,
-.bs-docs-sidebar .nav > li > a:focus {
-    padding-left: 19px;
-    color: #A1283B;
-    text-decoration: none;
-    background-color: transparent;
-    border-left: 1px solid #A1283B;
-}
-.bs-docs-sidebar .nav > .active > a,
-.bs-docs-sidebar .nav > .active:hover > a,
-.bs-docs-sidebar .nav > .active:focus > a {
-    padding-left: 18px;
-    font-weight: bold;
-    color: #A1283B;
-    background-color: transparent;
-    border-left: 2px solid #A1283B;
-}
-
-/* Nav: second level (shown on .active) */
-.bs-docs-sidebar .nav .nav {
-    display: none; /* Hide by default, but at >768px, show it */
-    padding-bottom: 10px;
-}
-.bs-docs-sidebar .nav .nav > li > a {
-    padding-top: 1px;
-    padding-bottom: 1px;
-    padding-left: 30px;
-    font-size: 12px;
-    font-weight: normal;
-}
-.bs-docs-sidebar .nav .nav > li > a:hover,
-.bs-docs-sidebar .nav .nav > li > a:focus {
-    padding-left: 29px;
-}
-.bs-docs-sidebar .nav .nav > .active > a,
-.bs-docs-sidebar .nav .nav > .active:hover > a,
-.bs-docs-sidebar .nav .nav > .active:focus > a {
-    padding-left: 28px;
-    font-weight: 500;
-}
-
-/* Nav: third level (shown on .active) */
-.bs-docs-sidebar .nav .nav .nav {
-    padding-bottom: 10px;
-}
-.bs-docs-sidebar .nav .nav .nav > li > a {
-    padding-top: 1px;
-    padding-bottom: 1px;
-    padding-left: 40px;
-    font-size: 12px;
-    font-weight: normal;
-}
-.bs-docs-sidebar .nav .nav .nav > li > a:hover,
-.bs-docs-sidebar .nav .nav .nav > li > a:focus {
-    padding-left: 39px;
-}
-.bs-docs-sidebar .nav .nav .nav > .active > a,
-.bs-docs-sidebar .nav .nav .nav > .active:hover > a,
-.bs-docs-sidebar .nav .nav .nav > .active:focus > a {
-    padding-left: 38px;
-    font-weight: 500;
-}
-
-/* Show and affix the side nav when space allows it */
-@media (min-width: 992px) {
-    .bs-docs-sidebar .nav > .active > ul {
-        display: block;
-    }
-    /* Widen the fixed sidebar */
-    .bs-docs-sidebar.affix,
-    .bs-docs-sidebar.affix-bottom {
-        width: 213px;
-    }
-    .bs-docs-sidebar.affix {
-        position: fixed; /* Undo the static from mobile first approach */
-        top: 20px;
-    }
-    .bs-docs-sidebar.affix-bottom {
-        position: absolute; /* Undo the static from mobile first approach */
-    }
-    .bs-docs-sidebar.affix .bs-docs-sidenav,.bs-docs-sidebar.affix-bottom .bs-docs-sidenav {
-        margin-top: 0;
-        margin-bottom: 0
-    }
-}
-@media (min-width: 1200px) {
-    /* Widen the fixed sidebar again */
-    .bs-docs-sidebar.affix-bottom,
-    .bs-docs-sidebar.affix {
-        width: 263px;
-    }
-}
+    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>
-<script type="text/javascript">
-$(function() {
-    'use strict';
-
-    $('.bs-docs-sidebar li').first().addClass('active');
-
-    $(document.body).scrollspy({target: '.bs-docs-sidebar'});
-
-    $('.bs-docs-sidebar').affix();
-});
-</script>
+<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="container">
-<div class="row"><div class="col-md-9"><h1 class="title">juhend</h1>
+<div id="content" class="content">
+<div id="table-of-contents" role="doc-toc">
+<h2>Table of Contents</h2>
+<div id="text-table-of-contents" role="doc-toc">
+<ul>
+<li><a href="#kasutajaliides">1. Kasutajaliides</a>
+<ul>
+<li><a href="#nuppude-funktsioonid-peamens">1.1. Nuppude funktsioonid peamenüüs:</a></li>
+<li><a href="#nuppude-funktsioonid-aja-muutmis-mens">1.2. Nuppude funktsioonid aja muutmis menüüs:</a></li>
+</ul>
+</li>
+<li><a href="#faili-aastaap-formaat-aastaplaan">2. Faili AASTA.AP formaat: (aastaplaan)</a></li>
+<li><a href="#failide-pp-formaat-pevaplaanid">3. Failide *.PP formaat: (päevaplaanid)</a></li>
+<li><a href="#faili-synctxt-formaat">4. Faili SYNC.TXT formaat:</a></li>
+</ul>
+</div>
+</div>
 <p>
 Kooli Kell programmi kasutusjuhend
 </p>
 
 <ul class="org-ul">
-<li>2002.10
-</li>
-<li>Svjatoslav Agejenko
-</li>
+<li>2002.10</li>
+<li>Svjatoslav Agejenko</li>
 </ul>
-
-
-<div id="outline-container-sec-1" class="outline-2">
-<h2 id="sec-1"><span class="section-number-2">1</span> Kasutajaliides</h2>
-<div class="outline-text-2" id="text-1">
+<div id="outline-container-kasutajaliides" class="outline-2">
+<h2 id="kasutajaliides"><span class="section-number-2">1.</span> Kasutajaliides</h2>
+<div class="outline-text-2" id="text-kasutajaliides">
 <p>
 Programm Kooli Kell on mõldud kella laskmiseks koolis, tundi sisse ja
 välja.  Samuti juhib programm arvuti küljes olevat liidest,
@@ -224,8 +249,8 @@ nummerdatud nuppu paigutusega:
 </p>
 
 <p class="verse">
-&lt;1&gt;   &lt;2&gt;<br >
-&#xa0;&#xa0;&#xa0;&lt;3&gt;<br >
+&lt;1&gt;   &lt;2&gt;<br />
+&#xa0;&#xa0;&#xa0;&lt;3&gt;<br />
 </p>
 
 <p>
@@ -235,46 +260,34 @@ tavalisi nupuvajutusi ja topeltklõpse. Eesmärgiga suurendada
 funktsionaalsust väheste nuppudega.
 </p>
 </div>
-
-<div id="outline-container-sec-1-1" class="outline-3">
-<h3 id="sec-1-1"><span class="section-number-3">1.1</span> Nuppude funktsioonid peamenüüs:</h3>
-<div class="outline-text-3" id="text-1-1">
+<div id="outline-container-nuppude-funktsioonid-peamens" class="outline-3">
+<h3 id="nuppude-funktsioonid-peamens"><span class="section-number-3">1.1.</span> Nuppude funktsioonid peamenüüs:</h3>
+<div class="outline-text-3" id="text-nuppude-funktsioonid-peamens">
 <dl class="org-dl">
-<dt> &lt;1&gt; klõps </dt><dd>laseb kella tundi sisse
-</dd>
-<dt> &lt;1&gt; topeltklõps </dt><dd>laseb kella tunnist välja
-</dd>
-
-<dt> &lt;2&gt; klõps </dt><dd>läheb aja muutmis menüüsse
-</dd>
-<dt> &lt;3&gt; topeltklõps </dt><dd>hakkab tööle uuendatud graafikuga, vajalik pвast
-sisendfailide redigeerimist.
-</dd>
-
-<dt> &lt;3&gt; klõps </dt><dd>ümardab süsteemse aja täistunnini, vajalik aja
-sünkroniseerimiseks.
-</dd>
-<dt> &lt;3&gt; topeltklõps </dt><dd>laeb süsteemse: aasta, kuu, päeva, tunnid,
-minutid failist "sync.txt"
-</dd>
+<dt>&lt;1&gt; klõps</dt><dd>laseb kella tundi sisse</dd>
+<dt>&lt;1&gt; topeltklõps</dt><dd>laseb kella tunnist välja</dd>
+
+<dt>&lt;2&gt; klõps</dt><dd>läheb aja muutmis menüüsse</dd>
+<dt>&lt;3&gt; topeltklõps</dt><dd>hakkab tööle uuendatud graafikuga, vajalik pвast
+sisendfailide redigeerimist.</dd>
+
+<dt>&lt;3&gt; klõps</dt><dd>ümardab süsteemse aja täistunnini, vajalik aja
+sünkroniseerimiseks.</dd>
+<dt>&lt;3&gt; topeltklõps</dt><dd>laeb süsteemse: aasta, kuu, päeva, tunnid,
+minutid failist "sync.txt"</dd>
 </dl>
 </div>
 </div>
-
-<div id="outline-container-sec-1-2" class="outline-3">
-<h3 id="sec-1-2"><span class="section-number-3">1.2</span> Nuppude funktsioonid aja muutmis menüüs:</h3>
-<div class="outline-text-3" id="text-1-2">
+<div id="outline-container-nuppude-funktsioonid-aja-muutmis-mens" class="outline-3">
+<h3 id="nuppude-funktsioonid-aja-muutmis-mens"><span class="section-number-3">1.2.</span> Nuppude funktsioonid aja muutmis menüüs:</h3>
+<div class="outline-text-3" id="text-nuppude-funktsioonid-aja-muutmis-mens">
 <dl class="org-dl">
-<dt> &lt;1&gt; klõps </dt><dd>vähendab süsteemsed tunnid/minutid 1. võrra
-</dd>
+<dt>&lt;1&gt; klõps</dt><dd>vähendab süsteemsed tunnid/minutid 1. võrra</dd>
 
-<dt> &lt;2&gt; klõps </dt><dd>suurendab süsteemsed tunnid/minutid 1. võrra
-</dd>
+<dt>&lt;2&gt; klõps</dt><dd>suurendab süsteemsed tunnid/minutid 1. võrra</dd>
 
-<dt> &lt;3&gt; klõps </dt><dd>valib näitamiseks ja redigeerimiseks tunnid või minutid.
-</dd>
-<dt> &lt;3&gt; topeltklõps </dt><dd>läheb tagasi peamenüüsse.
-</dd>
+<dt>&lt;3&gt; klõps</dt><dd>valib näitamiseks ja redigeerimiseks tunnid või minutid.</dd>
+<dt>&lt;3&gt; topeltklõps</dt><dd>läheb tagasi peamenüüsse.</dd>
 </dl>
 
 <p>
@@ -284,15 +297,14 @@ minutid vilgub, mitte ei põle nagu peamenüüs.
 </div>
 </div>
 </div>
-
-
-<div id="outline-container-sec-2" class="outline-2">
-<h2 id="sec-2"><span class="section-number-2">2</span> Faili AASTA.AP formaat: (aastaplaan)</h2>
-<div class="outline-text-2" id="text-2">
+<div id="outline-container-faili-aastaap-formaat-aastaplaan" class="outline-2">
+<h2 id="faili-aastaap-formaat-aastaplaan"><span class="section-number-2">2.</span> Faili AASTA.AP formaat: (aastaplaan)</h2>
+<div class="outline-text-2" id="text-faili-aastaap-formaat-aastaplaan">
 <pre class="example">
 v       &lt;kuu&gt;-&lt;päev&gt;     &lt;kuu&gt;-&lt;päev&gt;     &lt;päevaplaan&gt;
 </pre>
 
+
 <p>
 Sõnast aja vahemik. Paneb paika päevaplaani antud
 ajavahemikus. Esimene daatum peab kindlasti olema väiksem kui
@@ -303,6 +315,7 @@ teine. St. kui on tõesti vaja:
 v       10-4    2-1     eri
 </pre>
 
+
 <p>
 tuleb kirjutada:
 </p>
@@ -312,6 +325,7 @@ v       10-4    12-31   eri
 v       1-1     2-1     eri
 </pre>
 
+
 <p>
 Päevaplaan kehtib vahemiku esimesest päevast kuni vahemiku viimase
 päevani.
@@ -322,6 +336,7 @@ päevani.
 n       &lt;kuu&gt;-&lt;päev&gt;     &lt;kuu&gt;-&lt;päev&gt;     &lt;nädalapäev&gt;      &lt;päevaplaan&gt;
 </pre>
 
+
 <p>
 Sõnast nädalapäv. sama mis "v" kuid: paneb paika päevaplaani antud
 ajavahemikus, antud nädalapäeval. Nädalapäeva kirjeldatakse numbriga.
@@ -333,6 +348,7 @@ nädala esimene päev on esmaspäev, talle vastab number 1.
 e       &lt;kuu&gt;-&lt;päev&gt; &lt;päevaplaan&gt;
 </pre>
 
+
 <p>
 Sõnast eriline. Paneb paika antud kuupävale antud pävaplaani. Sobib
 hästi erakorraliste lüendatud või muul moel muudetud päevaplaanide
@@ -346,52 +362,49 @@ peale viimane.
 </p>
 </div>
 </div>
-
-
-
-<div id="outline-container-sec-3" class="outline-2">
-<h2 id="sec-3"><span class="section-number-2">3</span> Failide *.PP formaat: (päevaplaanid)</h2>
-<div class="outline-text-2" id="text-3">
+<div id="outline-container-failide-pp-formaat-pevaplaanid" class="outline-2">
+<h2 id="failide-pp-formaat-pevaplaanid"><span class="section-number-2">3.</span> Failide *.PP formaat: (päevaplaanid)</h2>
+<div class="outline-text-2" id="text-failide-pp-formaat-pevaplaanid">
 <pre class="example">
 # &lt;tund&gt;:&lt;minut&gt;  &lt;kell&gt;
 </pre>
 
+
 <p>
 Laseb antud ajal antud kella. Võimalikud kella helinad on:
 </p>
 
-<table class="table table-striped table-bordered table-hover table-condensed">
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
 
 
 <colgroup>
-<col  class="left">
+<col  class="org-left" />
 
-<col  class="left">
+<col  class="org-left" />
 </colgroup>
 <thead>
 <tr>
-<th scope="col" class="text-left">kella kood</th>
-<th scope="col" class="text-left">vastav helin</th>
+<th scope="col" class="org-left">kella kood</th>
+<th scope="col" class="org-left">vastav helin</th>
 </tr>
 </thead>
 <tbody>
 <tr>
-<td class="text-left">sis</td>
-<td class="text-left">kell tundi sisse</td>
+<td class="org-left">sis</td>
+<td class="org-left">kell tundi sisse</td>
 </tr>
 
 <tr>
-<td class="text-left">val</td>
-<td class="text-left">kell tunnist välja</td>
+<td class="org-left">val</td>
+<td class="org-left">kell tunnist välja</td>
 </tr>
 </tbody>
 </table>
 </div>
 </div>
-
-<div id="outline-container-sec-4" class="outline-2">
-<h2 id="sec-4"><span class="section-number-2">4</span> Faili SYNC.TXT formaat:</h2>
-<div class="outline-text-2" id="text-4">
+<div id="outline-container-faili-synctxt-formaat" class="outline-2">
+<h2 id="faili-synctxt-formaat"><span class="section-number-2">4.</span> Faili SYNC.TXT formaat:</h2>
+<div class="outline-text-2" id="text-faili-synctxt-formaat">
 <p>
 faili esimesel kahel real peab olema järgnev:
 </p>
@@ -401,73 +414,58 @@ KK-PP-AAAA
 TT:MM
 </pre>
 
+
 <p>
 kus:
 </p>
-<table class="table table-striped table-bordered table-hover table-condensed">
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
 
 
 <colgroup>
-<col  class="left">
+<col  class="org-left" />
 
-<col  class="left">
+<col  class="org-left" />
 </colgroup>
 <thead>
 <tr>
-<th scope="col" class="text-left">kood</th>
-<th scope="col" class="text-left">tähendus</th>
+<th scope="col" class="org-left">kood</th>
+<th scope="col" class="org-left">tähendus</th>
 </tr>
 </thead>
 <tbody>
 <tr>
-<td class="text-left">KK</td>
-<td class="text-left">kuu</td>
+<td class="org-left">KK</td>
+<td class="org-left">kuu</td>
 </tr>
 
 <tr>
-<td class="text-left">PP</td>
-<td class="text-left">päev</td>
+<td class="org-left">PP</td>
+<td class="org-left">päev</td>
 </tr>
 
 <tr>
-<td class="text-left">AAAA</td>
-<td class="text-left">aasta</td>
+<td class="org-left">AAAA</td>
+<td class="org-left">aasta</td>
 </tr>
 
 <tr>
-<td class="text-left">TT</td>
-<td class="text-left">tunnid</td>
+<td class="org-left">TT</td>
+<td class="org-left">tunnid</td>
 </tr>
 
 <tr>
-<td class="text-left">MM</td>
-<td class="text-left">minutid</td>
+<td class="org-left">MM</td>
+<td class="org-left">minutid</td>
 </tr>
 </tbody>
 </table>
 </div>
 </div>
-</div><div class="col-md-3"><nav id="table-of-contents">
-<div id="text-table-of-contents" class="bs-docs-sidebar">
-<ul class="nav">
-<li><a href="#sec-1">1. Kasutajaliides</a>
-<ul class="nav">
-<li><a href="#sec-1-1">1.1. Nuppude funktsioonid peamenüüs:</a></li>
-<li><a href="#sec-1-2">1.2. Nuppude funktsioonid aja muutmis menüüs:</a></li>
-</ul>
-</li>
-<li><a href="#sec-2">2. Faili AASTA.AP formaat: (aastaplaan)</a></li>
-<li><a href="#sec-3">3. Failide *.PP formaat: (päevaplaanid)</a></li>
-<li><a href="#sec-4">4. Faili SYNC.TXT formaat:</a></li>
-</ul>
 </div>
-</nav>
-</div></div></div>
-<footer id="postamble" class="">
-<div><p class="author">Author: Svjatoslav Agejenko</p>
-<p class="date">Created: 2018-04-20 Fri 11:08</p>
-<p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 25.1.1 (<a href="http://orgmode.org">Org-mode</a> 8.2.10)</p>
+<div id="postamble" class="status">
+<p class="author">Author: Svjatoslav Agejenko</p>
+<p class="date">Created: 2026-08-22 la 19:00</p>
+<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
 </div>
-</footer>
 </body>
 </html>
index b153ade..4fa68d3 100644 (file)
@@ -5,6 +5,9 @@ Kooli Kell programmi kasutusjuhend
 
 
 * Kasutajaliides
+:PROPERTIES:
+:CUSTOM_ID: kasutajaliides
+:END:
 Programm Kooli Kell on mõldud kella laskmiseks koolis, tundi sisse ja
 välja.  Samuti juhib programm arvuti küljes olevat liidest,
 kahekohaliste numbrite näitamiseks (minutid / tunnid), 3 klahvilist
@@ -29,6 +32,9 @@ tavalisi nupuvajutusi ja topeltklõpse. Eesmärgiga suurendada
 funktsionaalsust väheste nuppudega.
 
 ** Nuppude funktsioonid peamenüüs:
+:PROPERTIES:
+:CUSTOM_ID: nuppude-funktsioonid-peamens
+:END:
 
 + <1> klõps :: laseb kella tundi sisse
 + <1> topeltklõps :: laseb kella tunnist välja
@@ -43,6 +49,9 @@ funktsionaalsust väheste nuppudega.
      minutid failist "sync.txt"
 
 ** Nuppude funktsioonid aja muutmis menüüs:
+:PROPERTIES:
+:CUSTOM_ID: nuppude-funktsioonid-aja-muutmis-mens
+:END:
 
 + <1> klõps :: vähendab süsteemsed tunnid/minutid 1. võrra
 
@@ -55,6 +64,9 @@ Aja muutmis menüüd tunneb Ã¤ra selle järgi et indikaator tunnid või
 minutid vilgub, mitte ei põle nagu peamenüüs.
 
 * Faili AASTA.AP formaat: (aastaplaan)
+:PROPERTIES:
+:CUSTOM_ID: faili-aastaap-formaat-aastaplaan
+:END:
 : v       <kuu>-<päev>     <kuu>-<päev>     <päevaplaan>
 
 Sõnast aja vahemik. Paneb paika päevaplaani antud
@@ -90,6 +102,9 @@ Kui teatud päeva kohta ei käinud Ã¼htegi kirjet siis toimib vaikimisi
 peale viimane.
 
 * Failide *.PP formaat: (päevaplaanid)
+:PROPERTIES:
+:CUSTOM_ID: failide-pp-formaat-pevaplaanid
+:END:
 : # <tund>:<minut>  <kell>
 
 Laseb antud ajal antud kella. Võimalikud kella helinad on:
@@ -100,6 +115,9 @@ Laseb antud ajal antud kella. Võimalikud kella helinad on:
 | val        | kell tunnist välja |
 
 * Faili SYNC.TXT formaat:
+:PROPERTIES:
+:CUSTOM_ID: faili-synctxt-formaat
+:END:
 faili esimesel kahel real peab olema järgnev:
 
 : KK-PP-AAAA
index 19dd2dc..7cc898d 100644 (file)
@@ -1,4 +1,7 @@
 * Kooli Kell 3 programmi kasutusjuhend\r
+:PROPERTIES:\r
+:CUSTOM_ID: kooli-kell-3-programmi-kasutusjuhend\r
+:END:\r
 - 2003.09 :: Esimene versioon.\r
 - 2025 :: Parendatud juhendi sõnastus.\r
 \r
@@ -11,6 +14,9 @@ ebatäielik. Autor ei võta endale vastutust antud süsteemi kasutamisest
 tekkinud otsese või kaudse kahju puhul!\r
 \r
 * Ãœldinfo\r
+:PROPERTIES:\r
+:CUSTOM_ID: ldinfo\r
+:END:\r
 \r
 Programm Kooli Kell on mõeldud kella laskmiseks koolis, tundi sisse ja\r
 välja.\r
@@ -42,6 +48,9 @@ vajutada erinevaid klahve klaviatuuril.  K2ivitudes kuvab programm
 klahvide kirjeldused ekraanile.\r
 \r
 * faili AASTA.AP formaat\r
+:PROPERTIES:\r
+:CUSTOM_ID: faili-aastaap-formaat\r
+:END:\r
 \r
 Lõpp 'AP' tuleneb sõnadest Aasta plaan.\r
 \r
@@ -75,6 +84,9 @@ Kui teatud päeva kohta ei käinud Ã¼htegi kirjet siis toimib vaikimisi "tuhi"
 päevaplaan. Kui teatud päeva kohta käis mitu kirjet siis jääb peale viimane.\r
 \r
 * failide *.PP formaat\r
+:PROPERTIES:\r
+:CUSTOM_ID: failide-pp-formaat\r
+:END:\r
 \r
 Lõpp 'PP' tuleneb sõnadest Päeva Plaan.\r
 \r
@@ -86,6 +98,9 @@ Laseb antud ajal antud kella. Võimalikud kella helinad on:
 - val :: -kell tunnist välja\r
 \r
 * Raudvara nõuded\r
+:PROPERTIES:\r
+:CUSTOM_ID: raudvara-nuded\r
+:END:\r
 \r
 - 286 protsessoriga PC tüüpi arvuti. :: Peaks töötama ka 8086 protsessoril aga pole testinud.\r
 \r
@@ -101,12 +116,18 @@ Laseb antud ajal antud kella. Võimalikud kella helinad on:
 - Klaviatuur.\r
 \r
 * Tarkvara nõuded\r
+:PROPERTIES:\r
+:CUSTOM_ID: tarkvara-nuded\r
+:END:\r
 \r
 - DOS 6.22 :: Võib ka varasem, kuid pole testinud.\r
 - QB 4.5 :: Piisab 'QB.EXE' failist. Peaks t88tama ka MS QBasic-us.\r
 - EDIT.EXE :: DOSi käsurealt käivituv teksti redaktor.\r
 \r
 * Nõuded inimesele\r
+:PROPERTIES:\r
+:CUSTOM_ID: nuded-inimesele\r
+:END:\r
 \r
 Süsteemi kasutamiseks hädavajalik antud juhendist aru saamine.\r
 Süsteemi paigaldamine nõuab elektriku oskusi. Programmi kasutamiseks\r
index 27a3288..02011a6 100644 (file)
@@ -7,9 +7,12 @@
 #+OPTIONS: H:20 num:20\r
 #+OPTIONS: author:nil\r
 \r
-[[file:../index.org][Back to BASIC applications collection]]\r
+[[file:../../index.org][Back to BASIC applications collection]]\r
 \r
 * Overview\r
+:PROPERTIES:\r
+:CUSTOM_ID: overview\r
+:END:\r
 \r
 QBasic, a popular programming language in the DOS era, lacks native\r
 mouse support. This limitation can be a hurdle for developers looking\r
@@ -17,6 +20,9 @@ to create interactive applications. To bridge this gap, I developed a
 workaround that allows QBasic to use mouse input.\r
 \r
 * High-level idea\r
+:PROPERTIES:\r
+:CUSTOM_ID: high-level-idea\r
+:END:\r
 \r
 Workaround to access mouse involves a Terminate and Stay Resident\r
 (TSR) program written in x86 assembly. This TSR program must be\r
@@ -42,6 +48,9 @@ continuously reads mouse data from this shared memory location, while
 TSR keeps updating it with latest mouse state simultaneously.\r
 \r
 * Terminate and Stay Resident module\r
+:PROPERTIES:\r
+:CUSTOM_ID: terminate-and-stay-resident-module\r
+:END:\r
 \r
 A DOS TSR program that hooks into the system's interrupt mechanism to\r
 regularly read mouse input and store it in a dedicated memory\r
@@ -74,6 +83,9 @@ program.
   meanwhile.\r
 \r
 * QBasic demonstration program\r
+:PROPERTIES:\r
+:CUSTOM_ID: qbasic-demonstration-program\r
+:END:\r
 \r
 A QBasic program that reads mouse data from the memory location\r
 populated by the TSR and demonstrates mouse movement and button\r
index 664f2c2..bc3472c 100755 (executable)
@@ -7,9 +7,12 @@
 #+OPTIONS: H:20 num:20\r
 #+OPTIONS: author:nil\r
 \r
-[[file:../index.org][Back to BASIC applications collection]]\r
+[[file:../../index.org][Back to BASIC applications collection]]\r
 \r
 * msg2xi: Text to Sound Encoder\r
+:PROPERTIES:\r
+:CUSTOM_ID: msg2xi-text-to-sound-encoder\r
+:END:\r
 \r
 *msg2xi* is a utility designed to encode arbitrary text messages into an\r
 8-bit sound file. This program allows users to convert digital data\r
@@ -29,6 +32,9 @@ facilitating synchronization during decoding.
 Download source code: [[file:msg2xi.bas][Source code]]\r
 \r
 * xi2msg: Sound to Text Decoder\r
+:PROPERTIES:\r
+:CUSTOM_ID: xi2msg-sound-to-text-decoder\r
+:END:\r
 \r
 The *xi2msg* utility is designed to decode digital information from an\r
 audio file, specifically an 8-bit sound file. This program is part of\r
@@ -66,6 +72,9 @@ transmitted over telephone lines.
 Download source code: [[file:xi2msg.bas][Source code]]\r
 \r
 * aver\r
+:PROPERTIES:\r
+:CUSTOM_ID: aver\r
+:END:\r
 \r
 The *aver.bas* utility is designed to reduce noise in digitized audio\r
 files by smoothing out noise peaks, which is particularly beneficial\r
index e5cb843..4e58eff 100755 (executable)
@@ -7,9 +7,12 @@
 #+OPTIONS: H:20 num:20\r
 #+OPTIONS: author:nil\r
 \r
-[[file:../index.org][Back to BASIC applications collection]]\r
+[[file:../../index.org][Back to BASIC applications collection]]\r
 \r
 * Overview\r
+:PROPERTIES:\r
+:CUSTOM_ID: overview\r
+:END:\r
 \r
 This is weird networking solution. It allows to send data using\r
 parallel LPT port serially(!) by bit-banging between two connected\r
@@ -35,8 +38,14 @@ algorithm, custom, comparatively simple, cheap and long cable can be
 built to connect 2 computers in a DIY network setup.\r
 \r
 * LPT Communication Driver\r
+:PROPERTIES:\r
+:CUSTOM_ID: lpt-communication-driver\r
+:END:\r
 \r
 ** Overview\r
+:PROPERTIES:\r
+:CUSTOM_ID: overview-2\r
+:END:\r
 \r
 The LPT Communication Driver is a Terminate and Stay Resident (TSR)\r
 driver designed to facilitate communication between computers using\r
@@ -69,6 +78,9 @@ Download:
 - Compiled binary: [[file:lptdrv.com][lptdrv.com]]\r
 \r
 ** Data transmission implementation details\r
+:PROPERTIES:\r
+:CUSTOM_ID: data-transmission-implementation-details\r
+:END:\r
 \r
 When there is incoming data transmission, the TSR driver detects it\r
 during its periodic execution in the IRQ 0 (timer) handler, which runs\r
@@ -131,6 +143,9 @@ buffer is emptied after each retrieval. If no data is available, AX=0
 is returned.\r
 \r
 ** Driver API\r
+:PROPERTIES:\r
+:CUSTOM_ID: driver-api\r
+:END:\r
 \r
 The driver uses INT 63h for its API, with functions selected via the\r
 AH register. It maintains two internal buffers:\r
@@ -157,13 +172,14 @@ To use the driver:
 API overview:\r
 | AH register | API function                                            |\r
 |-------------+---------------------------------------------------------|\r
-|           0 | [[id:a7aaa0e6-92de-467c-bcd4-b3d3216b15d4][Deactivate the driver]]                                   |\r
-|           1 | [[id:944be7b6-d3ba-486a-98bd-1a66cfffe6e5][Activate the driver]]                                     |\r
-|           2 | [[id:49350196-55b9-4d50-b672-b3c6d6d55e53][Retrieve downloaded data from the driver's input buffer]] |\r
-|           3 | [[id:53fd0c68-4057-4e9e-b908-87fab6eab5c8][Upload data to the driver's output buffer for transmission]]                                                        |\r
+|           0 | [[#deactivate-the-driver][Deactivate the driver]]                                   |\r
+|           1 | [[#activate-the-driver][Activate the driver]]                                     |\r
+|           2 | [[#retrieve-downloaded-data-from-the-drivers-input-buffer][Retrieve downloaded data from the driver's input buffer]] |\r
+|           3 | [[#upload-data-to-the-drivers-output-buffer-for-transmission][Upload data to the driver's output buffer for transmission]]                                                        |\r
 \r
 *** Deactivate the driver\r
 :PROPERTIES:\r
+:CUSTOM_ID: deactivate-the-driver\r
 :ID:       a7aaa0e6-92de-467c-bcd4-b3d3216b15d4\r
 :END:\r
 \r
@@ -179,6 +195,7 @@ transmission. The LPT port is reset (set to 0).
 \r
 *** Activate the driver\r
 :PROPERTIES:\r
+:CUSTOM_ID: activate-the-driver\r
 :ID:       944be7b6-d3ba-486a-98bd-1a66cfffe6e5\r
 :END:\r
 \r
@@ -196,6 +213,7 @@ incoming data. The LPT port is reset (set to 0) upon activation.
 \r
 *** Retrieve downloaded data from the driver's input buffer\r
 :PROPERTIES:\r
+:CUSTOM_ID: retrieve-downloaded-data-from-the-drivers-input-buffer\r
 :ID:       49350196-55b9-4d50-b672-b3c6d6d55e53\r
 :END:\r
 \r
@@ -223,6 +241,7 @@ to the caller's memory location and clears the buffer.
 \r
 *** Upload data to the driver's output buffer for transmission\r
 :PROPERTIES:\r
+:CUSTOM_ID: upload-data-to-the-drivers-output-buffer-for-transmission\r
 :ID:       53fd0c68-4057-4e9e-b908-87fab6eab5c8\r
 :END:\r
 \r
index a623149..fcb0908 100755 (executable)
@@ -80,6 +80,7 @@ rsync -avz --delete -e 'ssh -p 10006' ./ \
       --include="*.dat" \
       --include="*.webm" \
       --include="*.jpeg" \
+      --include="*.mp4" \
       --include="*.blend" \
       --include="*.com" \
       --include="*.asm" \
@@ -94,4 +95,4 @@ fi
 
 echo ""
 echo "Press ENTER to close this window."
-read
\ No newline at end of file
+read
index 8cd9cdb..25166fd 100644 (file)
--- a/index.org
+++ b/index.org
 
 
 * Overview
-This collection contains lots of applications:
-
-- [[id:ebafd8a3-54d4-4834-a03d-a942b535a82f][2D Graphics]]
-  - [[file:2D%20GFX/Animations/index.html][Animations]]
-  - [[id:38f8f88a-3f72-4c43-91c6-08d5c7aa54e6][Fractals]]
-  - [[id:97adc6df-353e-4800-b27a-4b2ae9d93b6b][Spiral series]]
-  - [[id:6e59af62-d7bf-41dc-a680-677000ef0e85][Algorithmic textures]]
-
-- [[id:63fd5d58-9bce-4c0a-99d4-ed2d025258f0][3D Graphics]]
-  - [[file:3D GFX/Space/index.html][Miscellaneous 3D demo applications collection]]
-  - [[file:3D GFX/Space/index.html][Space themed applications collection]]
-  - [[file:3D%20GFX/3D%20Synthezier/doc/index.html][3D synthezier - language and processor to generate complex 3D worlds]]
-
-- [[id:aa195f33-6d69-48ff-9af5-3f761a51dcb2][Games]]
-
-- [[id:aa195f33-6d69-48ff-9af5-3f761a51dcb2][Math]]
-  - [[file:Math/Plotting/index.html][Collection of mathematical plots]]
-  - [[file:Math/Simulation/index.html][Collection of math based simulations]]
-
-- [[id:3587240c-1d50-478d-b850-04ebc8dc63c7][Miscellaneous applications that are hard to categorize]]
+:PROPERTIES:
+:CUSTOM_ID: overview
+:END:
 
-- [[id:f80fb0ad-64b7-4360-9081-11358d2ef745][Networking]]
+This collection contains lots of applications that I wrote for
+learning and entertainment purposes, approximately around year 2000,
+using Microsoft DOS 6.22 mostly in Microsoft QBasic / QuickBasic.
 
-I wrote them at around year 2000, mostly in QBasic.
+If you don't want to use original DOS, one option is to run them by
+using [[https://www3.svjatoslav.eu/projects/crtbasic/][Java based BASIC emulator called CRT Basic]].
 
 * 2D GFX
 :PROPERTIES:
+:CUSTOM_ID: 2d-gfx
 :ID:       ebafd8a3-54d4-4834-a03d-a942b535a82f
 :END:
 ** Animations
+:PROPERTIES:
+:CUSTOM_ID: animations
+:ID:       2d693f09-bade-49af-827b-253614237629
+:END:
 
 Collection of various 2D animations. Good for demonstrating various
 algorithms and getting fun looking results quite easily.
@@ -71,6 +62,7 @@ algorithms and getting fun looking results quite easily.
 
 ** Fractals
 :PROPERTIES:
+:CUSTOM_ID: fractals
 :ID:       38f8f88a-3f72-4c43-91c6-08d5c7aa54e6
 :END:
 
@@ -82,6 +74,7 @@ algorithms and getting fun looking results quite easily.
 
 ** Spiral series
 :PROPERTIES:
+:CUSTOM_ID: spiral-series
 :ID:       97adc6df-353e-4800-b27a-4b2ae9d93b6b
 :END:
 
@@ -97,6 +90,7 @@ screen. Every iteration built upon previous result.
 
 ** Algorithmic textures
 :PROPERTIES:
+:CUSTOM_ID: algorithmic-textures
 :ID:       6e59af62-d7bf-41dc-a680-677000ef0e85
 :END:
 
@@ -107,7 +101,13 @@ screen. Every iteration built upon previous result.
 [[file:2D%20GFX/Textures/index.html][See entire texture collection]]
 
 ** Miscellaneous
+:PROPERTIES:
+:CUSTOM_ID: miscellaneous
+:END:
 *** Hello friend
+:PROPERTIES:
+:CUSTOM_ID: hello-friend
+:END:
 
 This QBasic program is a simple yet engaging demonstration of 2D
 graphics capabilities. It showcases various graphical techniques such
@@ -122,6 +122,9 @@ Download source code: [[file:2D%20GFX/Hello%20friend.bas][Hello friend.bas]]
 #+INCLUDE: "2D GFX/Hello friend.bas" src basic-qb45
 
 *** People
+:PROPERTIES:
+:CUSTOM_ID: people
+:END:
 
 This QBasic program is a slideshow presentation tool that includes
 animated transitions and effects.
@@ -138,6 +141,9 @@ animated transitions and effects.
 Download source code: [[file:2D%20GFX/People.bas][People.bas]]
 
 *** Stroboscope
+:PROPERTIES:
+:CUSTOM_ID: stroboscope
+:END:
 
 This QBasic program is an educational presentation on how to build a
 stroboscope. It uses graphical animations and text to illustrate the
@@ -156,6 +162,9 @@ diagrams.
 Download source code: [[file:2D%20GFX/Stroboscope.bas][Stroboscope.bas]]
 
 *** Truncated cone
+:PROPERTIES:
+:CUSTOM_ID: truncated-cone
+:END:
 
 This QBasic program is designed to draw a 3D representation of a
 truncated cone, which consists of three main parts: a top cylinder
@@ -173,10 +182,12 @@ Download source code: [[file:2D%20GFX/Truncated%20cone.bas][Truncated cone.bas]]
 
 * 3D GFX
 :PROPERTIES:
+:CUSTOM_ID: 3d-gfx
 :ID:       63fd5d58-9bce-4c0a-99d4-ed2d025258f0
 :END:
 ** Miscellaneous 3D demos
 :PROPERTIES:
+:CUSTOM_ID: miscellaneous-3d-demos
 :ID:       e4c643d1-edf9-4da9-bf6f-462535a5a7d9
 :END:
 
@@ -184,10 +195,11 @@ Download source code: [[file:2D%20GFX/Truncated%20cone.bas][Truncated cone.bas]]
 #+attr_latex: :width 1000px
 [[file:3D%20GFX/Miscellaneous/index.html][file:3D%20GFX/Miscellaneous/logo.png]]
 
-[[file:3D GFX/Space/index.html][See entire miscellaneous 3D demo applications collection]]
+[[file:3D GFX/Miscellaneous/index.html][See entire miscellaneous 3D demo applications collection]]
 
 ** Space related animations
 :PROPERTIES:
+:CUSTOM_ID: space-related-animations
 :ID:       32fb6839-1e9b-4d44-a47e-1875c727cc54
 :END:
 
@@ -198,6 +210,9 @@ Download source code: [[file:2D%20GFX/Truncated%20cone.bas][Truncated cone.bas]]
 [[file:3D GFX/Space/index.html][See entire space themed applications collection]]
 
 ** 3D Synthezier
+:PROPERTIES:
+:CUSTOM_ID: 3d-synthezier
+:END:
 
 Parses scene definition language and creates 3D world based on
 it. Result will be in a [[https://en.wikipedia.org/wiki/Wavefront_.obj_file][wavefront obj file]], witch can be then
@@ -213,6 +228,9 @@ See directory:
 [[file:3D%20GFX/3D%20Synthezier/doc/index.html][Read more]]
 
 ** Helicopter demo
+:PROPERTIES:
+:CUSTOM_ID: helicopter-demo
+:END:
 
 This QBasic program is a demonstration of real-time 3D graphics
 rendering. Also it shows 3D transformations, fractal terrain
@@ -236,6 +254,9 @@ moves across the terrain and picks up objects.
 [[https://www2.svjatoslav.eu/gitweb/?p=qbasicapps.git;a=tree;f=3D+GFX/Helicopter;hb=HEAD][Project files]]
 
 ** Swapping 3D engine
+:PROPERTIES:
+:CUSTOM_ID: swapping-3d-engine
+:END:
 
 This QBasic program is a 3D wireframe rendering engine designed to
 render potentially infinite 3D worlds. It achieves this by dynamically
@@ -259,6 +280,9 @@ into RAM, allowing for the potential rendering of very large worlds.
 Download source code: [[file:3D%20GFX/Swapping%203D%20engine/engine.bas][engine.bas]]
 
 ** 3D land
+:PROPERTIES:
+:CUSTOM_ID: 3d-land
+:END:
 
 This QBasic program creates a visually engaging 3D shaded landscape
 with perspective and distortion effects.
@@ -285,6 +309,9 @@ Download source code: [[file:3D%20GFX/3D%20land.bas][3D land.bas]]
 #+INCLUDE: "3D GFX/3D land.bas" src basic-qb45
 
 ** Anaglyph
+:PROPERTIES:
+:CUSTOM_ID: anaglyph
+:END:
 
 This QBasic program creates a real-time anaglyph projection featuring
 bouncing cubes. Cubes are created and placed within a 3D space. Each
@@ -310,6 +337,9 @@ in stereoscopy and 3D visualization.
 [[file:3D%20GFX/Anaglyph.bas][Anaglyph.bas]]
 
 ** Ray casting engine
+:PROPERTIES:
+:CUSTOM_ID: ray-casting-engine
+:END:
 
 This QBasic program is a real-time 3D rendering engine that uses a ray
 casting technique to create a dynamic 3D landscape. The landscape
@@ -340,10 +370,14 @@ Download source code: [[file:3D%20GFX/Ray%20casting%20engine.bas][Ray casting en
 
 * Games
 :PROPERTIES:
+:CUSTOM_ID: games
 :ID:       aa195f33-6d69-48ff-9af5-3f761a51dcb2
 :END:
 
 ** Pomppu Paavo
+:PROPERTIES:
+:CUSTOM_ID: pomppu-paavo
+:END:
 
 Player controls small character that has to collect coins and move
 between screens. Player has to avoid contact with evil hedgehogs.
@@ -360,6 +394,9 @@ between screens. Player has to avoid contact with evil hedgehogs.
 [[file:Games/Pomppu%20Paavo/Pomppu%20Paavo.bas][Source code]]
 
 ** Pomppu Paavo 2
+:PROPERTIES:
+:CUSTOM_ID: pomppu-paavo-2
+:END:
 
 Player controls small character that has to collect coins and move
 between screens. Player has to avoid contact with evil snails.
@@ -392,6 +429,9 @@ Source code organization:
 #+end_example
 
 ** Multiplayer game of worms
+:PROPERTIES:
+:CUSTOM_ID: multiplayer-game-of-worms
+:END:
 
 Game supports up to 5 players. Any amount of those players can be AI
 controlled. Game has multiple levels. After worms have eaten certain
@@ -414,6 +454,9 @@ Levels are stored in [[https://www2.svjatoslav.eu/gitweb/?p=qbasicapps.git;a=tre
 editor.
 
 ** Checkers
+:PROPERTIES:
+:CUSTOM_ID: checkers
+:END:
 
 This program is implementation of the game of Checkers, written in
 QBasic. It provides a mostly functional two-player experience on a
@@ -429,6 +472,9 @@ utilize when possible.
 [[file:Games/checkers.bas][file:Games/checkers%20-%20Screenshot%200.png]]
 
 ** Checkers 2
+:PROPERTIES:
+:CUSTOM_ID: checkers-2
+:END:
 
 This more advanced implementation of checkers. User can play checkers
 against the AI. AI does not have hard-coded patterns anymore. Instead
@@ -449,9 +495,13 @@ larder board size.
 
 * Math
 :PROPERTIES:
-:ID:       aa195f33-6d69-48ff-9af5-3f761a51dcb2
+:CUSTOM_ID: math
+:ID:       379ff96b-43f1-4ded-ae3b-3ac824188f0d
 :END:
 ** Game of life animation
+:PROPERTIES:
+:CUSTOM_ID: game-of-life-animation
+:END:
 
 This QBasic program creates a visually engaging 3D animation that
 combines elements of cellular automata with dynamic graphics. The
@@ -480,6 +530,9 @@ scene is rendered frame by frame.
 Download source code: [[file:Math/Game%20of%20life%20in%203D.bas][Source code]]
 
 ** Game of life studio
+:PROPERTIES:
+:CUSTOM_ID: game-of-life-studio
+:END:
 
 Game of life studio. One interacts with the Game of Life by creating
 an initial configuration and observing how it evolves. This program
@@ -493,6 +546,9 @@ configurations of the Game of Life.
 [[https://www2.svjatoslav.eu/gitweb/?p=qbasicapps.git;a=tree;f=Math/Game+of+life;hb=HEAD][Source code]]
 
 ** Math functions plot
+:PROPERTIES:
+:CUSTOM_ID: math-functions-plot
+:END:
 
 Collection of programs that produce 2D and 3D plots of mathematical
 functions.
@@ -504,6 +560,9 @@ functions.
 [[file:Math/Plotting/index.html][See entire collection of mathematical plots]]
 
 ** Simulations
+:PROPERTIES:
+:CUSTOM_ID: simulations
+:END:
 
 Collection of programs that implement simulations of various
 mathematical and physical effects.
@@ -515,6 +574,9 @@ mathematical and physical effects.
 [[file:Math/Simulation/index.html][See entire collection of simulations]]
 
 ** Truth table calculator
+:PROPERTIES:
+:CUSTOM_ID: truth-table-calculator
+:END:
 
 Program allows user to input logical equation. Thereafter program
 computes and displays all possible states for equation (aka. truth
@@ -527,6 +589,9 @@ table).
 [[file:Math/Truth%20table/index.html][Read more about truth table calculator]]
 
 ** Multiplication trainer
+:PROPERTIES:
+:CUSTOM_ID: multiplication-trainer
+:END:
 
 This QBasic program is an educational tool designed to help users
 practice and test their multiplication skills. It is particularly
@@ -550,6 +615,9 @@ assigns a grade based on the percentage of correct answers.
 [[file:Math/Multiplication%20trainer.bas][Source code]]
 
 ** Alternative sine calculator
+:PROPERTIES:
+:CUSTOM_ID: alternative-sine-calculator
+:END:
 
 Here simple and finite function was invented to compute sine
 values. Custom sine values are shown alongside standard built-in sine
@@ -562,6 +630,9 @@ function to compare results. 1 pixel vertical shift is intentional.
 [[file:Math/Multiplication%20trainer.bas][Source code]]
 
 ** Lottery analysis
+:PROPERTIES:
+:CUSTOM_ID: lottery-analysis
+:END:
 
 This QBasic program is designed to analyze historical lottery data,
 providing various graphical representations and statistical
@@ -606,10 +677,14 @@ Graphical Representations:
 
 * Misc
 :PROPERTIES:
+:CUSTOM_ID: misc
 :ID:       3587240c-1d50-478d-b850-04ebc8dc63c7
 :END:
 
 ** Mouse driver for QBasic
+:PROPERTIES:
+:CUSTOM_ID: mouse-driver-for-qbasic
+:END:
 
 QBasic, a popular programming language in the DOS era, lacks native
 mouse support. This limitation can be a hurdle for developers looking
@@ -624,6 +699,9 @@ written in x86 assembly and a QBasic demonstration program.
 [[file:Miscellaneous/Mouse%20driver/index.html][Read more about mouse driver for QBasic]]
 
 ** Alien font
+:PROPERTIES:
+:CUSTOM_ID: alien-font
+:END:
 
 This QBasic program is a creative attempt to generate and display an
 imaginary alien script. The program constructs characters by
@@ -637,6 +715,9 @@ abstract art.
 [[file:Miscellaneous/Alien%20font.bas][file:Miscellaneous/Alien%20font%20-%20Screenshot%200.png]]
 
 ** Custom palette
+:PROPERTIES:
+:CUSTOM_ID: custom-palette
+:END:
 
 This QBasic program generates a universally reusable color palette
 designed for a 256-color limit, which was a common constraint in older
@@ -668,6 +749,9 @@ The dithering process helps to mitigate the limitations of the
 [[file:Miscellaneous/Custom%20palette.bas][file:Miscellaneous/Custom%20palette%20-%20Screenshot%202.png]]
 
 ** Alarm 1
+:PROPERTIES:
+:CUSTOM_ID: alarm-1
+:END:
 
 This QBasic program simulates the sound of a security alarm siren. It
 creates an oscillating sound effect by varying the frequency of the
@@ -693,6 +777,9 @@ thresholds, controlled by conditional checks and loops.
 Download source code: [[file:Miscellaneous/Alarm%201.bas][Alarm 1.bas]]
 
 ** Alarm 2
+:PROPERTIES:
+:CUSTOM_ID: alarm-2
+:END:
 
 This QBasic program generates a security alarm sound effect by
 alternating between two distinct audio patterns. The first pattern
@@ -716,11 +803,17 @@ texture.
 Download source code: [[file:Miscellaneous/Alarm%202.bas][Alarm 2.bas]]
 
 ** 4D engine
+:PROPERTIES:
+:CUSTOM_ID: 4d-engine
+:END:
 
 Implementation of 4 dimensional (4D) engine. It's like 3D (X, Y, Z)
 but with additional extra dimension that I decided to call Q.
 
 *** Polygon -> Tetrahedron -> Pentatope
+:PROPERTIES:
+:CUSTOM_ID: polygon-tetrahedron-pentatope
+:END:
 
 - In 2D world you can have polygon. It takes 3 vertices (points) to
   define. It is the minimal object in 2D world to have surface.
@@ -733,6 +826,9 @@ but with additional extra dimension that I decided to call Q.
   hypervolume (aka. 4D volume).
 
 *** Planes or rotation in 3D world vs 4D world
+:PROPERTIES:
+:CUSTOM_ID: planes-or-rotation-in-3d-world-vs-4d-world
+:END:
 
 In 3D space, the planes of rotation correspond to rotations around the
 three principal axes, and they are as follows:
@@ -753,6 +849,9 @@ described by the combinations of two axes out of four. These are:
 - The zq-plane (novel plane)
 
 *** Representing higher-dimensional objects through lower-dimensional slices
+:PROPERTIES:
+:CUSTOM_ID: representing-higher-dimensional-objects-through-lower-dimensional-slices
+:END:
 
 The concept of representing higher-dimensional objects through
 lower-dimensional slices involves taking cross-sections along one
@@ -787,6 +886,9 @@ breaking them down into more manageable and comprehensible
 lower-dimensional pieces.
 
 *** Implementation
+:PROPERTIES:
+:CUSTOM_ID: implementation
+:END:
 
 Current 4D engine renders single pentatope. Each pentatope vertex is
 defined by 4 coordinates within 4D space:X, Y, Z, Q.
@@ -817,6 +919,9 @@ novel planes of 4D space.
 Download source code: [[file:Miscellaneous/4D%20engine.bas][4D engine.bas]]
 
 ** Windowing system
+:PROPERTIES:
+:CUSTOM_ID: windowing-system
+:END:
 
 This QBasic program implements a text mode windowing system, allowing
 users to create and manage multiple windows on the screen. Each window
@@ -842,6 +947,9 @@ of the active window, creating a dynamic visual effect.
 Download source code: [[file:Miscellaneous/Windowing%20system.bas][Windowing system.bas]]
 
 ** Password lock
+:PROPERTIES:
+:CUSTOM_ID: password-lock
+:END:
 
 This QBasic program simulates a retro-styled rocket control system
 interface with a password protection mechanism. The program is
@@ -879,9 +987,13 @@ Download source code: [[file:Miscellaneous/Password%20lock/passw.bas][passw.bas]
 
 * Networking
 :PROPERTIES:
+:CUSTOM_ID: networking
 :ID:       f80fb0ad-64b7-4360-9081-11358d2ef745
 :END:
 ** LPT port pin control
+:PROPERTIES:
+:CUSTOM_ID: lpt-port-pin-control
+:END:
 
 This QBasic program is designed to control the voltage on individual
 pins of an LPT (Line Print Terminal) port, commonly known as a
@@ -903,6 +1015,9 @@ The program uses bit manipulation to control individual pins.
 Download source code: [[file:Networking/LPT%20pin%20control.bas][LPT pin control.bas]]
 
 ** COM port text terminal
+:PROPERTIES:
+:CUSTOM_ID: com-port-text-terminal
+:END:
 
 [[https://en.wikipedia.org/wiki/Serial_port][The COM port, short for "Communication Port" was a serial port
 interface]] found on older personal computers. It was primarily used for
@@ -942,6 +1057,9 @@ How it Works:
 Download source code: [[file:Networking/COM%20port%20terminal.bas][COM port terminal.bas]]
 
 ** Parallel port to COM port text terminal
+:PROPERTIES:
+:CUSTOM_ID: parallel-port-to-com-port-text-terminal
+:END:
 
 This QBasic program demonstrates a clever method of transmitting data
 from a parallel (LPT) port to a serial (COM) port using a technique
@@ -966,12 +1084,18 @@ How It Works:
 Download source code: [[file:Networking/LPT%20to%20COM%20port%20data%20transfer.bas][LPT to COM port data transfer.bas]]
 
 ** LPT communication driver
+:PROPERTIES:
+:CUSTOM_ID: lpt-communication-driver
+:END:
 
 TSR driver that allows 2 computers to communicate over parallel port serially.
 
 [[file:Networking/LPT%20communication%20driver/index.html][Read more]]
 
 ** Data over analog audio CODEC
+:PROPERTIES:
+:CUSTOM_ID: data-over-analog-audio-codec
+:END:
 
 Utilities to encode digital data to sound file and back.
 
@@ -982,6 +1106,9 @@ Utilities to encode digital data to sound file and back.
 [[file:Networking/Digital%20data%20over%20analog%20audio/index.html][Read more]]
 
 ** Morse
+:PROPERTIES:
+:CUSTOM_ID: morse
+:END:
 
 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
@@ -1004,7 +1131,13 @@ represented by short beeps, and dashes by longer beeps.
 Download source code: [[file:Networking/Morse.bas][Morse.bas]]
 
 * Download
+:PROPERTIES:
+:CUSTOM_ID: download
+:END:
 ** Getting the source code
+:PROPERTIES:
+:CUSTOM_ID: getting-the-source-code
+:END:
 
 Programs author is Svjatoslav Agejenko
 - Homepage: https://svjatoslav.eu (See also [[https://www.svjatoslav.eu/projects/][other software projects]].)
@@ -1019,6 +1152,9 @@ Zero (CC0) license.*
   : git clone https://www3.svjatoslav.eu/git/qbasicapps.git
 
 ** Installation and Usage
+:PROPERTIES:
+:CUSTOM_ID: installation-and-usage
+:END:
 
 To run these programs, you can copy them onto computer or virtual
 machine that has Microsoft DOS and QBasic or QuickBasic installed.
@@ -1027,6 +1163,9 @@ Alternatively you can use [[https://www3.svjatoslav.eu/projects/crtbasic/][pure
 Basic]].
 
 * See also
+:PROPERTIES:
+:CUSTOM_ID: see-also
+:END:
 
 - Programs found in the March 1975 3rd printing of David Ahl's 101
   BASIC Computer Games, published by Digital Equipment Corp: