281 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			281 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<html>
 | 
						|
<head>
 | 
						|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 | 
						|
<title>libimage: les regles du programmeur</title>
 | 
						|
<link rel="stylesheet" type="text/css" href="libimage.css">
 | 
						|
<meta name="generator" content="Cuisse de Pintade à l'ail, Riz, Morgon">
 | 
						|
<meta name="keywords" content="libimage, coding style, Boudet, tontonth">
 | 
						|
</head>
 | 
						|
 | 
						|
<body>
 | 
						|
 | 
						|
<h1><a name="top">en vrac pour les codeurs...</a></h1>
 | 
						|
 | 
						|
<p align="center"><tt>dernière mise à jour: 3 janvier 2014</tt></p>
 | 
						|
 | 
						|
<p class="menuhaut">
 | 
						|
[<a href="README.txt">README</a>]
 | 
						|
[<a href="image77.html">fortran</a>]
 | 
						|
[<a href="img-essais.html">essais</a>]
 | 
						|
[<a href="#porting">porting</a>]
 | 
						|
<br>
 | 
						|
[<a href="#bugs">bugs</a> et <a href="BUGS.txt">BUGS</a>]
 | 
						|
[<a href="#projets">projets</a>]
 | 
						|
[<a href="#compilation">compilation</a>]
 | 
						|
[<a href="#types">types</a>]
 | 
						|
[<a href="#return">return codes</a>]
 | 
						|
<br>
 | 
						|
[<a href="#lacunes">les manques</a>]
 | 
						|
[<a href="#optimize">Optimisations</a>]
 | 
						|
[<a href="#outils">outils divers</a>]
 | 
						|
</p>
 | 
						|
 | 
						|
<h2><a name="utsl">Use the sources, Luke</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
La documentation n'étant jamais à jour, il faut parfois aller lire les sources
 | 
						|
pour comprendre (parfois) le pourquoi du comment. Moi même, je n'y arrive
 | 
						|
pas toujours. Cette page me sert d'aide mémoire, donc c'est tout en
 | 
						|
<i>vrac</i>...
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
On peut <a href="img-marquage.html">marquer</a> une image.
 | 
						|
Il existe quelques <a href="#macros">macros</a> pour abstraire 
 | 
						|
certaines choses, mais ce n'est pas très fini.
 | 
						|
</p>
 | 
						|
 | 
						|
<h2><a name="bugs">les bugs</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Il y en a probablement pas mal, mais dans l'ensemble, c'est assez stable.
 | 
						|
Peut-être quand même quelques petits 'memory leak' qui trainent dans des
 | 
						|
recoins obscurs... Exemple:
 | 
						|
</p>
 | 
						|
<pre class="code">
 | 
						|
           foo = Image_alloc(bla...);
 | 
						|
           Image_tripote(foo, bar);
 | 
						|
           Image_DeAllocate(foo);
 | 
						|
           free(foo);        <b>/* ne pas oublier ça... */</b>
 | 
						|
</pre>
 | 
						|
<p>
 | 
						|
A ce moment, les zones mémoires contenant les pixels de l'image sont rendues
 | 
						|
au gestionnaire de mémoire, <b>mais</b> l'en-tête du descripteur d'image est
 | 
						|
encore <i>malloc-é</i>. Il convient donc de rajouter un <tt>free(foo)</tt>.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
<b>Xv n'affiche pas les TGA fabriqués par Libimage ?</b>
 | 
						|
Le bug n'est pas dans libimage, mais dans Xv. D'après les spécifications
 | 
						|
du format TGA, on peut ajouter un commentaire dans le fichier. Or, Xv
 | 
						|
ne reconnait plus les TGA comme des TGA si ce commentaire est présent, ce
 | 
						|
qui est le cas par défaut dans la bib. Le <i>workaround</i> est simple:
 | 
						|
il faut ajouter <tt>Image_set_comment(img, "");</tt> avant
 | 
						|
d'enregistrer le fichier afin d'enlever le commentaire.
 | 
						|
