<!doctype linuxdoc system>
<!-- 

************************** begin comment *****************************
     The following is the HOW-TO for setting up C-C++Beautifier editor.
	 This document is in the SGML format. You must use sgml package to 
	 process this document
************************* end of comment *****************************
-->

<!--
************************** SGML USER GUIDE *****************************
	The SGML user guide on linux is located at /usr/doc/sgml-tools
	Read the example.sgml and guide.html documents.
	Usage:
		HTML	  	sgml2html foo  (Do not give extension .sgml here!!)
		Text	 	sgml2txt foo.sgml
		Latex	  	sgml2latex foo.sgml

		Note: Use 2 dashes - before language, error while compiling
		Postscript 	sgml2latex -language=english -o ps foo.sgml
		DVI  		sgml2latex -d foo.sgml
		Lyx		sgml2lyx foo.sgml
		Richtext 	sgml2rtf foo.sgml
		gnuinfo  	sgml2info foo.sgml
		man		sgml2txt -man foo.sgml
		SGML	 	sgmlcheck foo.sgml
************************* end of comment *****************************
-->

<article>

<!-- Title information -->

<title>Manuel de mise en forme de code C/C++
<!-- chapt change
C-C++ Beautifier HOW-TO
-->

<author>
Al Dev (Alavoor Vasudevan) &lt;alavoor@yahoo.com&gt;<newline>
Traduction française de Robert Jacolin &lt;rjacolin@yahoo.fr&gt;<newline>
Relecture de Christophe Fergeau &lt;christophe.fergeau@ensimag.imag.fr&gt;<newline>
</author>

<date>V 6.0, 1 août 2000</date>

<abstract>Ce document vous aidera à mettre en forme (embellir) des programmes C/C++ pour qu'ils soient plus lisibles et conformes à vos standards de codage C/C++. Les informations présentes dans ce document s'appliquent à tous les systèmes d'exploitation existants - les systèmes d'exploitation GNU/Linux, MS DOS, Windows 95/NT, OS/2, IBM, tous les clones Unix comme Solaris, HPUX, AIX, SCO, Sinix, BSD, SCO, etc ... - et à tous les autres systèmes d'exploitation qui possèdent un compilateur "C" (ce qui veut dire presque tous les systèmes
d'exploitation de cette planète!).
</abstract>

<!-- Table of contents -->
<toc>

<!-- Begin the document -->

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************
-->
<sect>Introduction
<p>
Les standards de codage pour le C/C++ ou d'autres langages sont utilisés
dans le but de rendre les programmes plus lisibles/compréhensibles par les
programmeurs. Pour cela, il existe des embellisseurs C/C++ (outils
de formatage). Le code formaté (embelli) augmente la <bf>productivité</bf>
des programmeurs de <bf>100%</bf>!!

Sur GNU/Linux/Unix, il existe des commandes appelées <bf>"indent"</bf> et <bf>"cb"
</bf>. Référez-vous aux pages de manuel par 'man indent' et 'man cb'. Notez que
<bf>indent</bf> et <bf>cb</bf> fonctionnent uniquement pour les programmes "C".
Pour les programmes "C++", utilisez <bf>"bcpp"</bf>. Téléchargez ce programme
de mise en forme à partir des sites suivants :

<itemize>
<item>C++ : le site de BCPP est à l'adresse
<url url="http://dickey.his.com/bcpp/bcpp.html">
ou sur <url url="http://www.clark.net/pub/dickey">
<item>C++ : le site ftp de BCPP est à l'adresse
<url url="ftp://dickey.his.com/bcpp/bcpp.tar.gz">
<item>C++ : <url url="http://www.consultix-inc.com/c++b.html">
<item>C : <url url="http://www.chips.navy.mil/oasys/c/">
</itemize>
J'ai utilisé BCPP pour formater les programmes C++ et il m'a parfaitement
convenu. Vous préférerez peut-être essayer d'autres outils et utiliser celui
que vous apprécierez le plus.

BCPP a été écrit par <htmlurl
	url="mailto:steve@alpha.ocbbs.gen.nz"
	name="Steven De Toni">

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> How can I trust Beautifier programs??!!
-->
<sect> Comment avoir confiance en un programme de mise en forme ??!!

