Projet mkd/asm.c

De Wiki EELL.

(Différences entre les versions)
m (!)
m (Fichier source du test : Catégorisation)
 
(10 versions intermédiaires masquées)
Ligne 1 : Ligne 1 :
-
: Les tabulations posent parfois quelques problèmes de lisibilité.
+
<small>[[Projet mkd/Fichiers en développement|Retour aux fichiers en développement &rarr;]]</small>
 +
== Fichiers de la fonction asm_() ==
 +
: Dans les sources, les tabulations posent parfois quelques problèmes de lisibilité.
 +
{{Boîte déroulante/début|titre=asm.c 2013-04-28}}
 +
<pre style="color:red">
 +
/*P
 +
NOM DU FICHIER: asm.c pour console
 +
 
 +
PROJET: mkd
 +
Générer la documentation pré-écrite dans les fichiers de sources multiples.
 +
Cette commande n'est pas intégrée dans les distributions standards UNIX / LINUX
 +
 
 +
PROJET INITIAL: mkdoc 1989 pour MS-DOS et UNIX. Projet obsolète.
 +
 
 +
DOSSIER: extractdoc 04/12/2009
 +
 
 +
MODIFICATIONS:
 +
Date: ../../1986 by JPL Initial programming for MSDOS and UNIX on SUN
 +
Date: ../../1991 by JPL mkdoc 3.12 for PC and UNIX
 +
....
 +
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
 +
*/
 +
 
 +
// Date: ../../.... by ... purpose of the modification ....
 +
 
 +
/*T
 +
NOM DU FICHIER: asm.c pour console
 +
 +
    Directives de tests unitaires version alpha 2013:
 +
    -------------------------------------------------
 +
    Vérifiez les options n, s et t séparément:
 +
    Vérifiez que la numérotation des lignes est correcte dans tous les cas de
 +
    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.
-
<pre>
 
-
/*O
 
-
NOM DU FICHIER: asm.cpp
 
-
PROJET: mkd
 
-
Générer la documentation préécrite dans les fichiers de sources multiples.
 
-
PROJET INITIAL: mkdoc 1989 pour MS-DOS et UNIX, devenu obsolète.
 
-
DOSSIER: extractdoc 04/12/2009
 
-
PROGRAMMEUR: JP LOUYOT
 
-
DATE: 10 janvier 2010
 
-
MODIFICATIONS:
 
-
Le: 10/03/2010 par JPL objet de la modification simplification de l'entête
 
-
Le: ../../.... par ... objet de la modification ....
 
*/
*/
Ligne 18 : Ligne 57 :
         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 72 : Ligne 141 :
*/
*/
-
 
+
</pre>
-
/* --------------------------------------------*/
+
<!--pre style="white-space: pre-wrap;
 +
white-space: -moz-pre-wrap;
 +
white-space: -pre-wrap;
 +
white-space: -o-pre-wrap;
 +
word-wrap: break-word"-->
 +
<pre style="color:blue">
#include "version.h"
#include "version.h"
 +