Je pense même qu'il y a un truc dans le Makefile.
 | 
						|
</p>
 | 
						|
 | 
						|
<p><b>le flag 'modified' du descripteur d'image est mal géré.</b>
 | 
						|
Oui, en effet, il n'est parfois pas positionné par les fonctions
 | 
						|
qui le devrait. Une revue complète de tout le code pour corriger
 | 
						|
ce souci est programmée pour 2012.</p>
 | 
						|
 | 
						|
<p>
 | 
						|
Par contre, le fait que certaines fonctions ne semblent pas finies n'est
 | 
						|
<i>pas</i> un bug. C'est un 'undocumented feature'. Et qu'il manque la
 | 
						|
documentation, c'est le <i>lazzy effect</i>.
 | 
						|
</p>
 | 
						|
 | 
						|
 | 
						|
<h2><a name="projets">les projets</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Début 2007, j'ai découvert que le compilateur <tt>g77</tt> était un
 | 
						|
produit en fin de vie, et que les Linux récents avaient de plus en plus
 | 
						|
tendance à préférer <tt>gfortran</tt>. Il est donc probable que 
 | 
						|
<a href="image77.html">l'interface</a> actuelle soit mise à l'écart
 | 
						|
et remplacée par un équivalent plus moderne.
 | 
						|
</p>
 | 
						|
 | 
						|
<h2><a name="porting">le portage</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Merci au généreur donateur d'une <i>Sun U5</i> grace auquel  j'ai enfin pu
 | 
						|
finaliser l'adaptation
 | 
						|
du machin à une autre architecture que le trop commun <i>i386</i> sous Linux,
 | 
						|
en l'occurence un processeur <i>UltraSparc</i>, tournant sous <i>OpenBSD 4.4</i>.
 | 
						|
Et ça a été plus facile que je ne le pensait, les soucis de boutisme ayant
 | 
						|
déja été réglés dans une vie antérieure. D'autre part, ça a été une bonne
 | 
						|
occasion de nettoyer le code d'un certain nombre de warnings assez génants.
 | 
						|
</p>
 | 
						|
<p>Je dois d'abord préciser que la fidèle machine sur laquelle je fabrique le
 | 
						|
kluge est une très vieille Debian (une SID d'il y a cinq ans, c'est dire
 | 
						|
si je suis un <a href="http://dinorama.fr/">dino</a>),
 | 
						|
et que le Gcc est également *vieux* :
 | 
						|
<tt>gcc version 4.0.3 (Debian 4.0.3-1)</tt>. C'est un peu génant, mais
 | 
						|
pas plus que si j'avais un Unixware 1.x :) Donc, en avant...
 | 
						|
Voyons, dans un ordre approximatif, les problèmes que j'ai rencontré:
 | 
						|
</p>
 | 
						|
 | 
						|
<dl>
 | 
						|
 | 
						|
<dt><tt>alloca.h</tt>
 | 
						|
<dd>Sur la machine ancestrale citée plus haut, je suis obligé d'inclure
 | 
						|
 ce fichier si je veux utiliser la fonction alloca. Mais ce n'est pas
 | 
						|
 nécessaire dans O44/sparc64. Je n'ai pas (pour le moment) trouvé de
 | 
						|
 solution automatique. Il vous  faut donc  éditer à la mano le 
 | 
						|
 Makefile vers la ligne 31 et commenter la ligne 
 | 
						|
 <tt>CC_HACKS=-DNEED_ALLOCA_H</tt>.
 | 
						|
</dd>
 | 
						|
 | 
						|
<dt>L'emplacement des <tt>.h</tt></dt>
 | 
						|
<dd>Par flemme de chercher une autre solution, je les place systématiquement
 | 
						|
 dans <tt>/usr/local/include</tt>, et le Gcc de l'Open44 ne va pas les
 | 
						|
 chercher à cet endroit là.
 | 
						|
 Tip: <b><tt>export C_INCLUDE_PATH=/usr/local/include</tt></b>
 | 
						|
 dans le <tt>~/.profile</tt>.
 | 
						|
</dd>
 | 
						|
