  C-C++ Beautifier HOW-TO
  Al Dev (Alavoor Vasudevan) alavoor@yahoo.com
  v15.0, 14 giugno 2001

  Questo documento vi aiuter nella stesura (abbellimento) di programmi
  in C/C++ cos che siano pi leggibili e nel rafforzare la vostra area
  di programmazione in C/C++ standard.  Le informazioni in questo docu
  mento si applicano a tutti i sistemi operativi, come Linux, MS DOS,
  Apple Macintosh, Windows 95/NT/2000, BeOS, OS/2, IBM OSes, e tutte le
  varianti di Unix come Solaris, HPUX, AIX, SCO, Sinix, BSD, UnixWare,
  ecc... e tutti gli altri sistemi operativi che supportano il compila
  tore "C" (intendo quasi tutti i sistemi operativi su questo pianeta!).
  La traduzione italiana  stata curata da Bettani Marco (cmos at
  inwind.it).

  1.  Introduzione

  La programmazione standard per il C/C++ o un altro linguaggio 
  richiesta allo scopo di creare programmi pi leggibili/capibili dai
  programmatori.  Ci sono abbellitori per C/C++ (strumenti di
  formattazione) per realizzare questo fine. Il codice formattato
  (abbellito) migliora la produttivit dei programmatori di ben 2
  volte!!

  Su Linux/Unix c' un comando chiamato "indent" e "cb".  Rimando a 'man
  indent' e 'man cb'. Notate che indent e cb funzionano solo per
  programmi "C". Per programmi "C++" si utilizza "bcpp".

  Nota importante: Per compilare con bcpp sotto Unix, scompattate
  bcpp.tar.gz, DOVETE modificare la directory in "code", e fate un make.
  Non modificate la directory in "unix", e date un make. Quello dar
  molti errori.

  Scaricate il programma abbellitore da uno di seguenti indirizzi:

    Se avete problemi nello scaricare il software da qualunque dei siti
     elencati sotto, potete provare al mio sito
     <http://www.aldev.8m.com/cppbeautifier>


    C++ : il sito BCPP  <http://dickey.his.com/bcpp/bcpp.html> o
     <http://www.clark.net/pub/dickey>.  BCPP via ftp 
     <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/> e il mirror Oasys
     <http://oasys.nctamslant.navy.mil/oasys/c>

    C++ :  <http://www.semdesigns.com/Products/DMS/DMSToolkit.html>

    C++, C, Java e Oracle Pro-C abbellitori
     <http://www.geocities.com/~starkville/main.html>

    C++, C abbellitori
     <http://users.erols.com/astronaut/vim/ccb-1.07.tar.gz> e il sito
     <http://users.erols.com/astronaut/vim/#vimlinks_src>

    C++, C, Java, Perl abbellitori CBP
     <http://www.prismtk.de/docs/cbp>

    GC! GreatCode!  un efficace abbellitore di codice sorgente C/C++
     Windows 95/98/NT/2000  <http://perso.club-internet.fr/cbeaudet>

    CbVan per C, C++ e Java
     <http://www.geocities.com/~starkville/main.html>
     Io ho usato il BCPP per la stesura di programmi C++ e secondo me ha
     lavorato bene. Voi potete voler verificare anche altri strumenti e
     usate quello che pi vi piace.


  BCPP  stato scritto da Steven De Toni steve@alpha.ocbbs.gen.nz

  2.  Come posso aver fiducia in programmi di abbellimento??!!

  Vi assicuro al 100% che avete bisogno di un modo SCIENTIFICO per
  fidarvi di un abbellitore di programmi. Il metodo descritto in questa
  sezione metter il programma abbellitore in grado di venir accettato
  come "sicuro" e degno di fiducia.

  Per verificare che programmi abbellitori come bcpp, indent o cb non
  stiano danneggiando o modificando il codice sorgente in ingresso dopo
  che l'hanno formattato, lo potete verificare usando uno script
  ``programma verifica'' oppure usate la seguente tecnica -

  Generate il codice oggetto dal sorgente originale usando il
  compilatore -

  ______________________________________________________________________
    g++ -c myprogram.cpp
  ______________________________________________________________________


  Qui g++  il compilatore GNU C++. Questo generer in uscita il codice
  oggetto myprogram.o

  Salvate questo file -

  ______________________________________________________________________
     mv myprogram.o myprogram_orig.o
  ______________________________________________________________________



  Ora lanciate bcpp -

  ______________________________________________________________________
     bcpp myprogram.cpp
  ______________________________________________________________________



  Questo generer in uscita il programma formattato myprogram.cpp e
  rinominate il file originale in myprogram.cpp.orig. Compilate il nuovo
  file con -

  ______________________________________________________________________
    g++ -c myprogram.cpp
  ______________________________________________________________________



  Ora usate il comando unix 'diff' per confrontare i due file oggetto -

  ______________________________________________________________________
    diff mymyprogram.o myprogram_orig.o
  ______________________________________________________________________



  Entrambi questi file DEVONO ESSERE IDENTICI. Questo verifica che bcpp
  sta lavorando perfettamente. In DOS o Windows 95 potete usare il free
  Cygnus <http://www.cygnus.com> Cygwin 'diff' o 'MKS' strumenti.

  Se per qualche ragione non avete la possibilit di eseguire un diff
  tra i file oggetto, allora POTETE usare il file in uscita assemblato
  come descritto qui sotto.

  Potete usare l'uscita dell'assembler invece del file oggetto di uscita
  dal compilatore C++ per fare la comparazione.

  Come -

  ______________________________________________________________________
     g++ -S myprogram.cpp
  ______________________________________________________________________


  Questo produrr myprogram.s. Verificatelo con -

  ______________________________________________________________________
      diff myprogram.s myprogram_orig.s
  ______________________________________________________________________


  Questo procedimento garantisce al 100% che il vostro prezioso codice
  sorgente  intatto e il bcpp sta PROPRIO facendo SOLO la formattazione
  e NON sta modificando il vostro codice in nessun modo.  Questo metodo
  vi assicura una qualit al 100% e un periodo di vita o un lungo peri
  odo di GARANZIA dei programmi abbellitori come 'bcpp', 'cb' o
  'indent'.

  E' caldamente raccomandato fare questi due passi ogni volta che
  lanciate un programma abbellitore come bcpp, indent o cb.

  3.  Abbellitori per altri Linguaggi

  Visitate i seguenti siti per avere gli abbellitori di altri linguaggi
  come 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>

    Oracle PLSQL : http://www.revealnet.com
     <http://www.revealnet.com/Products/Formatter_Plus/formatter_plus.htm>


    Java, SQL, HTML, C++ :
     <http://www.semdesigns.com/Products/DMS/DMSToolkit.html>

    Java :  <http://home.wtal.de/software-
     solutions/jindent/frameset.html>

    Java JPretty :  <http://www.mmsindia.com/index.html>

    Java JIndent  <http://home.wtal.de/software-solutions/jindent>

    Java Pat  <http://javaregex.com/cgi-bin/pat/jbeaut.asp>

    Java JStyle  <http://www.redrival.com/greenrd/java/jstyle>

    Java JPrettyPrinter
     <http://www.epoch.com.tw/download/ms/java/java.htm>

    Java JxBeauty
     <http://members.nextra.at/johann.langhofer/download/jxbeauty> e il
     JxBeauty Home
     <http://members.magnet.at/j\ohann.langhofer/products/jxbeauty/overview.html>

    Java beautify percolator <http://www2.blaze.ca/~jspeton/percolator>

    Java lista
     <http://www.java.about.com/compute/java/library/weekly/aa102499.htm>

    Java html present VasJava2HTML
     <http://www.chez.com/vasile/java2/VasJava2HTML.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>


    Abbellitore Fortran  :
     <http://www.aeem.iastate.edu/Fortran/tools.html>


    C++ : il sito BCPP  <http://dickey.his.com/bcpp/bcpp.html> o
     <http://www.clark.net/pub/dickey>.  BCPP via ftp 
     <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/> e il mirror Oasys
     <http://oasys.nctamslant.navy.mil/oasys/c>

    C++, C, Java, Oracle Pro-C abbellitori
     <http://www.geocities.com\/~starkville/main.html>

    C++, C abbellitori
     <http://users.erols.com/astronaut/vim/ccb-1.0\7.tar.gz> e il sito
     <http://users.erols.com/astronaut/vim/#vimlinks_src>

    GC! GreatCode!  un efficace abbellitore di codice sorgente C/C++
     Windows 95/98/NT/2000  <http://perso.club-internet.fr/cbeaudet>


    Informazioni sugli abbellitori :  <http://www.consultix-
     inc.com/www.co\nsultix-inc.com/talk.htm>

  Per creare una presentazione del codice usando HTML -

    Presentazione (C,C++,Java) per html :
     <http://www.perlstudio.de/cb\index.html>

     Potete anche cercare sui motori di ricerca come
     <http://www.yahoo.com> o  <http://www.lycos.com> cercando la parola
     "beautifer".

  4.  Script di verifica

  Questo  uno script della shell Korn per verificare il programma
  abbellitore.  Richiede il pacchetto "pdksh*.rpm" dal cdrom 'contrib'
  di Linux. Salvate questo file come un file di 'testo' e modificate i
  permessi con chmod a+rx. Potete anche riscrivere questo script in PERL
  cos da poterlo usare su Windows 95/NT o MSDOS. Togliete il commento
  alla variabile PRGM se usate il bcpp, cb o indent



  ______________________________________________________________________
  #!/bin/ksh

  # Programma per verificare l'abbellitore C++ 'bcpp', 'indent' o 'cb'
  ############################################################
  # Copyright
  # The copyright policy is GNU/GPL.
  # Author: Al Dev (Alavoor Vasudevan) alavoor@yahoo.com
  ############################################################

  check_beautify_now()
  {
          # Rimozione di tutti i file temporanei
          \rm -f ${TMP_FILE}
          \rm -f ${TMP_CPPFILE}*.*

          FNAME=$1
          if [ ! -f ${FNAME} ]; then
                  print "\nErrore: Il file ${FNAME} non esiste!!. Termino ora...."
                  exit
          fi
          \cp  -f ${FNAME} ${TMP_CPPFILE}.cpp
          ${COMPILER} -c ${TMP_CPPFILE}.cpp
          if [ ! -f ${TMP_CPPFILE}.o ]; then
                  print "Errore fatale: fallita la compilazione di ${FNAME}. Termino ora... "
                  exit
          fi
          \mv -f ${TMP_CPPFILE}.o ${TMP_CPPFILE}_orig.o

          aa=`basename $PRGM`
          print "\nSto lavorando, verifico $aa in ${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 "Successo!! L'abbellitore $aa sta lavorando correttamente!!\n"
          else
                  print "Errore fatale: Qualcosa  andato storto!! L'abbellitore non sta lavorando!!"
                  exit
          fi
  #       ${COMPILER} -S ${TMP_CPPFILE}.cpp
  #       diff ${TMP_CPPFILE}.s ${TMP_CPPFILE}_orig.s

          # Rimozione di tutti i file temporanei
          \rm -f ${TMP_FILE}
          \rm -f ${TMP_CPPFILE}*.*
  }

  ########## Il programma principale inizia qui ##################3
  #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 "Inserisci il nome del file C++ <predefinito  *.cpp> : "
  read ans
  if [ "$ans" = "" -o "$ans" = " " ]; then
          ans="ALL"
  else
          FILENAME=$ans
  fi

  # Rimozione di tutti i file temporanei
  \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.  URL correlate

  Visitate i seguenti siti che sono relativi al C, C++ -

    Vim color text editor per C++, C
     <http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html>

    C++ Programming HOWTO
     <http://metalab.unc.edu/LDP/HOWTO/C++Programming-HOWTO.html>

    Howto del sistema di controllo del codice sorgente CVS per
     programmi C++ <http://metalab.unc.edu/LDP/HOWTO/CVS-HOWTO.html>

    Linux goodies sito principale  <http://www.aldev.8m.com> e mirror
     <http://aldev0.webjump.com>, angelfire
     <http://www.angelfire.com/country/aldev0>, geocities
     <http://www.geocities.com/alavoor/index.html>, virtualave
     <http://aldev0.virtualave.net>, 50megs <http://aldev0.50megs.com>,
     theglobe <http://members.theglobe.com/aldev1/index.html>, NBCi
     <http://members.nbci.com/alavoor>, Terrashare
     <http://aldev.terrashare.com>, Fortunecity
     <http://members.fortunecity.com/aldev>, Freewebsites
     <http://aldev.freewebsites.com>, Tripod
     <http://members.tripod.lycos.com/aldev>, Spree
     <http://members.spree.com/technology/aldev>, Escalix
     <http://www.escalix.com/freepage/aldev>, Httpcity
     <http://www.httpcity.com/aldev/index.html>, Freeservers
     <http://aldev.freeservers.com>.

  6.  Altri formati di questo documento

  Questo documento  pubblicato in 14 differenti formati precisamente -
  DVI, Postscript, Latex, Adobe Acrobat PDF, RTF(Rich Text Format), puro
  testo, pagine man di Unix, singolo file HTML, SGML (formato linuxdoc),
  SGML (formato Docbook), formato help di MS WinHelp.

  Questo documento lo si trova anche a -

    <http://www.linuxdoc.org> cliccate su HOWTO e cercate il nome di
     questo howto utilizzando CTRL+f o ALT+f all'interno della pagina
     web.

  Potete anche cercare questo documento sui seguenti siti mirror -

    <http://www.caldera.com/LDP/HOWTO>


    <http://www.linux.ucla.edu/LDP>

    <http://www.cc.gatech.edu/linux/LDP>

    <http://www.redhat.com/mirrors/LDP>


    Altri siti mirror vicini a voi (sulla base dell'indirizzo) possono
     essere trovati su  <http://www.linuxdoc.org/mirrors.html>,
     selezionate un sito ed andate alla directory /LDP/HOWTO/xxxxx-
     HOWTO.html



    Potete prendere questo documento HOWTO come un singolo file tar nel
     formato HTML, DVI, Postscript o SGML da -
     <ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO/other-formats/> e
     <http://www.linuxdoc.org/docs.html#howto>


    Puro testo a :  <ftp://www.linuxdoc.org/pub/Linux/docs/\HOWTO> e
     <http://www.linuxdoc.org/docs.html#howto>


    Il singolo file in formato HTML  in :
     <http://www.linuxdoc.org/docs.html#howto>

     Il singolo file HTML pu essere creato con il comando (vedete man
     sgml2html) - sgml2html -split 0   xxxxhowto.sgml


    La traduzione in altre lingue come Francese, Tedesco, Spagnolo,
     Chinese, Giapponese sono in
     <ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO> e
     <http://www.linuxdoc.org/docs.html#howto> Qualsiasi aiuto per
     tradurre in altri linguaggi  ben accetto.

     Il documento  stato scritto utilizzando uno strumento chiamato
     "SGML-Tools" che pu essere prelevato da -
     <http://www.sgmltools.org> Compilando il sorgente, troverete i
     seguenti comandi come

    sgml2html xxxxhowto.sgml     (per generare file html)

    sgml2html -split 0   xxxxhowto.sgml (per generare una singola
     pagina html)

    sgml2rtf  xxxxhowto.sgml     (per generare file RTF)

    sgml2latex xxxxhowto.sgml    (per generare file latex)

  6.1.  Formato Acrobat PDF

  Il file PDF pu essere generato dal file postscript utilizzando
  Acrobat distill oppure Ghostscript.  Il file postscript  stato
  generato dal DVI il quale  stato generato dal file LaTex.  Potete
  scaricare il software da  <http://www.adobe.com>. Segue una semplice
  sessione:



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


  Oppure potete usare il comando Ghostscript ps2pdf.  ps2pdf  un buon
  sostituto di Adobe Acrobat Distiller per quasi tutte le funzionalit
  del prodotto Adobe Acrobat Distiller: converte file PostScript in file
  Portable Document Format (PDF).  ps2pdf  implementato come un comando
  di script molto piccolo (file batch) che invoca Ghostscript, selezio
  nando uno speciale "dispositivo di uscita" chiamato pdfwrite.  Allo
  scopo di utilizzare ps2pdf, il dispositivo pdfwrite deve essere
  incluso nel makefile quando Ghostscript viene compilato; per i det
  tagli vedere la documentazione sulla compilazione di Ghostscript.

  6.2.  Convertire Linuxdoc nel formato Docbook

  Questo documento  stato scritto nel formato SGML linuxdoc. Il formato
  SGML Docbook ha pi caratteristiche del formato linuxdoc. Il formato
  linuxdoc  molto pi semplice da usare. Per convertire il file in
  formato linuxdoc SGML nel formato Docbook si utilizzi il programma
  ld2db.sh e alcuni script in perl. L'uscita di ld2db non  al 100%
  chiara ed  necessario usare lo script perl clean_ld2db.pl. Potete
  aver bisogno di modificare manualmente poche linee nel documento.

    Scaricate il programma ld2db da
     <http://www.dcs.gla.ac.uk/~rrt/docbook.html> o da Al Dev site
     <http://www.aldev.8m.com/cppsrc.html>

    Scaricate lo script perl cleanup_ld2db.pl da Al Dev site
     <http://www.aldev.8m.com/cppsrc.html>

     L'ld2db.sh non  chiaro al 100%, dar molti errori quando lo
     eseguirete

     ___________________________________________________________________
             bash$ ld2db.sh file-linuxdoc.sgml db.sgml
             bash$ cleanup.pl db.sgml > db_clean.sgml
             bash$ gvim db_clean.sgml
             bash$ docbook2html db.sgml
     ___________________________________________________________________


  Potrete avere la necessit di editare manualmente alcuni degli errori
  meno gravi dopo l'esecuzione dello script perl. Per esempio potete
  aver bisogno di chiudere dei tag < /Para> per ogni < Listitem>

  6.3.  Convertire nel formato MS WinHelp

  Potete convertire il documento HOWTO dal formato SGML al file
  Microsoft Windows Help, prima convertite il sgml in html usando:

  ______________________________________________________________________
          bash$ sgml2html xxxxhowto.sgml     (per generare file html)
          bash$ sgml2html -split 0   xxxxhowto.sgml (per generare il singolo file html)
  ______________________________________________________________________


  Poi utilizzate lo strumento HtmlToHlp <http://javadocs.planetmir
  ror.com/htmltohlpe.html>.  Potete anche usare sgml2rtf e poi usare i
  file RTF per generare i file winhelp.

  6.4.  Leggendo diversi formati

  Per vedere il documento nel formato dvi, usate il programma xdvi. Il
  programma xdvi  situato nel pacchetto tetex-xdvi*.rpm di Linux Redhat
  il quale pu essere localizzato attraverso i pulsanti di menu
  ControlPanel | Applications | Publishing | TeX.  Per leggere il
  documento dvi date il comando -


               xdvi -geometry 80x90 howto.dvi
               man xdvi



  E ridimensionate la finestra con il mouse. Per navigare usate i tasti
  freccia, i tasti Pagina Su, Pagina Gi, potete usare anche i tasti
  lettera 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' per muovervi su, gi,
  in centro, pagina seguente, pagina precedente, ecc. Per chiudere il
  men premere 'x'.

  Potete leggere il file postscript usando il programma 'gv' (ghostview)
  o 'ghostscript'. Il programma ghostscript  nel pacchetto gv*.rpm in
  Redhat Linux il quale pu essere localizzato attraverso i pulsanti del
  menu ControlPanel | Applications | Graphics. Il programma gv  molto
  pi user friendly di ghostscript. Ghostscript e gv sono anche
  disponibili per altre piattaforme come OS/2, Windows 95 e NT, vedete
  questo documento perfino su queste piattaforme.


    Trovate ghostscript per Windows 95, OS/2, e per tutti i sistemi su
     <http://www.cs.wisc.edu/~ghost>

  Per leggere il documento postscript date il comando -


                       gv howto.ps
                       ghostscript howto.ps



  Potete leggere il documento in formato HTML usando Netscape Navigator,
  Microsoft Internet Explorer, Redhat Baron Web browser o uno qualsiasi
  degli altri 10 web browser.

  Potete leggere l'output latex, utilizzando LyX, un'interfaccia X-
  Windows per latex.

  7.  Copyright

  Copyright policy is GNU/GPL as per LDP (Linux Documentation project).
  LDP is a GNU/GPL project.  Additional restrictions are - you must
  retain the author's name, email address and this copyright notice on
  all the copies. If you make any changes or additions to this document
  then you should intimate all the authors of this document.



