Projet mkd/asm.c

De Wiki EELL.

(Différences entre les versions)
m (!!!)
m (Mise à jour)
Ligne 1 : Ligne 1 :
<small>[[Projet mkd/Fichiers en développement|Retour aux fichiers en développement &rarr;]]</small>
<small>[[Projet mkd/Fichiers en développement|Retour aux fichiers en développement &rarr;]]</small>
: Les tabulations posent parfois quelques problèmes de lisibilité.
: Les tabulations posent parfois quelques problèmes de lisibilité.
-
 
+
{{Boîte déroulante/début|titre=asm.c 2013-04-28}}
<pre>
<pre>
-
/*
+
/*P
-
* © mkd, version 2009.12 et ultérieures
+
NOM DU FICHIER: asm.c pour console
-
*
+
 
-
* Concédée sous licence EUPL, version 1.1 ou – dès leur approbation par la
+
PROJET: mkd
-
* Commission européenne - versions ultérieures de l’EUPL (la «Licence»).
+
Générer la documentation pré-écrite dans les fichiers de sources multiples.
-
* Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.
+
Cette commande n'est pas intégrée dans les distributions standards UNIX / LINUX
-
* Vous pouvez obtenir une copie de la Licence à l’adresse suivante:
+
 
-
*
+
PROJET INITIAL: mkdoc 1989 pour MS-DOS et UNIX. Projet obsolète.
-
* http://ec.europa.eu/idabc/eupl5
+
 
-
*
+
DOSSIER: extractdoc 04/12/2009
-
* Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous
+
 
-
* la Licence est distribué «en l’état»,
+
MODIFICATIONS:
-
* SANS GARANTIES OU CONDITIONS QUELLES QU’ELLES SOIENT, expresses ou implicites.
+
Date: ../../1986 by JPL Initial programming for MSDOS and UNIX on SUN
-
* Consultez la Licence pour les autorisations et les restrictions linguistiques
+
Date: ../../1991 by JPL mkdoc 3.12 for PC and UNIX
-
* spécifiques relevant de la Licence.
+
....
 +
Le: 10/01/2010 par Clara objet de la modification: contrôle de l'accentuation
 +
              des commentaires en ISO-8859-1
 +
Le: 10/03/2010 par JPL objet de la modification: simplification de l'entête
 +
Le: 17/03/2012 par JPL objet de la modification: corrections au format UTF-8
 +
Date: 28/04/2013 by GC Mise en conformité avec les nouvelles directives EELL
*/
*/
-
/*O
+
// Date: ../../.... by ... purpose of the modification ....
-
NOM DU FICHIER: asm.cpp
+
 
-
PROJET : mkd http://edeulo.free.fr/wiki/index.php/Portail:mkd
+
/*T
-
PROJET INITIAL: mkdoc 1989 pour MS-DOS et UNIX, devenu obsolète.
+
NOM DU FICHIER: asm.c pour console
-
DOSSIER: http://edeulo.free.fr/wiki/index.php/Projet_mkd
+
-
PROGRAMMEUR: http://edeulo.free.fr/wiki/index.php/Utilisateut:JPL
+
    Directives de tests unitaires version alpha 2013:
-
DATE: 10 janvier 2010
+
    -------------------------------------------------
-
MODIFICATIONS:
+
    Vérifiez les options n, s et t séparément:
-
Le: 10/03/2010 par JPL objet de la modification simplification de l'entête
+
    Vérifiez que la numérotation des lignes est correcte dans tous les cas de
-
Le: ../../.... par ... objet de la modification ....
+
    décodage de lignes. n, ns. nt, nst.
 +
    Vérifiez que le texte reste à la bonne place dans tous les cas de décodage:
 +
    avec ou sans numérotation des lignes, avec ou sans l'option texte seul.
 +
    -- Vérifiez que les tabulations sont bien prises en charge dans tous les
 +
      cas, décodage en début des lignes, et 'dans' les lignes.
 +
    -- Vérifiez de même pour les espaces.
 +
    La fonction doit être éprouvée de telle sorte qu'un commentaire qui se
 +
    termine par le caractère de fin de fichier soit entièrement copié dans le
 +
    fichier cible.
 +
 +
    Le caractère de fin de fichier (EOF) NE DOIT JAMAIS APPARAÎTRE DANS LE
 +
    TEXTE DU FICHIER CIBLE.
 +
 
 +
    Ajouté le 18 avril 2013:
 +
    Vérifiez que l'extraction de tous les commentaires avec pour code de
 +
    décodage '**' soient copiés et que ceux-ci soient à la bonne place.
 +
 
*/
*/
Ligne 35 : Ligne 56 :
         fonction asm_
         fonction asm_
  -----------------------------------------------------------------------------
  -----------------------------------------------------------------------------