<dt>L'emplacement des <tt>.a</tt> et <tt>.so</tt>
 | 
						|
<dd>Même Gcc, même punition. Après quelques essais rapidement désastreux avec
 | 
						|
le <tt>ld.so.conf</tt>, une lecture plus attentive des manpages m'a conduit
 | 
						|
à une (presque) même solution:
 | 
						|
<b><tt>export LIBRARY_PATH=/usr/local/lib</tt></b> dans le même
 | 
						|
<tt>~/.profile</tt>.
 | 
						|
</dd>
 | 
						|
 | 
						|
</dl>
 | 
						|
<p>
 | 
						|
Bon, j'ai gruiké ça rapidement un dimanche pluvieux, ça marche mais ça n'est
 | 
						|
peut-être pas orthodoxe. Je vais consulter les experts en fromages pour savoir
 | 
						|
si j'ai pris le <a href="img-outils.html#porting">bon</a> chemin. 
 | 
						|
</p>
 | 
						|
 | 
						|
<h2><a name="optimize">Optimisations</a></h2>
 | 
						|
 | 
						|
<p>À priori, il reste pas mal de choses à faire, surtout pour rendre les
 | 
						|
boucles X-Y plus <i>cache-friendly</i>. Les buffers contenants les images
 | 
						|
étant organisés en tableaux de lignes, il y a probablement quelques
 | 
						|
<i>hit/mess</i> à grapiller. D'un autre coté, pour le moment, juste
 | 
						|
ça marche...
 | 
						|
</p>
 | 
						|
 | 
						|
<h2><a name="path">chemins de recherche</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Bah, fatigué de devoir recopier mes fichiers .MAP de
 | 
						|
<a href="img-couleurs.html#palettes">palette</a> à droite et à gauche,
 | 
						|
j'ai ajouté une func qui cherche dans quelques endroits. Donc, j'essaye
 | 
						|
en série:
 | 
						|
</p>
 | 
						|
 | 
						|
<ol>
 | 
						|
<li> le répertoire courant.
 | 
						|
<li> le rep dans la variable <tt>$LIBIMAGE_PATH</tt>
 | 
						|
<li> le chemin <i>hardcoded</i>: $(DESTDIR)/share/libimage
 | 
						|
</ol>
 | 
						|
 | 
						|
