C-C++ Beautifier HOW-TO <!-- chapt change C-C++ Beautifier HOW-TO --> <author>Al Dev (Alavoor Vasudevan) <htmlurl url="mailto:alavoor@yahoo.com" name="alavoor@yahoo.com"> <date>v15.0, 14 June 2001 <abstract> Questo documento vi aiuterà nella stesura (abbellimento) di programmi in C/C++ così che siano più leggibili e rafforzare la vostra area di programmazione in C/C++ standard. Le informazioni in questo documento 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 like Solaris, HPUX, AIX, SCO, Sinix, BSD, UnixWare, etc... e tutti gli altri sistemi operativi che supportano il compilatore "C" (intendo quasi tutti i sistemi operativi su questo pianeta!). La traduzione italiana è stata curata da Bettani Marco (cmos@inwind.it). </abstract> <!-- Indice --> <toc> <!-- Inizio del documento --> <!-- **************************************** ************ Fine Sezione ************** **************************************** <chapt>Introduzione --> <sect>Introduzione <p> 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 <bf>produttività</bf> dei programmatori di ben <bf>2 volte</bf>!! Su Linux/Unix c'è un comando chiamato <bf>"indent"</bf> e <bf>"cb"</bf>. Rimando a 'man indent' e 'man cb'. Notate che <bf>indent</bf> e <bf>cb</bf> funzionano solo per programmi "C". Per programmi "C++" si utilizza <bf>"bcpp"</bf>. <bf>Nota importante:</bf> <it>Per compilare con bcpp sotto unix, scompattate bcpp.tar.gz, <bf>DOVETE</bf> modificare la directory in "code", e fate un make. Non modificate la direcotory in "unix", e date un make. Quello darà molti errori.</it> Scaricate il programma abbellitore da uno di seguenti indirizzi: <itemize> <item>Se avete problemi nello scaricare il software da qualunque di questi siti elencati sotto, potete provare al mio sito <url url="http://www.aldev.8m.com/cppbeautifier"> <p> <item>C++ : il sito BCPP è <url url="http://dickey.his.com/bcpp/bcpp.html"> o <url url="http://www.clark.net/pub/dickey">. BCPP via ftp è <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/"> e il mirror <url name="Oasys" url="http://oasys.nctamslant.navy.mil/oasys/c"> <item>C++ : <url url="http://www.semdesigns.com/Products/DMS/DMSToolkit.html"> <item> C++, C, Java e Oracle Pro-C abbellitori <url url="http://www.geocities.com/~starkville/main.html"> <item> C++, C abbellitori <url url="http://users.erols.com/astronaut/vim/ccb-1.07.tar.gz"> e il sito <url url="http://users.erols.com/astronaut/vim/#vimlinks_src"> <item> C++, C, Java, Perl abbellitori CBP <url url="http://www.prismtk.de/docs/cbp"> <item> GC! GreatCode! è un efficace abbellitore di codice sorgente C/C++ Windows 95/98/NT/2000 <url url="http://perso.club-internet.fr/cbeaudet"> <item> CbVan per C, C++ e Java <url url="http://www.geocities.com/~starkville/main.html"> </itemize> 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 <htmlurl url="mailto: steve@alpha.ocbbs.gen.nz " name=" steve@alpha.ocbbs.gen.nz "> <!-- ***************************************** ************ Fine Sezione *************** ***************************************** <chapt> Come posso aver fiducia in programmi di abbellimento??!! --> <sect> Come posso aver fiducia in programmi di abbellimento??!! <p> Vi assicuro al 100% che avete bisogno di un modo <bf>SCIENTIFICO</bf> per fidarvi di un abbellitore di programmi. Il metodo descritto in questa sezione metterà in grado il programma abbellitore di venir accettato come "sicuro" e degno di fiducia. Per verificare che programmi abbellitori come <bf>bcpp</bf>, <bf>indent</bf> o <bf>cb</bf> non stiano danneggiando o modificando il codice sorgente di ingresso dopo che l'hanno formattato, lo potete verificare usando uno script <ref id="verification" name="programma verifica"> oppure usate la seguente tecnica - Generate il codice oggetto dal sorgente originale usando il compilatore - <code> g++ -c myprogram.cpp </code> Qui g++ è il compilatore GNU C++. Questo genererà in uscita il codice oggetto myprogram.o Salvate questo file - <code> mv myprogram.o myprogram_orig.o </code> Ora lanciate bcpp - <code> bcpp myprogram.cpp </code> Questo genererà in uscita il programma formattato myprogram.cpp e rinominate il file originale in myprogram.cpp.orig. Compilate il nuovo file con - <code> g++ -c myprogram.cpp </code> Ora usate il comando unix 'diff' per confrontare i due file oggetto - <code> diff mymyprogram.o myprogram_orig.o </code> Entrambi questi file <bf>DEVONO ESSERE IDENTICI</bf>. Questo verifica che bcpp sta lavorando perfettamente. In DOS o Windows 95 potete usare il free <url name="Cygnus" url="http://www.cygnus.com"> Cygwin 'diff' o 'MKS' strumenti. <bf><it>Se per qualche ragione non avete la possibilità di eseguire un diff tra i file oggetto, allora POTETE usare il file di uscita assemblato come descritto qui sotto.</it></bf> Potete usare l'uscita dell'assembler invece del file oggetto di uscita dal compilatore C++ per fare la comparazione. Come - <code> g++ -S myprogram.cpp </code> Questo produrrà myprogram.s. Verificatelo con - <code> diff myprogram.s myprogram_orig.s </code> 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 periodo di <bf>GARANZIA</bf> dei programmi abbellitori come 'bcpp', 'cb' o 'indent'. E' caldamente raccomandato fare questi due passi ogni volta che lanciate un programma abbellitore come <bf>bcpp</bf>, <bf>indent</bf> o <bf>cb</bf>. <!-- **************************************** ************ Fine Sezione ************** **************************************** <chapt> Strumenti per altri Linguaggi --> <sect> Abbellitori per altri Linguaggi <p> Visitate i seguenti siti per avere gli abbellitori di altri linguaggi come 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"> <p> <item> SQL : <url url="http://www.netbula.com/products/sqlb"> <item> Oracle PLSQL : <url name="http://www.revealnet.com" url="http://www.revealnet.com/Products/Formatter_Plus/formatter_plus.htm"> <p> <item> Java, SQL, HTML, C++ : <url url="http://www.semdesigns.com/Products/DMS/DMSToolkit.html"> <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> Java JIndent <url url="http://home.wtal.de/software-solutions/jindent"> <item> Java Pat <url url="http://javaregex.com/cgi-bin/pat/jbeaut.asp"> <item> Java JStyle <url url="http://www.redrival.com/greenrd/java/jstyle"> <item> Java JPrettyPrinter <url url="http://www.epoch.com.tw/download/ms/java/java.htm"> <item> Java JxBeauty <url url="http://members.nextra.at/johann.langhofer/download/jxbeauty"> e il <url name="JxBeauty Home" url="http://members.magnet.at/j\ohann.langhofer/products/jxbeauty/overview.html"> <item> Java beautify <url name="percolator" url="http://www2.blaze.ca/~jspeton/percolator"> <item> Java lista <url url="http://www.java.about.com/compute/java/library/weekly/aa102499.htm"> <item> Java html present <url name="VasJava2HTML" url="http://www.chez.com/vasile/java2/VasJava2HTML.html"> <p> <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"> <p> <item> Abbellitore Fortran : <url url="http://www.aeem.iastate.edu/Fortran/tools.html"> <p> <item>C++ : il sito BCPP è <url url="http://dickey.his.com/bcpp/bcpp.html"> o <url url="http://www.clark.net/pub/dickey">. BCPP via ftp è <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/"> e il mirror <url name="Oasys" url="http://oasys.nctamslant.navy.mil/oasys/c"> <item> C++, C, Java, Oracle Pro-C abbellitori <url url="http://www.geocities.com\/~starkville/main.html"> <item> C++, C abbellitori <url url="http://users.erols.com/astronaut/vim/ccb-1.0\7.tar.gz"> e il sito <url url="http://users.erols.com/astronaut/vim/#vimlinks_src"> <item> GC! GreatCode! è un efficace abbelitore di codice sorgente C/C++ Windows 95/98/NT/2000 <url url="http://perso.club-internet.fr/cbeaudet"> </itemize> <itemize> <item>Informazioni sugli abbellitori : <url url="http://www.consultix-inc.com/www.co\nsultix-inc.com/talk.htm"> </itemize> Per creare una presentazione del codice usando HTML - <itemize> <item>Presentazione (C,C++,Java) per html : <url url="http://www.perlstudio.de/cb\index.html"> </itemize> Potete anche cercare sui motori di ricerca come <url url="http://www.yahoo.com"> o <url url="http://www.lycos.com"> cercando la parola "beautfier". <!-- ***************************************** ************ Fine Sezione *************** ***************************************** <chapt> Script di verifica <label id="verification"> --> <sect> Script di verifica <label id="verification"> <p> 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 Window 95/NT o MSDOS. Togliete il commento alla variabile PRGM se usate il <bf>bcpp</bf>, <bf>cb</bf> o <bf>indent</bf> <code> #!/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 temporenei \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 </code> <!-- ***************************************** ************ Fine Sezione *************** ***************************************** <chapt change> URL correlate --> <sect> URL correlate <p> Visitate i seguenti siti che sono relativi al C, C++ - <itemize> <item> <url url="http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html" name="Vim color text editor per C++, C"> <item> <url url="http://metalab.unc.edu/LDP/HOWTO/C++Programming-HOWTO.html" name="C++ Programming HOWTO"> <item> <url url="http://metalab.unc.edu/LDP/HOWTO/CVS-HOWTO.html" name="Howto del sistema di controllo del codice sorgente CVS per programmi C++"> <item> Linux goodies sito principale <url url="http://www.aldev.8m.com"> e mirror <url url="http://aldev0.webjump.com">, <url name="angelfire" url="http://www.angelfire.com/country/aldev0">, <url name="geocities" url="http://www.geocities.com/alavoor/index.html">, <url name="virtualave" url="http://aldev0.virtualave.net">, <url name="50megs" url="http://aldev0.50megs.com">, <url name="theglobe" url="http://members.theglobe.com/aldev1/index.html">, <url name="NBCi" url="http://members.nbci.com/alavoor">, <url name="Terrashare" url="http://aldev.terrashare.com">, <url name="Fortunecity" url="http://members.fortunecity.com/aldev">, <url name="Freewebsites" url="http://aldev.freewebsites.com">, <url name="Tripod" url="http://members.tripod.lycos.com/aldev">, <url name="Spree" url="http://members.spree.com/technology/aldev">, <url name="Escalix" url="http://www.escalix.com/freepage/aldev">, <url name="Httpcity" url="http://www.httpcity.com/aldev/index.html">, <url name="Freeservers" url="http://aldev.freeservers.com">. </itemize> <!-- ***************************************** ************ Fine Sezione *************** ***************************************** <chapt change> Altri formati di questo documento --> <sect> Altri formati di questo documento <p> 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 - <itemize> <item> <url url="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. </itemize> Potete anche cercare questo documento ai seguenti siti mirror - <itemize> <item> <url url="http://www.caldera.com/LDP/HOWTO"> <item> <url url="http://www.linux.ucla.edu/LDP"> <item> <url url="http://www.cc.gatech.edu/linux/LDP"> <item> <url url="http://www.redhat.com/mirrors/LDP"> </itemize> <itemize> <item> Altri siti mirror vicini a voi (sulla base dell'indirizzo) che possono essere trovati a <url url="http://www.linuxdoc.org/mirrors.html"> selezionando un sito ed andate alla directory /LDP/HOWTO/xxxxx-HOWTO.html </itemize> <itemize> <item> Potete prendere questo documento HOWTO come un singolo file tar nel formato HTML, DVI, Postscript o SGML da - <url url="ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO/other-formats/"> e <url url="http://www.linuxdoc.org/docs.html#howto"> <p> <item>Puro testo a : <url url="ftp://www.linuxdoc.org/pub/Linux/docs/\HOWTO"> e <url url="http://www.linuxdoc.org/docs.html#howto"> <p> <item>Il singolo file in formato HTML è in : <url url="http://www.linuxdoc.org/docs.html#howto"> <p> Il singolo file HTML può essere creato con il comando (vedete man sgml2html) - sgml2html -split 0 xxxxhowto.sgml <p> <item>La traduzione in altri linguaggi come Francese, Tedesco, Spagnolo, Chinese, Giapponese sono in <url url="ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO"> e <url url="http://www.linuxdoc.org/docs.html#howto"> Qualsiasi aiuto per tradurre in altri linguaggi è ben accetto. </itemize> Il documento è stato scritto utilizzando uno strumento chiamato "SGML-Tools" che può essere prelevato da - <url url="http://www.sgmltools.org"> Compilando il sorgente, troverete i seguenti comandi come <itemize> <item>sgml2html xxxxhowto.sgml (per generare file html) <item>sgml2html -split 0 xxxxhowto.sgml (per generare una singola pagina html) <item>sgml2rtf xxxxhowto.sgml (per generaree file RTF) <item>sgml2latex xxxxhowto.sgml (per generare file latex) </itemize> <!-- ***************************************** ************ Fine Sezione *************** ***************************************** --> <sect1> Formato Acrobat PDF <label id="acrobatpdf"> <p> Il file PDF può essere generato dal file postscript utilizzando Acrobat <bf>distill</bf> oppure <bf>Ghostscript</bf>. Il file postscript è stato generato dal DVI il quale è stato generato dal file LaTex. Potete scaricare il software da <url url="http://www.adobe.com">. Segue una semplice sessione: <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> Oppure potete usare il comando Ghostscript <bf>ps2pdf</bf>. 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). <bf>ps2pdf</bf> è implementato come un comando di script molto piccolo (file batch) che invoca Ghostscript, selezionando uno speciale "dispositivo di uscita" chiamato <bf>pdfwrite</bf>. Allo scopo di utilizzare ps2pdf, il dispositivo pdfwrite deve essere incluso nel makefile quando Ghostscript viene compilato; per i dettagli vedere la documentazione sulla compilazione di Ghostscript. <!-- ***************************************** ************ Fine Sezione *************** ***************************************** --> <sect1> Convertire Linuxdoc nel formato Docbook <label id="linuxdoc2docbook"> <p> 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 <bf>ld2db.sh</bf> e alcuni script in perl. L'uscita di ld2db non è al 100% chiara ed è necessario usare lo script perl <bf>clean_ld2db.pl</bf>. Potete aver bisogno di modificare manualmente poche linee nel documento. <itemize> <item> Scaricate il programma ld2db da <url url="http://www.dcs.gla.ac.uk/~rrt/docbook.html"> o da <url name="Al Dev site" url="http://www.aldev.8m.com/cppsrc.html"> <item> Scaricate lo script perl cleanup_ld2db.pl da <url name="Al Dev site" url="http://www.aldev.8m.com/cppsrc.html"> </itemize> L'ld2db.sh non è chiaro al 100%, darà molti errori quando lo eseguirete <code> 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 </code> 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> <!-- ***************************************** ************ Fine Sezione *************** ***************************************** --> <sect1> Convertire nel formato MS WinHelp <label id="mswinhelp"> <p> Potete convertire il documento HOWTO dal formato SGML al file Microsoft Windows Help, prima convertite il sgml in html usando: <code> bash$ sgml2html xxxxhowto.sgml (per generare file html) bash$ sgml2html -split 0 xxxxhowto.sgml (per generare il singolo file html) </code> Poi utilizzate lo strumento <url name="HtmlToHlp" url="http://javadocs.planetmirror.com/htmltohlpe.html">. Potete anche usare sgml2rtf e poi usare i file RTF per generare i file winhelp. <!-- ***************************************** ************ Fine Sezione *************** ***************************************** --> <sect1> Leggendo diversi formati <label id="readformats"> <p> 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 - <tscreen><verb> xdvi -geometry 80x90 howto.dvi man xdvi </verb></tscreen> 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. <itemize> <item>Trovate ghostscript per Windows 95, OS/2, e per tutti i sistemi su <url url="http://www.cs.wisc.edu/~ghost"> </itemize> Per leggere il documento postscript date il comando - <tscreen><verb> gv howto.ps ghostscript howto.ps </verb></tscreen> Potete leggere il documento in formato HTML usando Netscape Navigator, Microsoft Internet explorer, Redhat Baron Web browser o qualsiasi degli altri 10 web browser. Potete leggere l'output latex, utilizzando LyX, un'interfaccia X-Windows per latex. <!-- ***************************************** ************ Fine Sezione *************** ***************************************** <chapt> Copyright --> <sect> Copyright <p> 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. <!-- ***************************************** ************ Fine Sezione *************** ***************************************** --> </article>