-
  ACTION:
+
  NOM DU FICHIER: asm.c pour console, asm.cc pour intégration en c++
-
        La fonction asm_ lit le fichier écrit en assembleur et extrait les
+
  ( Format texte UTF-8 )
-
renseignements de structure, l'organigramme, la documentation destinée
+
-
aux programmeurs, au fichier d'entête (.h) ou à la documentation
+
-
destinée à l'utilisateur etc.
+
-
On utilise généralement les caractères codes suivants :
+
-
D: pour la documentation générale sur les fonctions (listing)
+
-
H: pour générer le fichier d'entête .h
+
-
O: pour l'organigramme
+
-
S: pour le contrôle de la structure du programme
+
-
T: pour les points de tests
+
-
U: pour la documentation utilisateur
+
-
Options :
+
-
n : numéro de ligne (ajoute du numéro de ligne)
+
-
s : écran (ajoute le commentaire à l'écran)
+
-
t : texte seul (ne copie pas les caractères de repérage)
+
-
  SYNTAXE:
+
  SYNTAXE, SYNOPSIS:
-
        #include "version.h"
+
  #include "version.h"
-
#include "asm.h"
+
  #include "asm.h"
-
        int asm_(FILE *pfdoc, FILE *pnfile);
+
  int asm_(FILE *pfdoc, FILE *pnfile);
 +
  FILE *pfdoc: pointe sur le fichier cible ouvert (ou créé) par la fonction
 +
    appelante.
 +
  FILE *pnfile: pointe sur le fichier source ouvert par la fonction appelante.
-
  PORTABILITE:
+
  ACTION, DESCRIPTION:
-
        Win32 Win64   (UNIX à vérifier)
+
   La fonction asm_() lit le fichier écrit en assembleur et extrait les
 +
    commentaires; de structure, d'organigramme, de documents destinés aux
 +
    programmeurs, le fichier d'entête (.h) ou encore, de documents destinés à
 +
    l'utilisateur final.
 +
  On utilise habituellement les 'Codes' d'identification des commentaires à
 +
    extraire suivants :
 +
    ;D pour la documentation générale
 +
    ;H pour générer le fichier d'entête (header, .h ou .hpp)
 +
    ;O pour générer l'organigramme
 +
    ;S pour le contrôle de la structure du programme
 +
    ;T pour les points de tests
 +
    ;U pour la documentation utilisateur
 +
  On peut aussi extraire tous les commentaires avec pour 'Code' le double
 +
    étoile entouré de simples cotes : '**'
 +
  Description des 'Options' d'extraction:
 +
    -n : pour ajouter le numéro de la ligne du commentaire.
 +
    -s : pour ajouter le commentaire extrait à la sortie standard; l'écran.
 +
    -t : pour n'extraire que le commentaire. (Par défaut, toute la ligne)
-
  DESCRIPTION:
+
  CONFORME À, CONFORMING TO:
-
        FILE *pfdoc : pointeur sur le flux du fichier de destination
+
  POSIX, ANSI C, BSD, ISO/IEC 9899:2011; gcc, MS-Vc10; UTF-8.
-
        File *pnfile : pointeur sur le flux du fichier source
+
 
 +
PORTABILITY:
 +
  LINUX-Debian-systems, LINUX-Red-Hat, UNIX, gcc.
 +
  Microsoft Visual studio under Windows : x86(Win32) x64(Win32 and WIN64)
  VALEUR RETOURNEE:
  VALEUR RETOURNEE:
-
        Ne retourne rien
+
  Ne retourne rien
  DROIT DE COPIE:
  DROIT DE COPIE:
-
© mkd, 20074
+
  © EELL, Éditeurs Européens de Logiciels Libres, EUPL 2007.
-
Concédée sous licence EUPL, version 1.1 ou – dès leur approbation par la  
+
    Association à but non lucratif selon l'Article 11 de la convention
-
  Commission européenne - versions ultérieures de l’EUPL (la «Licence»).
+
    européenne des droits de l'homme.
-
Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.
+
  Concédée sous licence EUPL, version 1.1 ou – dès leur approbation par la  
-
Vous pouvez obtenir une copie de la Licence à l’adresse suivante:
+
    Commission européenne - versions ultérieures de l’EUPL (la «Licence»).
 +
  Vous ne pouvez utiliser la présente œuvre que conformément à la Licence.
 +
  Vous pouvez obtenir une copie de la Licence à l’adresse suivante:
 +
    http://ec.europa.eu/idabc/eupl5
 +
  Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous la
 +
    Licence est distribué «en l’état», SANS GARANTIES OU CONDITIONS QUELLES
 +
    QU’ELLES SOIENT, expresses ou implicites.
 +
  Consultez la Licence pour les autorisations et les restrictions linguistiques
 +
  spécifiques relevant de la Licence.
-
http://ec.europa.eu/idabc/eupl5
+
AUTEURS, AUTHORS:
 +
  © Contact: http://edeulo.free.fr/contacts/formmail.php
 +
  Designer: intial JP Louyot (JPL)
 +
  Updates : JPL, Clara Jimenez, and GC
 +
  Traducteurs: Clara
 +
 
 +
RESSOURCES:
 +
  (gtkmm with mkdw future widowed version.)
 +
 
 +
NOTES:
 +
  Mise à jour: 2013 Conforme aux nouvelles directives avec UTF-8.
 +
  Correction du défaut de fin de fichier.
 +
  Correction de l'extraction des commentaires dans la ligne, avec l'option -t
 +
 
 +
BUGS:
 +
  See bugs reports http://edeulo.free.fr/phpBB3
 +
 
 +
SEE ALSO MANUAL:
 +
  Man(3) attached in English.
 +
  Command line : man 3 asm_
-
Sauf obligation légale ou contractuelle écrite, le logiciel distribué
 
-
  sous la Licence est distribué «en l’état»,
 
-
SANS GARANTIES OU CONDITIONS QUELLES QU’ELLES SOIENT, expresses ou
 
-
  implicites.
 
-
Consultez la Licence pour les autorisations et les restrictions
 
-
  linguistiques spécifiques relevant de la Licence.
 
*/
*/
Ligne 93 : Ligne 144 :
#include "version.h"
#include "version.h"
 +
#include "asm.h"
 +
/*O asm_ */
 +
    int asm_(FILE *pfdoc, FILE *pnfile)
 +
    { /*S asm */
 +
/*P    options bool à définir dans main() ou winmain() */
 +
        extern unsigned char n,s,t;
 +
        extern char codes[];
 +
        unsigned int tab;
 +
        unsigned num = 0;
 +
        long ll,nl;
 +
        int c1,c2,c3;
 +
 +
        c1 = c2 = c3 = STX; /* Start Text */
 +
 +
/*O    tant que pas fin de fichier source (c1, c2, c3 différents de EOF)*/
 +
        while ( c1 != EOF && c2 != EOF && c3 != EOF )
 +
        { /*S w1 tq !EOF */
 +
/*O        si début de texte faire c1=LF */
 +
            if (c1==STX) c1='\n';
 +
/*O        sinon prendre pour c1 le char suivant */
 +
            else c1=getc(pnfile);
 +
/*O        si le char est NL repérer la position du fichier qui suit 'NL' */
 +
            if(c1=='\n')
 +
            { /*S reperage debut de ligne */
 +
                num++;
 +
                nl=ftell(pnfile);
 +
                tab=0;
 +
            } /*S reperage debut de ligne */
-
int asm_(FILE *pfdoc, FILE *pnfile)
+
/*P -- si le char c1 est NL -------------------------------------------------*/
-
{ /*S asm */
+
-
extern unsigned char n,s,t;  /*www rappels: options booleennes à définir dans main() ou winmain() */
+
-
extern char codes[];
+
-
unsigned int tab;
+
-
unsigned num = 0;
+
-
long ll,nl;
+
-
int c1,c2,c3;
+
-
c1 = c2 = c3 = STX; /* Start Text */
+
/*O        si le catractère est NL: */
 +
            if (c1=='\n')
 +
            { /*S ; en colonne 1 */
 +
                c2 = getc(pnfile);
 +
                if (c2==EOF) break;
 +
                c3 = getc(pnfile);
 +
                if (c3==EOF) break;
 +
/*O            si c1 est suivi par c2 = ';' et
 +
                    'Codes' NULL ( cad tous les commentaires à copier )
 +
                    ou suivi par un des 5 charactères 'Codes' d'extraction */
 +
                if ( c2 == ';' &&
 +
                        (
 +
                            !codes[0]||
 +
                            c3 == codes[0] ||
 +
                            c3 == codes[1] ||
 +
                            c3 == codes[2] ||
 +
                            c3 == codes[3] ||
 +
                            c3 == codes[4]
 +
                        )
 +
                    )
 +
/*O            alors copier les caractères dans le fichier doc,
 +
                et si option s ajouter à la sortie standard */
-
/*O tant que pas fin de fichier source (c1, c2, c3 différents de EOF)*/
+
/*P-- sinon si c1 = ';' est en première colonne -----------------------------*/
-
while ( c1 != EOF && c2 != EOF && c3 != EOF )
+
-
{ /*S tq !EOF */
+
-
/*O si debut de texte faire c1=LF */
+
-
if (c1==STX) c1='\n';
+
-
/*O sinon prendre pour c1 le char suivant */
+
-
          else c1=getc(pnfile);
+
-
/*O si le char est NL reperer la position qui suit 'NL' (repérer dans l'entier long nl) */
+
-
if(c1=='\n')
+
-
{ /*S reperage debut de ligne */
+
-
num++;
+
-
nl=ftell(pnfile);
+
-
tab=0;
+
-
} /*S reperage debut de ligne */
+
-
/*O--------- si le char est NL ---------------------------------------------*/
+
                { /*S copier */
-
if (c1=='\n')
+
/*O                 si option n insérer le numéro de ligne  
-
{ /*S ; en colonne 1 */
+
                    et si option s l'ajouter à la sortie standard */
-
c2 = getc(pnfile);
+
                    if(n)
-
c3 = getc(pnfile);
+
                    { /*S n */
-
/*O si c1 est suivi par c2 = ';'
+
                        fprintf( pfdoc, "%5d ", num);
-
et si codes[0]=0 ou si suivi par un des 5 char code d'utilisateur */
+
                        if(s) printf( "%5d ", num);
-
if ( (c2 == ';') &&
+
                    } /*S n */
-
(!codes[0]||
+
/*O                 si l'option t texte seul n'est pas validée */
-
c3 == codes[0] ||
+
                    if(!t)
-
c3 == codes[1] ||
+
                    { /*S !t */
-
c3 == codes[2] ||
+
/*O                     copier le début de ligne */
-
c3 == codes[3] ||
+
                        putc(c2,pfdoc); // ;
-
c3 == codes[4]
+
                        putc(c3,pfdoc); // caractère de d'extraction
-
)
+
/*O                     si option s copier aussi les 2 caractères à la sortie std */
-
)
+
                        if(s)
-
/*O alors copier les caractères dans le fichier doc, et si opt s ajouter à l'écran: */
+
                        { /*S si opt s */
-
{ /*S copier */
+
                            putch(c2);
-
/*O si option n insérer le numéro de ligne et si s l'ajouter a l'écran */
+
                            putch(c3);
-
if(n)
+
                        } /*S si opt s */
-
{ /*S n */
+
                    } /*S !t */
-
fprintf( pfdoc, "%5d ", num);
+
/*w                sinon, option t vraie et copier tous les caractères
-
if(s) printf( "%5d ", num);
+
                        reculer de 1 caractère */
-
} /*S n */
+
                    //w else if(!codes[0])ungetc(c3,pnfile);
-
/*O si pas option t texte seul */
+
/*O                 sinon, option t, remplacer les deux premiers caractères par 2 espaces */
-
if(!t)
+
                    if(t)
-
                    { /*S !t */
+
                    { /*S t true */
-
/*O copier le debut de ligne */
+
                        putc (' ',pfdoc);
-
putc (c2,pfdoc); putc(c3,pfdoc);
+
                        putc (' ',pfdoc);
-
/*O si option s copier le commentaire a l'ecran */
+
                        if(s)
-
if(s)
+
                        { /*S s true */
-
{ /*S si opt s */
+
                            putch(' ');
-
putch(c2);
+
                            putch(' ');
-
putch(c3);
+
                        } /*S s true */
-
} /*S si opt s */
+
                    } /*S t true */
-
} /*S !t */
+
/*O                tant que l'on a pas trouvé le caractère fin de ligne NL ('\n')*/
-
/*O sinon si il ne faut pas copier tout le commentaire: 1 pas arrière*/
+
                    while ( (c1 = getc(pnfile)) != '\n' && c1 != EOF)
-
else if(!codes[0])ungetc(c3,pnfile);
+
                    { /*S w2 copy line */
-
/*O tant que : pas en fin de ligne */
+
/*O                     copier les caractères de la ligne */
-
while ( (c1 = getc(pnfile)) != '\n')
+
                        putc (c1,pfdoc);
-
{ /*S w copy line */
+
                        if(s) putch(c1);
-
/*O copier la ligne */
+
                    } /*S w2 copy line */
-
putc (c1,pfdoc);
+
                    if (c1==EOF) break; // du while w1
-
if(s) putch(c1);
+
/*O                 copier aussi le caractère c1=NL,
-
} /*S w copy line */
+
                    et avec l'option s envoyer le NL au terminal */
-
/*O copier aussi le dernier caractere et si option s retour : chariot à l'écran */
+
                    putc (c1,pfdoc);
-
putc (c1,pfdoc);
+
                    if(s) putch(c1);
-
if(s) putch('\n');
+
/*O                 revenir sur LF du fichier source */
-
/*O revenir sur LF du fichier source */
+
                    ungetc(c1,pnfile);
-
ungetc(c1,pnfile);
+
                } /*S copier */
-
} /*S copier */
+
/*O             sinon restituer les deux derniers caractères */
-
/*O sinon restituer les deux derniers caracteres */
+
                else
-
else
+
                { /*S sinon pas début de commentaire en 1ère colonne */
-
{ /*S sinon */
+
                    ungetc(c3,pnfile);
-
ungetc(c3,pnfile);
+
                    ungetc(c2,pnfile);
-
ungetc(c2,pnfile);
+
                } /*S sinon pas début de commentaire en 1ère colonne */
-
} /*S sinon */
+
            } /*S ; en colonne 1 */
-
} /*S ; en colonne 1 */
+
-
/*O--------- sinon si c1 = ';' dans la ligne --------------------------------*/
+
/*P--------- sinon si c1 = ';' est dans la ligne ----------------------------*/
-
else
+
            else
-
{ /*S else */
+
            { /*S else */
-
/*O si c1 est tabulation incrementer tab */
+
/*P            si c1 est tabulation incrémenter tab */
-
if (c1=='\t')tab++;
+
//P                if (c1=='\t')tab++;
-
/*O sinon si c1 = ; */
+
/*P            sinon si c1 = ; */
-
else if (c1==';')
+
//P                else  
-
/*O alors: */
+
                if (c1==';')
-
{ /*S char = ; */
+
/*O             alors: */
-
c2=getc(pnfile);
+
                { /*S char = ; */
-
/*O si codes[0]=0 ou si suivi par c2 = char code utilisateur */
+
                    c2=getc(pnfile);
-
if ( !codes[0]||
+
/*O                 si codes[0]=0 ( tous les commentaires )
-
c2 == codes[0] ||
+
                      ou si suivi par c2 = 'Code' to extract the comment */
-
c2 == codes[1] ||
+
                    if(     !codes[0] ||
-
c2 == codes[2] ||
+
                        c2 == codes[0] ||
-
c2 == codes[3] ||
+
                        c2 == codes[1] ||
-
c2 == codes[4]
+
                        c2 == codes[2] ||
-
)
+
                        c2 == codes[3] ||
-
/*O alors: */
+
                        c2 == codes[4]
-
{ /*S commentaire page */
+
                      )
-
/*O reperer la position commentaire */
+
/*O                 alors: */
-
if(!codes[0])ungetc(c2,pnfile);
+
                    { /*S comment inline */
-
ll=ftell(pnfile);
+
/*O                     repérer la position de début de commentaire, le ; */
-
/*O si pas option t (texte seul) */
+
                        //w if(!codes[0])ungetc(c2,pnfile); (tous les commentaires)
-
if(!t)
+
                        ll=ftell(pnfile); // retour avec repérage sur ;
-
{ /*S !t */
+
/*O                     si l'option booléenne t est fausse (pas de texte seul) */
-
/*O se positionner en dedut de ligne */
+
                        if(!t)
-
fseek(pnfile,nl,0);
+
                        { /*S !t */
-
/*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
+
/*O                         se positionner en début de ligne */
-
/*O si option n insérer le numéro de ligne */
+
/*T                        fseek ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
-
if(n)
+
                            fseek(pnfile,nl,0);
-
{ /*S n (numero de ligne) */
+
/*O                         si l'option n est vraie, insérer le numéro de ligne */
-
fprintf( pfdoc, "%5d ", num);
+
                            if(n)
-
/*O si s ajouter le numéro de ligne à l'écran */
+
                            { /*S n (numéro de ligne) */
-
if(s) printf( "%5d ", num); // screen
+
                                fprintf( pfdoc, "%5d ", num);
-
} /*S n */
+
/*O                             si option s vraie, ajouter le numéro de ligne à l'écran */
-
/*O copier toute la ligne tq pas NL LF, dans le fichier doc */
+
                                if(s) printf( "%5d ", num); // screen
-
while ( (c1=getc(pnfile)) != '\n')
+
                            } /*S n */
-
{ /*S w */
+
/*O                         copier toute la ligne tq pas NL LF, dans le fichier doc */
-
putc(c1,pfdoc);
+
                            while ( (c1=getc(pnfile)) != '\n' && c1!=EOF)
-
if(s)putch(c1);
+
                            { /*S w3 */
-
} /*S w*/
+
                                putc(c1,pfdoc);
-
} /*S !t */
+
                                if(s)putch(c1);
-
/*O sinon: (option t) */
+
                            } /*S w3 */
-
else
+
/*O                        en cas de fin de fichier arrêter la boucle while w1 */
-
{ /*S option t */
+
                            if (c1==EOF) break;
-
/*O se positionner en dedut de ligne */
+
                        } /*S !t */
-
fseek(pnfile,nl,0);
+
/*O                     si option t */
-
/*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
+
                        if (t)
-
/*O si option n insérer le numéro de ligne */
+
                        { /*S option t */
-
if(n)
+
/*O                         se positionner en dedut de ligne */
-
{ /*S n (numero de ligne) */
+
/*T                        fseek ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
-
fprintf( pfdoc, "%5d ", num);
+
                            fseek(pnfile,nl,0);
-
/*O si s ajouter le numéro de ligne à l'écran */
+
/*O                         si option n vraie, insérer le numéro de ligne */
-
if(s) printf( "%5d ", num); // screen
+
                            if(n)
-
} /*S n */
+
                            { /*S n (numero de ligne) */
-
/*wwwO copier autant de tabulations qu'il y en a dans le source */
+
                                fprintf( pfdoc, "%5d ", num);
-
// for(i=0;i<tab;i++)
+
/*O                             si s ajouter le numéro de ligne à l'écran */
-
// { /*S tabs */
+
                                if(s) printf( "%5d ", num); // screen
-
// putc('\t',pfdoc);
+
                            } /*S n */
-
// if(s)putch('\t');
+
//P                        copier autant de tabulations qu'il y en a dans le source */
-
//} /*S tabs */
+
//P for(i=0;i<tab;i++)
-
/*O copier toute la ligne jusqu'à la position commentaire */
+
//P { /*S tabs */
-
while ( (c1=getc(pnfile)) != ';')
+
//P putc('\t',pfdoc);
-
{ /*S w */
+
//P if(s)putch('\t');
-
putc(c1,pfdoc);
+
//P } /*S tabs */
-
if(s)putch(c1);
+
/*O                         copier toute la ligne jusqu'à la position commentaire */
-
} /*S w*/
+
                            while ( (c1=getc(pnfile)) != ';' && c1!=EOF)
-
/*O ajouter un espace pour remplacer le caractère ';' */
+
                            { /*S w */
-
// for(i=(int)(ll-nl-tab);i>0;i--)
+
                                putc(' ',pfdoc);
-
{ /*S espaces */
+
                                if(s)putch(' ');
-
putc(' ',pfdoc);
+
                            } /*S w*/
-
if(s)putch(' ');
+
                            if (c1==EOF) break; // w1
-
} /*S espaces */
+
/*O                         ajouter un espace pour remplacer le caractère ';' */
-
/*O puis copier le commentaire tq pas NL */
+
                            // for(i=(int)(ll-nl-tab);i>0;i--)
-
while ( (c1=getc(pnfile)) != '\n')
+
                            { /*S espaces */
-
{ /*S copier commentaire */
+
                                putc(' ',pfdoc);
-
putc(c1,pfdoc);
+
                                if(s)putch(' ');
-
if(s)putch(c1);
+
                                c1=getc(pnfile);            // command 'Code' true
-
} /*S copier commentaire */
+
                                if(c1!=' ')
-
} /*S option t */
+
                                { /*S if 'Code' is true */
-
putc('\n',pfdoc);if(s)putch('\n');  /*O copier NL */
+
                                    putc(' ',pfdoc); // replace Code with space
-
ungetc(c1,pnfile);                  /*O revenir sur NL */
+
                                    if(s)putch(' ');
-
} /*S commentaire page */
+
                                } /*S if 'Code' is true */
-
/*O sinon: */
+
                            } /*S espaces */
-
else
+
/*O                         puis copier le commentaire tant que NL n'est pas trouvé */
-
{ /*S*/
+
                            while ( (c1=getc(pnfile)) != '\n' && c1!=EOF)
-
ungetc(c2,pnfile);
+
                            { /*S copier commentaire */
-
} /*S*/
+
                                putc(c1,pfdoc);
-
} /*S char = ; */
+
                                if(s)putch(c1);
-
} /*S else */
+
                            } /*S copier commentaire */
-
} /*S tq !EOF */
+
                            if(c1==EOF)break; // w1
-
return 0;
+
                        } /*S option t */
-
} /*S asm */</pre>
+
                        putc('\n',pfdoc);if(s)putch('\n');  /*O copier NL */
 +
                        ungetc(c1,pnfile);                  /*O revenir sur NL */
 +
                    } /*S comment inline */
 +
/*O                 sinon: */
 +
                    else
 +
                    { /*S*/
 +
/*O                    renenir un caractère en arrière */
 +
                        ungetc(c2,pnfile);
 +
                    } /*S*/
 +
                } /*S char = ; */
 +
            } /*S else */
 +
        } /*S tq !EOF */
 +
        return 0;
 +
    } /*S asm */
 +
</pre>
 +
{{boîte déroulante/fin}}

Version du 29 avril 2013 à 15:26

Retour aux fichiers en développement →

Les tabulations posent parfois quelques problèmes de lisibilité.
Outils personnels