<h2><a name="compilation">compilation</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
La première chose à faire (comme d'hab) c'est d'aller lire le Makefile.
 | 
						|
Vous y découvrirez quelques options à positionner selon vos gouts.
 | 
						|
Et un de ces jours, je vais passer au tandem infernal automake/autoconf,
 | 
						|
si jamais j'arrive à comprendre comment ça marche.
 | 
						|
</p>
 | 
						|
 | 
						|
<p>
 | 
						|
En attendant, les variables à positionner pour l'install sont:
 | 
						|
</p>
 | 
						|
 | 
						|
<ul>
 | 
						|
<li><tt>DESTDIR</tt>: /usr/local
 | 
						|
<li><tt>HTML_DIR</tt>: /usr/local + le répertoire html recevra les pages
 | 
						|
 que vous êtes en train de lire.
 | 
						|
<li><tt>SHARED_FILES</tt>: $(DESTDIR)/share/libimage contiendra les fichiers
 | 
						|
 de fontes et les colors maps.
 | 
						|
</ul>
 | 
						|
 | 
						|
<p>
 | 
						|
A la compilation, on peut aussi utiliser quelques <tt>-DMACHIN=42</tt>
 | 
						|
pour modifier le comportement de la bib. En phase de mise au point de la 
 | 
						|
bibliothèque, il est capital de détecter les conditions anormales: eg:
 | 
						|
<i>plotter</i> en dehors de l'image. Donc, avec un <tt>-DABORT=1</tt>,
 | 
						|
les conditions anormales génererons un <small>COREDUMP</small> analysable
 | 
						|
avec gdb, si vous n'avez pas oublié de régler votre  <tt>ulimit -c</tt>
 | 
						|
à une valeur raisonnable.
 | 
						|
</p>
 | 
						|
 | 
						|
<p><b>alloca.h</b> oui, là, il y a un léger souci. je suis en ce moment
 | 
						|
en train de tenter d'installer ma libimage dans un OpenBSD, et je ne
 | 
						|
sais pas quoi faire pour les <tt>alloca</tt>. (2007-12-30) investigations
 | 
						|
en cours. Sans compter que le problème va se poser aussi avec NetBSD.
 | 
						|
</p>
 | 
						|
 | 
						|
<h2><a name="types">type de données</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Bien que tout ce fatras soit codé à la gruik, j'essaye d'introduire un peu
 | 
						|
de rigueur dans la chose. En particulier, certains noms de paramètres de
 | 
						|
fonctions vont être normalisés. Ce qui, en fait, ne sert à rien, parce
 | 
						|
que c'est le codeur qu'il faudrait normaliser.
 | 
						|
</p>
 | 
						|
 | 
						|
<ul>
 | 
						|
<li><b>pr100</b> Seuil de probabilité pour un choix randomatique. Une valeur
 | 
						|
comprise entre 0 et 99. Exemple: le
 | 
						|
 <a href="img-povhf15.html#bruit">bruitage</a> des HFs.
 | 
						|
</ul>
 | 
						|
 | 
						|
<p>Les hackeurs trouveront dans le fichier <tt>imprime.c</tt> une fonction :
 | 
						|
<i>Image_print_sizeof_structs</i>, qui affiche les tailles des diverses
 | 
						|
structures utilisées par les rouages internes.
 | 
						|
</p>
 | 
						|
 | 
						|
<h2><a name="return">return codes</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Il faut regarder les <i>#define</i> dans <tt>tthimage.h</tt> et la fonction
 | 
						|
<a href="libimage.html#messages">Image_err2str</a> dans <tt>msglib.c</tt>.
 | 
						|
Je préfère ne rien mettre ici, parce que j'aurais la flemme de le mettre
 | 
						|
à jour quand il faudrait le faire... En particulier pour classer les codes
 | 
						|
d'erreur en fonction de leur gravité.
 | 
						|
</p> 
 | 
						|
 | 
						|
<h2><a name="macros">macros</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Elles sont habilement dissimulées dans le fichier <tt>tthimage.h</tt>, mais
 | 
						|
je ne leur porte qu'une confiance limitée.
 | 
						|
</p>
 | 
						|
 | 
						|
<h2><a name="outils">Les outils</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Deux dumpeurs de pixels dans <tt>dumppix.c</tt>. Le premier affiche des
 | 
						|
trucs en hexadécimal, et le second en ascii. Ne m'en demandez pas plus,
 | 
						|
je ne suis au courant de rien. Heureusement, il y a un autre
 | 
						|
<a href="img-outils.html">package</a> qui contient quelques <i>tools</i>
 | 
						|
assez performants.
 | 
						|
</p>
 | 
						|
 | 
						|
<p class="HDP"><a href="#top">haut de page</a></p>
 | 
						|
 | 
						|
<h2><a name="lacunes">Ce qui manque...</a></h2>
 | 
						|
 | 
						|
<p>
 | 
						|
Il manque plein de choses dans cette bibliothèque de fonctions, ou dans les
 | 
						|
outils qui tournent autour. En Octobre 2003, je suis en train de travailler
 | 
						|
sur un éditeur de fontes 16x24, mais il ne sortira que quand il sera prèt.
 | 
						|
Nous sommes le 1er janvier 2014, et ça n'a pas avancé d'un pas.
 | 
						|
</p>
 | 
						|
 | 
						|
<!-- ------------------------------------------------ -->
 | 
						|
<p class="footer">
 | 
						|
Bon courage à tous, et n'oubliez pas de regarder 
 | 
						|
<a href="http://la.buvette.org/cv.html">qui</a> a pondu ce kluge,
 | 
						|
et en est presque fier...
 | 
						|
</p>
 | 
						|
 | 
						|
</body>
 | 
						|
</html>
 |