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é | ||||
| avec le ENTRY du Fortran ?}, avec une éventuelle liste | ||||
| de paramètres, | ||||
| et une tout aussi éventuelle unique valeur de retour. | ||||
| et une tout aussi éventuelel unique valeur de retour. | ||||
| 
 | ||||
| XXX\index{XXX} | ||||
| 
 | ||||
| @ -114,11 +114,8 @@ 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~» 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}. | ||||
| Dans le schéma «~classique~», ces échanges ont lieu par | ||||
| le truchement d'un terminal. | ||||
| 
 | ||||
| \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 ? | ||||
| 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...} | ||||
| 
 | ||||
| % --------------------------------------------------------- | ||||
| @ -414,14 +362,12 @@ page \pageref{pipeline}. | ||||
| 
 | ||||
| \textbf{Ah, enfin, on a failli attendre !} | ||||
| 
 | ||||
| Qu'est-ce qu'un pointeur ? | ||||
| La réponse est multiple et parfois obscure, et c'est | ||||
| Qu'est-ce qu'un pointeur ? La réponse est multiple, 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 » le type (donc la taille) | ||||
| Mais en fait c'est un peu plus subtil : un pointeur « connait » la taille | ||||
| de l'objet pointé, et peut donc « parcourir » un tableau de ces objets. | ||||
| 
 | ||||
| \begin{verbatim} | ||||
| @ -431,24 +377,14 @@ ptr = tableau;             //   *ptr désigne tableau[0]; | ||||
| ptr++;                     //   *ptr désigne tableau[1]; | ||||
| \end{verbatim} | ||||
| 
 | ||||
| \index{XXX} | ||||
| XXX il y a encore beaucoup à dire, et de quoi bien rire \textsl{:)} | ||||
| XXX il y a 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{\#}. | ||||
| @ -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 | ||||
| par l'expérimentation. Mais ça n'est pas fini. | ||||
| 
 | ||||
| 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 | ||||
| Ce sympathique \textsf{préproc'} 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 | ||||
|  | ||||
| @ -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 ». | ||||
| Oui, peut-être, mais il y a quand même pas mal d'usages | ||||
| assez cools pour ces technologies du passé, l'auto-radio | ||||
| de votre vieille voiture, par exemple. | ||||
| Nous allons | ||||
| assez cools pour ces technologies du passé. Nous allons | ||||
| en explorer quelques uns. | ||||
| 
 | ||||
| %	++++++++++++++++++++++++++++++++++++++++++++++++++ | ||||
| @ -14,43 +12,14 @@ 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 | ||||
| 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. | ||||
| cd audio pour les convertir en fichier numérique audio. | ||||
| 
 | ||||
| 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é. 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{||} | ||||
| est complet et compliqué.  | ||||
| 
 | ||||
| % -------------------------------------------------------- | ||||
| 
 | ||||
|  | ||||
| @ -21,15 +21,13 @@ 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, 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 | ||||
| 
 | ||||
| % ========================================================= | ||||
| 
 | ||||
| \vspace{5em} | ||||
| 
 | ||||
| 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}) | ||||
| Ailleurs dans ce document : Ports série (p. \pageref{rs232}) | ||||
| 
 | ||||
| % ========================================================= | ||||
|  | ||||
| @ -34,7 +34,8 @@ ts.tv_sec  = sec; | ||||
| ts.tv_nsec = nano; | ||||
| while ( EOF != (c=getchar()) ) | ||||
| 	{ | ||||
| 	putchar(c), fflush(stdout); | ||||
| 	putchar(c); | ||||
| 	fflush(stdout); | ||||
| 	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, | ||||
| 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, film at 11\dots | ||||
| en ligne sur le site du Tetalab. Your mileage may vary\dots | ||||
| 
 | ||||
| \texttt{https://git.tetalab.org/tTh/TetaTricks} | ||||
| 
 | ||||
| @ -115,7 +108,7 @@ Your mileage may vary, film at 11\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