% ----------------------------------------------------------
\chapter{Basic}
\label{chap:Basic}
\index{dosbox}\index{Basic}

% ====================================================================

% https://www.theregister.com/2023/03/28/nostalgic_for_basic/
% https://retrofun.pl/2023/12/18/was-basic-that-horrible-or-better/

% ====================================================================
% \section{BASIC} \index{BASIC}

C'est probablement un des premiers langages interactifs utilisable par le
peuple et les gens. Déja, à ce titre, dénonce que ce langage
demande un peu de curiosité, il a traversé soixante ans
d'informatique, et il existe encore.
Mais pour moi, le véritable intérèt
est dans la multitude et la diversité des implémentations.
Des minis catatoniques des années 60 aux micros-ordinateurs 8 bits,
des dizaines de versions souvent incompatibles ont vues le jour.
Un nom pour citer un exemple ? « Locomotive », ça ira ?

Dans un premier temps, je vais les lister sommairement, et
ensuite j'aurais une idée sur lesquels seront les plus funs
à explorer, voire sauront trouver leur place dans un
environnement dédié à la techno-futilité, concept très
tendance dans certains milieux.

Pour en savoir plus : \textsc{Dartmouth Time Sharing System}

% ====================================================================
\section{Bywater} \index{bywater}

\begin{quote}
The Bywater BASIC Interpreter (bwBASIC) implements a large superset of the
ANSI\index{ANSI} Standard for Minimal BASIC (X3.60-1978)
and a significant subset of the ANSI Standard for
Full BASIC (X3.113-1987) in C.
\end{quote}

\begin{verbatim}
                Bywater BASIC Interpreter/Shell, version 2.10
                ---------------------------------------------
                     Copyright (c) 1993, Ted A. Campbell
                   for bwBASIC version 2.10, 11 October 1993
\end{verbatim}

Le mode interactif me semble un peu rustre, mais utilisable à l'ancienne.
Les messages d'erreur sont du genre \textsc{bdos error on a, select}.
Je n'ai pas réussi à faire une sauvegarde du programme\footnote{J'ai
renoncé au bout de 30 secondes}, ce qui limite son \textsl{utilisability}.

Heureusement, on peut utiliser son éditeur de texte favori pour écrire
le code source, et le lancer en mode batch. Voici un exemple rudimentaire
mais canonique~:

\lstinputlisting{code/Basic/bywater-1.bas}

Ce qui nous donne à l'exécution~:

\begin{verbatim}
tth@redlady:~/Devel/TetaTricks$ bwbasic code/Basic/bywater-1.bas 
Bywater BASIC Interpreter/Shell, version 2.20 patch level 2
Copyright (c) 1993, Ted A. Campbell
Copyright (c) 1995-1997, Jon B. Volkoff
 
 2            4
 3            9
 4            16
 5            25

tth@redlady:~/Devel/TetaTricks$ 
\end{verbatim}

Première conclusion : affaire à suivre.

% ====================================================================
\section{Yabasic} \index{yabasic}

\begin{quote}
Yabasic implements the most common and simple elements of the BASIC
language; it comes with for-loops and goto with while-loops and
procedures.  yabasic does monochrome line graphics, and printing
comes with no extra effort.  yabasic runs under Unix and Windows;
it is small (less than 200 KB) and free.
\end{quote}

Première innovation, les numéros de ligne ne sont plus obligatoires.

\lstinputlisting{code/Basic/yabasic-1.bas}

Et on peut faire des images qui clignotent :)

\lstinputlisting{code/Basic/yabasic-2.bas}

C'est vraiment dommage que l'on ne puisse mettre de gif89a\index{gif89a}
dans un livre imprimé\dots

% ====================================================================

\section{sdlBasic} \index{sdlBasic}

http://www.sdlbasic.altervista.org/main/

% ====================================================================
\section{Brandy}

\index{BBC} \index{Acorn}

\begin{quote}
Brandy  is  an  interpreter  for BBC BASIC V, the dialect of BASIC that
Acorn Computers supplied with their ranges of  desktop  computers  that
use  the ARM processor such as the Archimedes and Risc PC, and is still
in use on these and compatibles.
\end{quote}

https://www.bbcbasic.co.uk/index.html

% ====================================================================

\section{FreeBASIC} \index{FreeBASIC}

\begin{quote}
When used in its "QB" language mode, FreeBASIC provides a high level
of support for programs written for QuickBASIC\index{QuickBASIC}.
Many programs written for QuickBASIC will compile and run in this mode
with no changes needed. 
\end{quote}

https://www.freebasic.net/

% ====================================================================

\section{BASIC-256} \index{BASIC-256}

\begin{quote}
BASIC-256 is an easy to use version of BASIC designed to teach anybody
(especially middle and high-school students) the basics of computer
programming.
It uses traditional control structures like gosub, for/next, and goto,
which helps kids easily see how program flow-control works.
It has a built-in graphics mode which lets them draw pictures
on screen in minutes, and a set of detailed, easy-to-follow tutorials
that introduce programming concepts through fun exercises.
\end{quote}

https://basic256.org/

% ====================================================================

\section{Benchmark}

Nous avons une liste de Basics, il faut maintenant les comparer.
Il y a le très classique (et très ancien) crible d'Eratostène, mais
nous pouvons trouver mieux en fouillant dans les archives.

% ====================================================================

\section{Et ailleurs ?}

L'interpréteur \texttt{Qbasic} de Microsoft fonctionne très bien
dans Dosbox~: à lire en page \pageref{Qbasic}. Son prédécesseur,
\texttt{GWBASIC} marche très bien aussi.

% ====================================================================
