Compare commits

...

3 Commits

Author SHA1 Message Date
tTh 6c2d6476b8 new chapter: Basic 2023-03-03 21:27:18 +01:00
tTh 6546d1d5c0 add a TODO 2023-03-03 20:21:15 +01:00
tTh a47c1f6d7a bricolages... 2023-02-11 12:19:00 +01:00
17 changed files with 185 additions and 23 deletions

65
chap/Basic.tex Normal file
View File

@ -0,0 +1,65 @@
% ----------------------------------------------------------
\chapter{Basic}
\index{dosbox}\label{chap:Basic}
% -------------------------------------------
\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 enore.
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 ? « 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.
% -------------------------------------------
\section{Bywater} \index{bywater}
\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}.
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}
Première conclusion : affaire à suivre.
% -------------------------------------------
\section{Yabasic} \index{yabasic}
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}
% -------------------------------------------
\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.
% -------------------------------------------
% -------------------------------------------

View File

@ -252,12 +252,12 @@ int fprintf(FILE *stream, const char *format, ...);
Ce qu'on appelle un "filtre" est un logiciel destiné à transformer
les données qui le traversent. Pour bien comprendre, le mieux,
comme d'habitude, est un exemple. Il est un peu artificiel,
il s'agit d'éliminer les lettres \textsc{o} et \textsc{p}.
Le voici~:
car il s'agit d'éliminer les lettres \textsc{o} et \textsc{p},
sans raison valable. Le voici~:
\lstinputlisting[language=c]{code/no-op.c}
\lstinputlisting[language=c]{code/C/no-op.c}
Démonstration~:
Démonstration immédiate~:
\begin{verbatim}
$ echo apopoz | ./no-op
@ -271,6 +271,16 @@ $ ./no-op < no-op.c | head -5
$
\end{verbatim}
Vous voulez un autre exemple ? En voici un, parfois utile pour des
simulations de terminal de \textsl{h4ck3rZ}\footnote{texte vert ou
orange sur fond noir de rigueur.} sur une ligne en boucle de
courant à 300 Bauds, le tout pour un film que l'on souhaite classable
en série Z.
\lstinputlisting[language=c]{code/C/slowprint.c}
\vspace{2em}
Pour une explication plus détaillée sur les mécanismes
utilisés et les usages possibles d'un tel filtre,
il faut voir le concept de pipeline du shell en

View File

@ -224,9 +224,9 @@ D'accord, mais dessiner quoi ?
\end{itemize}
% --------------------------------------------------------
\section{Reponses}
\section{Réponses}
\textsl{<none>}
\textsl{<Pas de réponse>}

View File

@ -31,7 +31,9 @@ keyb fr
\section{In an Out}
\textbf{Q:} J'ai téléchargé un warez de Qbasic pour jouer avec,
\textbf{Q:} J'ai téléchargé un warez de Qbasic\footnote{%
cf. page \pageref{chap:Basic}}
pour jouer avec,
le l'archive 7z ne contient qu'un fichier \texttt{.img}.
Que puis-je faire pour jouer enfin à snake ?
@ -75,6 +77,9 @@ juste pour constater que c'est un peu technique.
merveilles de l'ancien temps.
% ----------------------------------------------------------
\section{Qbasic} \index{Qbasic} \label{Qbasic}
% ----------------------------------------------------------

View File

@ -86,3 +86,15 @@ indoor.gif: $(DEPS)
% ==================================================================
\section{gifsicle}
'Gifsicle' manipulates GIF images. Its most common uses include combining
single images into animations, adding transparency, optimizing animations for
space, and printing information about GIFs.
% ==================================================================

View File