<p>
Pour être sur à 100%, vous devez utiliser une approche
<bf>SCIENTIFIQUE</bf> pour valider et avoir confiance en un programme
de mise en forme. La méthode décrite dans cette section permettra au
programme de mise en forme d'être agréé comme étant "vraiment fiable"
et sérieux.
Dans le but de vérifier qu'un programme de mise en forme comme <bf>bcpp</bf>,
<bf>indent</bf> ou <bf>cb</bf> ne provoque pas de dommage ou ne change pas
le code source d'entrée après formatage, vous pouvez utiliser le script shell
<ref id="verification" name="Programme de vérification"> ou utiliser la
technique suivante :

Générez le code objet à partir du code source original en utilisant
le compilateur :

<code>
  g++ -c monprogramme.cpp
</code>
Ici g++ est le compilateur C++ GNU. Le code objet monprogramme.o sera généré

Sauvez ce fichier :
<code>
   mv monprogramme.o monprogramme_orig.o
</code>

Maintenant, lancez bcpp :
<code>
   bcpp monprogramme.cpp
</code>
Le fichier contenant le programme formaté monprogramme.cpp sera généré et le
fichier initial sera déplacé dans monprogramme.cpp.orig. Compilez le nouveau
fichier :
<code>
   g++ -c monprogramme.cpp
</code>
Maintenant utilisez la commande unix 'diff' pour comparer les 2 fichiers
objets :
<code>
   diff monprogramme.o monprogramme_orig.o
</code>
Les deux fichiers <bf>DOIVENT ÊTRE IDENTIQUES</bf>. Cette commande vérifie que bcpp
fonctionne parfaitement. Sous DOS ou sous Windows 95, vous
devrez utiliser les utilitaires 'diff' ou 'MKS' de Cygwin fournis sur le site de
<url name="Cygnus" url="http://www.cygnus.com">.
De plus, vous pouvez utiliser la sortie en assembleur à la place de la sortie
objet du compilateur. En faisant :
<code>
    g++ -S monprogramme.cpp
</code>
monprogramme.s sera créé. Vérifiez-le avec :

<code>
    diff monprogramme.s monprogramme_orig.s
</code>
Cette étape vous garantit à 100% que votre précieux code source reste intact
et que bcpp fait UNIQUEMENT du formatage et NE change PAS ou n'endommage pas
votre code de quelque manière que ce soit. Cette méthode vous assure à 100 %
de sa qualité et une <bf>GARANTIE</bf> à vie ou à long terme
pour ces programmes de mise en forme comme 'bcpp', 'cb' ou 'indent'.

Il est fortement recommandé de faire ces deux étapes chaque fois que vous
lancerez un programme de mise en forme comme <bf>bcpp</bf>, <bf>indent</bf> ou 
<bf>cb</bf>.

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Tools for other Languages
-->
<sect>Embellisseurs pour d'autres langages
<p>
Visitez les sites suivants pour obtenir des embellisseurs pour d'autres
langages comme HTML, SQL, Java, Perl, Fortran.

<itemize>
<item> HTML : <url url="http://www.digital-mines.com/htb/">
<item> HTML : <url url="http://www.datacomm.ch/mwoog/software/perl/beautifier.html">
<item> HTML : <url url="http://www.watson-net.com/free/perl/s_fhtml.asp">
<item> SQL : <url url="http://www.netbula.com/products/sqlb">
<item> Java : <url url="http://home.wtal.de/software-solutions/jindent/frameset.html">
<item> Java JPretty : <url url="http://www.mmsindia.com/index.html"> 
<item> Perl : <url url="http://www.consultix-inc.com/www.consultix-inc.com/talk.htm">
<item> Perl : <url url="http://www.consultix-inc.com/www.consultix-inc.com/perl_beautifier.html">
<item> Embellisseur Fortran  : <url url="http://www.aeem.iastate.edu/Fortran/tools.html">
<item>C++ : Le site de BCPP est à l'adresse  <url url="http://www.clark.net/pub/dickey/bcpp/bcpp.html">
<item>C++ : <url url="http://www.consultix-inc.com/www.consultix-inc.com/c++b.html">
<item>C : <url url="http://www.chips.navy.mil/oasys/c/">
</itemize>

