Compare commits

..

No commits in common. "c6fe2224bfc9261f30f9752886c6c2fd7cc0b9e8" and "9d08631b32eff42d9622eaf4ea66a81ccbac16ef" have entirely different histories.

8 changed files with 20 additions and 110 deletions

View File

@ -479,9 +479,9 @@ avec les variables locales. Il est temps de passer à une gestion
explicite de celle-ci~: explicite de celle-ci~:
les fonctions \texttt{malloc} et \texttt{free} sont là pour ça. les fonctions \texttt{malloc} et \texttt{free} sont là pour ça.
La première fonction demande au mc/p de nous préter une certaine quantité La première demande au mc/p de nous préter une certaine quantité
de mémoire, que nous pourront utiliser à notre guise. de mémoire, que nous pourront utiliser à notre guise.
Et la seconde restitue cette zone mémoire au système sous-jacent. Et la seconde restitue la zone mémoire au système sous-jacent.
Un rapide synopsis minimal d'utilisation~: Un rapide synopsis minimal d'utilisation~:
@ -536,72 +536,10 @@ extern int optind, opterr, optopt;
La page de man de getopt(3) contient des explications détaillées La page de man de getopt(3) contient des explications détaillées
et un exemple simple d'utilisation. et un exemple simple d'utilisation.
% =========================================================
% Sun Sep 3 05:48:37 UTC 2023
%
%
\section{Analyser une ligne de texte} \index{parser}
Nous désirons implémenter une interface en ligne de commande
(aka CLI\index{CLI}) pour un enchainement simple d'intructions
assez semblables. On peut aussi voir ça comme la création
d'un \textsl{domain specific language} (aka DSL\index{DSL}).
Pour être cohérent avec le shell, nous allons utiliser la
même méthode de séparation des mots sur la ligne à
décomposer~:
utiliser une liste pré-définie de séparateur de champs,
comme le \$IFS du shell.
\subsection{la fonction \texttt{strtok}} \index{strtok}
Cette fonction nous permet de « découper » notre ligne de commande
en \textsl{tokens} par un ensemble de
caractères de séparation appelé \texttt{delim} dans cet extrait
du man\index{man}.
\begin{verbatim}
#include <string.h>
char *strtok(char *str, const char *delim);
The strtok() function breaks a string into a sequence of zero or more
nonempty tokens. On the first call to strtok(), the string to be
parsed should be specified in str. In each subsequent call that should
parse the same string, str must be NULL.
\end{verbatim}
Concrètement, nous allons utiliser deux séparateurs très classiques,
l'espace et la tabulation \texttt{ delim = "\symbol{92}t ";}.
on peut ensuite aller regarder dans la mémoire ce qui s'y passe~:
\begin{verbatim}
--- chaine d'origine
66 6f 6f 20 20 20 62 61 72 09 71 75 75 78 20 77 69 7a 00
f o o b a r q u u x w i z
--- 1er strtok
66 6f 6f 00 20 20 62 61 72 09 71 75 75 78 20 77 69 7a 00
f o o b a r q u u x w i z
got [foo]
\end{verbatim}
Déja on peut constater que la chaine de départ est modifiée, ce qui
risque de causer des soucis, mais on en parlera plus tard.
\subsection{Le programme complet}
\lstinputlisting[language=c]{code/C/demo-strtok.c}
% ========================================================= % =========================================================
\section{Erreurs classiques} \section{Erreurs classiques}
Le C est un langage parsemé de fosses, de chausse-trapes et de
pièges fourbes et sournois. Sans parler des UBs, hein\dots
\begin{itemize} \begin{itemize}
\item{Variables non initialisées.} \item{Variables non initialisées.}

View File

@ -16,8 +16,6 @@ qui reste simple
Cette bibliothèque est livrée avec deux outils que nous Cette bibliothèque est livrée avec deux outils que nous
allons voir maintenant. allons voir maintenant.
% ================================================================
\section{oscdump \& oscsend} \section{oscdump \& oscsend}
\index{oscdump}\index{oscsend} \index{oscdump}\index{oscsend}
@ -45,7 +43,7 @@ tth@debian:~$ oscdump 1664
tth@debian:~$ tth@debian:~$
\end{verbatim} \end{verbatim}
% ================================================================ % ------------------------------------------------
\section{Exemple de code} \section{Exemple de code}
@ -69,8 +67,7 @@ Cette partie là est beaucoup plus simple.
J'avoue ne pas encore savoir ce que veut bien dire la J'avoue ne pas encore savoir ce que veut bien dire la
valeur de retour. valeur de retour.
% ================================================================ % ------------------------------------------------
\section{En Perl} \index{Perl} \section{En Perl} \index{Perl}
\begin{verbatim} \begin{verbatim}
@ -83,15 +80,7 @@ or die "Could not start client: $@\n";
$client->send(['/proc/kcore', 'i', 61, 's', "bla"]); $client->send(['/proc/kcore', 'i', 61, 's', "bla"]);
\end{verbatim} \end{verbatim}
% ================================================================ % ------------------------------------------------
% nouveau: Sat Jul 15 07:14:10 UTC 2023
\section{Le routage}
WIP...\index{XXX}
% ================================================================
\section{Autres logiciels} \section{Autres logiciels}
@ -101,5 +90,4 @@ Processing\index{Processing},
Chuck\index{Chuck} (page \pageref{chuck-osc}), Chuck\index{Chuck} (page \pageref{chuck-osc}),
\dots \dots
% ================================================================

View File

@ -14,7 +14,7 @@ le graphique. Il ne nécessite pas de système d'exploitation.
\section{Configuration} \section{Configuration}
La configuration de Dosbox est par défaut dans le fichier La configuration de Dosbox est par défaut dans le fichier
\texttt{\$HOME/.dosbox/dosbox-0.74-2.conf}. Vous remarquerez \texttt{~/.dosbox/dosbox-0.74-2.conf}. Vous remarquerez
que le numéro de version est \textbf{dans} le nom de que le numéro de version est \textbf{dans} le nom de
ce fichier. Ce fichier est abondamment commenté. ce fichier. Ce fichier est abondamment commenté.

View File

@ -78,8 +78,6 @@ Je demande à voir\footnote{Parce que c'est écrit par LP ?}.
\section{Translation d'adresse} \section{Translation d'adresse}
\index{NAT} \index{NAT}
% XXX expliquer un peu le NAT !
Voir en page \pageref{NAT} pour découvrir comment utiliser une Voir en page \pageref{NAT} pour découvrir comment utiliser une
machine connectée en WiFi pour donner accès à Internet à votre machine connectée en WiFi pour donner accès à Internet à votre
réseau local Ethernet\dots réseau local Ethernet\dots
@ -89,7 +87,7 @@ défis à relever pour en faire une solution complexe et
amusante à des problèmes inexistants et datant du siècle amusante à des problèmes inexistants et datant du siècle
dernier. dernier.
Par exemple la comparaison de la mise en œuvre du NAT Par exemple la comparaison de la mise en œuvre du NAT
avec \texttt{iptables} et \texttt{pfctl} est une source de trolls avec \texttt{iptable} et \texttt{pfctl} est une source de trolls
sans fin. sans fin.

View File

@ -48,9 +48,6 @@ ou une playlistde fichiers \texttt{.ogg}\index{ogg}.
\textsl{more to come...} \textsl{more to come...}
%------------------------------------------------------------- %-------------------------------------------------------------
% https://github.com/radiofrance/rf-liquidsoap
\section{liquidsoap} \section{liquidsoap}
\index{liquidsoap} \index{liquidsoap}

View File

@ -132,10 +132,6 @@ ffmpeg -nostdin \
wip.mp4 wip.mp4
\end{verbatim} \end{verbatim}
OMFG! Il manque le son.
% -----------------------------------------------------------------
\subsection{Questions} \subsection{Questions}
Comment convertir lors de l'encodage un fichier \texttt{.WAV} Comment convertir lors de l'encodage un fichier \texttt{.WAV}
@ -156,10 +152,9 @@ ffmpeg -f x11grab -video\_size cif -framerate 25 -i :0.0 /tmp/out.mpg
\section{VLC} \index{vlc} \section{VLC} \index{vlc}
VLC est un peu le couteau suisse à 112 lames du multimédia. VLC est un peu le couteau suisse à 112 lames du multimédia.
Son emblème est un cône de chantier, je ne sais pas Son emblème est un cône de chantier, mais je ne sais pas
si ça a un sens caché. Mais soyons sérieux deux minutes. si ça a un sens caché. Mais soyons sérieux deux minutes.
VLC propose une interface \textsl{clickconvi}, VLC propose une interface clickconvi, que nous allons
que nous allons
soigneusement éviter, pour nous concentrer sur la ligne soigneusement éviter, pour nous concentrer sur la ligne
de commande. de commande.
@ -179,8 +174,6 @@ used for retrieving technical information and other
metadata about audio or video files. metadata about audio or video files.
\end{quote} \end{quote}
Et avec du \textbf{Zenitram} dedans \textit{:)}
% -------------------------------------------------------------------- % --------------------------------------------------------------------
\section{MPV} \index{MPV} \section{MPV} \index{MPV}
@ -192,10 +185,6 @@ Et avec du \textbf{Zenitram} dedans \textit{:)}
of different video and audio output methods are supported. of different video and audio output methods are supported.
\end {quote} \end {quote}
Un avantage de Mpv sur ses camarades (Mplayer, Ffplay\dots) est évident
dès que l'on joue une vidéo en boucle~: la transition entre la fin
et le début est propre.
% -------------------------------------------------------------------- % --------------------------------------------------------------------
\section{Autres trucs} \section{Autres trucs}