@ -7,28 +7,42 @@ Quelques \textsl{oneliners} de bon aloi pour vous donner
une idée du langage\dots
\begin{verbatim}
cat { print $0 } or just 1
grep pattern /pattern/
head -n 5 NR <= 5
cut -f1 { print $1 }
tr a-z A-Z { print toupper($0) }
sed 's/hi/ho/g' gsub(/hi/,"ho")
wc -l END { print NR }
cat { print $0 } or just 1
grep pattern /pattern/
head -n 5 NR <= 5
cut -f1 { print $1 }
tr a-z A-Z { print toupper($0) }
sed 's/hi/ho/g' gsub(/hi/,"ho")
wc -l END { print NR }
\end{verbatim}
Vous pouvez déja constater une certaine élégance portée par une
grande simplicité logique, une sorte d'axiome de base, de
méthologie très \textsc{kiss} :
on va procéder en quelque sorte « demi-dalle par demi-dalle ».
% ===============================================================
\subsection{Un exemple simple}
À partir d'un jeu de données structurées, nous allons générer un
fichier \texttt{.inc} contenant un objet pour Povray\index{Povray}.
Un cas d'école : un élément par ligne, les valeurs séparées par
Un cas d'école : un élément par ligne, les valeurs sont séparées par
des espaces.
\lstinputlisting[]{code/awk/dataset}
Ces données sont les coordonnées \textsc{xyz} et le rayon d'une
Ces données sont les coordonnées \textsc{x,y,z} et le rayon d'une
petite collection de bubulles. Pratiquement, une représentation
sommaire d'une sphère de povray.
sommaire d'une sphère de povray\footnote{SDL keyword: \texttt{Sphere}}.
Le fichier à générer est en trois partie : l'en-tête, la liste
des bubulles\index{bubulle} et l'en-pied, ce qui est bien raccord
avec la structure de déroulement d'un script Awk, comme nous allons
le voir ici-même~:
\lstinputlisting[]{code/awk/mkunion.awk}
% XXX to be continued XXX
% ===============================================================

3
code/.gitignore vendored
View File

@ -12,7 +12,8 @@ foo
get-signal
hello
listen-osc
no-op
C/no-op
C/slowprint
*.o
plugiciel.so
send-osc

0
code/Basic/README.md Normal file
View File

4
code/Basic/bywater-1.bas Normal file
View File

@ -0,0 +1,4 @@
10 CLEAR
20 FOR I=1 TO 10
30 PRINT I, I*I
40 NEXT I

3
code/Basic/yabasic-1.bas Normal file
View File

@ -0,0 +1,3 @@
for i=1 to 10
print i, i*i
next

5
code/Basic/yabasic-2.bas Normal file
View File

@ -0,0 +1,5 @@
open window 511,511
for x=10 to 495 step 5:for y=10 to 495 step 5
colour x/2,y/2,0
fill rectangle x,y,x+5,y+5
next y:next x

10
code/C/Makefile Normal file
View File

@ -0,0 +1,10 @@
# exemples pour le chapitre sur le C
# new Sat Feb 11 12:06:34 CET 2023
no-op: no-op.c Makefile
gcc -Wall $< -o $@
slowprint: slowprint.c Makefile
gcc -Wall $< -o $@

20
code/C/slowprint.c Normal file
View File

@ -0,0 +1,20 @@
#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int c;
struct timespec ts;
ts.tv_sec = 0;
ts.tv_nsec = 115 * 1000 * 1000;
while ( EOF != (c=getchar()) )
{
putchar(c);
fflush(stdout);
nanosleep(&ts, NULL);
}
return 0;
}

View File

@ -16,9 +16,6 @@ hello: hello.c Makefile
arguments: arguments.c Makefile
gcc -Wall $< -o $@
no-op: no-op.c Makefile
gcc -Wall $< -o $@
voirenv: voirenv.c Makefile
gcc -Wall $< -o $@

15
code/awk/mkunion.awk Normal file → Executable file
View File

@ -0,0 +1,15 @@
#!/usr/bin/awk -f
BEGIN {
print "#declare Bubules = object"
print "{ \nunion { "
}
{
printf(" sphere { <%f, %f, %f>, %f }\n", \
$1, $2, $3, $4 )
}
END {
}

View File

@ -26,7 +26,7 @@
%------ reglages des 'listings'
\lstset{frame=single} % dessin d'un cadre autour du listing
\lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=0.8em,belowskip=0.5em}
\lstset{aboveskip=1.2em,belowskip=1.2em}
\setcounter{tocdepth}{1}
\pagestyle{plain}
@ -130,6 +130,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
\input{chap/Fortran}
\input{chap/scripting}
\input{chap/Arduino}
\input{chap/Basic}
% \input{chap/GMP}
\input{chap/Python}