Update installation documentation master
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 19 May 2024 13:08:19 +0000 (16:08 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 19 May 2024 13:08:19 +0000 (16:08 +0300)
.gitignore
index.html [deleted file]
index.org
tools/update web site

index 34bc2b4..810beee 100644 (file)
@@ -2,4 +2,5 @@
 /.idea/
 /VC.COM
 /VC.INI
-/QB45
\ No newline at end of file
+/QB45
+/index.html
\ No newline at end of file
diff --git a/index.html b/index.html
deleted file mode 100644 (file)
index 48d2074..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-<title>QBasicApps - collection of applications mostly written in MS QBasic for DOS environment</title>
-<!-- 2019-01-20 Sun 03:14 -->
-<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://bootswatch.com/3/darkly/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>
-<style type="text/css">
-footer {background-color: #111 !important;}
-pre {background-color: #111; color: #ccc;}
-</style>
-<style type="text/css">
-/* org mode styles on top of twbs */
-
-html {
-    position: relative;
-    min-height: 100%;
-}
-
-body {
-    font-size: 18px;
-    margin-bottom: 105px;
-}
-
-footer {
-    position: absolute;
-    bottom: 0;
-    width: 100%;
-    height: 101px;
-    background-color: #f5f5f5;
-}
-
-footer > div {
-    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;
-    }
-}
-</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>
-</head>
-<body>
-<div id="content" class="container">
-<div class="row"><div class="col-md-9"><h1 class="title">QBasicApps - collection of applications mostly written in MS QBasic for DOS environment</h1>
-
-<div id="outline-container-sec-1" class="outline-2">
-<h2 id="sec-1"><span class="section-number-2">1</span> General</h2>
-<div class="outline-text-2" id="text-1">
-<ul class="org-ul">
-<li>This program is free software: you can redistribute it and/or modify
-it under the terms of the <a href="https://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public License</a> as
-published by the Free Software Foundation, either version 3 of the
-License, or (at your option) any later version.
-</li>
-
-<li>Program author:
-<ul class="org-ul">
-<li>Svjatoslav Agejenko
-</li>
-<li>Homepage: <a href="https://svjatoslav.eu">https://svjatoslav.eu</a>
-</li>
-<li>Email: <a href="mailto://svjatoslav@svjatoslav.eu">mailto://svjatoslav@svjatoslav.eu</a>
-</li>
-</ul>
-</li>
-
-<li><a href="https://www.svjatoslav.eu/projects/">Other software projects hosted at svjatoslav.eu</a>
-</li>
-</ul>
-</div>
-
-<div id="outline-container-sec-1-1" class="outline-3">
-<h3 id="sec-1-1"><span class="section-number-3">1.1</span> Source code</h3>
-<div class="outline-text-3" id="text-1-1">
-<ul class="org-ul">
-<li><a href="https://www2.svjatoslav.eu/gitweb/?p=qbasicapps.git;a=snapshot;h=HEAD;sf=tgz">Download latest snapshot in TAR GZ format</a>
-</li>
-
-<li><a href="https://www2.svjatoslav.eu/gitweb/?p=qbasicapps.git;a=summary">Browse Git repository online</a>
-</li>
-
-<li>Clone Git repository using command:
-<pre class="example">
-git clone https://www2.svjatoslav.eu/git/qbasicapps.git
-
-</pre>
-</li>
-</ul>
-</div>
-</div>
-</div>
-
-<div id="outline-container-sec-2" class="outline-2">
-<h2 id="sec-2"><span class="section-number-2">2</span> Content</h2>
-<div class="outline-text-2" id="text-2">
-<p>
-This collection contains lots of applications:
-</p>
-<ul class="org-ul">
-<li>Games.
-</li>
-<li>Graphics tests (2D/3D/4D).
-</li>
-<li>Algorithms tests.
-</li>
-<li>Utilities.
-</li>
-</ul>
-
-<p>
-I wrote them long time ago mostly in QBasic, some in x86 assembly for
-use under DOS operating system.
-</p>
-
-
-<p>
-Few sample applications from the package:
-</p>
-</div>
-<div id="outline-container-sec-2-1" class="outline-3">
-<h3 id="sec-2-1"><span class="section-number-3">2.1</span> Checkers</h3>
-<div class="outline-text-3" id="text-2-1">
-<p>
-Play checkers against the computer with any board size and any amount
-of caps. Does thinking by recursively testing many possible scenarios
-with any depth.
-</p>
-
-<p>
-Since it is slow QBasic implementation, it isn't practical to play
-with many caps or big thinking depth, for reasonable responce time.
-</p>
-
-<p>
-See directory:
-</p>
-<pre class="example">
-games/checkers
-
-</pre>
-
-
-<figure>
-<p><img src="games/checkers/screenshot.png" class="img-responsive" alt="screenshot.png">
-</p>
-</figure>
-</div>
-</div>
-
-<div id="outline-container-sec-2-2" class="outline-3">
-<h3 id="sec-2-2"><span class="section-number-3">2.2</span> Platform game</h3>
-<div class="outline-text-3" id="text-2-2">
-<p>
-Jump around, collect coins and dont touch snails! Inspired by Super
-Mario Bros.
-</p>
-
-<p>
-See directory:
-</p>
-<pre class="example">
-games/platform
-
-</pre>
-
-
-<figure>
-<p><img src="games/platform/screenshot.png" class="img-responsive" alt="screenshot.png">
-</p>
-</figure>
-</div>
-</div>
-
-<div id="outline-container-sec-2-3" class="outline-3">
-<h3 id="sec-2-3"><span class="section-number-3">2.3</span> 3D Synthezier</h3>
-<div class="outline-text-3" id="text-2-3">
-<p>
-Parses scene definition language and creates 3D world based on
-it. Result will be in a <a href="https://en.wikipedia.org/wiki/Wavefront_.obj_file">wavefront obj file</a>, witch can be then
-visualized using external renderer.
-</p>
-
-<p>
-See directory:
-</p>
-<pre class="example">
-graphics/3D/3D Synthezier
-
-</pre>
-
-
-<figure>
-<p><img src="graphics/3D/3D Synthezier/doc/rectangular city, 1.jpeg" class="img-responsive" alt="rectangular city, 1.jpeg">
-</p>
-</figure>
-
-
-<figure>
-<p><img src="graphics/3D/3D Synthezier/doc/hexagonal city, 2.jpeg" class="img-responsive" alt="hexagonal city, 2.jpeg">
-</p>
-</figure>
-
-<p>
-<a href="graphics/3D/3D Synthezier/doc/index.html">Read more</a>
-</p>
-</div>
-</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. General</a>
-<ul class="nav">
-<li><a href="#sec-1-1">1.1. Source code</a></li>
-</ul>
-</li>
-<li><a href="#sec-2">2. Content</a>
-<ul class="nav">
-<li><a href="#sec-2-1">2.1. Checkers</a></li>
-<li><a href="#sec-2-2">2.2. Platform game</a></li>
-<li><a href="#sec-2-3">2.3. 3D Synthezier</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</nav>
-</div></div></div>
-<footer id="postamble" class="">
-<div><p class="author">Author: Svjatoslav Agejenko</p>
-<p class="date">Created: 2019-01-20 Sun 03:14</p>
-<p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 26.1 (<a href="http://orgmode.org">Org-mode</a> 9.1.9)</p>
-</div>
-</footer>
-</body>
-</html>
index f765497..e72c8dc 100644 (file)
--- a/index.org
+++ b/index.org
@@ -1,23 +1,32 @@
-#+TITLE:  QBasicApps - collection of applications mostly written in MS QBasic for DOS environment
-
-* (document settings) :noexport:
-** use dark style for TWBS-HTML exporter
-#+HTML_HEAD: <link href="https://bootswatch.com/3/darkly/bootstrap.min.css" rel="stylesheet">
-#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
-#+HTML_HEAD: <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js"></script>
-#+HTML_HEAD: <style type="text/css">
-#+HTML_HEAD:   footer {background-color: #111 !important;}
-#+HTML_HEAD:   pre {background-color: #111; color: #ccc;}
-#+HTML_HEAD: </style>
+#+SETUPFILE: ~/.emacs.d/org-styles/html/darksun.theme
+#+TITLE:  BASIC applications collection
+#+LANGUAGE: en
+#+LATEX_HEADER: \usepackage[margin=1.0in]{geometry}
+#+LATEX_HEADER: \usepackage{parskip}
+#+LATEX_HEADER: \usepackage[none]{hyphenat}
+
+#+OPTIONS: H:20 num:20
+#+OPTIONS: author:nil
 
 * General
 
-- This program is free software: you can redistribute it and/or modify
-  it under the terms of the [[https://www.gnu.org/licenses/lgpl.html][GNU Lesser General Public License]] as
-  published by the Free Software Foundation, either version 3 of the
-  License, or (at your option) any later version.
+This collection contains lots of applications:
+
+- Games.
+- Graphics tests (2D/3D/4D).
+- Algorithms tests.
+- Utilities.
 
-- Program author:
+I wrote those applications largely more than 20 years ago, mostly in
+QBasic. Some are even written in x86 assembly for use under DOS
+operating system. Because programs are old, coding style and
+commenting is often times bad. I'm now using artificial intelligence
+to revive and modernize them one by one.
+
+- These programs are free software: released under Creative Commons Zero
+  (CC0) license.
+
+- Programs author:
   - Svjatoslav Agejenko
   - Homepage: https://svjatoslav.eu
   - Email: mailto://svjatoslav@svjatoslav.eu
 - [[https://www2.svjatoslav.eu/gitweb/?p=qbasicapps.git;a=summary][Browse Git repository online]]
 
 - Clone Git repository using command:
-  : git clone https://www2.svjatoslav.eu/git/qbasicapps.git
+  : git clone https://www3.svjatoslav.eu/git/qbasicapps.git
+
+* Installation and Usage
+
+There are various ways to run legacy QBasic applications under Debian
+GNU/Linux:
+
+- Full system virtualization :: One way would be to use full system
+  virtualization with [[https://www.qemu.org/][QEMU]], [[https://www.virtualbox.org/][VirtualBox]] or [[https://www.vmware.com/products/desktop-hypervisor.html][VMware Workstation or
+  Player]]. After creating virtual machine, you need to obtain and
+  install some distribution of DOS like [[https://en.wikipedia.org/wiki/MS-DOS][MS-DOS]] or [[https://www.freedos.org/][FreeDOS]]. Within DOS
+  you can then use either Microsoft *QBasic* or Microsoft
+  *QuickBasic*. QBasic is already included in Microsoft DOS by
+  default. QuickBasic is more capable but must be obtained separately.
+
+- QB64 :: [[https://qb64.com][QB64]] is mostly compatible with Microsoft BASIC variants and
+  can be used too.
+
+- [[id:97ea6094-ade6-4c7d-aea9-9874acf9dc86][DOSBox + MS BASIC]] :: Easy to install and good compatibility.
+
+** DOSBox + MS BASIC
+:PROPERTIES:
+:ID:       97ea6094-ade6-4c7d-aea9-9874acf9dc86
+:END:
+
+Following tutorial focuses on using DOSBox with original Microsoft
+QBasic or QuickBasic.
 
-* Running QBasic applications on Debian GNU/Linux
+DOSBox is trivial to install and BASIC programs do not need to be
+copied to virtual drive or operating system to run them. Using
+original BASIC binaries ensures good compatibility.
 
-To run these applications on a modern GNU Debian Linux system, follow
-these steps:
+
+Here is suggested installation and usage procedure:
 
 1. Install DOSBox by running the following command in your terminal:
    : sudo apt-get install dosbox
 
-2. Place a copy of QBASIC.EXE and/or QuickBasic compiler in repository root directory.
-
-3. Execute script that is located in the repository root directory:
-   : ./run_dosbox.sh
+2. Obtain and place a copy of QuickBasic *QB.EXE* executable binary
+   into directory */QB45/* within project root directory.
 
-4. Run the script to launch DOSBox:
-   : ./run_dosbox.sh
+   Optionally obtain [[https://en.wikipedia.org/wiki/Volkov_Commander][Volkov Commander]] executable VC.COM and place it
+   under project root directory. Volkov Commander simplifies
+   filesystem navigation and running arbitrary BASIC program by
+   selecting it and pressing ENTER key. For this to work, BAS file
+   extension is mapped to BASIC executable within VC.EXT file (already
+   available in the project root directory). In case you are using
+   QBasic instead, feel free to fix VC.EXT to point to appropriate
+   BASIC executable.
 
-5. Inside DOSBox, navigate to the directory containing your QBasic program and run it using the interpreter or compiler.
+3. Optionally check and apply [[id:13c7d873-f1aa-4061-88ac-dc9e43c6303d][DOSBox usage tips]].
 
+4. Execute script that is located in the root directory of the
+   repository:
+   : ./run_dosbox.sh
 
-* DOSBox usage tips
-** How to change keyboard layout to Dvorak
+5. Now project root directory appears as root directory of virtual
+   *C:* drive. You can navigate around and start programs.
+
+
+Here is suggested project directory layout with QuickBasic and Volkov
+Commander installed:
+#+begin_example
+  ├── COPYING
+  ├── index.org
+  ├── QB45
+  │   ├── QB.EXE
+  │   └── QB.INI
+  ├── run_dosbox.sh
+  ├── (... other repository files and directories)
+  ├── VC.COM
+  ├── VC.EXT
+  └── VC.INI
+#+end_example
+
+** DOSBox usage tips
+:PROPERTIES:
+:ID:       13c7d873-f1aa-4061-88ac-dc9e43c6303d
+:END:
+*** How to change keyboard layout to Dvorak
 
 In case you want to use Dvorak keyboard layout and DOSBox fails to
 auto-apply it, here is how you can set it manually:
@@ -66,7 +132,7 @@ auto-apply it, here is how you can set it manually:
 3. Save the changes and restart DOSBox for the configuration to take
    effect.
 
-** Increase window size
+*** Increase window size
 
 If you have big high-resolution screen, by default DOSBox window could
 appear small. To make it bigger:
@@ -81,51 +147,32 @@ appear small. To make it bigger:
 3. Save the changes and restart DOSBox for the configuration to take
    effect.
 
+* Applications
 
-* Content
-This collection contains lots of applications:
-+ Games.
-+ Graphics tests (2D/3D/4D).
-+ Algorithms tests.
-+ Utilities.
-
-I wrote them long time ago mostly in QBasic, some in x86 assembly for
-use under DOS operating system.
-
+There are lot of applications. Few examples:
 
-Few sample applications from the package:
 ** Checkers
- Play checkers against the computer with any board size and any amount
- of caps. Does thinking by recursively testing many possible scenarios
- with any depth.
-
- Since it is slow QBasic implementation, it isn't practical to play
- with many caps or big thinking depth, for reasonable responce time.
-
- See directory:
- : games/checkers
-
- [[file:games/checkers/screenshot.png]]
-
-** Platform game
- Jump around, collect coins and dont touch snails! Inspired by Super
- Mario Bros.
+Play checkers against the computer with any board size and any amount
+of caps. Does thinking by recursively testing many possible scenarios
+with any depth.
 
- See directory:
- : games/platform
+Since it is slow QBasic implementation, it isn't practical to play
+with many caps or big thinking depth, for reasonable responce time.
+See directory:
+: games/checkers
 
- [[file:games/platform/screenshot.png]]
+[[file:games/checkers/screenshot.png]]
 
 ** 3D Synthezier
- 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
- visualized using external renderer.
+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
+visualized using external renderer.
 
- See directory:
- : graphics/3D/3D Synthezier
+See directory:
+: graphics/3D/3D Synthezier
 
- [[file:graphics/3D/3D Synthezier/doc/rectangular city, 1.jpeg]]
+[[file:graphics/3D/3D Synthezier/doc/rectangular city, 1.jpeg]]
 
- [[file:graphics/3D/3D Synthezier/doc/hexagonal city, 2.jpeg]]
+[[file:graphics/3D/3D Synthezier/doc/hexagonal city, 2.jpeg]]
 
- [[file:graphics/3D/3D Synthezier/doc/index.html][Read more]]
+[[file:graphics/3D/3D Synthezier/doc/index.html][Read more]]
index 9354db1..6e325e7 100755 (executable)
@@ -1,17 +1,24 @@
 #!/bin/bash
 cd "${0%/*}"; if [ "$1" != "T" ]; then gnome-terminal -e "'$0' T"; exit; fi;
 
-cd ..
+(
+    cd ..
 
-rsync -avz --delete  -e 'ssh -p 10006' ./ \
-      --include="*/" \
-      --include="*.html" \
-      --include="*.png" \
-      --include="*.jpeg" \
-      --include="*.blend" \
-      --exclude="*" \
-      n0@www3.svjatoslav.eu:/mnt/big/projects/qbasicapps/
+    # Export org to html using emacs in batch mode
+    rm -f index.html
+    emacs --batch -l ~/.emacs --visit=index.org --funcall=org-html-export-to-html --kill
 
+    # Upload project homepage to the server.
+    rsync -avz --delete  -e 'ssh -p 10006' ./ \
+          --include="*/" \
+          --include="*.html" \
+          --include="*.png" \
+          --include="*.jpeg" \
+          --include="*.blend" \
+          --exclude="*" \
+          n0@www3.svjatoslav.eu:/mnt/big/projects/qbasicapps/
+
+)
 echo ""
 echo "Press ENTER to close this window."
 read