From a47c1f6d7a324288c0a70563a32e595f4cf285b8 Mon Sep 17 00:00:00 2001 From: tTh Date: Sat, 11 Feb 2023 12:19:00 +0100 Subject: [PATCH] bricolages... --- chap/C.tex | 18 ++++++++++++++---- chap/Fortran.tex | 4 ++-- chap/scripting.tex | 36 +++++++++++++++++++++++++----------- code/.gitignore | 3 ++- code/C/Makefile | 10 ++++++++++ code/{ => C}/no-op.c | 0 code/C/slowprint.c | 20 ++++++++++++++++++++ code/Makefile | 3 --- code/awk/mkunion.awk | 15 +++++++++++++++ tetatricks.tex | 2 +- 10 files changed, 89 insertions(+), 22 deletions(-) create mode 100644 code/C/Makefile rename code/{ => C}/no-op.c (100%) create mode 100644 code/C/slowprint.c mode change 100644 => 100755 code/awk/mkunion.awk diff --git a/chap/C.tex b/chap/C.tex index 20cb8be..c7f2324 100644 --- a/chap/C.tex +++ b/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 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 diff --git a/chap/Fortran.tex b/chap/Fortran.tex index 93899d2..05cf761 100644 --- a/chap/Fortran.tex +++ b/chap/Fortran.tex @@ -224,9 +224,9 @@ D'accord, mais dessiner quoi ? \end{itemize} % -------------------------------------------------------- -\section{Reponses} +\section{Réponses} -\textsl{} +\textsl{} diff --git a/chap/scripting.tex b/chap/scripting.tex index 48b50f7..24ec48a 100644 --- a/chap/scripting.tex +++ b/chap/scripting.tex @@ -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 % =============================================================== diff --git a/code/.gitignore b/code/.gitignore index c8526e8..9d6cf75 100644 --- a/code/.gitignore +++ b/code/.gitignore @@ -12,7 +12,8 @@ foo get-signal hello listen-osc -no-op +C/no-op +C/slowprint *.o plugiciel.so send-osc diff --git a/code/C/Makefile b/code/C/Makefile new file mode 100644 index 0000000..cc88ddd --- /dev/null +++ b/code/C/Makefile @@ -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 $@ + diff --git a/code/no-op.c b/code/C/no-op.c similarity index 100% rename from code/no-op.c rename to code/C/no-op.c diff --git a/code/C/slowprint.c b/code/C/slowprint.c new file mode 100644 index 0000000..356dab1 --- /dev/null +++ b/code/C/slowprint.c @@ -0,0 +1,20 @@ +#include +#include +#include + +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; +} diff --git a/code/Makefile b/code/Makefile index 7aae39a..8cdcca1 100644 --- a/code/Makefile +++ b/code/Makefile @@ -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 $@ diff --git a/code/awk/mkunion.awk b/code/awk/mkunion.awk old mode 100644 new mode 100755 index e69de29..1709086 --- a/code/awk/mkunion.awk +++ b/code/awk/mkunion.awk @@ -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 { + + } diff --git a/tetatricks.tex b/tetatricks.tex index 3ddada3..2621dd9 100644 --- a/tetatricks.tex +++ b/tetatricks.tex @@ -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}