Compare commits
No commits in common. "6c2d6476b844a5ed256f8ea6ade6ec63fd9e844c" and "43202ab62e02f9554b613d4eba6973b7268dceb5" have entirely different histories.
6c2d6476b8
...
43202ab62e
@ -1,65 +0,0 @@
|
|||||||
% ----------------------------------------------------------
|
|
||||||
\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.
|
|
||||||
|
|
||||||
% -------------------------------------------
|
|
||||||
% -------------------------------------------
|
|
18
chap/C.tex
18
chap/C.tex
@ -252,12 +252,12 @@ int fprintf(FILE *stream, const char *format, ...);
|
|||||||
Ce qu'on appelle un "filtre" est un logiciel destiné à transformer
|
Ce qu'on appelle un "filtre" est un logiciel destiné à transformer
|
||||||
les données qui le traversent. Pour bien comprendre, le mieux,
|
les données qui le traversent. Pour bien comprendre, le mieux,
|
||||||
comme d'habitude, est un exemple. Il est un peu artificiel,
|
comme d'habitude, est un exemple. Il est un peu artificiel,
|
||||||
car il s'agit d'éliminer les lettres \textsc{o} et \textsc{p},
|
il s'agit d'éliminer les lettres \textsc{o} et \textsc{p}.
|
||||||
sans raison valable. Le voici~:
|
Le voici~:
|
||||||
|
|
||||||
\lstinputlisting[language=c]{code/C/no-op.c}
|
\lstinputlisting[language=c]{code/no-op.c}
|
||||||
|
|
||||||
Démonstration immédiate~:
|
Démonstration~:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
$ echo apopoz | ./no-op
|
$ echo apopoz | ./no-op
|
||||||
@ -271,16 +271,6 @@ $ ./no-op < no-op.c | head -5
|
|||||||
$
|
$
|
||||||
\end{verbatim}
|
\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
|
Pour une explication plus détaillée sur les mécanismes
|
||||||
utilisés et les usages possibles d'un tel filtre,
|
utilisés et les usages possibles d'un tel filtre,
|
||||||
il faut voir le concept de pipeline du shell en
|
il faut voir le concept de pipeline du shell en
|
||||||
|
@ -224,9 +224,9 @@ D'accord, mais dessiner quoi ?
|
|||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
\section{Réponses}
|
\section{Reponses}
|
||||||
|
|
||||||
\textsl{<Pas de réponse>}
|
\textsl{<none>}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,9 +31,7 @@ keyb fr
|
|||||||
|
|
||||||
\section{In an Out}
|
\section{In an Out}
|
||||||
|
|
||||||
\textbf{Q:} J'ai téléchargé un warez de Qbasic\footnote{%
|
\textbf{Q:} J'ai téléchargé un warez de Qbasic pour jouer avec,
|
||||||
cf. page \pageref{chap:Basic}}
|
|
||||||
pour jouer avec,
|
|
||||||
le l'archive 7z ne contient qu'un fichier \texttt{.img}.
|
le l'archive 7z ne contient qu'un fichier \texttt{.img}.
|
||||||
Que puis-je faire pour jouer enfin à snake ?
|
Que puis-je faire pour jouer enfin à snake ?
|
||||||
|
|
||||||
@ -77,9 +75,6 @@ juste pour constater que c'est un peu technique.
|
|||||||
merveilles de l'ancien temps.
|
merveilles de l'ancien temps.
|
||||||
|
|
||||||
|
|
||||||
% ----------------------------------------------------------
|
|
||||||
|
|
||||||
\section{Qbasic} \index{Qbasic} \label{Qbasic}
|
|
||||||
|
|
||||||
% ----------------------------------------------------------
|
% ----------------------------------------------------------
|
||||||
|
|
||||||
|
@ -86,15 +86,3 @@ 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.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% ==================================================================
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,42 +7,28 @@ Quelques \textsl{oneliners} de bon aloi pour vous donner
|
|||||||
une idée du langage\dots
|
une idée du langage\dots
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
cat { print $0 } or just 1
|
cat { print $0 } or just 1
|
||||||
grep pattern /pattern/
|
grep pattern /pattern/
|
||||||
head -n 5 NR <= 5
|
head -n 5 NR <= 5
|
||||||
cut -f1 { print $1 }
|
cut -f1 { print $1 }
|
||||||
tr a-z A-Z { print toupper($0) }
|
tr a-z A-Z { print toupper($0) }
|
||||||
sed 's/hi/ho/g' gsub(/hi/,"ho")
|
sed 's/hi/ho/g' gsub(/hi/,"ho")
|
||||||
wc -l END { print NR }
|
wc -l END { print NR }
|
||||||
\end{verbatim}
|
\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}
|
\subsection{Un exemple simple}
|
||||||
|
|
||||||
À partir d'un jeu de données structurées, nous allons générer un
|
À 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}.
|
fichier \texttt{.inc} contenant un objet pour Povray\index{Povray}.
|
||||||
Un cas d'école : un élément par ligne, les valeurs sont séparées par
|
Un cas d'école : un élément par ligne, les valeurs séparées par
|
||||||
des espaces.
|
des espaces.
|
||||||
|
|
||||||
|
|
||||||
\lstinputlisting[]{code/awk/dataset}
|
\lstinputlisting[]{code/awk/dataset}
|
||||||
|
|
||||||
Ces données sont les coordonnées \textsc{x,y,z} et le rayon d'une
|
Ces données sont les coordonnées \textsc{xyz} et le rayon d'une
|
||||||
petite collection de bubulles. Pratiquement, une représentation
|
petite collection de bubulles. Pratiquement, une représentation
|
||||||
sommaire d'une sphère de povray\footnote{SDL keyword: \texttt{Sphere}}.
|
sommaire d'une sphère de povray.
|
||||||
|
|
||||||
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
3
code/.gitignore
vendored
@ -12,8 +12,7 @@ foo
|
|||||||
get-signal
|
get-signal
|
||||||
hello
|
hello
|
||||||
listen-osc
|
listen-osc
|
||||||
C/no-op
|
no-op
|
||||||
C/slowprint
|
|
||||||
*.o
|
*.o
|
||||||
plugiciel.so
|
plugiciel.so
|
||||||
send-osc
|
send-osc
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
10 CLEAR
|
|
||||||
20 FOR I=1 TO 10
|
|
||||||
30 PRINT I, I*I
|
|
||||||
40 NEXT I
|
|
@ -1,3 +0,0 @@
|
|||||||
for i=1 to 10
|
|
||||||
print i, i*i
|
|
||||||
next
|
|
@ -1,5 +0,0 @@
|
|||||||
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
|
|
@ -1,10 +0,0 @@
|
|||||||
|
|
||||||
# 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 $@
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
@ -16,6 +16,9 @@ hello: hello.c Makefile
|
|||||||
arguments: arguments.c Makefile
|
arguments: arguments.c Makefile
|
||||||
gcc -Wall $< -o $@
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
|
no-op: no-op.c Makefile
|
||||||
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
voirenv: voirenv.c Makefile
|
voirenv: voirenv.c Makefile
|
||||||
gcc -Wall $< -o $@
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
|
15
code/awk/mkunion.awk
Executable file → Normal file
15
code/awk/mkunion.awk
Executable file → Normal file
@ -1,15 +0,0 @@
|
|||||||
#!/usr/bin/awk -f
|
|
||||||
|
|
||||||
BEGIN {
|
|
||||||
print "#declare Bubules = object"
|
|
||||||
print "{ \nunion { "
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
printf(" sphere { <%f, %f, %f>, %f }\n", \
|
|
||||||
$1, $2, $3, $4 )
|
|
||||||
}
|
|
||||||
|
|
||||||
END {
|
|
||||||
|
|
||||||
}
|
|
@ -26,7 +26,7 @@
|
|||||||
%------ reglages des 'listings'
|
%------ reglages des 'listings'
|
||||||
\lstset{frame=single} % dessin d'un cadre autour du listing
|
\lstset{frame=single} % dessin d'un cadre autour du listing
|
||||||
\lstset{basicstyle=\ttfamily\small}
|
\lstset{basicstyle=\ttfamily\small}
|
||||||
\lstset{aboveskip=1.2em,belowskip=1.2em}
|
\lstset{aboveskip=0.8em,belowskip=0.5em}
|
||||||
|
|
||||||
\setcounter{tocdepth}{1}
|
\setcounter{tocdepth}{1}
|
||||||
\pagestyle{plain}
|
\pagestyle{plain}
|
||||||
@ -130,7 +130,6 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
|
|||||||
\input{chap/Fortran}
|
\input{chap/Fortran}
|
||||||
\input{chap/scripting}
|
\input{chap/scripting}
|
||||||
\input{chap/Arduino}
|
\input{chap/Arduino}
|
||||||
\input{chap/Basic}
|
|
||||||
|
|
||||||
% \input{chap/GMP}
|
% \input{chap/GMP}
|
||||||
\input{chap/Python}
|
\input{chap/Python}
|
||||||
|
Loading…
Reference in New Issue
Block a user