Compare commits
No commits in common. "6a025f950316f51575baa9e1a9bb5e5fca3aa22f" and "66bc3d19c451aad80418b5a8fdef6023ae93a5c5" have entirely different histories.
6a025f9503
...
66bc3d19c4
81
chap/C.tex
81
chap/C.tex
@ -103,7 +103,7 @@ Il est temps de préciser les détails.
|
|||||||
Une fonction a un unique point d'entrée\footnote{Qui a déja joué
|
Une fonction a un unique point d'entrée\footnote{Qui a déja joué
|
||||||
avec le ENTRY du Fortran ?}, avec une éventuelle liste
|
avec le ENTRY du Fortran ?}, avec une éventuelle liste
|
||||||
de paramètres,
|
de paramètres,
|
||||||
et une tout aussi éventuelle unique valeur de retour.
|
et une tout aussi éventuelel unique valeur de retour.
|
||||||
|
|
||||||
XXX\index{XXX}
|
XXX\index{XXX}
|
||||||
|
|
||||||
@ -114,11 +114,8 @@ XXX\index{XXX}
|
|||||||
|
|
||||||
Il est évident qu'un logiciel qui n'a aucun moyen de communiquer
|
Il est évident qu'un logiciel qui n'a aucun moyen de communiquer
|
||||||
avec le monde extérieur a bien moins d'utilité qu'un bon ed.
|
avec le monde extérieur a bien moins d'utilité qu'un bon ed.
|
||||||
Dans le schéma «~classique~» d'une utilisation interactive,
|
Dans le schéma «~classique~», ces échanges ont lieu par
|
||||||
ces échanges ont lieu par
|
le truchement d'un terminal.
|
||||||
le truchement d'un terminal, qui peut tout aussi bien
|
|
||||||
être une \textsl{real glasstty} ou une fenêtre d'un émulateur
|
|
||||||
graphique de terminal, comme \texttt{xterm}.
|
|
||||||
|
|
||||||
\subsection{Les trois flux canoniques}
|
\subsection{Les trois flux canoniques}
|
||||||
|
|
||||||
@ -271,55 +268,6 @@ Avez-vous bien révisé la section qui cause des pointeurs ?
|
|||||||
À ne plus savoir où peut être la tête de lecture ?
|
À ne plus savoir où peut être la tête de lecture ?
|
||||||
Alors les subtilités de \texttt{scanf} vont vous plaire.
|
Alors les subtilités de \texttt{scanf} vont vous plaire.
|
||||||
|
|
||||||
Nous allons commencer par un exemple simple~: la lecture
|
|
||||||
de deux nombres entiers depuis l'entrée standard.
|
|
||||||
Les valeurs lues seront stockée dans deux variables
|
|
||||||
de type \texttt{int}.
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
#include <stdio.h>
|
|
||||||
...
|
|
||||||
int foo, bar, nbread;
|
|
||||||
nbread = scanf("%d %d", &foo, &bar);
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
Le premier argument est une chaine de caractères contenant
|
|
||||||
des directives de conversion, semblables à celles
|
|
||||||
du printf.
|
|
||||||
Dans cette exemple, nous avons deux fois \texttt{"\%d"}
|
|
||||||
séparées par une espace. Cette directive veut dire
|
|
||||||
« lire les chiffres qui arrivent et les convertir
|
|
||||||
en nombre entier quand il n'y en a plus », une
|
|
||||||
simple règle de conversion.
|
|
||||||
|
|
||||||
Les deux arguments suivants sont les adresses des deux variables
|
|
||||||
destinées à recevoir les valeurs lues,
|
|
||||||
ou, en langage commun « faut mettre ÇA LÀ ».
|
|
||||||
Ce sont donc des pointeurs, on les reconnait au
|
|
||||||
caractère \& qui précède leur nom.
|
|
||||||
|
|
||||||
Quand à la valeur retournée par la fonction scanf, elle
|
|
||||||
présente un grand intérêt car elle contient le nombre
|
|
||||||
de lectures élémentaires qui se sont bien passées.
|
|
||||||
Tous les cas d'erreur ne sont pas couvert, mais c'est
|
|
||||||
suffisant pour traiter les cas simples de la discipline.
|
|
||||||
|
|
||||||
Donc, en toute rigueur, le code que nous venons de voir
|
|
||||||
devrait s'écrire, en utilisant comme il se doit
|
|
||||||
le \textsl{yoda coding} pour le test de cette valeur
|
|
||||||
de retour~:
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
...
|
|
||||||
int foo, bard;
|
|
||||||
if (2 != scanf("%d %d", &foo, &bar)) {
|
|
||||||
fputs("FAIL\n", stderr)
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
...
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
|
|
||||||
\textit{To be continued...}
|
\textit{To be continued...}
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% ---------------------------------------------------------
|
||||||
@ -414,14 +362,12 @@ page \pageref{pipeline}.
|
|||||||
|
|
||||||
\textbf{Ah, enfin, on a failli attendre !}
|
\textbf{Ah, enfin, on a failli attendre !}
|
||||||
|
|
||||||
Qu'est-ce qu'un pointeur ?
|
Qu'est-ce qu'un pointeur ? La réponse est multiple, et c'est
|
||||||
La réponse est multiple et parfois obscure, et c'est
|
|
||||||
le pointeur qui fait à la fois la force et la faiblesse du C.
|
le pointeur qui fait à la fois la force et la faiblesse du C.
|
||||||
Pour faire simple, un pointeur est une variable qui contient
|
Pour faire simple, un pointeur est une variable qui contient
|
||||||
l'adresse dans la mémoire d'une autre variable.
|
l'adresse dans la mémoire d'une autre variable.
|
||||||
|
|
||||||
Mais en fait c'est un peu plus subtil :
|
Mais en fait c'est un peu plus subtil : un pointeur « connait » la taille
|
||||||
un pointeur « connait » le type (donc la taille)
|
|
||||||
de l'objet pointé, et peut donc « parcourir » un tableau de ces objets.
|
de l'objet pointé, et peut donc « parcourir » un tableau de ces objets.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
@ -431,24 +377,14 @@ ptr = tableau; // *ptr désigne tableau[0];
|
|||||||
ptr++; // *ptr désigne tableau[1];
|
ptr++; // *ptr désigne tableau[1];
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
\index{XXX}
|
XXX il y a beaucoup à dire, et de quoi bien rire \textsl{:)}
|
||||||
XXX il y a encore beaucoup à dire, et de quoi bien rire \textsl{:)}
|
|
||||||
|
|
||||||
% https://hackthedeveloper.com/function-pointer-in-c/
|
% https://hackthedeveloper.com/function-pointer-in-c/
|
||||||
|
|
||||||
\subsection{Pointeurs et chaines}
|
|
||||||
|
|
||||||
\subsection{Pointeurs et fonctions}
|
|
||||||
|
|
||||||
Exemple classique : qsort.
|
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
|
||||||
\section{Le préprocesseur}\index{cpp}
|
\section{Le préprocesseur}\index{cpp}
|
||||||
|
|
||||||
\textbf{Attention !} L'utilisation abusive du préprocesseur
|
|
||||||
peut générer des trolls de plusieurs centaines de posts.
|
|
||||||
|
|
||||||
Nous avons déja abordé de loin la directive \texttt{\#include},
|
Nous avons déja abordé de loin la directive \texttt{\#include},
|
||||||
qui fait partie du préprocesseur, comme toutes les lignes
|
qui fait partie du préprocesseur, comme toutes les lignes
|
||||||
de code commençant par le caractère \textbf{\#}.
|
de code commençant par le caractère \textbf{\#}.
|
||||||
@ -475,10 +411,7 @@ pour être traduite en codes opératoires, dont l'exécution
|
|||||||
affichera une maxime dont la véracité demande à être vérifiée
|
affichera une maxime dont la véracité demande à être vérifiée
|
||||||
par l'expérimentation. Mais ça n'est pas fini.
|
par l'expérimentation. Mais ça n'est pas fini.
|
||||||
|
|
||||||
Ce sympathique \textsf{préproc'}%
|
Ce sympathique \textsf{préproc'} nous permet aussi de faire
|
||||||
\footnote{Certains l'appellent même tendrement « mon cépépé »
|
|
||||||
avec un regard de guimauve mal grillée.}
|
|
||||||
nous permet aussi de faire
|
|
||||||
de la compilation conditinnelle, et ça, c'est cool parce que
|
de la compilation conditinnelle, et ça, c'est cool parce que
|
||||||
ça ouvre la porte à plein de choses.
|
ça ouvre la porte à plein de choses.
|
||||||
Par exemple, l'instrumentation du code afin de faciliter
|
Par exemple, l'instrumentation du code afin de faciliter
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
\chapter{DMX512}
|
|
||||||
\index{DMX} \label{chap:DMX}
|
|
||||||
|
|
||||||
% -----------------------------------------------------
|
|
||||||
|
|
||||||
D'après Wikipédia :
|
|
||||||
|
|
||||||
\begin{quote}
|
|
||||||
Le DMX512 (Digital Multiplexing) est une norme de transmission de données
|
|
||||||
utilisée pour le contrôle de l'éclairage et des effets de scène dans le spectacle
|
|
||||||
vivant.
|
|
||||||
|
|
||||||
Le protocole DMX512 (qui utilise généralement une liaison
|
|
||||||
suivant la norme EIA RS 485 et cadencée à 250 kb/s) permet
|
|
||||||
de contrôler 512 canaux (9 bits d'adressage) en affectant à
|
|
||||||
chacun une valeur comprise entre 0 et 255 (8 bits de données par
|
|
||||||
canal). La transmission numérique unidirectionnelle se fait de
|
|
||||||
façon sérialisée par liaison symétrique, et chaque appareil
|
|
||||||
reçoit en même temps l'ensemble des 512 valeurs (ce qui est
|
|
||||||
appelée une « trame » DMX).
|
|
||||||
\end{quote}
|
|
||||||
|
|
||||||
% -----------------------------------------------------
|
|
||||||
\section{Open Light Architecture} \index{OLA}
|
|
||||||
|
|
||||||
https://ryderdamen.com/blog/enttec-open-dmx-on-linux/
|
|
||||||
|
|
||||||
% -----------------------------------------------------
|
|
||||||
\section{Enttec OpenDMX}
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
Bus 001 Device 027: ID 0403:6001
|
|
||||||
Future Technology Devices International, Ltd FT232 Serial (UART) IC
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
look at \texttt{tcsendbreak} !
|
|
||||||
|
|
||||||
% -----------------------------------------------------
|
|
||||||
|
|
||||||
% -----------------------------------------------------
|
|
||||||
|
|
||||||
% -----------------------------------------------------
|
|
||||||
|
|
@ -4,9 +4,7 @@
|
|||||||
|
|
||||||
Vous allez bien dire : « Encore un truc de vieux\dots ».
|
Vous allez bien dire : « Encore un truc de vieux\dots ».
|
||||||
Oui, peut-être, mais il y a quand même pas mal d'usages
|
Oui, peut-être, mais il y a quand même pas mal d'usages
|
||||||
assez cools pour ces technologies du passé, l'auto-radio
|
assez cools pour ces technologies du passé. Nous allons
|
||||||
de votre vieille voiture, par exemple.
|
|
||||||
Nous allons
|
|
||||||
en explorer quelques uns.
|
en explorer quelques uns.
|
||||||
|
|
||||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++
|
% ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
@ -14,43 +12,14 @@ en explorer quelques uns.
|
|||||||
|
|
||||||
\section{CD Audio}
|
\section{CD Audio}
|
||||||
|
|
||||||
Un CD audio ne contient pas de système de fichier, il ne peut
|
|
||||||
donc pas être lu de manière conventionnelle.
|
|
||||||
Il faut donc passer par des logiciels adaptés, qui vont
|
|
||||||
directement aller dire le contenu du disque, puis
|
|
||||||
convertir les pistes en fichiers audio conventionnels.
|
|
||||||
|
|
||||||
\subsection {Riping}
|
\subsection {Riping}
|
||||||
\index{abcde} \index{cdparanoia}
|
|
||||||
|
|
||||||
Le \textsl{ripage} est l'action d'extraire les pistes d'un
|
Le \textsl{ripage} est l'action d'extraire les pistes d'un
|
||||||
cd audio pour les convertir en fichier numérique audio
|
cd audio pour les convertir en fichier numérique audio.
|
||||||
au format désiré.
|
|
||||||
Il existe plusieurs méthodes, la première va vous satisfaire,
|
|
||||||
et nous verrons (peut-être) les autres la semaine prochaine.
|
|
||||||
|
|
||||||
Un des outils utilisés est \texttt{cdparanoia}. Les nombreuses
|
Un des outils utilisés est \texttt{cdparanoia}. Les nombreuses
|
||||||
options décrites dans la manpage montrent à quel point ce logiciel
|
options décrites dans la manpage montrent à quel point ce logiciel
|
||||||
est complet et compliqué. Heureusement, il y a une surcouche,
|
est complet et compliqué.
|
||||||
\texttt{abcde}\footnote{A better CD Encoder}, qui facilite
|
|
||||||
bien les choses. Passons immédiatement à l'œuvre en tentant
|
|
||||||
d'encoder un cd audio\footnote{Mylene Farmer, Ainsi soit je...}
|
|
||||||
vers des fichiers encodées en Ogg\index{ogg}.
|
|
||||||
|
|
||||||
Voici la ligne de commande minimale que nous allons utiliser,
|
|
||||||
pour ensuite y ajouter quelques autres options :
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
$ abcde -o ogg
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
Oh, mais il y a une jolie animation en asciiart pour suivre
|
|
||||||
le déroulement des opérations.
|
|
||||||
|
|
||||||
Parmi les (nombreuses) options possibles, on trouve
|
|
||||||
\texttt{-p Pads track numbers with 0's}
|
|
||||||
|
|
||||||
\textsl{||}
|
|
||||||
|
|
||||||
% --------------------------------------------------------
|
% --------------------------------------------------------
|
||||||
|
|
||||||
|
@ -21,15 +21,13 @@ fprintf(stderr, "Name: \"%s\"\n", joy_name);
|
|||||||
La macro \texttt{JSIOCGNAME} étant définie dans le fichier
|
La macro \texttt{JSIOCGNAME} étant définie dans le fichier
|
||||||
\texttt{/usr/include/linux/joystick.h} comme
|
\texttt{/usr/include/linux/joystick.h} comme
|
||||||
\texttt{\_IOC(\_IOC\_READ, 'j', 0x13, len)}.
|
\texttt{\_IOC(\_IOC\_READ, 'j', 0x13, len)}.
|
||||||
Bon, d'accord, j'aurais pu choisir un exemple plus simple,
|
Bon, OK, j'aurais pu choisir un exemple plus simple,
|
||||||
mais vous avez capté le principe\dots
|
mais vous avez capté le principe\dots
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
|
||||||
\vspace{5em}
|
\vspace{5em}
|
||||||
|
|
||||||
Ailleurs dans ce document :
|
Ailleurs dans ce document : Ports série (p. \pageref{rs232})
|
||||||
la gestion des ports série (p. \pageref{rs232}) utilise beaucoup les ioctl,
|
|
||||||
tout comme les webcams (p. \pageref{chap:webcam})
|
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
@ -34,7 +34,8 @@ ts.tv_sec = sec;
|
|||||||
ts.tv_nsec = nano;
|
ts.tv_nsec = nano;
|
||||||
while ( EOF != (c=getchar()) )
|
while ( EOF != (c=getchar()) )
|
||||||
{
|
{
|
||||||
putchar(c), fflush(stdout);
|
putchar(c);
|
||||||
|
fflush(stdout);
|
||||||
nanosleep(&ts, NULL);
|
nanosleep(&ts, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,17 +78,10 @@ Et pour finir, il y a quelques ouvrages de référence.
|
|||||||
Citons, par exemple, le K\&R, ceux de Christophe Blaess,
|
Citons, par exemple, le K\&R, ceux de Christophe Blaess,
|
||||||
le Christian Pelissier, et bien d'autres.
|
le Christian Pelissier, et bien d'autres.
|
||||||
|
|
||||||
En \textbf{mars 2024}, je déménage dans le Gers, au milieu
|
|
||||||
de la campagne, et le travail sur cette ouvrage peut
|
|
||||||
reprendre dans des conditions plus sereines.
|
|
||||||
Je vais même tenter de faire avec seulement l'aide
|
|
||||||
de mes souvenirs et les manpages.
|
|
||||||
|
|
||||||
\vspace{3em}
|
\vspace{3em}
|
||||||
|
|
||||||
Le code \LaTeX{} et les fichiers d'exemples sont disponibles
|
Le code \LaTeX{} et les fichiers d'exemples sont disponibles
|
||||||
en ligne sur le site du Tetalab.
|
en ligne sur le site du Tetalab. Your mileage may vary\dots
|
||||||
Your mileage may vary, film at 11\dots
|
|
||||||
|
|
||||||
\texttt{https://git.tetalab.org/tTh/TetaTricks}
|
\texttt{https://git.tetalab.org/tTh/TetaTricks}
|
||||||
|
|
||||||
@ -115,7 +108,7 @@ Your mileage may vary, film at 11\dots
|
|||||||
\input{chap/modular}
|
\input{chap/modular}
|
||||||
\input{chap/MIDI}
|
\input{chap/MIDI}
|
||||||
\input{chap/OSC}
|
\input{chap/OSC}
|
||||||
\input{chap/DMX512} % nouveau 2 juin 2024
|
|
||||||
\input{chap/image}
|
\input{chap/image}
|
||||||
\input{chap/reseau}
|
\input{chap/reseau}
|
||||||
\input{chap/Perl}
|
\input{chap/Perl}
|
||||||
|
Loading…
Reference in New Issue
Block a user