Compare commits
5 Commits
66bc3d19c4
...
6a025f9503
Author | SHA1 | Date | |
---|---|---|---|
|
6a025f9503 | ||
|
352ab26ba7 | ||
|
f7b5af5a9b | ||
|
326926aa16 | ||
|
58ba52762c |
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é
|
||||
avec le ENTRY du Fortran ?}, avec une éventuelle liste
|
||||
de paramètres,
|
||||
et une tout aussi éventuelel unique valeur de retour.
|
||||
et une tout aussi éventuelle unique valeur de retour.
|
||||
|
||||
XXX\index{XXX}
|
||||
|
||||
@ -114,8 +114,11 @@ XXX\index{XXX}
|
||||
|
||||
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.
|
||||
Dans le schéma «~classique~», ces échanges ont lieu par
|
||||
le truchement d'un terminal.
|
||||
Dans le schéma «~classique~» d'une utilisation interactive,
|
||||
ces échanges ont lieu par
|
||||
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}
|
||||
|
||||
@ -268,6 +271,55 @@ Avez-vous bien révisé la section qui cause des pointeurs ?
|
||||
À ne plus savoir où peut être la tête de lecture ?
|
||||
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...}
|
||||
|
||||
% ---------------------------------------------------------
|
||||
@ -362,12 +414,14 @@ page \pageref{pipeline}.
|
||||
|
||||
\textbf{Ah, enfin, on a failli attendre !}
|
||||
|
||||
Qu'est-ce qu'un pointeur ? La réponse est multiple, et c'est
|
||||
Qu'est-ce qu'un pointeur ?
|
||||
La réponse est multiple et parfois obscure, et c'est
|
||||
le pointeur qui fait à la fois la force et la faiblesse du C.
|
||||
Pour faire simple, un pointeur est une variable qui contient
|
||||
l'adresse dans la mémoire d'une autre variable.
|
||||
|
||||
Mais en fait c'est un peu plus subtil : un pointeur « connait » la taille
|
||||
Mais en fait c'est un peu plus subtil :
|
||||
un pointeur « connait » le type (donc la taille)
|
||||
de l'objet pointé, et peut donc « parcourir » un tableau de ces objets.
|
||||
|
||||
\begin{verbatim}
|
||||
@ -377,14 +431,24 @@ ptr = tableau; // *ptr désigne tableau[0];
|
||||
ptr++; // *ptr désigne tableau[1];
|
||||
\end{verbatim}
|
||||
|
||||
XXX il y a beaucoup à dire, et de quoi bien rire \textsl{:)}
|
||||
\index{XXX}
|
||||
XXX il y a encore beaucoup à dire, et de quoi bien rire \textsl{:)}
|
||||
|
||||
% https://hackthedeveloper.com/function-pointer-in-c/
|
||||
|
||||
\subsection{Pointeurs et chaines}
|
||||
|
||||
\subsection{Pointeurs et fonctions}
|
||||
|
||||
Exemple classique : qsort.
|
||||
|
||||
% =========================================================
|
||||
|
||||
\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},
|
||||
qui fait partie du préprocesseur, comme toutes les lignes
|
||||
de code commençant par le caractère \textbf{\#}.
|
||||
@ -411,7 +475,10 @@ pour être traduite en codes opératoires, dont l'exécution
|
||||
affichera une maxime dont la véracité demande à être vérifiée
|
||||
par l'expérimentation. Mais ça n'est pas fini.
|
||||
|
||||
Ce sympathique \textsf{préproc'} nous permet aussi de faire
|
||||
Ce sympathique \textsf{préproc'}%
|
||||
\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
|
||||
ça ouvre la porte à plein de choses.
|
||||
Par exemple, l'instrumentation du code afin de faciliter
|
||||
|
43
chap/DMX512.tex
Normal file
43
chap/DMX512.tex
Normal file
@ -0,0 +1,43 @@
|
||||
\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,7 +4,9 @@
|
||||
|
||||
Vous allez bien dire : « Encore un truc de vieux\dots ».
|
||||
Oui, peut-être, mais il y a quand même pas mal d'usages
|
||||
assez cools pour ces technologies du passé. Nous allons
|
||||
assez cools pour ces technologies du passé, l'auto-radio
|
||||
de votre vieille voiture, par exemple.
|
||||
Nous allons
|
||||
en explorer quelques uns.
|
||||
|
||||
% ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
@ -12,14 +14,43 @@ en explorer quelques uns.
|
||||
|
||||
\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}
|
||||
\index{abcde} \index{cdparanoia}
|
||||
|
||||
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
|
||||
options décrites dans la manpage montrent à quel point ce logiciel
|
||||
est complet et compliqué.
|
||||
est complet et compliqué. Heureusement, il y a une surcouche,
|
||||
\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,13 +21,15 @@ fprintf(stderr, "Name: \"%s\"\n", joy_name);
|
||||
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,
|
||||
Bon, d'accord, 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 :
|
||||
la gestion des ports série (p. \pageref{rs232}) utilise beaucoup les ioctl,
|
||||
tout comme les webcams (p. \pageref{chap:webcam})
|
||||
|
||||
% =========================================================
|
||||
|
@ -34,8 +34,7 @@ ts.tv_sec = sec;
|
||||
ts.tv_nsec = nano;
|
||||
while ( EOF != (c=getchar()) )
|
||||
{
|
||||
putchar(c);
|
||||
fflush(stdout);
|
||||
putchar(c), fflush(stdout);
|
||||
nanosleep(&ts, NULL);
|
||||
}
|
||||
|
||||
|
@ -78,10 +78,17 @@ Et pour finir, il y a quelques ouvrages de référence.
|
||||
Citons, par exemple, le K\&R, ceux de Christophe Blaess,
|
||||
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}
|
||||
|
||||
Le code \LaTeX{} et les fichiers d'exemples sont disponibles
|
||||
en ligne sur le site du Tetalab. Your mileage may vary\dots
|
||||
en ligne sur le site du Tetalab.
|
||||
Your mileage may vary, film at 11\dots
|
||||
|
||||
\texttt{https://git.tetalab.org/tTh/TetaTricks}
|
||||
|
||||
@ -108,7 +115,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
|
||||
\input{chap/modular}
|
||||
\input{chap/MIDI}
|
||||
\input{chap/OSC}
|
||||
|
||||
\input{chap/DMX512} % nouveau 2 juin 2024
|
||||
\input{chap/image}
|
||||
\input{chap/reseau}
|
||||
\input{chap/Perl}
|
||||
|
Loading…
Reference in New Issue
Block a user