#include "asm.h"
-
int asm_(FILE *pfdoc, FILE *pnfile)
+
/*O asm_ */
-
{ /*S asm */
+
    int asm_(FILE *pfdoc, FILE *pnfile)
-
extern unsigned char n,s,t;  /*www rappels: options booleennes à définir dans main() ou winmain() */
+
    { /*S asm */
-
extern char codes[];
+
/*P    options bool à définir dans main() ou winmain() */
-
unsigned int tab;
+
        extern unsigned char n,s,t;
-
unsigned num = 0;
+
        extern char codes[];
-
long ll,nl;
+
        unsigned int tab;
-
int c1,c2,c3;
+
        unsigned num = 0;
 +
        long ll,nl;
 +
        int c1,c2,c3;
-
c1 = c2 = c3 = STX; /* Start Text */
+
        c1 = c2 = c3 = STX; /* Start Text */
-
/*O tant que pas fin de fichier source (c1, c2, c3 différents de EOF)*/
+
/*O     tant que pas fin de fichier source (c1, c2, c3 différents de EOF)*/
-
while ( c1 != EOF && c2 != EOF && c3 != EOF )
+
        while ( c1 != EOF && c2 != EOF && c3 != EOF )
-
{ /*S tq !EOF */
+
        { /*S w1 tq !EOF */
-
/*O si debut de texte faire c1=LF */
+
/*O         si début de texte faire c1=LF */
-
if (c1==STX) c1='\n';
+
            if (c1==STX) c1='\n';
-
/*O sinon prendre pour c1 le char suivant */
+
/*O         sinon prendre pour c1 le char suivant */
-
          else c1=getc(pnfile);
+
            else c1=getc(pnfile);
-
/*O si le char est NL reperer la position qui suit 'NL' (repérer dans l'entier long nl) */
+
/*O         si le char est NL repérer la position du fichier qui suit 'NL' */
-
if(c1=='\n')
+
            if(c1=='\n')
-
{ /*S reperage debut de ligne */
+
            { /*S reperage debut de ligne */
-
num++;
+
                num++;
-
nl=ftell(pnfile);
+
                nl=ftell(pnfile);
-
tab=0;
+
                tab=0;
-
} /*S reperage debut de ligne */
+
            } /*S reperage debut de ligne */
-
/*O--------- si le char est NL ---------------------------------------------*/
+
/*P -- si le char c1 est NL -------------------------------------------------*/
-
if (c1=='\n')
+
 
-
{ /*S ; en colonne 1 */
+
/*O        si le catractère est NL: */
-
c2 = getc(pnfile);
+
            if (c1=='\n')
-
c3 = getc(pnfile);
+
            { /*S ; en colonne 1 */
-
/*O si c1 est suivi par c2 = ';'
+
                c2 = getc(pnfile);
-
et si codes[0]=0 ou si suivi par un des 5 char code d'utilisateur */
+
                if (c2==EOF) break;
-
if ( (c2 == ';') &&
+
                c3 = getc(pnfile);
-
(!codes[0]||
+
                if (c3==EOF) break;
-
c3 == codes[0] ||
+
/*O             si c1 est suivi par c2 = ';' et  
-
c3 == codes[1] ||
+
                    'Codes' NULL ( cad tous les commentaires à copier )
-
c3 == codes[2] ||
+
                    ou suivi par un des 5 charactères 'Codes' d'extraction */
-
c3 == codes[3] ||
+
                if ( c2 == ';' &&  
-
c3 == codes[4]
+
                        (
-
)
+
                            !codes[0]||
-
)
+
                            c3 == codes[0] ||
-
/*O alors copier les caractères dans le fichier doc, et si opt s ajouter à l'écran: */
+
                            c3 == codes[1] ||
-
{ /*S copier */
+
                            c3 == codes[2] ||
-
/*O si option n insérer le numéro de ligne et si s l'ajouter a l'écran */
+
                            c3 == codes[3] ||
-
if(n)
+
                            c3 == codes[4]
-
{ /*S n */
+
                        )
-
fprintf( pfdoc, "%5d ", num);
+
                    )
-
if(s) printf( "%5d ", num);
+
/*O             alors copier les caractères dans le fichier doc,  
-
} /*S n */
+
                et si option s ajouter à la sortie standard */
-
/*O si pas option t texte seul */
+
 
-
if(!t)
+
/*P-- sinon si c1 = ';' est en première colonne -----------------------------*/
-
                    { /*S !t */
+
 
-
/*O copier le debut de ligne */
+
                { /*S copier */
-
putc (c2,pfdoc); putc(c3,pfdoc);
+
/*O                 si option n insérer le numéro de ligne  
-
/*O si option s copier le commentaire a l'ecran */
+
                    et si option s l'ajouter à la sortie standard */
-
if(s)
+
                    if(n)
-
{ /*S si opt s */
+
                    { /*S n */
-
putch(c2);
+
                        fprintf( pfdoc, "%5d ", num);
-
putch(c3);
+
                        if(s) printf( "%5d ", num);
-
} /*S si opt s */
+
                    } /*S n */
-
} /*S !t */
+
/*O                 si l'option t texte seul n'est pas validée */
-
/*O sinon si il ne faut pas copier tout le commentaire: 1 pas arrière*/
+
                    if(!t)
-
else if(!codes[0])ungetc(c3,pnfile);
+
                    { /*S !t */
-
/*O tant que : pas en fin de ligne */
+
/*O                     copier le début de ligne */
-
while ( (c1 = getc(pnfile)) != '\n')
+
                        putc(c2,pfdoc); // ;
-
{ /*S w copy line */
+
                        putc(c3,pfdoc); // caractère de d'extraction
-
/*O copier la ligne */
+
/*O                     si option s copier aussi les 2 caractères à la sortie std */
-
putc (c1,pfdoc);
+
                        if(s)
-
if(s) putch(c1);
+
                        { /*S si opt s */
-
} /*S w copy line */
+
                            putch(c2);
-
/*O copier aussi le dernier caractere et si option s retour : chariot à l'écran */
+
                            putch(c3);
-
putc (c1,pfdoc);
+
                        } /*S si opt s */
-
if(s) putch('\n');
+
                    } /*S !t */
-
/*O revenir sur LF du fichier source */
+
/*w                sinon, option t vraie et copier tous les caractères
-
ungetc(c1,pnfile);
+
                        reculer de 1 caractère */
-
} /*S copier */
+
                    //w else if(!codes[0])ungetc(c3,pnfile);
-
/*O sinon restituer les deux derniers caracteres */
+
/*O                 sinon, option t, remplacer les deux premiers caractères par 2 espaces */
-
else
+
                    if(t)
-
{ /*S sinon */
+
                    { /*S t true */
-
ungetc(c3,pnfile);
+
                        putc (' ',pfdoc);
-
ungetc(c2,pnfile);
+
                        putc (' ',pfdoc);
-
} /*S sinon */
+
                        if(s)
-
} /*S ; en colonne 1 */
+
                        { /*S s true */
 +
                            putch(' ');
 +
                            putch(' ');
 +
                        } /*S s true */
 +
                    } /*S t true */
 +
/*O                tant que l'on a pas trouvé le caractère fin de ligne NL ('\n')*/
 +
                    while ( (c1 = getc(pnfile)) != '\n' && c1 != EOF)
 +
                    { /*S w2 copy line */
 +
/*O                     copier les caractères de la ligne */
 +
                        putc (c1,pfdoc);
 +
                        if(s) putch(c1);
 +
                    } /*S w2 copy line */
 +
                    if (c1==EOF) break; // du while w1
 +
/*O                 copier aussi le caractère c1=NL,
 +
                    et avec l'option s envoyer le NL au terminal */
 +
                    putc (c1,pfdoc);
 +
                    if(s) putch(c1);
 +
/*O                 revenir sur LF du fichier source */
 +
                    ungetc(c1,pnfile);
 +
                } /*S copier */
 +
/*O             sinon restituer les deux derniers caractères */
 +
                else
 +
                { /*S sinon pas début de commentaire en 1ère colonne */
 +
                    ungetc(c3,pnfile);
 +
                    ungetc(c2,pnfile);
 +
                } /*S sinon pas début de commentaire en 1ère colonne */
 +
            } /*S ; en colonne 1 */
 +
 
 +
/*P--------- sinon si c1 = ';' est dans la ligne ----------------------------*/
 +
            else
 +
            { /*S else */
 +
/*P            si c1 est tabulation incrémenter tab */
 +
//P                if (c1=='\t')tab++;
 +
/*P            sinon si c1 = ; */
 +
//P                else
 +
                if (c1==';')
 +
/*O            alors: */
 +
                { /*S char = ; */
 +
                    c2=getc(pnfile);
 +
/*O                si codes[0]=0 ( tous les commentaires )
 +
                      ou si suivi par c2 = 'Code' to extract the comment */
 +
                    if(      !codes[0] ||
 +
                        c2 == codes[0] ||
 +
                        c2 == codes[1] ||
 +
                        c2 == codes[2] ||
 +
                        c2 == codes[3] ||
 +
                        c2 == codes[4]
 +
                      )
 +
/*O                alors: */
 +
                    { /*S comment inline */
 +
/*O                    repérer la position de début de commentaire, le ; */
 +
                        //w if(!codes[0])ungetc(c2,pnfile); (tous les commentaires)
 +
                        ll=ftell(pnfile); // retour avec repérage sur ;
 +
/*O                    si l'option booléenne t est fausse (pas de texte seul) */
 +
                        if(!t)
 +
                        { /*S !t */
 +
/*O                        se positionner en début de ligne */
 +
/*T                        fseek ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
 +
                            fseek(pnfile,nl,0);
 +
/*O                        si l'option n est vraie, insérer le numéro de ligne */
 +
                            if(n)
 +
                            { /*S n (numéro de ligne) */
 +
                                fprintf( pfdoc, "%5d ", num);
 +
/*O                            si option s vraie, ajouter le numéro de ligne à l'écran */
 +
                                if(s) printf( "%5d ", num); // screen
 +
                            } /*S n */
 +
/*O                        copier toute la ligne tq pas NL LF, dans le fichier doc */
 +
                            while ( (c1=getc(pnfile)) != '\n' && c1!=EOF)
 +
                            { /*S w3 */
 +
                                putc(c1,pfdoc);
 +
                                if(s)putch(c1);
 +
                            } /*S w3 */
 +
/*O                        en cas de fin de fichier arrêter la boucle while w1 */
 +
                            if (c1==EOF) break;
 +
                        } /*S !t */
 +
/*O                    si option t */
 +
                        if (t)
 +
                        { /*S option t */
 +
/*O                        se positionner en dedut de ligne */
 +
/*T                        fseek ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
 +
                            fseek(pnfile,nl,0);
 +
/*O                        si option n vraie, insérer le numéro de ligne */
 +
                            if(n)
 +
                            { /*S n (numero de ligne) */
 +
                                fprintf( pfdoc, "%5d ", num);
 +
/*O                            si s ajouter le numéro de ligne à l'écran */
 +
                                if(s) printf( "%5d ", num); // screen
 +
                            } /*S n */
 +
//P                        copier autant de tabulations qu'il y en a dans le source */
 +
//P for(i=0;i<tab;i++)
 +
//P { /*S tabs */
 +
//P putc('\t',pfdoc);
 +
//P if(s)putch('\t');
 +
//P } /*S tabs */
 +
/*O                        copier toute la ligne jusqu'à la position commentaire */
 +
                            while ( (c1=getc(pnfile)) != ';' && c1!=EOF)
 +
                            { /*S w */
 +
                                putc(' ',pfdoc);
 +
                                if(s)putch(' ');
 +
                            } /*S w*/
 +
                            if (c1==EOF) break; // w1
 +
/*O                        ajouter un espace pour remplacer le caractère ';' */
 +
                            // for(i=(int)(ll-nl-tab);i>0;i--)
 +
                            { /*S espaces */
 +
                                putc(' ',pfdoc);
 +
                                if(s)putch(' ');
 +
                                c1=getc(pnfile);            // command 'Code' true
 +
                                if(c1!=' ')
 +
                                { /*S if 'Code' is true */
 +
                                    putc(' ',pfdoc); // replace Code with space
 +
                                    if(s)putch(' ');
 +
                                } /*S if 'Code' is true */
 +
                            } /*S espaces */
 +
/*O                        puis copier le commentaire tant que NL n'est pas trouvé */
 +
                            while ( (c1=getc(pnfile)) != '\n' && c1!=EOF)
 +
                            { /*S copier commentaire */
 +
                                putc(c1,pfdoc);
 +
                                if(s)putch(c1);
 +
                            } /*S copier commentaire */
 +
                            if(c1==EOF)break; // w1
 +
                        } /*S option t */
 +
                        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}}
 +
 
 +
== Fichier commande des tests konsole ==
 +
{{Boîte déroulante/début|titre=MAKE_Tests_U 2013-04-28}}
 +
<pre>
 +
#O    Copy putchar.asm in target created file
 +
      cat putchar.asm > putchar.tst
 +
**
 +
#O    Test options -nstv with source "putchar.asm" and target "*.tst"
 +
#O    - and screen redirection to tstasm.screen
 +
 
 +
#O 1: Test de l'option -s append target
 +
      echo "---------------------------------------------------" >> putchar.tst
 +
      echo "1: Test de l'option -s append target" >> putchar.tst
 +
      ../../mkd -savA DHOPT putchar.asm *.tst >> tstasm.screen
 +
 
 +
#O 1: Test option -t
 +
      echo "---------------------------------------------------" >> putchar.tst
 +
      echo "1: Test option -t" >> putchar.tst
 +
      ../../mkd -tavA DHOPT putchar.asm *.tst # >> tstasm.screen
 +
 
 +
#O 1: Test option -n, with append files target and screen
 +
      echo "---------------------------------------------------" >> putchar.tst
 +
      echo "1: Test option -n, with append files target and screen" >> putchar.tst
 +
      ../../mkd -navA DHOPT putchar.asm *.tst # >> tstasm.screen
 +
 
 +
#O 2: Test options -ns, with append files target and screen
 +
      echo "---------------------------------------------------" >> putchar.tst
 +
      echo "---------------------------------------------------" >> putchar.tst
 +
      echo "---------------------------------------------------" >> putchar.tst
 +
      echo "2: Test options -ns, with append files target and screen" >> putchar.tst
 +
      ../../mkd -nsavA DHOPT putchar.asm *.tst >> tstasm.screen
 +
 
 +
#O 2: Test options -nt, with append files target and screen
 +
      echo "---------------------------------------------------" >> putchar.tst
 +
      echo "2: Test options -nt, with append files target and screen" >> putchar.tst
 +
      ../../mkd -ntavA DHOPT putchar.asm *.tst >> tstasm.screen
 +
 
 +
#O 2: Test options -nst, with append files target and screen
 +
      echo "---------------------------------------------------" >> putchar.tst
 +
      echo "2: Test options -nst, with append files target and screen" >> putchar.tst
 +
      ../../mkd -nstavA DHOPT putchar.asm *.tst >> tstasm.screen
 +
 
 +
#O 5: Last line test with -nst "putchar.asm" and target "*.tstlastline1"
 +
      ../../mkd -nstvwA '**' putchar.asm *.tstlastline1 > tstcpplastline.screen1
 +
 
 +
 
 +
#O    Break with gedit
 +
      gedit putchar.tst tstasm.screen putchar.tstlastline1 tstcpplastline.screen1
 +
 
 +
 
 +
#O    Erase putchar.tst
 +
      CLEAN_Tests_U
 +
</pre>
 +
'''CLEAN_Tests_U'''
 +
<pre>
 +
#!/bin/bash
 +
#O File Clean_Tests_U
 +
#O Force delete files created with mkd "tests" under Linux.
 +
      rm -f putchar.tst
 +
      rm -f tstasm.screen
 +
      rm -f putchar.tstlastline1
 +
      rm -f tstcpplastline.screen1
 +
      rm -f *.doc
 +
</pre>
 +
{{boîte déroulante/fin}}
 +
 
 +
== Fichier d'analyse des tests konsole ==
 +
{{Boîte déroulante/début|titre=Analysis.txt 2013-04-28}}
 +
<pre>
 +
Fichier Analysis texte UTF-8
 +
Analyse du : 28 avril 2013 par Clara pour le retour à la conception détaillée.
 +
-------------------------------------------------------------------------------
 +
RAPPEL:
 +
NOM DU FICHIER: asm.c pour console
 +
 +
    Directives de tests unitaires version alpha 2013:
 +
    -------------------------------------------------
 +
    Vérifiez les options n, s et t séparément:
 +
    Vérifiez que la numérotation des lignes est correcte dans tous les cas de
 +
    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.
 +
-------------------------------------------------------------------------------
 +
Résultats du test unitaire de la fonction asm_() du fichier asm.c
 +
.
 +
Test est effectué avec asm.c intégrée dans la version mkd 2013 alpha aux fins
 +
d'évaluer les modifications à effectuer dans les prochaines versions de mkd*
 +
.
 +
Note : Nous n'avons pas effectué ce test avec les commandes mkdasm prévus pour
 +
effectuer ces tests. Cette façon de faire aboutit aux mêmes résultats.
 +
.
 +
    D'après les directives et les fichiers d'analyse putchar.tst et
 +
    tstasm.screen :
 +
.
 +
    Directives de tests unitaires version alpha 2013:
 +
    -------------------------------------------------
 +
1:  Vérifiez les options n, s et t séparément:
 +
    - les essais séparés fonctionnent correctement et sont conformes
 +
.
 +
2:  Vérifiez que la numérotation des lignes est correcte dans tous les cas de
 +
    décodage de lignes. n, ns. nt, nst.
 +
    - Les essais réalisés ont été conformes
 +
.
 +
3:  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'opion texte seul.
 +
    - Le résultat est conforme (Sans de numérotation des lignes)
 +
.
 +
4:  -- 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.
 +
    - Les résultas sont conformes. Il est à noter que les tabulations créent un
 +
      décalage du texte avec l'option -n numéroation
 +
.
 +
5:  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.
 +
    - Résultat conforme
 +
.
 +
6:  Le caractère de fin de fichier (EOF) NE DOIT JAMAIS APPARAÎTRE DANS LE
 +
    TEXTE DU FICHIER CIBLE.
 +
    - Vérifié conforme
 +
.
 +
7:  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.
 +
    - Tout OK !
 +
</pre>
 +
{{boîte déroulante/fin}}
 +
 
 +
== Fichier source du test ==
 +
{{Boîte déroulante/début|titre=putchar.asm 2013-04-28}}
 +
<pre>
 +
;P Fichier puchar.asm, macro en assembleur pour MS-DOS
 +
;P Macro trouvée sur "wikipedia:fr:Assembleur#Macro-assembleur" ;D orignal file
 +
;P Pour l'exercice suivant:
 +
;P    "wikibooks:fr:Mkd_(Extracteur_de_documents)/Exercices#Fichiers_de_projet"
 +
;D Fichier putchar.asm sous DOS/Windows
 +
;D Fichier putchar.s sous Unix/Linux
 +
;D macro putchar
 +
;D ----------------------------------------------------------------------------
 +
;D putchar est une macro MASM qui affiche un caractère sous MS-DOS.
 +
;D On l'utilisera par exemple ainsi
 +
;D   putchar "X" ;T test unitaire avec une tabulation suivi de 2 espaces
 +
;D Et cela générera :
 +
;D        mov    dl,"X"
 +
;D        mov    ah,2
 +
;D        int    21h
 +
;D
 +
;H  // puchar.asm: Pas de pototype
 +
;H
 +
;O macro.asm
 +
  putchar Macro  car          ;O Prototype de la macro
 +
          ifdef  car          ;O si car est défini  ;T see endif
 +
          mov    dl,car      ;O  le mettre dans dl
 +
          endif                                      ;T
 +
          mov    ah,2        ;O ah=2 : fonction "putchar" en DOS
 +
          int    21h          ;O appel au DOS
 +
          endm                ;O fin macro
 +
;S Sortie sans NL
 +
</pre>     
 +
{{boîte déroulante/fin}}
-
/*O--------- sinon si c1 = ';' dans la ligne --------------------------------*/
+
[[Catégorie:Générateurs de documentation]]
-
else
+
-
{ /*S else */
+
-
/*O si c1 est tabulation incrementer tab */
+
-
if (c1=='\t')tab++;
+
-
/*O sinon si c1 = ; */
+
-
else if (c1==';')
+
-
/*O alors: */
+
-
{ /*S char = ; */
+
-
c2=getc(pnfile);
+
-
/*O si codes[0]=0 ou si suivi par c2 = char code utilisateur */
+
-
if ( !codes[0]||
+
-
c2 == codes[0] ||
+
-
c2 == codes[1] ||
+
-
c2 == codes[2] ||
+
-
c2 == codes[3] ||
+
-
c2 == codes[4]
+
-
)
+
-
/*O alors: */
+
-
{ /*S commentaire page */
+
-
/*O reperer la position commentaire */
+
-
if(!codes[0])ungetc(c2,pnfile);
+
-
ll=ftell(pnfile);
+
-
/*O si pas option t (texte seul) */
+
-
if(!t)
+
-
{ /*S !t */
+
-
/*O se positionner en dedut de ligne */
+
-
fseek(pnfile,nl,0);
+
-
/*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
+
-
/*O si option n insérer le numéro de ligne */
+
-
if(n)
+
-
{ /*S n (numero de ligne) */
+
-
fprintf( pfdoc, "%5d ", num);
+
-
/*O si s ajouter le numéro de ligne à l'écran */
+
-
if(s) printf( "%5d ", num); // screen
+
-
} /*S n */
+
-
/*O copier toute la ligne tq pas NL LF, dans le fichier doc */
+
-
while ( (c1=getc(pnfile)) != '\n')
+
-
{ /*S w */
+
-
putc(c1,pfdoc);
+
-
if(s)putch(c1);
+
-
} /*S w*/
+
-
} /*S !t */
+
-
/*O sinon: (option t) */
+
-
else
+
-
{ /*S option t */
+
-
/*O se positionner en dedut de ligne */
+
-
fseek(pnfile,nl,0);
+
-
/*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
+
-
/*O si option n insérer le numéro de ligne */
+
-
if(n)
+
-
{ /*S n (numero de ligne) */
+
-
fprintf( pfdoc, "%5d ", num);
+
-
/*O si s ajouter le numéro de ligne à l'écran */
+
-
if(s) printf( "%5d ", num); // screen
+
-
} /*S n */
+
-
/*wwwO copier autant de tabulations qu'il y en a dans le source */
+
-
// for(i=0;i<tab;i++)
+
-
// { /*S tabs */
+
-
// putc('\t',pfdoc);
+
-
// if(s)putch('\t');
+
-
//} /*S tabs */
+
-
/*O copier toute la ligne jusqu'à la position commentaire */
+
-
while ( (c1=getc(pnfile)) != ';')
+
-
{ /*S w */
+
-
putc(c1,pfdoc);
+
-
if(s)putch(c1);
+
-
} /*S w*/
+
-
/*O ajouter un espace pour remplacer le caractère ';' */
+
-
// for(i=(int)(ll-nl-tab);i>0;i--)
+
-
{ /*S espaces */
+
-
putc(' ',pfdoc);
+
-
if(s)putch(' ');
+
-
} /*S espaces */
+
-
/*O puis copier le commentaire tq pas NL */
+
-
while ( (c1=getc(pnfile)) != '\n')
+
-
{ /*S copier commentaire */
+
-
putc(c1,pfdoc);
+
-
if(s)putch(c1);
+
-
} /*S copier commentaire */
+
-
} /*S option t */
+
-
putc('\n',pfdoc);if(s)putch('\n');  /*O copier NL */
+
-
ungetc(c1,pnfile);                  /*O revenir sur NL */
+
-
} /*S commentaire page */
+
-
/*O sinon: */
+
-
else
+
-
{ /*S*/
+
-
ungetc(c2,pnfile);
+
-
} /*S*/
+
-
} /*S char = ; */
+
-
} /*S else */
+
-
} /*S tq !EOF */
+
-
return 0;
+
-
} /*S asm */</pre>
+

Version actuelle en date du 5 mai 2013 à 16:26

Retour aux fichiers en développement →

Sommaire

[masquer]

Fichiers de la fonction asm_()

Dans les sources, les tabulations posent parfois quelques problèmes de lisibilité.

Fichier commande des tests konsole

Fichier d'analyse des tests konsole

Fichier source du test

Outils personnels
Catégories
Discussions