<itemize>
<item>Livre blanc sur les embellisseurs : <url url="http://www.consultix-inc.com/www.consultix-inc.com/talk.htm">
</itemize>

<!--Pour créer une présentation de codes en utilisant du HTML :-->
Pour présenter du code sous format HTML :

<itemize>
<item>Présentation (C, C++, Java) en html : <url url="http://www.perlstudio.de/cbindex.html">
</itemize>
Recherchez aussi dans les moteurs de recherches comme <url url="http://www.yahoo.com">
ou <url url="http://www.lycos.com"> et cherchez avec le mot-clé "embellisseur" (ou "beautifier" pour le terme anglais, NDT).

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Verification Script <label id="verification">
-->
<sect> Script de vérification
 <label id="verification">
<p>
Ceci est un script pour le shell Korn pour vérifier les programmes de mise en forme.
Il a besoin de "pdksh*.rpm" à partir du cdrom 'contrib' de Linux. Sauvez ce fichier
en tant que fichier 'texte' et appliquez sur ce fichier la commande chmod a+rx.
Vous pouvez réécrire ce script shell en Perl pour pouvoir l'utiliser sous Windows
95/NT ou MSDOS. Enlevez les commentaires de la variable PRGM pour le faire pointer sur
<bf>bcpp</bf>, <bf>cb</bf> ou <bf>indent</bf>.

<code>
#!/bin/ksh

# Programme de vérification pour contrôler des embellisseurs C++ comme 'bcpp', 'indent' ou 'cb'
############################################################
# Copyright 
# Les droits d'auteurs sont sous les termes de la GNU/GPL.
# Auteur: Al Dev (Alavoor Vasudevan) alavoor@yahoo.com
# Traducteur : Robert Jacolin rjacolin@yahoo.fr
############################################################

check_beautify_now()
{
	# Efface tous les fichiers temporaires ...
	\rm -f ${TMP_FILE}
	\rm -f ${TMP_CPPFILE}*.*

	FNAME=$1
	if [ ! -f ${FNAME} ]; then
		print "\nErreur : Le fichier ${FNAME} n'existe pas!!. Arrêt immédiat ...."
		exit
	fi
	\cp  -f ${FNAME} ${TMP_CPPFILE}.cpp
	${COMPILER} -c ${TMP_CPPFILE}.cpp
	if [ ! -f ${TMP_CPPFILE}.o ]; then
		print "Erreur Fatale : Impossible de compiler ${FNAME}. Arrêt immédiat ... "
		exit
	fi
	\mv -f ${TMP_CPPFILE}.o ${TMP_CPPFILE}_orig.o

	aa=`basename $PRGM`
	print "\nEn cours, vérification de $aa sur ${FNAME}"
	${PRGM} ${TMP_CPPFILE}.cpp
	${COMPILER} -c ${TMP_CPPFILE}.cpp
	\rm -f $TMP_FILE
	diff ${TMP_CPPFILE}.o ${TMP_CPPFILE}_orig.o 1> $TMP_FILE 2>> $TMP_FILE
	result=""
	result=`wc -c $TMP_FILE | awk '{print $1}' `
	if [ "$result" = "0" ]; then
		print "Succés!! La mise en forme de $aa fonctionne proprement!!\n"
	else
		print "Erreur Fatale : Quelque chose ne va pas!! La mise en forme ne fonctionne pas!!"
		exit
	fi
#	${COMPILER} -S ${TMP_CPPFILE}.cpp
#	diff ${TMP_CPPFILE}.s ${TMP_CPPFILE}_orig.s

	# Efface tous les fichiers temporaires ....
	\rm -f ${TMP_FILE}
	\rm -f ${TMP_CPPFILE}*.*
}

########## La partie principale du programme commence ici ##################
#PRGM=/usr/bin/bcpp
#PRGM=/usr/bin/cb
PRGM=/usr/bin/indent
COMPILER=/usr/bin/g++

