Compare commits

..

No commits in common. "73a611e55f9a73aa844c349d0ce4cfcc4857c157" and "3794eb26088d3bf7f9f9a0d38f009d4ca9923b4a" have entirely different histories.

8 changed files with 10 additions and 243 deletions

View File

@ -460,17 +460,15 @@ et un exemple simple d'utilisation.
\section{Erreurs classiques} \section{Erreurs classiques}
\begin{itemize} Variables non initialisées.
\item{Variables non initialisées.}
\item{Sortir d'un tableau (par le haut ou par le bas).} Sortir d'un tableau.
\item{Dépassement de la taille d'une chaine.} Dépassement de la taille d'une chaine.
\item{Libérer deux fois la mémoire.} Libérer deux fois la mémoire.
\item{\textsl{file pointer} invalide.} \textsl{file pointer} invalide.
\end{itemize}
% ========================================================= % =========================================================
@ -482,7 +480,7 @@ XXX \index{XXX}
\section{Debug} \index{Debug} \section{Debug} \index{Debug}
Des outils et astuces en page \pageref{chap:debug}. Des outils et astuces en page \pageref{chap:Debug}.
\begin{quote} \begin{quote}
splint is an annotation-assisted lightweight static checker. splint is an annotation-assisted lightweight static checker.
@ -522,9 +520,6 @@ functions for simultaneous generation of graphical output on different
types of devices. types of devices.
\end{quote} \end{quote}
\lstinputlisting[language=c]{code/g2/un_dessin.c}
% ========================================================= % =========================================================
\section{Ailleurs dans cet ouvrage} \section{Ailleurs dans cet ouvrage}

View File

@ -62,8 +62,6 @@ x:y & Here x and y denotes an aspect ratio (e.g. 3:2 = 1.5). \\
\hline \hline
\end{tabular} \end{tabular}
% !!!
% est-il nécessaire de traduire ce tableau ?
\subsection{Écrire du texte} \subsection{Écrire du texte}
@ -74,23 +72,13 @@ qui montre l'essentiel pour bien débuter. C'est une fonction
\lstinputlisting[language=sh]{code/tagpic.sh} \lstinputlisting[language=sh]{code/tagpic.sh}
Une petite commande toute bête pour rajouter la date facilement à une photo
daprès les données EXIF\index{EXIF}~:
\begin{lstlisting}
convert nom_du_fichier_source.jpg -gravity SouthEast \
-font Fudd-Regular -pointsize 40 -fill white \
-annotate +20+20 "%[exif:DateTimeOriginal]" \
-quality 100 nom_du_fichier_destination.jpg
\end{lstlisting}
Quelques explications semblent nécessaires, parce que certaines Quelques explications semblent nécessaires, parce que certaines
options sont un peu ésotériques et parfois inter-dépendantes\dots options sont un peu ésotériques et parfois inter-dépendantes\dots
\begin{itemize} \begin{itemize}
\item{txtfont} \item{txtfont}
\item{fontsize} \item{fontsize}
\item{kerning: espacement entre les caractères} \item{kerning}
\item{colors} \item{colors}
\item{txtopts} \item{txtopts}
\item{gravity} \item{gravity}
@ -101,21 +89,13 @@ Question : comment mettre une couleur de fond à ce texte ?
\subsection{montage} \subsection{montage}
\begin{quote} Krkrkr
create a composite image by combining several separate images. The images are
tiled on the composite image optionally adorned with a border, frame,
image name, and more.
\end{quote}
Krkrkr\dots
\subsection{Faire des GIFs animées}\index{GIF} \subsection{Faire des GIFs animées}\index{GIF}
Ces petites images clignotantes sont l'essence même du Ces petites images clignotantes sont l'essence même du
Web\index{web} moderne depuis 1992 malgré leurs limitations, Web\index{web} moderne depuis 1992 malgré leurs limitations,
et \texttt{convert} sait très bien les générer. et \texttt{convert} sait très bien les générer.
Encore un grand merci à Compuserve\index{Compuserve} pour cette
création essentielle à l'art graphique moderne.
\begin{verbatim} \begin{verbatim}
convert -delay 20 -loop 0 a.png b.png c.png foo.gif convert -delay 20 -loop 0 a.png b.png c.png foo.gif
@ -144,40 +124,9 @@ changer la dimension de l'image. En détail, j'ai pas tout compris.
% ------------------------------------------ % ------------------------------------------
\subsection{conversion vers TGA} \index{TGA}
On trouve encore en circulation de très vieux logiciels qui ne savent lire
qu'un encore plus ancien format : \textsl{Targa file format}.
Et dans une variante bien précise.
Il nous faut donc une incantation bien précise :
\begin{lstlisting}
GOTO_TGA ()
{
convert $1 \
-compress none \
-alpha off \
-colorspace RGB \
-type truecolor \
$2
}
\end{lstlisting}
On peut aussi procéder autrement, avec les outils PNM\index{PNM} :
\begin{verbatim}
pngtopnm \$negatif | ppmtotga -rgb -norle > \$picz
\end{verbatim}
% ------------------------------------------
\subsection{Trucs} \subsection{Trucs}
\begin{itemize} convert -average frame*.png output.png
\item{convert -average frame*.png output.png}
\end{itemize}
% ------------------------------------------ % ------------------------------------------
@ -197,8 +146,7 @@ l'IRC\index{IRC} \texttt{freenode\#paulla} \textit{:)}
\textsl{Perform generic image processing operations, through the G'MIC \textsl{Perform generic image processing operations, through the G'MIC
language interpreter. gmic: GREYC's Magic for Image Computing.} language interpreter. gmic: GREYC's Magic for Image Computing.}
Gmic se base sur une grosse\footnote{énorme, même. dans les deux sens\dots} Gmic se base sur une grosse bibliothèque de fonctions écrite
bibliothèque de fonctions écrite
en \texttt{C++}\index{C++} dont l'utilisation est bien en \texttt{C++}\index{C++} dont l'utilisation est bien
docummentée dans le livre ???\index{XXX} docummentée dans le livre ???\index{XXX}
@ -274,8 +222,6 @@ use it heavily.
et basé Gmic. C'est long à compiler, ça produit des binaires et basé Gmic. C'est long à compiler, ça produit des binaires
énormes, mais il semble bien que ça puisse faire des trucs géniaux. énormes, mais il semble bien que ça puisse faire des trucs géniaux.
\subsection{\textsc{hello world}}
\begin{lstlisting} \begin{lstlisting}
#define cimg_use_png #define cimg_use_png
#include "CImg.h" #include "CImg.h"
@ -297,11 +243,4 @@ return 0;
} }
\end{lstlisting} \end{lstlisting}
\subsection{Questions...}
\begin{itemize}
\item{Comment virer le canal alpha à l'enregistrement d'une image en PNG ?}
\end{itemize}
% ------------------------------------------------------------------- % -------------------------------------------------------------------

