Projet mkd/mkdcpp.c
De Wiki EELL.
(Différences entre les versions)
JPL (discuter | contributions) m |
JPL (discuter | contributions) m |
||
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> | ||
+ | __TOC__ | ||
+ | == version.h == | ||
+ | <pre> | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | |||
+ | == cpp.h == | ||
+ | <pre> | ||
+ | |||
+ | // cpp.cpp: | ||
+ | extern int cpp_ (FILE *pfdoc, FILE *pnfile); | ||
+ | //% | ||
+ | //% DROIT DE COPIE: | ||
+ | //% © EELL, Editeurs Européens de Logiciels Libres, 20074 | ||
+ | //% 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 oeuvre 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. | ||
+ | //% | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | |||
+ | |||
+ | == mkdcpp.c == | ||
<pre> | <pre> | ||
/*P | /*P |
Version du 19 décembre 2010 à 17:14
![]() | Cette page n'est pas finie. Veuillez considérer le plan et le contenu comme incomplets et en préparation, temporaires et sujets à caution. Si vous souhaitez participer, il vous est recommandé de consulter sa page de discussion au préalable. |
Retour aux fichiers en développement →
Sommaire |
version.h
cpp.h
// cpp.cpp: extern int cpp_ (FILE *pfdoc, FILE *pnfile); //% //% DROIT DE COPIE: //% © EELL, Editeurs Européens de Logiciels Libres, 20074 //% 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 oeuvre 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. //%
mkdcpp.c
/*P © EELL, Editeurs Européens de Logiciels Libres, 20074 Association à but non lucratif selon l'Article 11 de la convention européenne des droits de l'homme. NOM DU FICHIER: mkdcpp.cpp Fichier source d'entrée du programme de test unitaire de la fonction cpp_ La compilation donne un programme exécutable en version console réduite au module C++ qui entre dans le projet global mkd. Cet exécutable peut être utilisé dans une fenêtre console; 'cmd.exe' sous WINDOWS; 'console' sous UNIX/LINUX; ou à l'aide d'un fichier SHELL ou d'un MAKEFILE. mkdcpp.cpp est compilable PROJET: mkd Générer la documentation préécrite dans les fichiers de sources multiples. Génie logiciel : Le programmeur écrit la documentation en même temps que le code source, la fiabilité de la programmation et la mise à jour des modifications s'en trouve améliorée. PROJET INITIAL: mkdoc 1989 pour MS-DOS et UNIX, devenu obsolète. Université Montpellier II DOSSIER: extractdoc 04/12/2009 PROGRAMMEUR: JP LOUYOT 11/02/2010 pour la mise à jour sous MS Visual C10 beta 2 DATE: 10 janvier 2010 MODIFICATIONS: Le: ../../.... par ... objet de la modification .... Le: ../../.... par ... objet de la modification .... */ /*D mkdcpp.cpp : Définit le point d'entrée du programme (mkdcpp.exe) ----------------------------------------------------------------------------- ACTION: Programme d'épreuve de la fonction cpp_(). lit les paramètres entrés en ligne de commande, vérifie la validité des paramètres, ouvre les fichiers source et destination puis les transmet à la fonction cpp_(). Ce programme est auto éprouvé et peut être facilement rendu autonome en ajoutant un cinquième paramètre à la ligne de commande pour entrer le nom du fichier destinataire. SYNTAXE: mkdcpp.exe [--Options(nst)] [-Codes(DHOPSTUw(5 max)] fichier_source Options : n : numéro de ligne (ajoute le numéro de ligne en 1ère colonne) s : écran (screen) (ajoute le commentaire à l'écran) t : texte seul (ne copie pas les caractères de 'Codes') v : mode bavard Codes : 5 caractères maximum Caractères usuels en programmation: 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 P: à l'attention des programmeurs S: pour le contrôle de la structure du programme T: pour les points de tests U: pour la documentation utilisateur w: pour Attention (warning) fichier_source : fichier qui contient le code en style de commentaire C++ ou php fichier destinataire : Le fichier qui sera documenté aura le même nom que le fichier source auquel on aura ajouté l'extension '.txt' PORTABILITE: x86-Win32 x64-Win64 (LINUX à vérifier) VALEUR RETOURNEE: 0 en cas de réussite -1 en cas d'erreur de syntaxe -2 en cas d'erreur d'ouverture ou de fermeture de fichier DROIT DE COPIE: précisé dans cpp.h */ #include "..\..\include\version.h" #include "cpp.h" // Variables globales unsigned char n=0,s=0,t=0,v=0; /*P*/ char codes[5] = {0,0,0,0,0}; /*P version qui copie les codes avec l'option t dans cpp_() Il peut être nécessaire de modifier les lignes ~161 dans cpp.cpp */ // char codes[5] = {' ',' ',' ',' ',' '}; /*P version qui copie les commentaires après le caractère ' ' dans cpp_()*/ int main(int argc, char *argv[]) { /*O main Test */ printf("Epreuve (Test, debug) de cpp.cpp\n"); // char *fprj= ""; /*P nom fichier projet s'il existe */ char fdoc[MAX]; /*P nom fichier documentaire en sortie */ // char fdoc[] = "C++_doc.txt"; /*P nom fichier documentaire en sortie */ char fsrc[MAX]; /*P nom fichier source a documenter */ // char fsrc[] = ".\\C++_FILE.a"; /*P nom fichier source a documenter */ extern char codes[]; /*P codes */ extern unsigned char A,B,C,F,P,S,a,f,j,l,n,p,s,t,v,w; /*P rappels options booleennes */ /*O init options par defaut */ {n=0,s=0;t=0;v=0;} /*O option v = 0 (verbose) de compilation; v n'est pas utilisé dans cpp_() */ // O=0; /* Option=0 */ int i=0; /*P compteurs */ int k=0; char isource=0; /*P position nom du fichier source dans path source */ char itarget=0; /*P position fin du path_target avec '*' ou ':'(PC) */ char ktar=0; /*P position du '.' dans p_target */ static char O; /*P booleen =1 si option validee */ static char L; /*P booleen =1 si option langage */ register int c=0; /*P char (variable) */ int c1=0; /*P char (variable) pour version PC */ // FILE *pfprj; /*P FICHIER PROJET */ FILE *pnfile; /*P FICHIER SOURCE A TRIER */ FILE *pfdoc; /*P FICHIER A DOCUMENTER */ printf("argv[0] = %s\n",argv[0]); /*T*/ if (argc > 1) printf("argv[1] = %s\n",argv[1]); /*T*/ if (argc > 2) printf("argv[2] = %s\n",argv[2]); /*T*/ if (argc > 3) printf("argv[3] = %s\n",argv[3]); /*T*/ /*O Si la syntaxe n'est pas correcte (argc <2) "mkdcpp [--nst] [-Code(DHOPSTUw)] Source_cpp" */ if (argc < 2) /*O Alors Préciser la syntaxe et quitter sur erreur de syntaxe -1*/ { /*S syntaxe intégrée */ //#ifdef FR printf("Syntaxe : %s [--Options(nst)] [-5 Codes(DHOPSTUw)] source_cpp\n",argv[0]); printf("Appuyer sur la touche 'Entree' pour quitter.\n\n"); //#endif //#ifdef EN printf("Syntax: %s [--Options(nst)] [-5 Codes(DHOPSTUw)] cpp_source\n",argv[0]); printf("Press 'Enter' to quit.\n"); //#endif getc(stdin); // attente touche 'Entrée' */ exit(-1); } /*S syntaxe intégrée */ /*O si argc = 2 (source cpp en premier paramètre) */ if (argc == 2) { /*S argc = 2 */ if (strcpy_s(fsrc,argv[1])!=0) { printf("Err SRC : %d chars max\n",MAX); exit(-1); } else { /*S*/ strcpy_s(fdoc,argv[1]); /*O strcpy_s : évite l'erreur overflow */ strcat_s(fdoc,".txt"); printf("SRC = %s\n",fsrc); /*T*/ printf("DST = %s\n",fdoc); /*T*/ printf("argc=2 - Options n=%d,s=%d,t=%d,v=%d Codes %c,%c,%c,%c,%c\n",n,s,t,v,codes[0],codes[1],codes[2],codes[3],codes[4]); /*T*/ } /*S*/ } /*S argc = 2 */ /*O si argc = 3 (option ou code) */ if (argc == 3) { /*S argc = 3 */ if (argv[1][0]=='-' && argv[1][1]=='-') /*O Options ! */ { /*S Options */ int i; // printf("argv[1][0]=%c - argv[1][1]=%c\n",argv[1][0],argv[1][1]); /*T*/ for (i=0 ; i<4 && (argv[1][(i+2)]!=0) ; i++) { /*S*/ if (argv[1][(i+2)]=='n') n=1; /*O n,s,t sont des variables globales */ else if (argv[1][(i+2)]=='s') s=1; /*O*/ else if (argv[1][(i+2)]=='t') t=1; /*O*/ else if (argv[1][(i+2)]=='v') v=1; /*O*/ // printf("argv[1][%d]=%c & n=%c, s=%c, t=%c\n",(i+2), argv[1][i+2],n,s,t); /*T*/ } /*S*/ } /*S Options */ else if (argv[1][0]=='-' && argv[1][1]!='-') /*O Codes ! */ { /*S Codes */ int i; for (i=0 ; i<5 && (argv[1][i+1]!=0) ; i++) codes[i]=argv[1][i+1]; /*O affectation */ } /*S Codes */ else /*O sinon erreur de syntaxe */ { /*S*/ puts("Options ? || Codes ?\n"); /*O*/ exit(-1); /*O*/ } /*S*/ /*O affectation du nom de fichier (.cpp) au nom de fichier destinataire, et ajouter .txt */ if (strcpy_s(fsrc,argv[2])!=0) { /*S*/ printf("Err SRC : %d chars max\n",MAX); exit(-1); } /*S*/ else { /*S*/ strcpy_s(fdoc,argv[2]); strcat_s(fdoc,".txt"); printf("SRC = %s\n",fsrc); /*T*/ printf("DST = %s\n",fdoc); /*T*/ printf("argc=3 - Options n=%d,s=%d,t=%d,v=%d Codes %c,%c,%c,%c,%c\n",n,s,t,v,codes[0],codes[1],codes[2],codes[3],codes[4]); /*T*/ } /*S*/ } /*S argc = 3 */ /*O si argc = 4 (options et code) */ if (argc == 4) { /*S argc = 4 */ if (argv[1][0]=='-' && argv[1][1]=='-') /*O Options */ { /*S Options */ int i; for (i=0 ; i<4 && (argv[1][i+2]!=0) ; i++) { /*S*/ if (argv[1][i+2]=='n') n=1; /*O n,s,t sont des variables globales */ else if (argv[1][i+2]=='s') s=1; else if (argv[1][i+2]=='t') t=1; else if (argv[1][(i+2)]=='v') v=1; } /*S*/ } /*S Options */ else { /*S err */ puts("Options ?\n"); exit(-1); } /*S err */ if (argv[2][0]=='-' && argv[2][1]!='-') /*O Codes */ { /*S Codes */ int i; for (i=0 ; i<5 && (argv[2][i+1]!=0) ; i++) codes[i]=argv[2][i+1]; } /*S Codes */ else /*O erreur de syntaxe */ { /*S*/ puts("Codes ?\n"); exit(-1); } /*S*/ if (strcpy_s(fsrc,argv[3])!=0) { /*S*/ printf("Err SRC : %d chars max\n",MAX); exit(-1); } /*S*/ else { /*S*/ strcpy_s(fdoc,argv[3]); strcat_s(fdoc,".txt"); printf("SRC = %s\n",fsrc); /*T*/ printf("DST = %s\n",fdoc); /*T*/ printf("argc=4 - Options n=%d,s=%d,t=%d,v=%d Codes %c,%c,%c,%c,%c\n",n,s,t,v,codes[0],codes[1],codes[2],codes[3],codes[4]); /*T*/ } /*S*/ } /*S argc = 4 */ /*O ouvrir le fichier source en lecture binaire*/ { /*S demarrage du test */ /*O si l'ouverture du fichier source n'est pas correcte */ // old syntax : if (( pnfile = fopen ( fsrc,"rb" )) == 0 ) if (fopen_s(&pnfile, fsrc,"rb") !=0 ) { /*S ! open source pnfile */ /*O ecrire fichier "nomfich" non trouvé ou erreur d'ouverture */ printf ("fichier \'%s\' : non trouvé ou erreur d'ouverture\n",fsrc); puts("Tapez sur la touche 'Entrée' pour quitter\n\n"); printf ("file \'%s\' : non found or open error\n",fsrc); puts("Press 'Enter' to quit.\n"); getchar(); exit(2); } /*S ! open source pnfile */ /*O sinon, ouvrir le fichier à documenter en écriture ou réécriture */ else { /*S open pfdoc write */ /*O si il y a une erreur à l'ouverture l'écrire et quitter en renvoyant le code d'erreur 2 */ if((fopen_s(&pfdoc,fdoc,"wb")) != 0) // old syntax : if((pfdoc = fopen(fdoc,"wb")) == NULL) { /*S si err à l'ouverture de pfdoc*/ printf("fichier \'%s\' : erreur d'ouverture en écriture\n",fdoc); puts("Tapez sur la touche 'Entrée' pour quitter\n\n"); printf("file \'%s\' : open error\n",fdoc); puts("Press 'Enter' to quit.\n"); getchar(); exit(-2); } /*S si err à l'ouverture de pfdoc*/ else { /*S sinon*/ /*O si options n ou v ou s et pas t écrire le nom du fichier lu */ if(n||v||s) { /*S si n ou v ou s valide */ if (!t) fprintf(pfdoc,"%s\n(file %s :)", NL, fsrc ); if( v || s ) printf("\n\n(file %s :)\n",fsrc); if (!t)fprintf (pfdoc," Options n=%d s=%d t=%d verbose=%d",n,s,t,v); if (!t)fprintf (pfdoc, "%s", NL ); } /*S si n ou v ou s valide */ } /*S sinon*/ } /*S open pfdoc write */ cpp_(pfdoc,pnfile); /*O fermer le fichier source et en cas d'erreur écrire "Erreur de fermeture */ if (fclose(pnfile)) { /*S si*/ printf("Erreur de fermeture : \'%s\'\n",fsrc); printf("Error on closed : \'%s\'\n",fsrc); exit(2); } /*S fin si*/ /*O Fermer tous les autres fichiers */ { /* fermer */ int numclosed = _fcloseall( ); printf( "Nombre de fichiers fermés par _fcloseall : %u\n", numclosed ); printf( "Number of files closed by _fcloseall: %u\n", numclosed ); } /* fermer */ } /*S demarrage du test */ puts("Tapez sur la touche 'Entrée' pour quitter\n"); puts("Press 'Enter' to quit.\n"); getchar(); return 0; } /*O main Test */