TMP_FILE=beautify.tmp
TMP_CPPFILE=beautify-tmp_cppfile

print -n "Entrez le nom du fichier C++ <valeur par défaut *.cpp> : "
read ans
if [ "$ans" = "" -o "$ans" = " " ]; then
	ans="ALL"
else
	FILENAME=$ans
fi

# Efface tous les fichiers temporaires ....
\rm -f ${TMP_FILE}
\rm -f ${TMP_CPPFILE}*.*

if [ "$ans" != "ALL" ]; then
	check_beautify_now ${FILENAME}
else
	ls *.cpp |
	while read FILENAME 
	do
		check_beautify_now ${FILENAME}
	done
fi

</code>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt change> Related URLs
-->
<sect> Des urls sur ce sujet
<p>
Visitez les sites suivants en rapport avec le C, C++ :
<itemize>
<item> <url url="http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html" name="Editeur de texte en couleur Vim pour C++, C">
<item> <url url="http://metalab.unc.edu/LDP/HOWTO/C++Programming-HOWTO.html" name="Le manuel de programmation C++">
<item> <url url="http://metalab.unc.edu/LDP/HOWTO/CVS-HOWTO.html" name="Le manuel de CVS pour les programmes C++">
<item> Site principal de gâteries pour Linux sur <url url="http://www.aldev.8m.com">
<item> Site miroir de gâteries pour Linux sur <url url="http://aldev.webjump.com">
</itemize>
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt change> Other Formats of this Document
-->
<sect>Autres formats de ce document

<p>
Ce document est publié dans 11 formats différents qui ont pour noms : DVI,
Postscript, Latex, Adobe Acrobat PDF, LyX, GNU-info, HTML, RTF (Rich Text
Format : Format de texte enrichi), texte simple, pages de manuel Unix et SGML.

<itemize>
<item>
Vous pouvez obtenir ce document comme une simple archive tar de fichiers HTML,
DVI, Postscript ou SGML (en anglais, NDT) sur
<url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/">

<item>Le format texte est sur : <url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO">

<item>Des traductions dans d'autres langues comme le français, l'allemand, l'espagnol,
le chinois, le japonais sont disponibles sur 
<url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO">.

Toute aide que vous pouvez apporter pour des traductions dans d'autres langues
est la bienvenue.
</itemize>
Le document a été écrit en utilisant un outil appelé "SGML-Tools" qui peut
être obtenu à partir du site <url url="http://www.sgmltools.com">.
Pour compiler les sources, vous devrez utiliser des commandes du genre :

<itemize>
<item>sgml2html C-C++Beautifier-HOWTO.sgml     (pour générer des fichiers html)
<item>sgml2rtf  C-C++Beautifier-HOWTO.sgml     (pour générer un fichier RTF)
<item>sgml2latex C-C++Beautifier-HOWTO.sgml    (pour générer un fichier latex)
</itemize>
Les documents Latex peuvent être convertis en fichier PDF simplement en
produisant du Postscript en utilisant <bf>sgml2latex</bf> (et dvips)
et en passant ce qui a été produit à la commande <bf>distill</bf> d'Acrobat
(<url url="http://www.adobe.com">) comme suit :
<code>
bash$ man sgml2latex
bash$ sgml2latex filename.sgml
bash$ man dvips
bash$ dvips -o filename.ps filename.dvi
bash$ distill filename.ps
bash$ man ghostscript
bash$ man ps2pdf
bash$ ps2pdf input.ps output.pdf
bash$ acroread output.pdf &
</code>
ou vous pouvez encore utiliser la commande <bf>ps2pdf</bf>.
ps2pdf fonctionne de façon analogue au
produit Acrobat Distiller d'Adobe et possède les mêmes fonctionnalités : il convertit les fichiers Postscript
en fichiers au format PDF (Portable Document Format, Format de Document Portable).
<bf>ps2pdf</bf> est  un petit script de commande (fichier
batch) qui invoque Ghostscript, en sélectionnant un "périphérique de sortie"
spécial appelé <bf>pdfwrite</bf>. Pour utiliser ps2pdf, le périphérique
pdfwrite doit être inclus dans le makefile lors de la compilation de Ghostscript ;
voir la documentation sur la compilation de Ghostscript pour plus de détails.

