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 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,
il s'agit d'éliminer les lettres \textsc{o} et \textsc{p}. car il s'agit d'éliminer les lettres \textsc{o} et \textsc{p},
Le voici~: 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} \begin{verbatim}
$ echo apopoz | ./no-op $ echo apopoz | ./no-op
@ -271,6 +271,16 @@ $ ./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

View File

@ -224,9 +224,9 @@ D'accord, mais dessiner quoi ?
\end{itemize} \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 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 séparées par Un cas d'école : un élément par ligne, les valeurs sont séparées par
des espaces. des espaces.
\lstinputlisting[]{code/awk/dataset} \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 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 get-signal
hello hello
listen-osc listen-osc
no-op C/no-op
C/slowprint
*.o *.o
plugiciel.so plugiciel.so
send-osc 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 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 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' %------ 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=0.8em,belowskip=0.5em} \lstset{aboveskip=1.4em,belowskip=0.2em}
\setcounter{tocdepth}{1} \setcounter{tocdepth}{1}
\pagestyle{plain} \pagestyle{plain}