Projet mkd/tri.c
De Wiki EELL.
(Différences entre les versions)
JPL (discuter | contributions) m (!!) |
JPL (discuter | contributions) m (→Fichiers de la fonction tri() : Mise à jour) |
||
(10 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
- | {{Modèle:Pas fini/autre}} | + | <!-- {{Modèle:Pas fini/autre}} --> |
<small>[[Projet mkd/Fichiers en développement|Retour aux fichiers en développement →]]</small> | <small>[[Projet mkd/Fichiers en développement|Retour aux fichiers en développement →]]</small> | ||
+ | |||
+ | == Fichiers de la fonction tri() == | ||
+ | |||
+ | <pre style = "color:blue"> | ||
+ | Remarks: (1991) | ||
+ | Cette fonction de mkdoc permet le tri des commentaires en fonction des para- | ||
+ | mètres CD1 CD2 CD3 CD4 CD5 compiles. | ||
+ | avec l'option l (copie de ligne): | ||
+ | CD1 et CD2 sont des caractères début de commentaires a placer en début de | ||
+ | ligne comme en FORTRAN: c ou C ou * . | ||
+ | CD3 est un caractère début de commentaire que l'on peut placer en tout point | ||
+ | d'une ligne comme ; en assembleur, # en shell ou % en PostScript. | ||
+ | Cette fonction permet des tris différents de SHELL_.C vu qu'elle ignore si | ||
+ | # est dans une chaîne ou si elle est précédée du char \ . | ||
+ | avec l'option p (copie de page ): | ||
+ | CD4 est le caractère de début du commentaire et CD5 est la fin du commentaire | ||
+ | comme en PASCAL : CD4={ et CD5=} . CD4=CD5=" peut a la rigueur permettre | ||
+ | d'extraire des chaînes de caractères afin d’éditer un dictionnaire syntaxique | ||
+ | toutefois " étant a la fois début et fin de caractère le résultat n'est pas | ||
+ | assuré. | ||
+ | </pre> | ||
+ | |||
+ | {{Boîte déroulante/début|titre=tri.h, tri.c, tri.cc, tri.inc.c ; Updated 2013-05-11}} | ||
+ | * Header tri.h | ||
+ | <pre style="color:orange"> | ||
+ | |||
+ | // File: tri.c | ||
+ | void tri_ (FILE * pfdoc, FILE * pnfile); | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | * File tri.c | ||
+ | <pre style="color:red"> | ||
+ | /*P | ||
+ | FILE NAME: tri.c for konsole tri.cc for individual compilation in | ||
+ | c++ or tri.inc.cc to include file in sources files with gtkmm | ||
+ | |||
+ | PROJECT: mkd | ||
+ | mkd is a UNIX command to extract pre-encoded comments lines to generate the | ||
+ | software documentation according to ISO standards. | ||
+ | mkd is the abbreviation of make documentation. This command was originally | ||
+ | known under the name mkdoc (make documentation). | ||
+ | This command is not integrated into the standard distributions of Unix / Linux | ||
+ | |||
+ | INITIAL PROJECT: | ||
+ | mkdoc 1989 for MS-DOS and UNIX now obsolete. CEM - University of Montpellier II | ||
+ | |||
+ | ADMINISTRATIVE RECORD: | ||
+ | extractdoc 04/12/2009 | ||
+ | |||
+ | FILE UPDATE: | ||
+ | Date: ../../1986 by JPL Initial programming for MSDOS and UNIX on SUN | ||
+ | Date: 09/06/1989 by JPL Update mkdoc 3.09 | ||
+ | Date: 09/01/1991 by JPL mkdoc 3.11 for PC and UNIX | ||
+ | Date: 10/05/2013 by GC Update for mkd 2013 | ||
+ | |||
+ | */ | ||
+ | // Date: ../../.... by ... purpose of the modification .... | ||
+ | |||
+ | /*T | ||
+ | FILE NAME: tri.c for konsole tri.cc for individual compilation in | ||
+ | c++ or tri.inc.cc to include file in sources files with gtkmm | ||
+ | |||
+ | |||
+ | Directives de tests unitaires version alpha 2013 | ||
+ | Généralités pour tous les modules. | ||
+ | ------------------------------------------------- | ||
+ | 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 (lignes et blocs). n, ns. nt, nst. | ||
+ | Vérifiez que le texte reste à la bonne place dans tous les cas de décodage: | ||
+ | toute la ligne (dans la cas de la directive de compilation FULL_LINE), ou | ||
+ | texte seul. | ||
+ | -- Vérifiez que les tabulations sont bien prises en charge dans tous les | ||
+ | cas, décodage des lignes et des blocs. | ||
+ | -- 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 décodé avant le(les) caractère(s) de fin de | ||
+ | commentaire doit être remplacé par un caractère de fin de ligne 0x0A. Noter | ||
+ | que le caractère 0x0A précédant EOF est considéré comme fin de ligne. | ||
+ | |||
+ | Le caractère de fin de fichier (EOF 0xFF) NE DOIT JAMAIS APPARAÎTRE DANS LE | ||
+ | TEXTE DU FICHIER CIBLE. | ||
+ | Ceci provoquait un bug dans la version Alpha de l'application fenêtrée | ||
+ | mkdbasicw à l'étape du test d'intégration. | ||
+ | |||
+ | 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. | ||
+ | |||
+ | */ | ||
+ | |||
+ | |||
+ | /*D | ||
+ | function tri_ | ||
+ | ----------------------------------------------------------------------------- | ||
+ | FILE NAME: tri.c for konsole tri.cc for individual compilation in | ||
+ | c++ or tri.inc.cc to include file in sources files with gtkmm | ||
+ | |||
+ | FUNTION NAME: | ||
+ | tri_ | ||
+ | |||
+ | SYNOPSIS, SYNTAX: | ||
+ | #include "/usr/include/mkd/version.h" // IMPORTANT: Compilation directives | ||
+ | #include "/usr/include/mkd/tri.h" // or mkd.h | ||
+ | int tri_(FILE * pfdoc, FILE * pnfile); | ||
+ | FILE * pfdoc: pointer of the target stream opened by the calling function | ||
+ | FILE * pnfile: pointer of the source stream opened by the calling function | ||
+ | |||
+ | ACTION, DESCRIPTION: | ||
+ | The tri_ function reads the source file (pnfile) transmitted from the | ||
+ | calling function, and decodes the comments pre-encoded in lines or | ||
+ | blocks. and then writing this comments to a target file (pfdoc). | ||
+ | Pre-coded characters are defined in a external global table 'Codes'; | ||
+ | |||
+ | The golbal variables are 'Codes' and 'Options'. | ||
+ | The 'Codes': table of 5 characters: | ||
+ | extern char codes[]; | ||
+ | They must be defined in the calling function: | ||
+ | char codes[5] = {0,0,0,0,0}; | ||
+ | The 'Options': n,s,t,v: | ||
+ | extern unsigned char n,s,t; | ||
+ | They must be dEfined in the calling function: | ||
+ | unsigned char n=0,s=0,t=0; | ||
+ | With the options: | ||
+ | -n: The transcript is preceded by line number. This allows to easily | ||
+ | reach the commented line. | ||
+ | -s: Add the comment to the stdout to use shell redirections > , >> , | ||
+ | or ||. | ||
+ | -t: With the t option only the commented text is extracted. | ||
+ | Without the t option the entire line or block is copied. | ||
+ | The t option permit to generate directly exploitable and publishable | ||
+ | documents. | ||
+ | |||
+ | Remarks: (1991) | ||
+ | Cette fonction de mkdoc permet le tri des commentaires en fonction des para- | ||
+ | mètres CD1 CD2 CD3 CD4 CD5 compiles. | ||
+ | avec l'option l (copie de ligne): | ||
+ | CD1 et CD2 sont des caractères début de commentaires a placer en début de | ||
+ | ligne comme en FORTRAN: c ou C ou * . | ||
+ | CD3 est un caractère début de commentaire que l'on peut placer en tout point | ||
+ | d'une ligne comme ; en assembleur, # en shell ou % en PostScript. | ||
+ | Cette fonction permet des tris différents de SHELL_.C vu qu'elle ignore si | ||
+ | # est dans une chaîne ou si elle est précédée du char \ . | ||
+ | avec l'option p (copie de page ): | ||
+ | CD4 est le caractère de début du commentaire et CD5 est la fin du commentaire | ||
+ | comme en PASCAL : CD4={ et CD5=} . CD4=CD5=" peut a la rigueur permettre | ||
+ | d'extraire des chaînes de caractères afin d’éditer un dictionnaire syntaxique | ||
+ | toutefois " étant a la fois début et fin de caractère le résultat n'est pas | ||
+ | assuré. | ||
+ | |||
+ | |||
+ | CONFORMING TO: | ||
+ | POSIX, ANSI C, BSD, ISO/IEC 9899:2011; gcc, MS-Vc10; UTF-8. | ||
+ | |||
+ | PORTABILITY, | ||
+ | LINUX-Debian-systems, LINUX-Red-Hat, UNIX, gcc. | ||
+ | Microsoft Visual studio under Windows : x86(Win32) x64(Win32 and WIN64) | ||
+ | |||
+ | RETURN VALUE: | ||
+ | Nothing. | ||
+ | |||
+ | COPYRIGHT: | ||
+ | © EELL, Éditeurs Européens de Logiciels Libres, EUPL 2007. | ||
+ | Association à but non lucratif selon l'Article 11 de la convention | ||
+ | européenne des droits de l'homme. | ||
+ | Concédée sous licence EUPL, version 1.1 ou – dès leur approbation par la | ||
+ | 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. | ||
+ | La Licence est totalement compatible avec la licence GNU. | ||
+ | |||
+ | AUTHORS: | ||
+ | © Contact: http://edeulo.free.fr/contacts/formmail.php | ||
+ | Designer: intial JP Louyot (JPL) | ||
+ | Updates : JPL and Clara Jimenez | ||
+ | Translations: Alizée, Clara, Luca, JPL, JPT, Martine | ||
+ | |||
+ | RESSOURCES: | ||
+ | gtkmm with mkdw future widowed version. | ||
+ | |||
+ | NOTES: | ||
+ | Update April 2013 | ||
+ | |||
+ | BUGS: | ||
+ | See bugs reports http://edeulo.free.fr/phpBB3 | ||
+ | |||
+ | SEE ALSO MANUAL: | ||
+ | Man(3) attached in English. | ||
+ | Command line : man 3 tri_ | ||
+ | |||
+ | */ | ||
+ | |||
+ | /*H | ||
+ | // File: tri.c | ||
+ | void tri_ (FILE * pfdoc, FILE * pnfile); | ||
+ | */ | ||
+ | </pre> | ||
+ | <pre style="color:blue"> | ||
+ | #include "version.h" | ||
+ | #include "tri.h" | ||
+ | |||
+ | void tri_(FILE * pfdoc, FILE * pnfile) | ||
+ | // FILE *pfdoc, *pnfile; | ||
+ | { /*S tri */ | ||
+ | extern unsigned char l,p,n,s,t; | ||
+ | extern char codes[]; | ||
+ | unsigned int i,tabl,tabp; | ||
+ | unsigned int num; | ||
+ | long lc,ll,nl; | ||
+ | register int c1; | ||
+ | int c2,c3; | ||
+ | |||
+ | num = 0; | ||
+ | c1 = c2 = c3 = STX; /* Start Text */ | ||
+ | |||
+ | /*O tant que pas fin de fichier source */ | ||
+ | while ( c1 != EOF && c2 != EOF && c3 != EOF ) | ||
+ | { /*S tq !EOF */ | ||
+ | /*O si début de texte faire c1=LF */ | ||
+ | if (c1==STX) c1='\n'; | ||
+ | /*O sinon prendre pour c1 le caractère suivant */ | ||
+ | else c1=getc(pnfile); | ||
+ | /*O si le char est NL reperer la position suivant NL dans nl */ | ||
+ | if(c1=='\n') | ||
+ | { /*S*/ | ||
+ | num++; | ||
+ | nl=ftell(pnfile); | ||
+ | tabl=tabp=0; | ||
+ | } /*S*/ | ||
+ | |||
+ | /*O###### si option ligne ###################################################*/ | ||
+ | if (l) | ||
+ | { /*S cas lignes */ | ||
+ | |||
+ | /*O--------- si le caractère est NL -----------------------------------------*/ | ||
+ | |||
+ | if (c1=='\n') | ||
+ | { /*S colonne 1 */ | ||
+ | /*O suivi par c2 = CD1 ou CD2 ou CD3 | ||
+ | et si codes[0]=0 ou si suivi par un des 5 codes d'extraction */ | ||
+ | c2 = getc(pnfile); | ||
+ | if (c2==EOF) {ungetc(c2,pnfile);break;} | ||
+ | c3 = getc(pnfile); | ||
+ | if (c3==EOF) {ungetc(c3,pnfile);break;} | ||
+ | if( (c2 == CD1 || | ||
+ | c2 == CD2 || | ||
+ | c2 == CD3 | ||
+ | ) | ||
+ | && | ||
+ | (!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 cible, | ||
+ | et si option s vraie copier à la sortie standard. */ | ||
+ | { /*S copier la ligne */ | ||
+ | /* O si il n'y a pas de code revenir un caractère en arrière */ | ||
+ | // if (!codes[0]) ungetc(c3,pnfile); | ||
+ | /*O si option n insérer le numéro de ligne */ | ||
+ | if(n) | ||
+ | { /*S*/ | ||
+ | fprintf( pfdoc ,"%5d ", num ); | ||
+ | if(s) printf( "%5d ", num ); | ||
+ | } /*S*/ | ||
+ | /*O si pas option t */ | ||
+ | if(!t) | ||
+ | { /*S !t */ | ||
+ | /*O copier le début de ligne */ | ||
+ | putc (c2,pfdoc); // c1 = LF | ||
+ | putc(c3,pfdoc); | ||
+ | if(s) | ||
+ | { /*S si opt s */ | ||
+ | putch(c2);putch(c3); | ||
+ | } /*S si opt s */ | ||
+ | } /*S !t */ | ||
+ | /*O sinon, option t vraie */ | ||
+ | else | ||
+ | { /*S t */ | ||
+ | /*O remplacer le début de ligne par des espaces */ | ||
+ | putc(' ',pfdoc); // remplace c2 | ||
+ | if(s)putch(' '); | ||
+ | /*O si il n'y a pas de code revenir un caractère en arrière */ | ||
+ | if (!codes[0]) ungetc(c3,pnfile); | ||
+ | /*O si non écrire un blanc à la place de c3 sans revenir */ | ||
+ | else | ||
+ | { /*S cas c3 */ | ||
+ | putc(' ',pfdoc); | ||
+ | if(s)putch(' '); | ||
+ | } /*S cas c3 */ | ||
+ | } /*S t */ | ||
+ | |||
+ | /*O tant que pas fin de ligne et pas EOF, copier la suite */ | ||
+ | while ( (c1 = getc(pnfile)) != '\n' && c1 != EOF) | ||
+ | { /*S w copy line */ | ||
+ | /*O copier la fin de la ligne */ | ||
+ | putc (c1,pfdoc);if(s)putch(c1); | ||
+ | } /*S w copy line */ | ||
+ | /*O si le dernier caractère est EOF, quitter la boucle */ | ||
+ | if(c1==EOF) break; | ||
+ | /*O sinon, copier le LF (dernier caractère) */ | ||
+ | putc (c1,pfdoc); | ||
+ | if(s) putch('\n'); | ||
+ | /*O revenir sur LF du fichier source */ | ||
+ | ungetc(c1,pnfile); | ||
+ | } /*S*/ | ||
+ | /*O sinon retour des deux caractères c3 et c2 */ | ||
+ | else | ||
+ | { /*S sinon pas à extraire */ | ||
+ | ungetc(c3,pnfile); | ||
+ | ungetc(c2,pnfile); | ||
+ | } /*S sinon pas à extraire */ | ||
+ | } /*S colonne 1 */ | ||
+ | |||
+ | |||
+ | /*O sinon: traiter le commentaire dans la ligne */ | ||
+ | else | ||
+ | { /*S else pas colonne 1 */ | ||
+ | /*O--------- si c1 = 'CD3' (& option ligne) --------------------------*/ | ||
+ | if (c1==CD3) | ||
+ | { /*S char = CD3 */ | ||
+ | /*O si codes[0]=0 ou si suivi par c2 = char code utilisateur */ | ||
+ | c2=getc(pnfile); | ||
+ | if (c2==EOF) {ungetc(c2,pnfile);break;} | ||
+ | if(!codes[0]|| | ||
+ | c2 == codes[0] || | ||
+ | c2 == codes[1] || | ||
+ | c2 == codes[2] || | ||
+ | c2 == codes[3] || | ||
+ | c2 == codes[4] | ||
+ | ) | ||
+ | /*O alors: extraire le commentaire */ | ||
+ | { /*S commentaire */ | ||
+ | /*O repérer la position commentaire */ | ||
+ | if(!codes[0])ungetc(c2,pnfile); | ||
+ | ll=ftell(pnfile); | ||
+ | /*O si option n insérer le numéro de ligne */ | ||
+ | if(n) // depuis le dernier LF on n'a encore rien copié | ||
+ | { /*S*/ | ||
+ | fprintf( pfdoc, "%5d ", num ); | ||
+ | if(s) printf( "%5d ", num ); | ||
+ | } /*S*/ | ||
+ | /*O si pas option t */ | ||
+ | if(!t) | ||
+ | { /*S*/ | ||
+ | /*O se positionner en dédut de ligne */ | ||
+ | fseek(pnfile,nl,0); | ||
+ | /*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */ | ||
+ | /*O copier dans le fichier cible toute la ligne tq pas NL (LF) */ | ||
+ | while ( (c1=getc(pnfile)) != '\n' && c1 != EOF) | ||
+ | { /*S*/ | ||
+ | putc(c1,pfdoc); | ||
+ | if(s)putch(c1); | ||
+ | } /*S*/ | ||
+ | if (c1==EOF) break; | ||
+ | } /*S*/ | ||
+ | /*O sinon: (option t) */ | ||
+ | else | ||
+ | { /*S*/ | ||
+ | /*O se positionner en dédut de ligne */ | ||
+ | fseek(pnfile,nl,0); | ||
+ | /*O copier le début de ligne avec des tabulations et des espaces */ | ||
+ | for(lc=nl;lc<ll;lc++) | ||
+ | { /*S first */ | ||
+ | c1=getc(pnfile); | ||
+ | if (c1==EOF) break; | ||
+ | if (c1=='\t') | ||
+ | { | ||
+ | putc('\t',pfdoc); // tab to target | ||
+ | if(s)putch('\t'); // tab to stdout | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | putc(' ',pfdoc); // blank to target | ||
+ | if(s)putch(' '); // blank to stdout | ||
+ | } | ||
+ | } /*S first */ | ||
+ | |||
+ | /*O puis copier le commentaire tq pas NL et pas EOF */ | ||
+ | while ( (c1=getc(pnfile)) != '\n' && c1!=EOF ) | ||
+ | { /*S*/ | ||
+ | putc(c1,pfdoc); | ||
+ | if(s)putch(c1); | ||
+ | } /*S*/ | ||
+ | if (c1==EOF) break; | ||
+ | } /*S*/ | ||
+ | putc('\n',pfdoc);if(s)putch('\n'); /*O copier NL */ | ||
+ | ungetc(c1,pnfile); /*O revenir sur NL */ | ||
+ | } /*S commentaire */ | ||
+ | /*O sinon: */ | ||
+ | else | ||
+ | { /*S*/ | ||
+ | ungetc(c2,pnfile); | ||
+ | } /*S*/ | ||
+ | } /*S char = CD3 */ | ||
+ | /*O sinon si c1='\t' inc tabl */ | ||
+ | else if(c1=='\t')tabl++; | ||
+ | } /*S else pas colonne 1 */ | ||
+ | } /*S cas lignes */ | ||
+ | |||
+ | /*O###### si option page ####################################################*/ | ||
+ | |||
+ | if (p) | ||
+ | { /*S cas page */ | ||
+ | /*O si le char est identique a CD4 */ | ||
+ | if(c1==CD4) | ||
+ | { /*S char = CD4 */ | ||
+ | c2=getc(pnfile); | ||
+ | /*O si codes[0]=0 ou si c1 est suivi par c2 'Codes' */ | ||
+ | if(!codes[0]|| | ||
+ | c2 == codes[0] || | ||
+ | c2 == codes[1] || | ||
+ | c2 == codes[2] || | ||
+ | c2 == codes[3] || | ||
+ | c2 == codes[4] | ||
+ | ) | ||
+ | /*O alors: */ | ||
+ | { /*S traiter le commentaire */ | ||
+ | /*O repérer la position commentaire */ | ||
+ | if(!codes[0]) ungetc(c2,pnfile); | ||
+ | ll=ftell(pnfile); | ||
+ | /*O si option n insérer le numéro de ligne */ | ||
+ | if(n) | ||
+ | { /*S*/ | ||
+ | fprintf(pfdoc, "%5d ", num ); | ||
+ | if(s) printf("%5d ", num ); | ||
+ | } /*S*/ | ||
+ | /*O si pas option t */ | ||
+ | if(!t) | ||
+ | { /*S!t*/ | ||
+ | /*O se positionner en dédut de ligne */ | ||
+ | fseek(pnfile,nl,0); | ||
+ | /*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */ | ||
+ | /*O copier la ligne jusqu'au commentaire, dans le fichier cible */ | ||
+ | for(i=(int)(ll-nl);i>0;--i) | ||
+ | { /*S*/ | ||
+ | c1=getc(pnfile); | ||
+ | putc(c1,pfdoc); | ||
+ | if(s)putch(c1); | ||
+ | } /*S*/ | ||
+ | } /*S!t*/ | ||
+ | /*O sinon: (option t) */ | ||
+ | if(t) | ||
+ | { /*S t */ | ||
+ | /*O se positionner en dédut de ligne */ | ||
+ | fseek(pnfile,nl,0); | ||
+ | /*O copier le début de ligne avec des tabulations et des espaces */ | ||
+ | for(lc=nl;lc<ll;lc++) | ||
+ | { /*S first */ | ||
+ | c1=getc(pnfile); | ||
+ | if (c1==EOF) break; | ||
+ | if (c1=='\t') | ||
+ | { | ||
+ | putc('\t',pfdoc); // tab to target | ||
+ | if(s)putch('\t'); // tab to stdout | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | putc(' ',pfdoc); // blank to target | ||
+ | if(s)putch(' '); // blank to stdout | ||
+ | } | ||
+ | } /*S first */ | ||
+ | } /*S t */ | ||
+ | /*O puis tq ne rencontre pas le char CD5, copier le commentaire */ | ||
+ | while ( (c1=getc(pnfile)) != CD5 && c1 != EOF) | ||
+ | { /*S*/ | ||
+ | putc(c1,pfdoc); | ||
+ | if(s)putch(c1); | ||
+ | /*O si option n et NL incrémenter et ajouter le numéro de ligne */ | ||
+ | if(n && c1=='\n') | ||
+ | { /*S*/ | ||
+ | num++; | ||
+ | fprintf(pfdoc, "%5d ", num ); | ||
+ | if(s) printf( "%5d ", num ); | ||
+ | } /*S*/ | ||
+ | } /*S*/ | ||
+ | if (c1==EOF) break; | ||
+ | |||
+ | #ifdef FULL_LINE /*O *** FULL_LINE *** */ | ||
+ | /*O si pas option t */ | ||
+ | if(!t) | ||
+ | { /*S*/ | ||
+ | /*O copier les caractères jusqu'en fin de ligne */ | ||
+ | ungetc(c1,pnfile); | ||
+ | while ( (c1=getc(pnfile)) != '\n' && c1!=EOF) | ||
+ | { /*S*/ | ||
+ | putc(c1,pfdoc); | ||
+ | if(s)putch(c1); | ||
+ | } /*S*/ | ||
+ | } /*S*/ | ||
+ | /*O sinon (option t) */ | ||
+ | else | ||
+ | #endif /*O *** END FULL_LINE *** */ | ||
+ | { /*S*/ | ||
+ | /*O aller au bout de la ligne sans copier sauf les '\r' */ | ||
+ | while ( (c1=getc(pnfile)) != '\n' && c1!=EOF ) | ||
+ | if (c1=='\r') | ||
+ | { /*S*/ | ||
+ | putc( c1, pfdoc ); | ||
+ | if(s) putch( c1); | ||
+ | } /*S*/ | ||
+ | } /*S*/ | ||
+ | if(c1==EOF) break; | ||
+ | putc('\n',pfdoc);if(s)putch('\n'); /*O copier NL */ | ||
+ | ungetc(c1,pnfile); /*O revenir sur NL */ | ||
+ | } /*S traiter le commentaire */ | ||
+ | |||
+ | /*O sinon: */ | ||
+ | else | ||
+ | { /*S pas le cas */ | ||
+ | ungetc(c2,pnfile); | ||
+ | } /*S pas le cas*/ | ||
+ | } /*S char = CD4 */ | ||
+ | /* O sinon si c1='\t' inc tabp */ | ||
+ | // else if(c1=='\t')tabp++; | ||
+ | } /*S cas page */ | ||
+ | } /*S tq !EOF */ | ||
+ | } /*S tri */ | ||
+ | </pre> | ||
+ | {{Boîte déroulante/fin}} | ||
+ | |||
+ | == Fichier de commande des tests == | ||
+ | |||
+ | ; La fonction tri() a été éprouvée avec les options de compilation suivantes: | ||
+ | |||
+ | 1 - Commande : <code> mkd \? | grep '-l' > ligne.txt</code> | ||
+ | |||
+ | <span style="color:blue">'''Fichier ligne.txt''', compilation avec CD1= '%', CD2= '<', CD3= '!' :</span> | ||
+ | : <span style="color:orange">Ligne: -l et -p: ligne; (compil.: % ou < en première colonne ou ! dans la ligne)</span> | ||
+ | |||
+ | 2 - Commande : <code> mkd \? | grep page > block.txt</code> | ||
+ | |||
+ | <span style="color:blue">'''Fichier block.txt''', compilation avec CD4= '\"', CD5= '\"' :</span> | ||
+ | : <span style="color:orange">page: (compil.: commence avec " et se termine avec ")</span> | ||
+ | |||
+ | {{Boîte déroulante/début|titre=MAKE_Tests_U, CLEAN_Tests_U ; Updated 2013-05-11}} | ||
+ | * | ||
+ | <pre style="color:blue"> | ||
+ | #!/bin/bash | ||
+ | #O ../../mkd tests under Linux. | ||
+ | #O Epreuve de vérification de la fonction tri_() avec ../../mkd | ||
+ | #!/bin/dash | ||
+ | ../../mkd \? | grep -e '-l' > ligne.txt | ||
+ | ../../mkd \? | grep -e page > block.txt | ||
+ | # | ||
+ | echo "File stdout.doc for all tri() tests" > stdout.doc | ||
+ | # PostSript commentaire en début de ligne (début avec CD1 ou CD2 fin avec NL) | ||
+ | if cat ligne.txt | grep -e ' % ' | ||
+ | then | ||
+ | ../../mkd -svlw '**' sample2.ps >> stdout.doc; | ||
+ | ../../mkd -svlan '**' sample2.ps >> stdout.doc; | ||
+ | ../../mkd -svlant '**' sample2.ps >> stdout.doc; | ||
+ | ../../mkd -svlant O sample2.ps >> stdout.doc; | ||
+ | fi | ||
+ | # | ||
+ | # Tag '<' commentaire en début de ligne (début avec CD1 ou CD2 fin avec NL) | ||
+ | if cat ligne.txt | grep -e ' < ' | ||
+ | then | ||
+ | ../../mkd -svlw '**' tags.html >> stdout.doc; | ||
+ | ../../mkd -svlan '**' tags.html >> stdout.doc; | ||
+ | ../../mkd -svlant '**' tags.html >> stdout.doc; | ||
+ | ../../mkd -svlant '!' tags.html >> stdout.doc; | ||
+ | fi | ||
+ | # | ||
+ | # Fortran 90 commentaire dans la ligne (début avec CD3 fin avec NL) | ||
+ | if cat ligne.txt | grep -e ' ! ' | ||
+ | then | ||
+ | ../../mkd -svlw '**' degrad.f >> stdout.doc; | ||
+ | ../../mkd -svlan '**' degrad.f >> stdout.doc; | ||
+ | ../../mkd -svlant '**' degrad.f >> stdout.doc; | ||
+ | ../../mkd -svlant S degrad.f >> stdout.doc; | ||
+ | fi | ||
+ | # | ||
+ | # Texte avec chaînes de caractères sous forme de bloc début avec CD3 fin avec CD4 | ||
+ | if cat block.txt | grep -e ' " ' | ||
+ | then | ||
+ | ../../mkd -svpw '**' strings.txt >> stdout.doc; | ||
+ | ../../mkd -svpan '**' strings.txt >> stdout.doc; | ||
+ | ../../mkd -svpant '**' strings.txt >> stdout.doc; | ||
+ | ../../mkd -svpant '*' strings.txt >> stdout.doc; | ||
+ | fi | ||
+ | </pre> | ||
+ | |||
+ | * CLEAN_Tests_U | ||
+ | <pre style="color:violet"> | ||
+ | #!/bin/dash | ||
+ | #O File Tests_Clean | ||
+ | #O Delete files created with Make_Tets_files under Linux. | ||
+ | rm *.doc | ||
+ | </pre> | ||
+ | {{Boîte déroulante/fin}} | ||
+ | |||
+ | == Analyse des test Konsole == | ||
+ | |||
+ | {{Boîte déroulante/début|titre=Analysis ; Updated 2013-05-11}} | ||
+ | * Analysis | ||
+ | <pre style="color:black> | ||
+ | Fichier Analysis texte UTF-8 | ||
+ | Analyse du : 10 mai 2013 par Clara pour le retour à la conception détaillée. | ||
+ | ------------------------------------------------------------------------------- | ||
+ | Résultats du test unitaire de la fonction tri_() du fichier tri.c intégrée | ||
+ | à la commande mkd 2013 alpha 05 | ||
+ | . | ||
+ | Ce test est effectué avec la version mkd 2013 alpha pour évaluer les | ||
+ | modifications à effectuer dans la version alpha 2013. | ||
+ | . | ||
+ | Avec la commande : MAKE_Tests_U on obtient des résultatas conformes en fonction | ||
+ | des paramètres de compilation définis par CD1,CD2,CD3,CD4,CD5,dans version.h | ||
+ | . | ||
+ | Il est à noter que l'option -l permet de décoder les lignes commençant à la | ||
+ | fois par les caractères CD1, CD2 et contenant CD3. | ||
+ | . | ||
+ | Les tests ont été effectués selon les directives contenues dans le ficchier de | ||
+ | commandes: | ||
+ | . | ||
+ | #!/bin/bash | ||
+ | #O ../../mkd tests under Linux. | ||
+ | #O Epreuve de vérification de la fonction tri_() avec ../../mkd | ||
+ | #!/bin/dash | ||
+ | ../../mkd \? | grep -e '-l' > ligne.txt | ||
+ | ../../mkd \? | grep -e page > block.txt | ||
+ | # | ||
+ | echo "File stdout.doc for all tri() tests" > stdout.doc | ||
+ | # PostSript commentaire en début de ligne (début avec CD1 ou CD2 fin avec NL) | ||
+ | if cat ligne.txt | grep -e ' % ' | ||
+ | then | ||
+ | ../../mkd -svlw '**' sample2.ps >> stdout.doc; | ||
+ | ../../mkd -svlan '**' sample2.ps >> stdout.doc; | ||
+ | ../../mkd -svlant '**' sample2.ps >> stdout.doc; | ||
+ | ../../mkd -svlant O sample2.ps >> stdout.doc; | ||
+ | fi | ||
+ | # | ||
+ | # Tag '<' commentaire en début de ligne (début avec CD1 ou CD2 fin avec NL) | ||
+ | if cat ligne.txt | grep -e ' < ' | ||
+ | then | ||
+ | ../../mkd -svlw '**' tags.html >> stdout.doc; | ||
+ | ../../mkd -svlan '**' tags.html >> stdout.doc; | ||
+ | ../../mkd -svlant '**' tags.html >> stdout.doc; | ||
+ | ../../mkd -svlant '!' tags.html >> stdout.doc; | ||
+ | fi | ||
+ | # | ||
+ | # Fortran 90 commentaire dans la ligne (début avec CD3 fin avec NL) | ||
+ | if cat ligne.txt | grep -e ' ! ' | ||
+ | then | ||
+ | ../../mkd -svlw '**' degrad.f >> stdout.doc; | ||
+ | ../../mkd -svlan '**' degrad.f >> stdout.doc; | ||
+ | ../../mkd -svlant '**' degrad.f >> stdout.doc; | ||
+ | ../../mkd -svlant S degrad.f >> stdout.doc; | ||
+ | fi | ||
+ | # | ||
+ | # Texte avec chaînes de caractères sous forme de bloc début avec CD3 fin avec CD4 | ||
+ | if cat block.txt | grep -e ' " ' | ||
+ | then | ||
+ | ../../mkd -svpw '**' strings.txt >> stdout.doc; | ||
+ | ../../mkd -svpan '**' strings.txt >> stdout.doc; | ||
+ | ../../mkd -svpant '**' strings.txt >> stdout.doc; | ||
+ | ../../mkd -svpant '*' strings.txt >> stdout.doc; | ||
+ | fi | ||
+ | </pre> | ||
+ | |||
+ | {{Boîte déroulante/fin}} | ||
+ | |||
+ | == Fichiers sources des tests == | ||
+ | |||
+ | {{Boîte déroulante/début|titre=degrad.f90, sample2.ps, strings.txt, tags.html ; Updated 2013-05-11}} | ||
+ | * degrad.f (Fortran 90&+) | ||
+ | <pre style="color:orange"> | ||
+ | PROGRAM DEGRAD !S Début de programme | ||
+ | ! | ||
+ | !S Imprime une table de conversion degrés -> radians | ||
+ | !S ================================================= | ||
+ | ! | ||
+ | !S Déclaration des variables | ||
+ | INTEGER DEG | ||
+ | REAL RAD, COEFF | ||
+ | ! | ||
+ | !S En-tête de programme | ||
+ | WRITE ( *, 10) | ||
+ | 10 FORMAT (' ',20('*') / & | ||
+ | & ' * Degres * Radians *' / & | ||
+ | & ' ', 20('*') ) | ||
+ | ! | ||
+ | !S Corps de programme | ||
+ | COEFF = (2.0 * 3.1416) / 360.0 | ||
+ | DO DEG = 0, 90 | ||
+ | RAD = DEG * COEFF | ||
+ | WRITE ( *, 20) DEG, RAD | ||
+ | 20 FORMAT (' * ',I4,' * ',F7.5,' *') | ||
+ | END DO | ||
+ | ! | ||
+ | !S Fin du tableau | ||
+ | WRITE ( *, 30) | ||
+ | 30 FORMAT (' ',20('*') ) | ||
+ | ! | ||
+ | !S Fin de programme | ||
+ | STOP | ||
+ | END PROGRAM DEGRAD | ||
+ | CS Fin | ||
+ | !S Fin | ||
+ | </pre> | ||
+ | |||
+ | * sample2.ps (PostScript) | ||
+ | <pre style="color:red"> | ||
+ | %O Cursor initialization % | ||
+ | 200 200 moveto | ||
+ | %O Drawing the rectangle % | ||
+ | 400 300 lineto | ||
+ | 300 300 lineto | ||
+ | 200 200 lineto | ||
+ | stroke | ||
+ | </pre> | ||
+ | |||
+ | * strings.txt | ||
+ | <pre style="color:blue"> | ||
+ | Fichier strings.txt "" | ||
+ | "chaîne 1" | ||
+ | "chaîne 2 précédée de 1 tab" | ||
+ | "* chaîne 2 précédée de 5 espaces" | ||
+ | </pre> | ||
+ | |||
+ | * tags.html | ||
+ | <pre style="color:violet"> | ||
+ | <!Doctype html public "-//w3c//dtd html 4.0 Transitional//en"> | ||
+ | <HTML> | ||
+ | <HEAD> | ||
+ | <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-8" /> | ||
+ | <TITLE>Exercices avec mkd</TITLE> | ||
+ | </HEAD> | ||
+ | <BODY> | ||
+ | <i>Exercices avec la commande mkd.</i> | ||
+ | <p> | ||
+ | <b><u>Fonction cpp_(); Fichier cpp.c</u></b> | ||
+ | <br> | ||
+ | <b>Documentation simplifiée.</b> | ||
+ | <br> | ||
+ | La fonction doit décoder des commentaires, pré-codés avec un caractère ASCII qui suit le début de commentaire. | ||
+ | <br> | ||
+ | Exemple: //A ou /*A | ||
+ | <br> | ||
+ | ... et bla bla bla ...(raccourci pour les exercices) | ||
+ | </p> | ||
+ | |||
+ | <p> | ||
+ | <b>Tests unitaires:</b> | ||
+ | <br> | ||
+ | Vérifiez les options n, s et t séparément: | ||
+ | <br> | ||
+ | Vérifiez que la numérotation des lignes est correcte dans tous les cas de décodage (lignes et blocs). n, ns. nt, nst. | ||
+ | <br> | ||
+ | Vérifiez que le texte reste à la bonne place dans tous les cas de décodage: toute la ligne (dans la cas de la directive de compilation FULL_LINE), ou texte seul. | ||
+ | <br> | ||
+ | -- Vérifiez que les tabulations sont bien prises en charge dans tous les cas, décodage des lignes et des blocs. | ||
+ | <br> | ||
+ | -- Vérifiez de même pour les espaces. | ||
+ | <br> | ||
+ | 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. | ||
+ | <br> | ||
+ | La fonction cpp_() 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. | ||
+ | <br> | ||
+ | Le caractère de fin de fichier décodé avant le(les) caractère(s) de fin de commentaire doit être remplacé par un caractère de fin de ligne. | ||
+ | <br> | ||
+ | <br> | ||
+ | Le caractère de fin de fichier <b>(EOF) ne doit jamais apparaître dans le texte du fichier cible</b>. | ||
+ | <br> | ||
+ | <i>Ceci provoquait un bug dans la version Alpha de l'application fenêtrée mkdcppw; à l'étape du test d'intégration.</i> | ||
+ | </p> | ||
+ | <p> | ||
+ | %! introduction d'une balise d'extraction ligne % compatible en 1ère colonne | ||
+ | <br> | ||
+ | introduction d'une balise d'exttraction ligne !! dans la ligne (inline) | ||
+ | </p> | ||
+ | <h2>Exemples de tags:</h2> | ||
+ | <header>header</header><br> | ||
+ | <abbr>abréviation</abbr><br> | ||
+ | <acronym>acronyme</acronym><br> | ||
+ | <cite>citation</cite><br> | ||
+ | <code>code</code><br> | ||
+ | <dfn>Définition de terme</dfn><br> | ||
+ | <del>supprimé</del><br> | ||
+ | <ins>inséré</ins><br> | ||
+ | <kbd>clavier</kbd><br> | ||
+ | <samp>échantillon</samp><br> | ||
+ | <var>variable</var><br> | ||
+ | <!-- commentaire --><br> | ||
+ | <footer>footer</footer><br> | ||
+ | </BODY> | ||
+ | </HTML> | ||
+ | </pre> | ||
+ | {{Boîte déroulante/fin}} | ||
[[Catégorie:Générateurs de documentation]] | [[Catégorie:Générateurs de documentation]] |
Version actuelle en date du 11 mai 2013 à 13:40
Retour aux fichiers en développement →
Sommaire[masquer] |
Fichiers de la fonction tri()
Remarks: (1991) Cette fonction de mkdoc permet le tri des commentaires en fonction des para- mètres CD1 CD2 CD3 CD4 CD5 compiles. avec l'option l (copie de ligne): CD1 et CD2 sont des caractères début de commentaires a placer en début de ligne comme en FORTRAN: c ou C ou * . CD3 est un caractère début de commentaire que l'on peut placer en tout point d'une ligne comme ; en assembleur, # en shell ou % en PostScript. Cette fonction permet des tris différents de SHELL_.C vu qu'elle ignore si # est dans une chaîne ou si elle est précédée du char \ . avec l'option p (copie de page ): CD4 est le caractère de début du commentaire et CD5 est la fin du commentaire comme en PASCAL : CD4={ et CD5=} . CD4=CD5=" peut a la rigueur permettre d'extraire des chaînes de caractères afin d’éditer un dictionnaire syntaxique toutefois " étant a la fois début et fin de caractère le résultat n'est pas assuré.
Fichier de commande des tests
- La fonction tri() a été éprouvée avec les options de compilation suivantes
1 - Commande : mkd \? | grep '-l' > ligne.txt
Fichier ligne.txt, compilation avec CD1= '%', CD2= '<', CD3= '!' :
- Ligne: -l et -p: ligne; (compil.: % ou < en première colonne ou ! dans la ligne)
2 - Commande : mkd \? | grep page > block.txt
Fichier block.txt, compilation avec CD4= '\"', CD5= '\"' :
- page: (compil.: commence avec " et se termine avec ")