Ce document (version anglaise) est situé à :
<itemize>
<item> <url url="http://sunsite.unc.edu/LDP/HOWTO/C-C++Beautifier-HOWTO.html">
</itemize>

Vous pouvez aussi trouver ce document sur les sites miroirs suivant : 

<itemize>
<item> <url url="http://www.caldera.com/LDP/HOWTO/C-C++Beautifier-HOWTO.html">
<item> <url url="http://www.WGS.com/LDP/HOWTO/C-C++Beautifier-HOWTO.html">
<item> <url url="http://www.cc.gatech.edu/linux/LDP/HOWTO/C-C++Beautifier-HOWTO.html">
<item> <url url="http://www.redhat.com/linux-info/ldp/HOWTO/C-C++Beautifier-HOWTO.html">

<item> D'autres sites miroirs proches de vous (au sens de distance réseau) peuvent
être trouvé sur <url url="http://sunsite.unc.edu/LDP/hmirrors.html">.
Choisissez un site et allez dans le répertoire /LDP/HOWTO/C-C++Beautifier-HOWTO.html.

</itemize>

Pour visualiser un document au format DVI, utilisez le programme xdvi. Le
programme xdvi est situé dans le paquetage tetex-xdvi*.rpm dans la Linux
Redhat. Il peut être trouvé par l'intermédiaire des boutons de menu Panneau de Contrôle
(ControlPannel) | Applications (Applications) | Publications (Publishing) | TeX (TeX).

Pour lire un document dvi, utilisez la commande :
<tscreen><verb>
	xdvi -geometry 80x90 howto.dvi
	man xdvi
</verb></tscreen>
et changez la taille de la fenêtre avec la souris. Pour naviguer dans le
document, utiliser les touches fléchées, les touches de saut de page haut, saut de page bas, vous
pouvez aussi utiliser les lettres 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' pour
vous déplacer vers le haut, le bas, au centre, à la page suivante, à la page précédente, etc.
Pour désactiver le mode expert, pressez 'x'.

Vous pouvez lire un fichier Postscript grâce au programme 'gv' (ghostview) ou
'ghostscript'. Le programme ghostscript est dans le paquetage ghostscript*.rpm
et le programme gv est dans le paquetage gv*.rpm dans la distribution linux
Redhat qui peut se trouver en utilisant les boutons du menu Panneau de Contrôle
(Control
panel) | Applications (Applications) | graphiques (Graphics). Le programme gv
est beaucoup plus facile à utiliser que ghostscript. Ghostscript et gv
existent aussi sous d'autres plate-formes comme OS/2, Windows 95 et NT. 

<itemize>
<item>Récupérez ghostscript pour Windows 95, OS/2 et pour tous les OS sur
<url url="http://www.cs.wisc.edu/~ghost">.
</itemize>
Pour lire un document postscript utilisez la commande :
<tscreen><verb>
		gv howto.ps
		ghostscript howto.ps
</verb></tscreen>
Vous pouvez lire un document au format HTML en utilisant Netscape Navigator, Microsoft
Internet Explorer, le navigateur Baron de Redhat ou le navigateur de votre choix
parmi les dizaines de navigateurs web existants.

Vous pouvez lire les documents latex ou Lyx générés en utilisant Lyx qui est une
interface graphique sous "X-Window" pour latex. 

<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




<chapt> Copyright
-->
<sect>Droits d'auteurs
<p>
La licence du copyright est la licence GNU/GPL comme pour le LDP
(Linux Documentation Project, le projet de documentation de Linux). Le LDP
est un projet sous licence GNU/GPL. Les restrictions additionnelles sont :
vous devez laisser le nom de l'auteur, l'adresse email et cette note sur le
droit d'auteurs sur toutes les copies. Si vous faites un quelconque
changement ou addition dans ce document, vous devez alors prévenir tous
les auteurs de ce document.
<!-- 
	*******************************************
	************ End of Section ***************
	*******************************************




-->
</article>
