</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
[[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
#+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
#+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
[[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
#+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
#+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
#+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
#+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
[[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
#+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
#+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 :)
#+INCLUDE: "DNA.bas" src basic-qb45
* Matrix
+:PROPERTIES:
+:CUSTOM_ID: matrix
+:END:
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
[[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
[[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
[[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
[[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
[[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
</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
[[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
[[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.
[[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
[[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
</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
#+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
#+INCLUDE: "spiral, 2.bas" src basic-qb45
* Shaded spiral
+:PROPERTIES:
+:CUSTOM_ID: shaded-spiral
+:END:
#+attr_html: :class responsive-img
#+attr_latex: :width 800px
#+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
#+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
#+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
</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
#+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
#+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.
#+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
#+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.
</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
[[https://www.blender.org/][Blender]].
** Rectangular city
+:PROPERTIES:
+:CUSTOM_ID: rectangular-city
+:END:
#+attr_html: :class responsive-img
#+attr_latex: :width 1000px
#+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
#+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
[[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 |
|----------+----------------|
| QBasic | 4.5 |
** Directory layout
+:PROPERTIES:
+:CUSTOM_ID: directory-layout
+:END:
+ bin ::
+ 3dparse.bas :: 3D generator main executable
+ 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
</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.
[[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
[[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.
[[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.
[[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.
[[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
[[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.
[[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.
</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
[[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
[[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
[[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
* Purpose
:PROPERTIES:
+:CUSTOM_ID: purpose
:ID: 37c01b99-9f78-43c4-ad26-d43c8691db07
:END:
* Layout
:PROPERTIES:
+:CUSTOM_ID: layout
:ID: 635fd7db-6abd-4212-a9ce-f908b915ac09
:END:
* 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~,
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~,
* Tooling
:PROPERTIES:
+:CUSTOM_ID: tooling
:ID: 68d4e5b1-e827-4985-8316-7628d411f556
:END:
* Pitfalls
:PROPERTIES:
+:CUSTOM_ID: pitfalls
:ID: 1fb7b768-40aa-44d3-bd55-a0d71e2f9c74
:END:
</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
#+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
[[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
#+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
#+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]]
</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
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
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
#+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>
[[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
#+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>
[[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
[[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
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
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
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]]
#+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
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
| 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
| 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
| 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.
| 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
| 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 |
|---+---+---+--------------|
| F | F | F | T |
** Example: A ⇒ (B ∨ ¬C)
+:PROPERTIES:
+:CUSTOM_ID: example-a-b-c-2
+:END:
| A | B | C | A ⇒ (B ∨ ¬C) |
|---+---+---+--------------|
| F | F | F | T |
** Example: (A ⇔ B) ∧ C
+:PROPERTIES:
+:CUSTOM_ID: example-a-b-c-3
+:END:
Truth Table:
-<!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>‎</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,
</p>
<p class="verse">
-<1> <2><br >
-   <3><br >
+<1> <2><br />
+   <3><br />
</p>
<p>
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> <1> klõps </dt><dd>laseb kella tundi sisse
-</dd>
-<dt> <1> topeltklõps </dt><dd>laseb kella tunnist välja
-</dd>
-
-<dt> <2> klõps </dt><dd>läheb aja muutmis menüüsse
-</dd>
-<dt> <3> topeltklõps </dt><dd>hakkab tööle uuendatud graafikuga, vajalik pвast
-sisendfailide redigeerimist.
-</dd>
-
-<dt> <3> klõps </dt><dd>ümardab süsteemse aja täistunnini, vajalik aja
-sünkroniseerimiseks.
-</dd>
-<dt> <3> topeltklõps </dt><dd>laeb süsteemse: aasta, kuu, päeva, tunnid,
-minutid failist "sync.txt"
-</dd>
+<dt><1> klõps</dt><dd>laseb kella tundi sisse</dd>
+<dt><1> topeltklõps</dt><dd>laseb kella tunnist välja</dd>
+
+<dt><2> klõps</dt><dd>läheb aja muutmis menüüsse</dd>
+<dt><3> topeltklõps</dt><dd>hakkab tööle uuendatud graafikuga, vajalik pвast
+sisendfailide redigeerimist.</dd>
+
+<dt><3> klõps</dt><dd>ümardab süsteemse aja täistunnini, vajalik aja
+sünkroniseerimiseks.</dd>
+<dt><3> 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> <1> klõps </dt><dd>vähendab süsteemsed tunnid/minutid 1. võrra
-</dd>
+<dt><1> klõps</dt><dd>vähendab süsteemsed tunnid/minutid 1. võrra</dd>
-<dt> <2> klõps </dt><dd>suurendab süsteemsed tunnid/minutid 1. võrra
-</dd>
+<dt><2> klõps</dt><dd>suurendab süsteemsed tunnid/minutid 1. võrra</dd>
-<dt> <3> klõps </dt><dd>valib näitamiseks ja redigeerimiseks tunnid või minutid.
-</dd>
-<dt> <3> topeltklõps </dt><dd>läheb tagasi peamenüüsse.
-</dd>
+<dt><3> klõps</dt><dd>valib näitamiseks ja redigeerimiseks tunnid või minutid.</dd>
+<dt><3> topeltklõps</dt><dd>läheb tagasi peamenüüsse.</dd>
</dl>
<p>
</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 <kuu>-<päev> <kuu>-<päev> <päevaplaan>
</pre>
+
<p>
Sõnast aja vahemik. Paneb paika päevaplaani antud
ajavahemikus. Esimene daatum peab kindlasti olema väiksem kui
v 10-4 2-1 eri
</pre>
+
<p>
tuleb kirjutada:
</p>
v 1-1 2-1 eri
</pre>
+
<p>
Päevaplaan kehtib vahemiku esimesest päevast kuni vahemiku viimase
päevani.
n <kuu>-<päev> <kuu>-<päev> <nädalapäev> <päevaplaan>
</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.
e <kuu>-<päev> <päevaplaan>
</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
</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">
# <tund>:<minut> <kell>
</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>
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>
* 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
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
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
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
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:
| 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
* 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
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
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
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
- 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
- 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
#+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
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
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
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
#+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
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
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
#+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
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
- 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
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
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
\r
*** Activate the driver\r
:PROPERTIES:\r
+:CUSTOM_ID: activate-the-driver\r
:ID: 944be7b6-d3ba-486a-98bd-1a66cfffe6e5\r
:END:\r
\r
\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
\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
--include="*.dat" \
--include="*.webm" \
--include="*.jpeg" \
+ --include="*.mp4" \
--include="*.blend" \
--include="*.com" \
--include="*.asm" \
echo ""
echo "Press ENTER to close this window."
-read
\ No newline at end of file
+read
* 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.
** Fractals
:PROPERTIES:
+:CUSTOM_ID: fractals
:ID: 38f8f88a-3f72-4c43-91c6-08d5c7aa54e6
:END:
** Spiral series
:PROPERTIES:
+:CUSTOM_ID: spiral-series
:ID: 97adc6df-353e-4800-b27a-4b2ae9d93b6b
:END:
** Algorithmic textures
:PROPERTIES:
+:CUSTOM_ID: algorithmic-textures
:ID: 6e59af62-d7bf-41dc-a680-677000ef0e85
:END:
[[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
#+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.
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
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
* 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:
#+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:
[[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
[[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
[[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
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.
#+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
[[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
* 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.
[[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.
#+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
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
[[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
* 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
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
[[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.
[[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.
[[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
[[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
[[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
[[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
* 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
[[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
[[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
[[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
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
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.
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:
- 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
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.
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
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
* 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
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
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
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.
[[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
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]].)
: 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.
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: