Projet mkd/shell.c
De Wiki EELL.
(Différences entre les versions)
JPL (discuter | contributions) m |
JPL (discuter | contributions) m (Mise à jour) |
||
Ligne 1 : | Ligne 1 : | ||
<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 shell_() == | |
- | + | ||
- | + | Ce programme copie les commentaires des lignes contenant le caractère # suivi par un des caractères 'Codes' entrés en paramètre. Si le caractère '#' est précédé de \ ou si il est intégré dans une chaîne, alors il n'est pas considéré comme début de commentaire. | |
- | + | ||
- | + | {{Boîte déroulante/début|titre=shell.c, shell.cc, shell.inc.cc}} | |
- | + | <pre style="color:red"> | |
- | + | /*P | |
- | + | FILE NAME: shell.c for konsole shell.cc for individual compilation in | |
- | + | c++ or shell.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 | ||
+ | Date: 03/01/1991 by JPL mkdoc 3.11 for PC and UNIX | ||
+ | Date: ../../1991 by JPL mkdoc 3.12 for PC and UNIX | ||
+ | Date: 09/05/2013 by Clara for mkd 13.05 alpha | ||
*/ | */ | ||
+ | // Date: ../../.... by ... purpose of the modification .... | ||
+ | |||
+ | /*T | ||
+ | FILE NAME: shell.c for konsole shell.cc for individual compilation in | ||
+ | c++ or shell.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 shell_ | ||
+ | ----------------------------------------------------------------------------- | ||
+ | FILE NAME: shell.c for konsole shell.cc for individual compilation in | ||
+ | c++ or shell.inc.cc to include file in sources files with gtkmm | ||
+ | |||
+ | FUNTION NAME: | ||
+ | shell_ | ||
+ | |||
+ | SYNOPSIS, SYNTAX: | ||
+ | #include "/usr/include/mkd/version.h" // IMPORTANT: Compilation directives | ||
+ | #include "/usr/include/mkd/shell.h" // or mkd.h | ||
+ | int shell_(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 shell_ 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 défined 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: | ||
+ | Ce programme copie les commentaires des lignes contenant le caractère # | ||
+ | suivi par un des caractères 'Codes' entrés en paramètre. Si le caractère | ||
+ | '#' est précédé de \ ou si il est intégré dans une chaîne, alors il n'est | ||
+ | pas considéré comme début de commentaire. | ||
+ | |||
+ | |||
+ | 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 May 2013 | ||
+ | |||
+ | BUGS: | ||
+ | See bugs reports http://edeulo.free.fr/phpBB3 | ||
+ | |||
+ | SEE ALSO MANUAL: | ||
+ | Man(3) attached in English. | ||
+ | Command line : man 3 shell_ | ||
+ | |||
+ | */ | ||
+ | |||
+ | /*H | ||
+ | // File: shell.c (Comments for UTF-8 text editor) | ||
+ | void shell_ (FILE * pfdoc, FILE * pnfile); | ||
+ | */ | ||
+ | </pre> | ||
+ | <pre style="color:blue"> | ||
+ | #include "version.h" | ||
+ | #include "shell.h" | ||
+ | |||
+ | void shell_ (FILE * pfdoc, FILE * pnfile) | ||
+ | //O FILE * pfdoc: pointer of the target stream opened by the calling function | ||
+ | //O FILE * pnfile: pointer of the source stream opened by the calling function | ||
- | |||
- | |||
{ /*S shell */ | { /*S shell */ | ||
- | + | extern unsigned char n,s,t; | |
- | + | extern char codes[]; | |
- | + | unsigned int i,tab; | |
- | + | unsigned int num; | |
- | + | long ll,nl,lc; | |
- | + | register int c1; | |
- | + | int c2; | |
num = 0; | num = 0; | ||
Ligne 32 : | Ligne 191 : | ||
while ( c1 != EOF && c2 != EOF ) | while ( c1 != EOF && c2 != EOF ) | ||
{ /*S tq !EOF */ | { /*S tq !EOF */ | ||
- | /*O si | + | /*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 | + | /*O sinon prendre pour c1 le char suivant */ |
else c1=getc(pnfile); | else c1=getc(pnfile); | ||
- | /*O si le char est NL | + | if (c1==EOF) break; |
+ | /*O si le char est NL repérer la position qui suit 'NL' dans nl */ | ||
if(c1=='\n') | if(c1=='\n') | ||
{ /*S*/ | { /*S*/ | ||
Ligne 45 : | Ligne 205 : | ||
else | else | ||
{ /*S !NL */ | { /*S !NL */ | ||
- | /*O si le char est '\t' | + | |
+ | /*O si le char est '\t' incrémenter tab */ | ||
if (c1=='\t')tab++; | if (c1=='\t')tab++; | ||
+ | |||
/*O sinon si le char est '\"' */ | /*O sinon si le char est '\"' */ | ||
else if (c1=='\"') | else if (c1=='\"') | ||
/*O alors aller jusqu'au prochain '\"' */ | /*O alors aller jusqu'au prochain '\"' */ | ||
{ /*S string */ | { /*S string */ | ||
- | /*O tant que le | + | /*O tant que le caractère suivant n'est pas " */ |
while ((c1=getc(pnfile))!='\"') | while ((c1=getc(pnfile))!='\"') | ||
{ /*S*/ | { /*S*/ | ||
- | /*O si le char est EOF | + | /*O si le char est EOF quitter la boucle */ |
- | if (c1==EOF) | + | if (c1==EOF)break; |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
} /*S*/ | } /*S*/ | ||
} /*S string */ | } /*S string */ | ||
Ligne 70 : | Ligne 228 : | ||
/*O alors simuler un espace */ | /*O alors simuler un espace */ | ||
c1=' '; | c1=' '; | ||
- | /*O sinon revenir en | + | /*O sinon revenir en arrière */ |
else | else | ||
{ /*S*/ | { /*S*/ | ||
- | + | ungetc(c1,pnfile); | |
- | + | c1='\\'; | |
} /*S*/ | } /*S*/ | ||
} /*S*/ | } /*S*/ | ||
Ligne 83 : | Ligne 241 : | ||
/*O si codes[0]=0 (all chars) ou si suivi par c2 (char code utilisateur) */ | /*O si codes[0]=0 (all chars) ou si suivi par c2 (char code utilisateur) */ | ||
c2=getc(pnfile); | c2=getc(pnfile); | ||
- | if ( | + | if ( codes[0] == 0 || |
c2 == codes[0] || | c2 == codes[0] || | ||
c2 == codes[1] || | c2 == codes[1] || | ||
Ligne 92 : | Ligne 250 : | ||
/*O alors: */ | /*O alors: */ | ||
{ /*S comment*/ | { /*S comment*/ | ||
- | /*O | + | /*O repérer la position commentaire */ |
- | ungetc(c2,pnfile); | + | //w ungetc(c2,pnfile); |
ll=ftell(pnfile); | ll=ftell(pnfile); | ||
- | /*O si option n | + | /*O si option n insérer le numéro de ligne */ |
if(n) | if(n) | ||
{ /*S*/ | { /*S*/ | ||
Ligne 101 : | Ligne 259 : | ||
if(s) printf( "%5d ", num ); | if(s) printf( "%5d ", num ); | ||
} /*S*/ | } /*S*/ | ||
+ | /*O se positionner en dédut de ligne */ | ||
+ | fseek(pnfile,nl,0); | ||
+ | /*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */ | ||
+ | |||
/*O si pas option t */ | /*O si pas option t */ | ||
if(!t) | if(!t) | ||
{ /*S*/ | { /*S*/ | ||
- | |||
- | |||
- | |||
/*O copier toute la ligne tq pas LF, dans le fichier doc */ | /*O copier toute la ligne tq pas LF, dans le fichier doc */ | ||
- | while ( (c1=getc(pnfile)) != '\n') | + | while ( (c1=getc(pnfile)) != '\n' && c1 !=EOF) |
{ /*S*/ | { /*S*/ | ||
- | + | putc(c1,pfdoc); | |
- | + | if(s)putch(c1); | |
} /*S*/ | } /*S*/ | ||
+ | if (c1==EOF) break; | ||
} /*S*/ | } /*S*/ | ||
+ | |||
/*O sinon: */ | /*O sinon: */ | ||
- | + | if(t) /*P option t */ | |
- | { /*S*/ | + | { /*S t */ |
- | /*O copier | + | /*O copier le début de ligne avec des tabulations et des espaces */ |
- | for( | + | for(lc=nl;lc<ll;lc++) |
- | { /*S*/ | + | { /*S first */ |
- | + | c1=getc(pnfile); | |
- | + | if (c1==EOF) break; | |
- | + | //if(t) | |
- | + | { /*S t */ | |
- | + | if (c1=='\t') | |
- | + | { | |
- | + | putc('\t',pfdoc); // tab to target | |
- | + | putch('\t'); // tab to stdout | |
- | + | } | |
- | + | else | |
- | /*O | + | { |
- | while ( (c1=getc(pnfile)) != '\n' ) | + | putc(' ',pfdoc); // blank to target |
+ | putch(' '); // blank to stdout | ||
+ | } | ||
+ | } /*S t */ | ||
+ | } /*S first */ | ||
+ | /*O copier la suite du commentaire jusqu'à la nouvelle ligne */ | ||
+ | while ( (c1=getc(pnfile)) != '\n' && c1!=EOF ) | ||
{ /*S*/ | { /*S*/ | ||
/*O copier le commentaire ( y compris '\r' sous DOS ) */ | /*O copier le commentaire ( y compris '\r' sous DOS ) */ | ||
- | putc(c1,pfdoc); | + | { |
- | + | putc(c1,pfdoc); | |
+ | if(s)putch(c1); | ||
+ | } | ||
} /*S*/ | } /*S*/ | ||
+ | if(c1==EOF) break; | ||
} /*S*/ | } /*S*/ | ||
- | putc( c1, pfdoc); if(s) putch( c1 ); / | + | putc( c1, pfdoc); // c1=NL |
- | ungetc(c1,pnfile); | + | if(s) putch( c1 ); // copier NL */ |
+ | ungetc(c1,pnfile); // revenir sur NL | ||
} /*S comment */ | } /*S comment */ | ||
/*O sinon: */ | /*O sinon: */ | ||
else | else | ||
{ | { | ||
- | + | ungetc(c2,pnfile); | |
} | } | ||
} /*S char = # */ | } /*S char = # */ | ||
Ligne 151 : | Ligne 322 : | ||
} /*S tq !EOF */ | } /*S tq !EOF */ | ||
</pre> | </pre> | ||
+ | {{Boîte déroulante/fin}} | ||
+ | |||
+ | == Fichier de commande des tests == | ||
+ | MAKE_Tests_U, CLEAN_Tests_U | ||
+ | |||
+ | Analyse des tests Konsole | ||
+ | Analysis 2013-05-09 | ||
+ | |||
+ | Fichier source des tests | ||
+ | |||
[[Catégorie:Générateurs de documentation]] | [[Catégorie:Générateurs de documentation]] |
Version du 9 mai 2013 à 07:24
Retour aux fichiers en développement →
Fichiers de la fonction shell_()
Ce programme copie les commentaires des lignes contenant le caractère # suivi par un des caractères 'Codes' entrés en paramètre. Si le caractère '#' est précédé de \ ou si il est intégré dans une chaîne, alors il n'est pas considéré comme début de commentaire.
Fichier de commande des tests
MAKE_Tests_U, CLEAN_Tests_U
Analyse des tests Konsole Analysis 2013-05-09
Fichier source des tests