a 771 lines diff

This commit is contained in:
tTh 2023-10-08 21:56:41 +02:00
parent c6fe2224bf
commit c3e227f472
23 changed files with 339 additions and 42 deletions

View File

@ -553,6 +553,10 @@ décomposer~:
utiliser une liste pré-définie de séparateur de champs, utiliser une liste pré-définie de séparateur de champs,
comme le \$IFS du shell. comme le \$IFS du shell.
Pour simplifier l'exemple, toutes les commandes susceptibles d'être
tapées
seront structurées de la même manière.
\subsection{la fonction \texttt{strtok}} \index{strtok} \subsection{la fonction \texttt{strtok}} \index{strtok}
Cette fonction nous permet de « découper » notre ligne de commande Cette fonction nous permet de « découper » notre ligne de commande
@ -580,21 +584,26 @@ on peut ensuite aller regarder dans la mémoire ce qui s'y passe~:
66 6f 6f 20 20 20 62 61 72 09 71 75 75 78 20 77 69 7a 00 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 f o o b a r q u u x w i z
--- 1er strtok --- 1er strtok
66 6f 6f 00 20 20 62 61 72 09 71 75 75 78 20 77 69 7a 00 66 6f 6f \0 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 f o o b a r q u u x w i z
got [foo] got [foo]
\end{verbatim} \end{verbatim}
Déja on peut constater que la chaine de départ est modifiée, ce qui Donc, \texttt{strtok} a détecté le premier caractère de séparation,
ici un espace, qui est juste après le premier mot de la ligne à analyser,
et l'a remplacé par un '\symbol{92}0', le marqueur de fin de chaine.
Le premier mot (foo) a bien été isolé.
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. risque de causer des soucis, mais on en parlera plus tard.
\subsection{Le programme complet} \subsection{Le programme complet}
\lstinputlisting[language=c]{code/C/demo-strtok.c} \lstinputlisting[language=c]{code/C/demo-strtok.c}
% ========================================================= % =========================================================
\section{Erreurs classiques} \section{Erreurs classiques}
@ -620,6 +629,8 @@ pièges fourbes et sournois. Sans parler des UBs, hein\dots
XXX \index{XXX} XXX \index{XXX}
Un ordinateur est déterministe.
% ========================================================= % =========================================================
\section{Debug} \index{Debug} \section{Debug} \index{Debug}
@ -656,6 +667,8 @@ https://devblogs.microsoft.com/oldnewthing/20230109-00/?p=107685
\section{Dessiner} \section{Dessiner}
% XXX insert blabla here
\subsection{G2} \index{g2} \label{g2} \subsection{G2} \index{g2} \label{g2}
\begin{quote} \begin{quote}
@ -667,6 +680,9 @@ types of devices.
\lstinputlisting[language=c]{code/g2/un_dessin.c} \lstinputlisting[language=c]{code/g2/un_dessin.c}
%
% XXX EXEMPLE TROP MINIMALISTE !!!
%
% ========================================================= % =========================================================

View File

@ -127,12 +127,16 @@ Partie imaginaire : \texttt{ipart = aimag(cmplx)}.
Une « structure », c'est comme une petite boite dans laquelle on peut Une « structure », c'est comme une petite boite dans laquelle on peut
mettre des variables de différentes natures. mettre des variables de différentes natures.
Les accès à chacune de ces variables sont idépendants les uns des autres.
\begin{lstlisting} \begin{lstlisting}
type t_pixrgb type t_pixrgb
integer :: r, g, b integer :: r, g, b
integer :: alpha = 0 integer :: alpha = 0
end type end type
t_pixrgb :: pixel
pixel%r = 0x55
\end{lstlisting} \end{lstlisting}
Nous verrons plus loin l'importance de cette notion. Nous verrons plus loin l'importance de cette notion.

View File

@ -17,6 +17,8 @@ in the United States used for the purposes of trading information,
sharing news, discussing new and exciting developments, sharing news, discussing new and exciting developments,
and collaborating on research results and projects.} and collaborating on research results and projects.}
% ==================================================================
\section{slrn} \section{slrn}
\index{slrn} \index{slrn}
\label{slrn} \label{slrn}
@ -31,12 +33,18 @@ be extended using the embedded S-Lang interpreter.
printf 'set wrap_flags 7\nset wrap_width 72\n' >> .slrnrc printf 'set wrap_flags 7\nset wrap_width 72\n' >> .slrnrc
\end{verbatim} \end{verbatim}
% ==================================================================
\section{leafnode} \section{leafnode}
\index{leafnode} \index{leafnode}
Leafnode est l'outil essentiel si on désire troller au fond du jardin, Leafnode est l'outil essentiel si on désire troller au fond du jardin,
en dehors du rayon d'action de sa box.\index{troll} On peut le voir en dehors du rayon d'action de sa box.\index{troll} On peut le voir
comme une sorte de proxy, mais pas que. comme une sorte de proxy, mais pas que. Il permet aussi d'agréguer
plusieurs feeds, ce qui permet de combler les trous, et de donner accès
à Usenet à votre réseau local.
% ==================================================================
\section{INN} \section{INN}
\index{INN} \index{INN}
@ -44,8 +52,11 @@ comme une sorte de proxy, mais pas que.
Voilà, c'est le moment de parler de l'engin fondamental de ce réseau Voilà, c'est le moment de parler de l'engin fondamental de ce réseau
de discussions. INN. de discussions. INN.
% ==================================================================
\section{fufe} \index{fufe} \section{fufe} \index{fufe}
\textbf{It's a trap !} N'y allez pas, \textbf{It's a trap !}
.
% ==================================================================

View File

@ -1,6 +1,18 @@
\chapter{X11} \chapter{X11}
\label{chap:X11}\index{X11} \label{chap:X11}\index{X11}
L'écosysteme X11 semble être en fin de carrière pour plusieurs
raisons~: sa complexité
\textsl{mille-feuilles} accumulée au fil des décennies, ses
failles de sécurité réelles ou potentielles, la difficulté
de sa maintenance; raisons qui trainent depuis trop
longtemps\dots
À l'heure actuelle (Octobre 2023) le successeur/remplaçant du
vénérable X11 « \texttt{Wayland}\index{wayland} » commence tout
juste à arriver dans les distributions Linux et à la
page \pageref{chap:wayland}. Mais il reste un long chemin
à parcourir pour une transition sans larme.
%------------------------------------------------------------------- %-------------------------------------------------------------------
\section{Les fontes} \section{Les fontes}

View File

@ -1,7 +1,9 @@
\chapter{Bases de données} \chapter{Bases de données}
\label{chap:bdd} \label{chap:bdd} \index{SQL}
% ---------------------------------------------------------------- % ----------------------------------------------------------------
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\section{sqlite} \index{sqlite} \section{sqlite} \index{sqlite}
@ -13,15 +15,60 @@
% ---------------------------------------------------------------- % ----------------------------------------------------------------
\subsection{Libreoffice} \index{Libreoffice} \subsection{Libreoffice} \index{Libreoffice}
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\section{GDBM} \index{GDBM} \section{GDBM} \index{GDBM}
Alors là, carrément du vieux truc...
\begin{quote}
GDBM - The GNU database manager. Includes dbm and ndbm compatibility.
\end{quote}
Gnu DBM permet de stocker des paires clef/valeur dans un fichier
de données. Chacune de ces clefs doit être unique, et doit être
liée avec une seule valeur\footnote{Peut-on alors parler
de bijection relationnelle ?}.
% ---------------------------------------------------------------- % ----------------------------------------------------------------
\subsection{Exemple en Perl} \index{Perl}
\begin{verbatim}
#!/usr/bin/perl -w
use strict;
use GDBM_File;
my $nomdb = "exemple.gdbm";
my (%DB, @champs);
my ($user, $gecos);
open(SOURCE, "< /etc/passwd") or die "source $!";
tie(%DB, "GDBM_File", $nomdb, GDBM_WRCREAT, 0666) or die "gdbm $!";
while (<SOURCE>) {
@champs = split ":", $_;
$user = $champs[0]."\0";
$gecos = $champs[4]."\0";
$DB{$user} = $gecos;
}
untie %DB;
close SOURCE;
0;
\end{verbatim}
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\section{Postgresql} \section{Postgresql}
Le poids lourd du domaine.
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
\section{Et le "NoSQL" ?} \index{nosql} \index{troll}
% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

View File

@ -69,22 +69,23 @@ XXX\index{XXX}
\section{Exemples pratiques} \section{Exemples pratiques}
Dans un Makefile~: Dans un Makefile\footnote{Les makefiles, c'est le bien !}~:
\begin{verbatim} \begin{verbatim}
indoor.gif: $(DEPS) indoor.gif: $(DEPS)
convert \ convert \
`ls -rt1 frames/indoor/????.png | tail -99` \ `ls -rt1 frames/indoor/????.png | tail -99` \
-delay 120 \ -delay 120 \
-resize 28% \ -resize 28% \
-normalize \ -normalize \
-colorspace gray \ -colorspace gray \
-colors 31 \ -colors 31 \
-dither none \ -dither none \
$@ $@
\end{verbatim} \end{verbatim}
% ================================================================== % ==================================================================
\section{gifsicle} \section{gifsicle}

View File

@ -66,6 +66,8 @@ le résultat de ce script en « pour de vrai ».}
\section{Paramétrer la plume} \section{Paramétrer la plume}
Largeur, couleur, odeur, toussa.
% ------------------------------------------------------------------- % -------------------------------------------------------------------
\section{La 3D avec \texttt{splot}} \index{splot} \section{La 3D avec \texttt{splot}} \index{splot}
@ -78,8 +80,21 @@ gnuplot> help set view
supports orthographic projections only. It supports both 3D projection or supports orthographic projections only. It supports both 3D projection or
orthogonal 2D projection into a 2D plot-like map. orthogonal 2D projection into a 2D plot-like map.
% -------------------------------------------------------------------
\section{Des trucs...}
Comment générer un signal carré~:
% https://lcamtuf.substack.com/p/square-waves-or-non-elephant-biology
\begin{verbatim}
set samples 2000
odd_h(x, n) = sin(x * (2*n - 1)) / (2*n - 1)
plot sum [n=1:20] 4/pi * odd_h(x, n)
\end{verbatim}
% ------------------------------------------------------------------- % -------------------------------------------------------------------
\section{Questions} \section{Questions}

View File

@ -4,14 +4,14 @@
% ----------------------------------------------------------- % -----------------------------------------------------------
\section{Joystick}\index{joystick} \section{Joystick}\index{joystick}
La manette de jeu est un périphérique que j'affectionne particulièrement.
\begin{verbatim} \begin{verbatim}
int foo, joy_fd; int foo, joy_fd;
struct js_event js; struct js_event js;
joy_fd = open(joy_device , O_RDONLY); joy_fd = open(joy_device , O_RDONLY);
foo = read(joy_fd, &js, sizeof(struct js_event)); foo = read(joy_fd, &js, sizeof(struct js_event));
\end{verbatim} \end{verbatim}
% ----------------------------------------------------------- % -----------------------------------------------------------
@ -23,6 +23,19 @@ y a des accrocs dans le plan, que le résultat n'est
qu'une video totalement noire de 17 minutes. qu'une video totalement noire de 17 minutes.
dmesg, lshw, lsusb, lspci\dots dmesg, lshw, lsusb, lspci\dots
% -----------------------------------------------------------
% new: Fri Sep 22 11:13:36 UTC 2023
\subsection{lshw} \index{lshw}
\begin{quote}
lshw is a small tool to extract detailed information on the hardware
configuration of the machine. It can report exact memory configuration,
firmware version, mainboard configuration, CPU version and speed, cache
configuration, bus speed, etc. on DMI-capable x86 or IA-64 systems and
on some PowerPC machines (PowerMac G4 is known to work).
\end{quote}
% ----------------------------------------------------------- % -----------------------------------------------------------
\section{Ports série} \section{Ports série}
\index{rs232} \label{rs232} \index{rs232} \label{rs232}

View File

@ -228,8 +228,10 @@ Ce sera, pour vous amis lecteurs, une dure mission à assumer.
\subsection{Ressources} \subsection{Ressources}
Le futur livre de Brunus. Réclamez les prmiers drafts dans Le futur livre de Brunus.
l'IRC\index{IRC} \texttt{freenode\#paulla} \textit{:)}
Réclamez les prmiers drafts dans
l'IRC\index{IRC} \texttt{libera.chat\#paulla} \textit{:)}
\texttt{http://www.fmwconcepts.com/imagemagick/index.php} \texttt{http://www.fmwconcepts.com/imagemagick/index.php}

View File

@ -9,18 +9,25 @@ Prenons rapidement un exemple, le baton de joie\index{joystick}
dans Linux. dans Linux.
\begin{verbatim} \begin{verbatim}
int foo, joy_fd; int joy_fd;
struct js_event js;
char joy_name[128]; char joy_name[128];
joy_fd = open(joy_device , O_RDONLY); joy_fd = open(joy_device , O_RDONLY);
if (ioctl(joy_fd, JSIOCGNAME(sizeof(joy_name)), joy_name) < 0)
strncpy(joy_name, "Unknown", sizeof(joy_name));
fprintf(stderr, "Name: \"%s\"\n", joy_name);
\end{verbatim} \end{verbatim}
La macro \texttt{JSIOCGNAME} étant définie dans le fichier
\texttt{/usr/include/linux/joystick.h} comme
\texttt{\_IOC(\_IOC\_READ, 'j', 0x13, len)}.
Bon, OK, j'aurais pu choisir un exemple plus simple,
mais vous avez capté le principe\dots
% ========================================================= % =========================================================
\vspace{5em}
Ailleurs dans ce document : Ports série (p. \pageref{rs232}) Ailleurs dans ce document : Ports série (p. \pageref{rs232})
% ========================================================= % =========================================================

View File

@ -1,7 +1,14 @@
\chapter{scripting} \chapter{scripting}
XXX
\section{Awk} \index{Awk} \section{Awk} \index{Awk}
Awk est un langage de programmation crée
par Aho, Kernighan, and Weinberger%
\footnote{The AWK Programming Language, Alfred V. Aho,
Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988.
ISBN 0-201-07981-X. }.
Quelques \textsl{oneliners} de bon aloi pour vous donner Quelques \textsl{oneliners} de bon aloi pour vous donner
une idée du langage\dots une idée du langage\dots

View File

@ -8,21 +8,36 @@ bricolages constructifs et/ou amusant. Il y aura du gore\index{gore}
aussi, parce que le shell est à la fois un interpréteur de commande aussi, parce que le shell est à la fois un interpréteur de commande
et un langage de programmation. et un langage de programmation.
Ces deux notions ont beaucoup de choses en commun, comme nous Ces deux notions ont beaucoup de choses en commun, comme nous
allons essayer de le voir. allons essayer de le voir. Certains qualifient le shell de
« langage de glue », et c'est une image assez pertinente.
Nous allons nous concentrer sur le \textsl{Bourne again shell} Nous allons nous concentrer sur le \textsl{Bourne again shell}
(aka \texttt{bash}\footnote{aka GNU/shell ?}) qui est un des plus (aka \texttt{bash}\footnote{aka GNU/shell ?}) qui est un des plus
répandus, du moins dans le monde Linux\index{Linux}. répandus, du moins dans le monde Linux\index{Linux}.
Mais il en existe d'autres : sh, ksh, ash, zsh, tthsh\dots Mais il en existe d'autres : sh, ksh, ash, zsh, tthsh\dots
Ce qui, bien entendu, pose quelques problèmes de compatibilité.
Ou alors, il faut reste \textsc{posix}, mais c'est pour le moment
une autre histoire. Parce que là, on est plutôt dans une optique
« morefun » sur l'utilisation de nos machines.
% ============================================================== % ==============================================================
\section{Interpréteur}\index{cli} \section{Interpréteur}\index{cli}
Ceci est un prompt. Son petit nom est \texttt{PS1}. On peut y Ceci est un prompt : \texttt{tth@redlady:\textasciitilde\$}.
Son petit nom est \texttt{PS1}. On peut y
mettre plein d'informations utiles et de \textsl{mises en forme} assez mettre plein d'informations utiles et de \textsl{mises en forme} assez
funky\footnote{Un peu de calme, fatalerrors !} permettant funky\footnote{Un peu de calme, fatalerrors !} permettant
d'enhancer la reliability de votre UI/UX. d'enhancer la reliability de votre UI/UX. Mais surtout il est
là pour indiquer qu'il attend vos ordres, qu'il est prèt à
interpréter vos lignes de commandes.
\begin{verbatim}
tth@redlady:~$ date --utc
Thu Oct 5 00:53:01 UTC 2023
tth@redlady:~$
\end{verbatim}
% ============================================================== % ==============================================================
@ -57,13 +72,80 @@ Une invention géniale, dont vous pouvez voir un exemple d'utilisation
par un gadget sonore en page \pageref{say-uptime} et par un gadget sonore en page \pageref{say-uptime} et
un bout de code C en page \pageref{filtre-unix}. un bout de code C en page \pageref{filtre-unix}.
Exemple rapide~: Exemple rapide, où la commande \texttt{uptime} envoie sa sortie dans
le tuyau, et la commande \texttt{tr} va lire le tuyau pour
son entrée~:
\begin{verbatim} \begin{verbatim}
$ uptime | tr " " "X" $ uptime | tr ' ' 'X'
X09:22:29XupX33Xdays,X14:00,XX8Xusers,XXloadXaverage:X0.12,X0.17,X0.17 X09:22:29XupX33Xdays,X14:00,XX8Xusers,XXloadXaverage:X0.12,X0.17,X0.17
\end{verbatim} \end{verbatim}
Bien entendu, on peut utiliser plusieurs tuyaux pour construire
une chaine de traitements\footnote{La
chaine de compilation \textsc{eqn/tbl/roff} est un bon exemple}.
On peut même « intercepter » ce qui transite par un des tuyaux.
\begin{verbatim}
$
\end{verbatim}
% ==============================================================
\section{Les fonctions}
Une bonne manière de rendre votre code modulaire, et de réutiliser
des bouts de code à volonté depuis plusieurs programmes.
Voici quelques fonctions~:
\lstinputlisting{code/shell/fonctions.sh}
Et comment les utiliser~:
\lstinputlisting{code/shell/demofonctions.sh}
% ==============================================================
% https://bwog-notes.chagratt.site/2023/le-heredoc/
\section{Heredoc}
Un nom difficile à traduire, peut-être par « document en place » ?
\lstinputlisting{code/shell/heredoc.sh}
\begin{verbatim}
tth@redlady:~/Devel/TetaTricks$ code/shell/heredoc.sh
1 +--------------------------------------------------------------------+
| +** *** + + + + |
0.8 |-+.......**..........:.**.......:..........:.........sin(x).*******-|
| ** : : * : : : : |
0.6 |-+....**..:..........:....**....:..........:..........:..........:+-|
| * : : * : : : : |
0.4 |-+.**.....:..........:.......*..:..........:..........:..........:+-|
| * : : * : : : : |
0.2 |-*........:..........:.........**..........:..........:..........:+-|
|* : : * : : : |
0 |-+........:..........:..........:**........:..........:..........:+-|
| : : : * : : : *|
-0.2 |-+........:..........:..........:..**......:..........:..........:*-|
| : : : * : : * |
-0.4 |-+........:..........:..........:.....*....:..........:........**:+-|
| : : : * : : * : |
-0.6 |-+........:..........:..........:.......**.:..........:.....**...:+-|
| : : : *: : ** : |
-0.8 |-+........:..........:..........:..........**.........:..**......:+-|
| + + + + *** +** + |
-1 +--------------------------------------------------------------------+
0 1 2 3 4 5 6
\end{verbatim}
Je pense que l'exemple est assez parlant.
Pour un exemple plus complet, toujours avec gnuplot, c'est vers la
page \pageref{chap:gnuplot}.
% ============================================================== % ==============================================================
\section{Les \textsl{locales}} \section{Les \textsl{locales}}
\index{locales} \index{locales}

View File

@ -59,6 +59,28 @@ D'un autre coté, c'est \texttt{roff} qui est utilisé pour formater
les pages du manuel Unix. La documentation, c'est important. les pages du manuel Unix. La documentation, c'est important.
C'est pour ça que j'en cause page \pageref{chap:manpages}. C'est pour ça que j'en cause page \pageref{chap:manpages}.
Voyons rapidement un exemple minumum compilable. XXX
\subsection{eqn}
\begin{quote}
\texttt{eqn} compiles descriptions of equations embedded within troff
input files into commands that are understood by troff.
\end{quote}
\subsection{tbl}
\begin{quote}
\texttt{tbl} compiles descriptions of tables embedded within troff
input files into commands that are understood by troff.
\end{quote}
\subsection{pic}
\begin{quote}
\texttt{pic} compiles descriptions of pictures embedded within troff
input files into commands that are understood by troff.
\end{quote}
%------------------------------------------------------------- %-------------------------------------------------------------
\section{yodl} \section{yodl}
@ -76,6 +98,8 @@ and texinfo, a poor-man's text converter and an experimental xml converter.
\section{zoem} \section{zoem}
\index{zoem} \index{zoem}
General-purpose macro/programming language for transforming text
\begin{quote} \begin{quote}
Zoem is a language for transforming text. It supports the creation of Zoem is a language for transforming text. It supports the creation of
light-weight mark-up languages as macro packages built on top of zoem. light-weight mark-up languages as macro packages built on top of zoem.

View File

@ -24,7 +24,8 @@ Et c'est là que les ennuis potentiels débarquent :
les jours, «~ils vont se marcher sur les pieds~». les jours, «~ils vont se marcher sur les pieds~».
D'un autre coté, ce paradigme permet de faire des choses assez D'un autre coté, ce paradigme permet de faire des choses assez
choupi, comme un synthétiseur d'évènement. choupi, comme un « synthétiseur d'évènement», notion que noue allons
bientôt contempler.
% ---------------------------------------------------------------- % ----------------------------------------------------------------
\section{Un exemple} \section{Un exemple}

View File

@ -136,6 +136,38 @@ OMFG! Il manque le son.
% ----------------------------------------------------------------- % -----------------------------------------------------------------
\subsection{Capturer une vidéo}
%
% mais où ai-je bien pu trouver ça ?
%
\begin{verbatim}
read -p "*** Press Enter to start recording ***"
"$FFMPEGBIN" \
-thread_queue_size 512 \
-r "$RATE" \
-f v4l2 \
-video_size "$SIZE" \
-i "$VIDEODEVICE" \
-crf 0 \
-c:v libx264 \
-preset ultrafast \
-threads 4 \
"$FILENAME"
\end{verbatim}
C'est un peu rudimentaire, mais il doit être possible de
\textsl{tweaker} ça avec d'autres options, genre fixer
la durée de la capture.
% -----------------------------------------------------------------
\subsection{Questions} \subsection{Questions}
Comment convertir lors de l'encodage un fichier \texttt{.WAV} Comment convertir lors de l'encodage un fichier \texttt{.WAV}

7
chap/wayland.tex Normal file
View File

@ -0,0 +1,7 @@
\chapter{Wayland}
\label{chap:wayland} \index{wayland}
L'avenir sans X11 ?\index{X11}

View File

@ -38,7 +38,8 @@ ioctl: VIDIOC_ENUM_FMT
\end{verbatim} \end{verbatim}
Question : quelle méthode utiliser pour avoir la même chose avec Question : quelle méthode utiliser pour avoir la même chose avec
des lignes de code écrites en C ? des lignes de code écrites en C ? Il faut passer par une suite d'appels
\texttt{ioctl}\index{ioctl}.
% -------------------------------------------------------------------- % --------------------------------------------------------------------

View File

@ -1,5 +1,7 @@
/* /*
* demo strtok * +-------------+
* | demo strtok |
* +-------------+
*/ */
#include <stdio.h> #include <stdio.h>
@ -14,7 +16,8 @@ unsigned char *ptr;
printf(" --- %s\n", titre); printf(" --- %s\n", titre);
ptr = (unsigned char *)ligne; ptr = (unsigned char *)ligne;
for (foo=0; foo<combien; foo++) { for (foo=0; foo<combien; foo++) {
printf("%02x ", ptr[foo]); if (ptr[foo]) printf("%02x ", ptr[foo]);
else printf("\\0 ");
} }
puts(""); puts("");
for (foo=0; foo<combien; foo++) { for (foo=0; foo<combien; foo++) {
@ -49,6 +52,6 @@ dump_line("2eme & 3me strtok", copie, sizeof(input));
foo = cptr - copie; /* this is the hack :) */ 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

@ -1,7 +1,3 @@
/*
* Hello, Sun.
*/
#include <stdio.h> #include <stdio.h>
int main(int argc, char *argv[]) int main(int argc, char *argv[])

3
code/shell/demofonctions.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
. ./fonctions.sh
message "hello world"

5
code/shell/fonctions.sh Normal file
View File

@ -0,0 +1,5 @@
#!/bin/sh
message ()
{
echo $1 | boxes
}

7
code/shell/heredoc.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
gnuplot << __EOC__
set term dumb
set grid
plot [x=0:pi*2] sin(x)
__EOC__

View File

@ -126,6 +126,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
\input{chap/webcam} \input{chap/webcam}
% \input{chap/SCSI} % \input{chap/SCSI}
\input{chap/X11} \input{chap/X11}
\input{chap/wayland} % nouveau septembre 2023
\input{chap/Fortran} \input{chap/Fortran}
\input{chap/scripting} \input{chap/scripting}
\input{chap/Arduino} \input{chap/Arduino}
@ -152,7 +153,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
\input{chap/Bonjour} \input{chap/Bonjour}
\input{chap/ioctl} \input{chap/ioctl}
\input{chap/debug} \input{chap/debug}
\input{chap/buzybox} % \input{chap/buzybox}
\input{chap/gif89a} \input{chap/gif89a}
\input{chap/IRC} \input{chap/IRC}
% \input{chap/SCCS} % nouveau 18 mars 2021 % \input{chap/SCCS} % nouveau 18 mars 2021
@ -166,7 +167,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
\input{chap/bdd} % nouveau 26 octobre 2022 \input{chap/bdd} % nouveau 26 octobre 2022
\input{chap/slang} \input{chap/slang}
\input{chap/curses} \input{chap/curses}
\input{chap/openwrt} % \input{chap/openwrt}
\input{chap/WiFi} \input{chap/WiFi}
% \input{chap/GIT} % \input{chap/GIT}
\input{chap/divers} \input{chap/divers}