View File

@ -5,7 +5,8 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <ctype.h> #include <ctype.h>
/*-------------------------------------------------------*/ /*---------------------------------------------------------------------*/
void dump_line(char *titre, char *ligne, int combien) void dump_line(char *titre, char *ligne, int combien)
{ {
int foo; int foo;
@ -18,14 +19,15 @@ for (foo=0; foo<combien; foo++) {
} }
puts(""); puts("");
for (foo=0; foo<combien; foo++) { for (foo=0; foo<combien; foo++) {
printf(" %c ", isprint(ptr[foo]) ? ptr[foo] : ' '); printf(" %c ", isprint(ptr[foo]) ? ptr[foo] : '?');
} }
puts(""); puts("");
} }
/*-------------------------------------------------------*/ /*---------------------------------------------------------------------*/
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
char input[] = "foo bar\tquux wiz"; char input[] = "foo bar quux quiz";
char *cptr, *copie; char *cptr, *copie;
int foo; int foo;
@ -39,16 +41,12 @@ dump_line("1er strtok", copie, sizeof(input));
printf(" got [%s]\n", cptr); printf(" got [%s]\n", cptr);
puts(""); puts("");
puts(" two more strtok...");
cptr = strtok(NULL, " \t"); cptr = strtok(NULL, " \t");
printf(" got [%s]\n", cptr);
cptr = strtok(NULL, " \t"); cptr = strtok(NULL, " \t");
printf(" got [%s]\n", cptr);
dump_line("2eme & 3me strtok", copie, sizeof(input)); dump_line("2eme & 3me strtok", copie, sizeof(input));
foo = cptr - copie;
foo = cptr - copie; /* this is the hack :) */
printf(" index = %d\n", foo); printf(" index = %d\n", foo);
printf(" and we have [%s]\n", input+foo); printf(" and we have [%s]\n", input+foo);
return 0; return 0;
} }
/*---------------------------------------------------------------------*/

View File

@ -65,7 +65,9 @@ Cependant, toute cette ouvrage est en cours de
réécriture avec Mousepad et \LaTeX{} réécriture avec Mousepad et \LaTeX{}
selon la méthode éprouvée dite selon la méthode éprouvée dite
de «~La~Rache~»\index{rache}, de «~La~Rache~»\index{rache},
essentiellement sur une machine Debian/amd64, et peut-être de la essentiellement sur une machine Debian/amd64, avec des
morceaux de Fedora\index{Fedora} Server 33 juste là, à coté,
vers la page \pageref{chap:Fedora} et peut-être de la
Slackware\index{Slackware} qui traine. Slackware\index{Slackware} qui traine.
Mes sources sont assez diverses% Mes sources sont assez diverses%