Projet mkd/mkdcpp.c
De Wiki EELL.
(Différences entre les versions)
JPL (discuter | contributions) m (Page créée avec « {{Modèle:Pas fini/autre}} <small>Retour aux fichiers en développement →</small> [[Catégorie:Générateurs de documentation]… ») |
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> | ||
| + | |||
| + | <pre> | ||
| + | /*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 */ | ||
| + | </pre> | ||
[[Catégorie:Générateurs de documentation]] | [[Catégorie:Générateurs de documentation]] | ||
Version du 19 décembre 2010 à 17:08
| | 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 →
/*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 */

