
                     Manuel de mise en forme de code C/C++

Al Dev (Alavoor Vasudevan) <alavoor@yahoo.com>
Traduction franaise de Robert Jacolin <rjacolin@yahoo.fr>
Relecture de Christophe Fergeau <christophe.fergeau@ensimag.imag.fr>

   V 6.0, 1 aot 2000
     _________________________________________________________________

   _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 prsentes dans ce document s'appliquent
    tous les systmes d'exploitation existants - les systmes
   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 systmes d'exploitation qui possdent un
   compilateur "C" (ce qui veut dire presque tous les systmes
   d'exploitation de cette plante!)._
     _________________________________________________________________

1. Introduction

   Les standards de codage pour le C/C++ ou d'autres langages sont
   utiliss dans le but de rendre les programmes plus
   lisibles/comprhensibles par les programmeurs. Pour cela, il existe
   des embellisseurs C/C++ (outils de formatage). Le code format
   (embelli) augmente la _productivit_ des programmeurs de _100%_!!

   Sur GNU/Linux/Unix, il existe des commandes appeles _"indent"_ et
   _"cb"_. Rfrez-vous aux pages de manuel par 'man indent' et 'man cb'.
   Notez que _indent_ et _cb_ fonctionnent uniquement pour les programmes
   "C". Pour les programmes "C++", utilisez _"bcpp"_. Tlchargez ce
   programme de mise en forme  partir des sites suivants :

     * C++ : le site de BCPP est  l'adresse
       http://dickey.his.com/bcpp/bcpp.html ou sur
       http://www.clark.net/pub/dickey
     * C++ : le site ftp de BCPP est  l'adresse
       ftp://dickey.his.com/bcpp/bcpp.tar.gz
     * C++ : http://www.consultix-inc.com/c++b.html
     * C : http://www.chips.navy.mil/oasys/c/

   J'ai utilis BCPP pour formater les programmes C++ et il m'a
   parfaitement convenu. Vous prfrerez peut-tre essayer d'autres
   outils et utiliser celui que vous apprcierez le plus.

   BCPP a t crit par Steven De Toni

2. Comment avoir confiance en un programme de mise en forme ??!!

   Pour tre sur  100%, vous devez utiliser une approche _SCIENTIFIQUE_
   pour valider et avoir confiance en un programme de mise en forme. La
   mthode dcrite dans cette section permettra au programme de mise en
   forme d'tre agr comme tant "vraiment fiable" et srieux. Dans le
   but de vrifier qu'un programme de mise en forme comme _bcpp_, _indent_
   ou _cb_ ne provoque pas de dommage ou ne change pas le code source
   d'entre aprs formatage, vous pouvez utiliser le script shell
   Programme de vrification ou utiliser la technique suivante :

   Gnrez le code objet  partir du code source original en utilisant le
   compilateur :
     _________________________________________________________________

  g++ -c monprogramme.cpp
     _________________________________________________________________

   Ici g++ est le compilateur C++ GNU. Le code objet monprogramme.o sera
   gnr

   Sauvez ce fichier :
     _________________________________________________________________

   mv monprogramme.o monprogramme_orig.o
     _________________________________________________________________

   Maintenant, lancez bcpp :
     _________________________________________________________________

   bcpp monprogramme.cpp
     _________________________________________________________________

   Le fichier contenant le programme format monprogramme.cpp sera gnr
   et le fichier initial sera dplac dans monprogramme.cpp.orig.
   Compilez le nouveau fichier :
     _________________________________________________________________

   g++ -c monprogramme.cpp
     _________________________________________________________________

   Maintenant utilisez la commande unix 'diff' pour comparer les 2
   fichiers objets :
     _________________________________________________________________

   diff monprogramme.o monprogramme_orig.o
     _________________________________________________________________

   Les deux fichiers _DOIVENT TRE IDENTIQUES_. Cette commande vrifie
   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 Cygnus. De plus, vous pouvez utiliser la sortie en
   assembleur  la place de la sortie objet du compilateur. En faisant :
     _________________________________________________________________

    g++ -S monprogramme.cpp
     _________________________________________________________________

   monprogramme.s sera cr. Vrifiez-le avec :
     _________________________________________________________________

    diff monprogramme.s monprogramme_orig.s
     _________________________________________________________________

   Cette tape vous garantit  100% que votre prcieux code source reste
   intact et que bcpp fait UNIQUEMENT du formatage et NE change PAS ou
   n'endommage pas votre code de quelque manire que ce soit. Cette
   mthode vous assure  100 % de sa qualit et une _GARANTIE_  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 _bcpp_, _indent_ ou
   _cb_.

3. Embellisseurs pour d'autres langages

   Visitez les sites suivants pour obtenir des embellisseurs pour
   d'autres langages comme HTML, SQL, Java, Perl, Fortran.

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

     * Livre blanc sur les embellisseurs :
       http://www.consultix-inc.com/www.consultix-inc.com/talk.htm

   Pour prsenter du code sous format HTML :

     * Prsentation (C, C++, Java) en html :
       http://www.perlstudio.de/cbindex.html

   Recherchez aussi dans les moteurs de recherches comme
   http://www.yahoo.com ou http://www.lycos.com et cherchez avec le
   mot-cl "embellisseur" (ou "beautifier" pour le terme anglais, NDT).

4. Script de vrification

   Ceci est un script pour le shell Korn pour vrifier 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 rcrire 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
   _bcpp_, _cb_ ou _indent_.
     _________________________________________________________________

#!/bin/ksh

# Programme de vrification pour contrler 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!!. Arrt 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}. Arrt i
mmdiat ... "
                exit
        fi
        \mv -f ${TMP_CPPFILE}.o ${TMP_CPPFILE}_orig.o

        aa=`basename $PRGM`
        print "\nEn cours, vrification 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 "Succs!! La mise en forme de $aa fonctionne proprement!!
\n"
        else
                print "Erreur Fatale : Quelque chose ne va pas!! La mise en for
me 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 dfaut *.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
     _________________________________________________________________

5. Des urls sur ce sujet

   Visitez les sites suivants en rapport avec le C, C++ :
     * Editeur de texte en couleur Vim pour C++, C
     * Le manuel de programmation C++
     * Le manuel de CVS pour les programmes C++
     * Site principal de gteries pour Linux sur http://www.aldev.8m.com
     * Site miroir de gteries pour Linux sur http://aldev.webjump.com

6. Autres formats de ce document

   Ce document est publi dans 11 formats diffrents 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.

     * Vous pouvez obtenir ce document comme une simple archive tar de
       fichiers HTML, DVI, Postscript ou SGML (en anglais, NDT) sur
       ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/
     * Le format texte est sur :
       ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO
     * Des traductions dans d'autres langues comme le franais,
       l'allemand, l'espagnol, le chinois, le japonais sont disponibles
       sur ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO. Toute aide que
       vous pouvez apporter pour des traductions dans d'autres langues
       est la bienvenue.

   Le document a t crit en utilisant un outil appel "SGML-Tools" qui
   peut tre obtenu  partir du site http://www.sgmltools.com. Pour
   compiler les sources, vous devrez utiliser des commandes du genre :

     * sgml2html C-C++Beautifier-HOWTO.sgml (pour gnrer des fichiers
       html)
     * sgml2rtf C-C++Beautifier-HOWTO.sgml (pour gnrer un fichier RTF)
     * sgml2latex C-C++Beautifier-HOWTO.sgml (pour gnrer un fichier
       latex)

   Les documents Latex peuvent tre convertis en fichier PDF simplement
   en produisant du Postscript en utilisant _sgml2latex_ (et dvips) et en
   passant ce qui a t produit  la commande _distill_ d'Acrobat (
   http://www.adobe.com) comme suit :
     _________________________________________________________________

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 &
     _________________________________________________________________

   ou vous pouvez encore utiliser la commande _ps2pdf_. ps2pdf fonctionne
   de faon analogue au produit Acrobat Distiller d'Adobe et possde les
   mmes fonctionnalits : il convertit les fichiers Postscript en
   fichiers au format PDF (Portable Document Format, Format de Document
   Portable). _ps2pdf_ est un petit script de commande (fichier batch)
   qui invoque Ghostscript, en slectionnant un "priphrique de sortie"
   spcial appel _pdfwrite_. Pour utiliser ps2pdf, le priphrique
   pdfwrite doit tre inclus dans le makefile lors de la compilation de
   Ghostscript ; voir la documentation sur la compilation de Ghostscript
   pour plus de dtails.

   Ce document (version anglaise) est situ  :
     * http://sunsite.unc.edu/LDP/HOWTO/C-C++Beautifier-HOWTO.html

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

     * http://www.caldera.com/LDP/HOWTO/C-C++Beautifier-HOWTO.html
     * http://www.WGS.com/LDP/HOWTO/C-C++Beautifier-HOWTO.html
     * http://www.cc.gatech.edu/linux/LDP/HOWTO/C-C++Beautifier-HOWTO.htm
       l
     * http://www.redhat.com/linux-info/ldp/HOWTO/C-C++Beautifier-HOWTO.h
       tml
     * D'autres sites miroirs proches de vous (au sens de distance
       rseau) peuvent tre trouv sur
       http://sunsite.unc.edu/LDP/hmirrors.html. Choisissez un site et
       allez dans le rpertoire /LDP/HOWTO/C-C++Beautifier-HOWTO.html.

   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'intermdiaire des boutons de
   menu Panneau de Contrle (ControlPannel) | Applications (Applications)
   | Publications (Publishing) | TeX (TeX).

   Pour lire un document dvi, utilisez la commande :

        xdvi -geometry 80x90 howto.dvi
        man xdvi

   et changez la taille de la fentre avec la souris. Pour naviguer dans
   le document, utiliser les touches flches, 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 dplacer vers le
   haut, le bas, au centre,  la page suivante,  la page prcdente,
   etc. Pour dsactiver le mode expert, pressez 'x'.

   Vous pouvez lire un fichier Postscript grce 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 Contrle (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.

     * Rcuprez ghostscript pour Windows 95, OS/2 et pour tous les OS
       sur http://www.cs.wisc.edu/~ghost.

   Pour lire un document postscript utilisez la commande :

                gv howto.ps
                ghostscript howto.ps

   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 gnrs en utilisant Lyx
   qui est une interface graphique sous "X-Window" pour latex.

7. Droits d'auteurs

   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 prvenir tous les auteurs de ce document.
