bricolages...

This commit is contained in:
tTh 2023-02-11 12:19:00 +01:00
parent 43202ab62e
commit a47c1f6d7a
10 changed files with 89 additions and 22 deletions

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

@ -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

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.4em,belowskip=0.2em}
\setcounter{tocdepth}{1}
\pagestyle{plain}