21
code/.gitignore vendored
View File

@ -1,21 +0,0 @@
a.out
appelant
arguments
ex_curses
fifo-rx
fifo-tx
flydraw.gif
flydraw.png
foo
get-signal
hello
listen-osc
no-op
*.o
plugiciel.so
send-osc
thread-demo
voirenv
xform/yesyno

View File

@ -19,9 +19,6 @@ arguments: arguments.c Makefile
no-op: no-op.c Makefile no-op: no-op.c Makefile
gcc -Wall $< -o $@ gcc -Wall $< -o $@
voirenv: voirenv.c Makefile
gcc -Wall $< -o $@
#------------- OSC ----------------------- #------------- OSC -----------------------
osc: send-osc listen-osc osc: send-osc listen-osc

View File

@ -1,3 +0,0 @@
un_dessin: un_dessin.c
gcc -Wall $< -o $@

View File

@ -1,15 +0,0 @@
/*
* DESSINER AVEC G2
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
fprintf(stderr, "file %s compiled %s at %s\n", \
__FILE__, __DATE__, __TIME__);
return 0;
}

View File

@ -1,100 +0,0 @@
/*
* code extrait des bas-fonds de l'internet obscur !
*
* DON'T TRUST IT !
*
*/
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <net/if.h>
/* ------------------------------------------------------------- */
int get_if_flags(char *ifname, short *p_flags)
{
int fd;
int retcode;
struct ifreq req;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s \"%s\" to %p\n", __func__, ifname, p_flags);
#endif
/* Sanity check */
if ( strlen(ifname) > (IFNAMSIZ-1) )
{
fprintf(stderr, "name %s to long\n", ifname);
abort();
}
fd = socket(PF_INET, SOCK_DGRAM, 0);
if (fd < 0)
{
perror("socket bla...");
return -2;
}
#if DEBUG_LEVEL
fprintf(stderr, "fd socket bla... = %d\n", fd);
#endif
/* populate the struct for the request */
memset(&req, 0, sizeof(req));
strcpy(req.ifr_name, ifname);
/* do the call */
retcode = ioctl(fd, SIOCGIFFLAGS, &req);
if (retcode < 0)
{
perror("ioctl SIOCGIFFLAGS");
close(fd);
return -1;
}
#if DEBUG_LEVEL
fprintf(stderr, "ioctl -> %d\n", retcode);
#endif
#if DEBUG_LEVEL
/* display the result */
fprintf(stderr, "flags = 0x%04x\n", req.ifr_flags);
#endif
close(fd);
*p_flags = req.ifr_flags;
return 0;
}
/* ------------------------------------------------------------- */
int get_if_up_or_down(char *ifname)
{
int foo;
short flags;
foo = get_if_flags(ifname, &flags);
#if DEBUG_LEVEL
fprintf(stderr, "get flags -> %d\n", foo);
#endif
if (foo < 0) /* got an error ? */
return -1;
return (flags & IFF_UP) ? 1 : 0;
}
/* ------------------------------------------------------------- */
int get_if_running(char *ifname)
{
int foo;
short flags;
foo = get_if_flags(ifname, &flags);
#if DEBUG_LEVEL
fprintf(stderr, "get flags -> %d\n", foo);
#endif
if (foo < 0) /* got an error ? */
return -1;
return (flags & IFF_RUNNING) ? 1 : 0;
}
/* ------------------------------------------------------------- */

View File

@ -1,25 +0,0 @@
/*
* Low level acces to the environment space
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[], char *envp[])
{
char *ptr, *clone, *tok;
int foo = 0;
while ( NULL != (ptr=envp[foo]) ) {
printf("%4d %s\n", foo, ptr);
clone = strdup(ptr);
tok = strtok(clone, "=");
printf(" key : %s\n", tok);
tok = strtok(NULL, "=");
printf(" value : %s\n", tok);
free(clone);
foo++;
}
return 0;
}