Projet mkd/mkdcpp.c

De Wiki EELL.

(Différences entre les versions)
m (!! version.h)
m (Mise à jour de mkdcpp.c)
Ligne 258 : Ligne 258 :
  DATE: 10 janvier 2010  
  DATE: 10 janvier 2010  
  MODIFICATIONS:
  MODIFICATIONS:
 +
  Le: 09/01/2011 par JPL objet de la modification compilation avec MSDEV41 pour
 +
Windows XP
   Le: ../../.... par ... objet de la modification ....
   Le: ../../.... par ... objet de la modification ....
   Le: ../../.... par ... objet de la modification ....
   Le: ../../.... par ... objet de la modification ....
*/
*/
-
/*D
+
/*E
-
mkdcpp.cpp : Définit le point d'entrée du programme (mkdcpp.exe)
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-----------------------------------------------------------------------------
+
<html xmlns="http://www.w3.org/1999/xhtml">
-
ACTION:
+
<head>
-
Programme d'épreuve de la fonction cpp_(). lit les paramètres entrés en
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-
ligne de commande, vérifie la validité des paramètres, ouvre les fichiers
+
<title>mkdcpp.exe</title>
-
source et destination puis les transmet à la fonction cpp_().
+
</head>
-
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:
+
<body>
-
mkdcpp.exe [--Options(nst)] [-Codes(DHOPSTUw(5 max)] fichier_source
+
<h2>mkdcpp.exe </h2>
-
Options :
+
<p>Test program for cpp module and cpp_( ) <br />
-
n : numéro de ligne (ajoute le numéro de ligne en 1ère colonne)
+
mkdcpp.c : Is the entry point for mkdcpp.exe test program</p>
-
s : écran (screen) (ajoute le commentaire à l'écran)
+
<p><a href="#ACTION" target="_self">Action</a><br />
-
t : texte seul (ne copie pas les caractères de 'Codes')
+
  <a href="#SYNTAXE">Syntax</a><br />
-
v : mode bavard
+
  <a href="#PORTABILITE">Portability</a><br />
-
 
+
    <a href="#RETOUR">Return value</a> <br />
-
Codes : 5 caractères maximum
+
    <a href="#DROIT">Copy Right<br />
-
Caractères usuels en programmation:
+
  </a><br />
-
D: pour la documentation générale sur les fonctions (listing)
+
  -----------------------------------------------------------------------------<br />
-
H: pour générer le fichier d'entête .h
+
  <a name="ACTION" id="ACTION"></a>ACTION:<br />
-
O: pour l'organigramme
+
  cpp_( ) test program. Reads the input parameters on the command line,<br />
-
P: à l'attention des programmeurs
+
  verify the validity of the parameters, open the source and destination files,<br />
-
S: pour le contrôle de la structure du programme
+
  and transmit  parameters to cpp_( ) function.
-
T: pour les points de tests
+
  <br />
-
U: pour la documentation utilisateur
+
This  program is autotest an can easily be made independant by adding a fifth<br />
-
w: pour Attention (warning)
+
parameter at command line for enter the destination filename</p>
-
 
+
<p> <a name="SYNTAXE" id="SYNTAXE"></a>SYNTAX:<br />
-
fichier_source :  
+
mkdcpp.exe [--Options(nst)] [-Codes(DHOPSTUw(5 max)] source_file</p>
-
fichier qui contient le code en style de commentaire C++ ou php
+
<p> Options :<br />
-
 
+
  n : adds the line number in first colomn<br />
-
fichier destinataire :
+
  s : adds comment at the screen<br />
-
Le fichier qui sera documenté aura le même nom que le fichier source  
+
  t : text only.<br />
-
auquel on aura ajouté l'extension '.txt'
+
  v: verbose mode</p>
-
 
+
<p> Codes : 5 caracters maximum<br />
-
PORTABILITE:
+
  Usual caracters in common programming:<br />
-
x86-Win32 x64-Win64  (LINUX à vérifier)
+
  <strong>D: to generate Documentation file ( functions listing)<br />
 +
  H: to generate the header file *.h</strong><br />
 +
  O: to generate the organizational file,  <i>or adds lines in file</i><br />
 +
  P: to generate attentions  for the programmers in file, <i>or adds in file</i><br />
 +
  S: to generate  structures file for  control, <i>or adds in file</i><br />
 +
  T: to generate tests points file, <i>or adds in file</i><br />
 +
  <strong>U, or lang : to generate  users documentation (F </strong>for Fr<strong>, E </strong>for En<strong> etc.) </strong><br />
 +
  w: to generate warnings on file, <i>or adds in fle</i></p>
 +
<p> source_file : <br />
 +
  Source file that contains the code in the cpp style C, C++, or php</p>
 +
<p> destination file :<br />
 +
The file will be documents will have the same name as the source file which<br />
 +
we add the extension &quot;.txt&quot;</p>
 +
<p> <a name="PORTABILITE" id="PORTABILITE"></a>PORTABILITY:<br />
 +
  x86-Win32 x64-Win64  (LINUX &agrave; v&eacute;rifier)</p>
 +
<p> <a name="RETOUR" id="RETOUR"></a>RETURN VALUE:<br />
 +
  0 en cas de r&eacute;ussite<br />
 +
  -1 on syntax error<br />
 +
  -2 on open or close file error </p>
 +
<p> <a name="DROIT" id="DROIT"></a>COPY RIGHT:<br />
 +
&copy; EELL, Editeurs Europ&eacute;ens de Logiciels Libres, 20074<br />
 +
Association &agrave; but non lucratif selon l'Article 11 de la convention <br />
 +
europ&eacute;enne des droits de l'homme.<br />
 +
  <br />
 +
  Conc&eacute;d&eacute;e sous licence EUPL, version 1.1 ou &ndash; d&egrave;s leur approbation par la <br />
 +
  Commission europ&eacute;enne - versions ult&eacute;rieures de l&rsquo;EUPL (la &laquo;Licence&raquo;).<br />
 +
  Vous ne pouvez utiliser la pr&eacute;sente oeuvre que conform&eacute;ment &agrave; la Licence.<br />
 +
  Vous pouvez obtenir une copie de la Licence &agrave; l&rsquo;adresse suivante:<br />
 +
  <br />
 +
  <a href="http://ec.europa.eu/idabc/en/document/7774.html">Licence EUPL  FR (pdf)</a><br />
 +
  <a href="En : http://ec.europa.eu/idabc/servlets/Docbb6d.pdf?id=31979">Licence EUPL EN (pdf)</a><br />
 +
  <a href="http://ec.europa.eu/idabc/en/document/7774.html">Licence EUPL 1.1 in other lang.</a><br />
 +
  <br />
 +
  Sauf obligation l&eacute;gale ou contractuelle &eacute;crite, le logiciel distribu&eacute; <br />
 +
  sous la Licence est distribu&eacute; &laquo;en l&rsquo;&eacute;tat&raquo;,<br />
 +
  SANS GARANTIES OU CONDITIONS QUELLES QU&rsquo;ELLES SOIENT, <br />
 +
  expresses ou implicites.<br />
 +
  Consultez la Licence pour les autorisations et les restrictions <br />
 +
  linguistiques sp&eacute;cifiques relevant de la Licence.<br />
 +
  <br />
 +
</p>
 +
<p></p>
 +
</body>
 +
</html>
 +
*/
-
VALEUR RETOURNEE:
+
/*F
-
0 en cas de réussite
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-1 en cas d'erreur de syntaxe
+
<html xmlns="http://www.w3.org/1999/xhtml">
-
-2 en cas d'erreur d'ouverture ou de fermeture de fichier
+
<head>
 +
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 +
<title>mkdcpp.exe</title>
 +
</head>
-
DROIT DE COPIE: précisé dans cpp.h
+
<body>
 +
<h2>mkdcpp.exe </h2>
 +
<p>Programme de test unitaire du module cpp,  fonction cpp_( ) <br />
 +
mkdcpp.c : Est le point d'entr&eacute;e du programme de test (mkdcpp.exe)</p>
 +
<p><a href="#ACTION" target="_self">Action</a><br />
 +
  <a href="#SYNTAXE">Syntaxe</a><br />
 +
  <a href="#PORTABILITE">Portabilit&eacute;</a><br />
 +
    <a href="#RETOUR">Valeur retourn&eacute;e</a> <br />
 +
    <a href="#DROIT">Droit de copie<br />
 +
  </a><br />
 +
  -----------------------------------------------------------------------------<br />
 +
  <a name="ACTION" id="ACTION"></a>ACTION:<br />
 +
  Programme d'&eacute;preuve de la fonction cpp_( ). lit les param&egrave;tres entr&eacute;s en<br />
 +
  ligne de commande, v&eacute;rifie la validit&eacute; des param&egrave;tres, ouvre les fichiers<br />
 +
  source et destination puis les transmet &agrave; la fonction cpp_( ).<br />
 +
  Ce programme est auto &eacute;prouv&eacute; et peut &ecirc;tre facilement rendu autonome en<br />
 +
  ajoutant un cinqui&egrave;me param&egrave;tre &agrave; la ligne de commande pour entrer le nom<br />
 +
  du fichier destinataire.</p>
 +
<p> <a name="SYNTAXE" id="SYNTAXE"></a>SYNTAXE:<br />
 +
  mkdcpp.exe [--Options(nst)] [-Codes(DHOPSTUw(5 max)] fichier_source</p>
 +
<p> Options :<br />
 +
  n : num&eacute;ro de ligne (ajoute le num&eacute;ro de ligne en 1&egrave;re colonne)<br />
 +
  s : &eacute;cran (screen) (ajoute le commentaire &agrave; l'&eacute;cran)<br />
 +
  t : texte seul (ne copie pas les caract&egrave;res de 'Codes')<br />
 +
  v : mode bavard</p>
 +
<p> Codes : 5 caract&egrave;res maximum<br />
 +
  Caract&egrave;res usuels en programmation:<br />
 +
  D: pour la documentation g&eacute;n&eacute;rale sur les fonctions (listing)<br />
 +
  H: pour g&eacute;n&eacute;rer le fichier d'ent&ecirc;te .h<br />
 +
  O: pour l'organigramme<br />
 +
  P: &agrave; l'attention des programmeurs<br />
 +
  S: pour le contr&ocirc;le de la structure du programme<br />
 +
  T: pour les points de tests<br />
 +
  U: pour la documentation utilisateur<br />
 +
  w: pour Attention (warning)</p>
 +
<p> fichier_source : <br />
 +
  fichier qui contient le code en style de commentaire C++ ou php</p>
 +
<p> fichier destinataire :<br />
 +
  Le fichier qui sera document&eacute; aura le m&ecirc;me nom que le fichier source <br />
 +
  auquel on aura ajout&eacute; l'extension '.txt'</p>
 +
<p> <a name="PORTABILITE" id="PORTABILITE"></a>PORTABILITE:<br />
 +
  x86-Win32 x64-Win64  (LINUX &agrave; v&eacute;rifier)</p>
 +
<p> <a name="RETOUR" id="RETOUR"></a>VALEUR RETOURNEE:<br />
 +
  0 en cas de r&eacute;ussite<br />
 +
  -1 en cas d'erreur de syntaxe<br />
 +
  -2 en cas d'erreur d'ouverture ou de fermeture de fichier</p>
 +
<p> <a name="DROIT" id="DROIT"></a>DROIT DE COPIE:<br />
 +
&copy; EELL, Editeurs Europ&eacute;ens de Logiciels Libres, 20074<br />
 +
Association &agrave; but non lucratif selon l'Article 11 de la convention <br />
 +
europ&eacute;enne des droits de l'homme.<br />
 +
  <br />
 +
  Conc&eacute;d&eacute;e sous licence EUPL, version 1.1 ou &ndash; d&egrave;s leur approbation par la <br />
 +
  Commission europ&eacute;enne - versions ult&eacute;rieures de l&rsquo;EUPL (la &laquo;Licence&raquo;).<br />
 +
  Vous ne pouvez utiliser la pr&eacute;sente oeuvre que conform&eacute;ment &agrave; la Licence.<br />
 +
  Vous pouvez obtenir une copie de la Licence &agrave; l&rsquo;adresse suivante:<br />
 +
  <br />
 +
  http://ec.europa.eu/idabc/eupl5<br />
 +
  <br />
 +
    Sauf obligation l&eacute;gale ou contractuelle &eacute;crite, le logiciel distribu&eacute; <br />
 +
    sous la Licence est distribu&eacute; &laquo;en l&rsquo;&eacute;tat&raquo;,<br />
 +
    SANS GARANTIES OU CONDITIONS QUELLES QU&rsquo;ELLES SOIENT, expresses ou <br />
 +
  implicites.<br />
 +
  Consultez la Licence pour les autorisations et les restrictions <br />
 +
  linguistiques sp&eacute;cifiques relevant de la Licence.<br />
 +
  <br />
 +
</p>
 +
<p></p>
 +
</body>
 +
</html>
*/
*/
-
#include "..\..\include\version.h"
+
//#include "..\..\include\version.h"
 +
#include "version.h"
#include "cpp.h"
#include "cpp.h"
// Variables globales
// Variables globales
-
unsigned char n=0,s=0,t=0,v=0; /*P*/
+
unsigned char n=0,s=0,t=0,v=0; /*P déclaration et initialisation des variables */
char codes[5] = {0,0,0,0,0}; /*P version qui copie les codes avec l'option t dans cpp_()
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 */
+
Il peut être nécessaire de modifier les lignes ~161 dans cpp.c */
// char codes[5] = {' ',' ',' ',' ',' '}; /*P version qui copie les commentaires après le caractère ' ' dans cpp_()*/
// char codes[5] = {' ',' ',' ',' ',' '}; /*P version qui copie les commentaires après le caractère ' ' dans cpp_()*/
int main(int argc, char *argv[])
int main(int argc, char *argv[])
{ /*O main Test */
{ /*O main Test */
-
printf("Epreuve (Test, debug) de cpp.cpp\n");
 
// char *fprj= ""; /*P nom fichier projet s'il existe */
// char *fprj= ""; /*P nom fichier projet s'il existe */
char fdoc[MAX]; /*P nom fichier documentaire en sortie */
char fdoc[MAX]; /*P nom fichier documentaire en sortie */
Ligne 334 : Ligne 448 :
/*O init options par defaut */
/*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_() */
+
//?? {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 */
// O=0; /* Option=0 */
Ligne 351 : Ligne 465 :
FILE *pfdoc;  /*P FICHIER A DOCUMENTER */
FILE *pfdoc;  /*P FICHIER A DOCUMENTER */
 +
printf("Epreuve de cpp.c ; mkdcpp version 01/2011 compilation avec MSDEV41 pour x86-32 (Windows XP a Windows 7\n");
 +
printf("Debug cpp.c ; mkdcpp version 01/2011 compiled with MSDEV41 for x86-32 (Windows xp to Windows 7\n");
printf("argv[0] = %s\n",argv[0]); /*T*/
printf("argv[0] = %s\n",argv[0]); /*T*/
if (argc > 1) printf("argv[1] = %s\n",argv[1]); /*T*/
if (argc > 1) printf("argv[1] = %s\n",argv[1]); /*T*/
Ligne 374 : Ligne 490 :
if (argc == 2)
if (argc == 2)
{ /*S argc = 2 */
{ /*S argc = 2 */
-
if (strcpy_s(fsrc,argv[1])!=0)
+
#ifdef VC10
 +
if (strcpy_s(fsrc,argv[1])!=0) /*w strcpy_s : évite l'erreur overflow */
 +
#endif
 +
#ifdef MSDEV41
 +
if (strcpy(fsrc,argv[1])==NULL)
 +
#endif
{
{
printf("Err SRC : %d chars max\n",MAX);
printf("Err SRC : %d chars max\n",MAX);
Ligne 381 : Ligne 502 :
else
else
{ /*S*/
{ /*S*/
-
strcpy_s(fdoc,argv[1]); /*O strcpy_s : évite l'erreur overflow */
+
#ifdef VC10
 +
strcpy_s(fdoc,argv[1]); /*w strcpy_s : évite l'erreur overflow */
strcat_s(fdoc,".txt");
strcat_s(fdoc,".txt");
 +
#endif
 +
#ifdef MSDEV41
 +
strcpy(fdoc,argv[1]);
 +
strcat(fdoc,".txt");
 +
#endif
printf("SRC = %s\n",fsrc); /*T*/
printf("SRC = %s\n",fsrc); /*T*/
printf("DST = %s\n",fdoc); /*T*/
printf("DST = %s\n",fdoc); /*T*/
Ligne 416 : Ligne 543 :
} /*S*/
} /*S*/
/*O affectation du nom de fichier (.cpp) au nom de fichier destinataire, et ajouter .txt */
/*O affectation du nom de fichier (.cpp) au nom de fichier destinataire, et ajouter .txt */
 +
#ifdef VC10
if (strcpy_s(fsrc,argv[2])!=0)
if (strcpy_s(fsrc,argv[2])!=0)
 +
#endif
 +
#ifdef MSDEV41
 +
if (strcpy(fsrc,argv[2])==NULL)
 +
#endif
{ /*S*/
{ /*S*/
printf("Err SRC : %d chars max\n",MAX);
printf("Err SRC : %d chars max\n",MAX);
Ligne 423 : Ligne 555 :
else
else
{ /*S*/
{ /*S*/
 +
#ifdef VC10
strcpy_s(fdoc,argv[2]);
strcpy_s(fdoc,argv[2]);
strcat_s(fdoc,".txt");
strcat_s(fdoc,".txt");
 +
#endif
 +
#ifdef MSDEV41
 +
strcpy(fdoc,argv[2]);
 +
strcat(fdoc,".txt");
 +
#endif
printf("SRC = %s\n",fsrc); /*T*/
printf("SRC = %s\n",fsrc); /*T*/
printf("DST = %s\n",fdoc); /*T*/
printf("DST = %s\n",fdoc); /*T*/
Ligne 460 : Ligne 598 :
exit(-1);
exit(-1);
} /*S*/
} /*S*/
 +
#ifdef VC10
if (strcpy_s(fsrc,argv[3])!=0)
if (strcpy_s(fsrc,argv[3])!=0)
 +
#endif
 +
#ifdef MSDEV41
 +
if (strcpy(fsrc,argv[3])==NULL)
 +
#endif
{ /*S*/
{ /*S*/
printf("Err SRC : %d chars max\n",MAX);
printf("Err SRC : %d chars max\n",MAX);
Ligne 467 : Ligne 610 :
else
else
{ /*S*/
{ /*S*/
 +
#ifdef VC10
strcpy_s(fdoc,argv[3]);
strcpy_s(fdoc,argv[3]);
strcat_s(fdoc,".txt");
strcat_s(fdoc,".txt");
 +
#endif
 +
#ifdef MSVC41
 +
strcpy(fdoc,argv[3]);
 +
strcat(fdoc,".txt");
 +
#endif
printf("SRC = %s\n",fsrc); /*T*/
printf("SRC = %s\n",fsrc); /*T*/
printf("DST = %s\n",fdoc); /*T*/
printf("DST = %s\n",fdoc); /*T*/
Ligne 478 : Ligne 627 :
{ /*S demarrage du test */
{ /*S demarrage du test */
/*O si l'ouverture du fichier source n'est pas correcte */
/*O si l'ouverture du fichier source n'est pas correcte */
-
// old syntax : if  (( pnfile = fopen ( fsrc,"rb" )) == 0 )
+
#ifdef VC10
if (fopen_s(&pnfile, fsrc,"rb") !=0 )
if (fopen_s(&pnfile, fsrc,"rb") !=0 )
 +
#endif
 +
#ifdef MSDEV41
 +
if  (( pnfile = fopen ( fsrc,"rb" )) == 0 ) // old syntax
 +
#endif
{ /*S ! open source pnfile */
{ /*S ! open source pnfile */
Ligne 494 : Ligne 647 :
{ /*S open pfdoc write */
{ /*S open pfdoc write */
/*O si il y a une erreur à l'ouverture l'écrire et quitter en renvoyant le code d'erreur 2 */
/*O si il y a une erreur à l'ouverture l'écrire et quitter en renvoyant le code d'erreur 2 */
 +
#ifdef VC10
if((fopen_s(&pfdoc,fdoc,"wb")) != 0)
if((fopen_s(&pfdoc,fdoc,"wb")) != 0)
-
// old syntax : if((pfdoc = fopen(fdoc,"wb")) == NULL)
+
#endif
 +
#ifdef MSDEV41
 +
if((pfdoc = fopen(fdoc,"wb")) == NULL) // old syntax
 +
#endif
{ /*S si err à l'ouverture de pfdoc*/
{ /*S si err à l'ouverture de pfdoc*/
printf("fichier \'%s\' : erreur d'ouverture en écriture\n",fdoc);
printf("fichier \'%s\' : erreur d'ouverture en écriture\n",fdoc);
Ligne 538 : Ligne 695 :
return 0;
return 0;
} /*O main Test */
} /*O main Test */
 +
</pre>
</pre>
[[Catégorie:Générateurs de documentation]]
[[Catégorie:Générateurs de documentation]]

Version du 9 janvier 2011 à 17:29

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

/*
* © mkd, version 2009.12 et ultérieures
*
* 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.
*/

/*P
	NOM DU FICHIER: version.h
	PROJET INITIAL: mkd console linux & MSDOS
	DOSSIER INITIAL : mkdoc3.12 Centre d'Electronique de Montpellier
	PROGRAMMEUR: JPL 
	DATE: 18/12/2009
	MODIFICATIONS:
	le: 09/01/2011 par JPL objet: Ajouté l'option de compilation pour MSDEV41
	le: ../../.. par .............. objet de la modification ....
	le: ../../.. par .............. objet de la modification ....
*/
/*E ?C?*/
/**# MKD.C ############################*/ /*H*/
/*U            UTILISATEURS            */ /*H*/
/*O            ORGANIGRAMME            */ /*H*/
/*S              STRUCTURE             */ /*H*/
/*T                TESTS               */ /*H*/
/*P             PROGRAMMEUR            */ /*H*/
/*www     remarques particulieres      */ /*H*/
/**####################################*/ /*H*/

//#define UNIX /*O UNIX version */ /* Delete this line for PC version */

#ifndef UNIX            /*H*/
#define PC              /*O version de compilation PC   */  /*H*/
/*#define PC_ONLY*/     /*H find_ ne reconnait pas: .s .f .p .sh .csh  */
#define NL "\r\n"       /*H*/
//#define VC10			/*O Microsoft Visual C 10.- */
#define MSDEV41
#endif                  /*H*/
                        /*H*/
#ifdef UNIX             /*H*/
#define UNIX_ONLY       /*H find_ ne reconnait pas: .BAS .PAS .FOR ... */
#define NL "\n"         /*H*/
#endif                  /*H*/
                        /*H*/

/*H #D *************************************************************************************/
/*H *** #Define OPTIONS DE COMPILATION:  options par defaut, redefinissables: **************
          (#D pour l'extraction des options de compilation en ligne avec l'option CD3='#') */
/*H****************** #Define 'l' (ligne) commence par #define en 1ère colonne : ***********/
#define CD1 '%'   /*H #Define Option CD1 en 1ere colonne  prend fin avec NL                */
#define CD2 '-'   /*H #Define Option CD2 en 1ere colonne  prend fin avec NL                */
#define CD3 '#'   /*H #Define Option CD3 dans la ligne    prend fin avec NL                */
                  /*H #Define Option '%' commentaire postcript                             */
                  /*H #Define Option '#' commentaire shell ou pour Makefile voir option S
                      #D            ( le commentaire se termine avec new_line )            */
                  /*H #Define Option '\'' commentaires Basic                               */
                  /*H #Define Option ';'  commentaires assembleur                          */
/*H ***************** #Define Option 'p' (dans la page) #define en 1ère colonne : **********/
#define CD4 '\"'  /*H #Define Option CD4 = "  debut de commentaire                         */
#define CD5 '\"'  /*H #Define Option CD5 = "  fin de commentaire                           */
                  /*H #Define **************************************************************/
#define FULL_LINE /*H #Define Option de compil. copier toute la ligne                      */
/*H #D *************************************************************************************/


/*U*** MKD ********************************************************************
*M name: mkd  (make documentation)
*U (programme extracteur de documents, Manuel, Organigramme, Structure,
*U warnings, points de Test, notes pour la maintenance du Programmeur, etc... )
*M origine: Centre d'Electronique de Montpellier
*M          Univ. Sciences & Techniques du Languedoc
*M          34060 MONTPELLIER CEDEX
*P programmeur R3.12: JPLouyot, adr electronique: louyot@obelix.cnusc.fr
*P programme R3.12 pour systeme UNIX mkdoc, et version PC IBM mkd.exe
*U
*U Ce programme range dans un fichier.doc par defaut, ou dans tout fichier
*U  nomme en dernier parametre:
*U avec les options l et p:( CD1,CD2,CD3,CD4,CD5, sont definis dans version.h )
*U -- la ligne COMMENCANT par les caracteres CD1 ou CD2 ou CD3 et suivis par
*U    un des 5 caracteres donnes en parametre char_codes (avec option l).
*U -- la ligne CONTENANT le caractere defini par CD3 suivi par un des 5
*U    caracteres donnes en parametre char_codes (avec option l).
*U -- les lignes CONTENANT et SUIVANT le caractere defini par CD4 et suivi par
*U    un des 5 caracteres donnes en parametre char_codes (avec option p)
*U    JUSQU'A la ligne qui contient le caractere CD5. Attention, si le carac-
*U    tere CD5 est NL la ligne suivante sera ignoree.
*U
*U avec les options: A, B, C, F, P, et S:
*U    le tri est effectue conformement a la definition des commentaires de
*U    chaque langage, A:Assenbleur, B:Basic, c:C, F:Fortran, P:Pascal, S:Shell
*U
*U avec char_code = '**' tous les commentaires correspondants aux langages ou
*U    aux options l et p selectionnes sont copies.
*U
*U syntaxe de la ligne de commande:
*U syntaxe pour pc IBM:
*U   mkd [-ABCFPSajlnpstvw] char_codes [drive:]path_source [[drive:]path_target]
*M syntax for UNIX version:
*M   mkdoc [-ABCFPSajlnpstvw] char_codes path_source [path_target]
*M
*M   -- path_source : path source file (or project file: option j )
*M   -- char_codes  : all ASCII
*M   -- options     : -A Assembler source file or similar   (  ;  ->  NL   )
*M                    -B Basic source file or similar       (REM or ' -> NL)
*M                    -C C source file, or similar (PROLOG) ( / *  ->  * / )
*M                    -F Fortran source file or similar     (c,C or * -> NL)
*M                    -P Pascal source file                 ( {to}, (*to*) )
*M                    -S Shell files or similar             (   # -> NL  ' )
*M                    -a append target file
*M                    -f find langage source file (useful with project file)
*M                    -j if path_source is a project file only
*M                    -l line read line only
*M                    -n insert line number
*M                    -p page read text
*M                    -s screen view
*M                    -t comment only
*M                    -v verbose mode
*M                    -w overwrite target file
*M                     ( default option: overwrite switch off)
*M   -- path_target : path target file
*M
*M examples for UNIX version:
*M ++++++++++++++++++++++++++
*M mkdoc -Csn '*S' mkdoc3.c verif.struct
*M mkdoc -Fst UM version.h /usr/local/docu/mkdoc.docu
*M mkdoc -Cst M version.h /usr/local/man/manl/mkdoc.l
*M mkdoc -lt '*UM' mkdoc3.c \*.manual   with CD1='*' or CD2='*'
*M mkdoc -jv '**' mkd_docu.prj  (for all comments, sources in prj file)
*M mkdoc -pjnv '**' mkd_docu.prj (for all strings, sources in prj file,
*M                              with CD4=CD5='\"')
*U exemples pour version PC:
*U +++++++++++++++++++++++++
*U mkd -Csn *SOn \mkdoc3.c verif.str (char space:' ' is not available)
*U mkd -Fst UM a:version.h c:\man\mkd.doc
*U mkd -Fst M a:version.h d:mkd.man
*U mkd -lt *UM mkdoc.c *.MAN (for users and manual, with CD1='*', CD2='*')
*U mkd -jv ** file.prj        (for all comments, sources in project file)
*U or mkd -pjnv '**' mkd_docu.prj  (for all strings, sources in .prj file,
*U                                with CD4=CD5='"')
*U
*U Pour l'ASSEMBLEUR utiliser ; avec l'option A
*U                           (ou l'option l avec CD3=';')
*U Pour le BASIC (ou BATCH) utiliser ' ou REM avec l'option B
*U                           (ou option l avec CD3='\'')
*U Pour le C et PROLOG utiliser / *  et  * / avec l'option C
*U Pour le FORTRAN utiliser C, c, ou * en 1ere colonne avec l'option F
*U                           ( ou option l avec CD1='c' CD2='C' CD3='*' )
*U Pour le PASCAL utiliser les accolades { et } ou (* et *)
*U                           ( ou option p avec CD4='{' et CD5='}' )
*U Pour le CSHELL utiliser # avec l'option S
*U                         ( ou option l avec CD3='#' cas fin de ligne = NL )
*U Pour les fichiers projet avec des sources UNIX: .s .c .i .f .r .p melanges,
*U      ou .ASM .C .FOR .PAS etc... sources PC, utiliser l'option f (find).
*U Pour les commentaires de fichiers POSCRIPT compiler avec CD3='%'
******************************************************************************/
							/*H*/
#define VERSION "10.03"		/*H*/
							/*H*/
#define MAX     85			/*H longueur des buffers des path source et doc */
#define STX     0x2			/*H Start Text */
#include <stdio.h>			/*H*/
							/*H*/
#ifdef PC					/*H*/
#include <conio.h>			/*H*/
#include <process.h>		/*H*/
#include <io.h>				/*H*/
#endif						/*H*/
#ifdef VC10					/*H Microsoft Visual C 10.- */
	#define putch _putch	/*H ISO C++ */
	#define getch _getch	/*H ISO C++ */
	#define access _access	/*H ISO C++ */
#endif						/*H*/
							/*H*/
#ifdef MSDEV41				/*H*/
	#include <string.h>		/*H*/
#endif						/*H*/
							/*H*/
#ifdef UNIX					/*H*/
	/*#define getch() getchar()*/
	#define putch putchar	/*H*/
#include <signal.h>			/*H*/
#include <sys/file.h>		/*H*/
#endif						/*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: 
 	JPL 11/02/2010 pour la mise à jour sous MS Visual C10 beta 2 
 DATE: 10 janvier 2010 
 MODIFICATIONS:
  Le: 09/01/2011 par JPL objet de la modification compilation avec MSDEV41 pour
	Windows XP
  Le: ../../.... par ... objet de la modification ....
  Le: ../../.... par ... objet de la modification ....
*/

/*E
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>mkdcpp.exe</title>
</head>

<body>
<h2>mkdcpp.exe </h2>

<p>Test program for cpp module and cpp_( ) <br />
mkdcpp.c : Is the entry point for mkdcpp.exe test program</p>
<p><a href="#ACTION" target="_self">Action</a><br />
  <a href="#SYNTAXE">Syntax</a><br />
  <a href="#PORTABILITE">Portability</a><br />
    <a href="#RETOUR">Return value</a> <br />
    <a href="#DROIT">Copy Right<br />
  </a><br />
  -----------------------------------------------------------------------------<br />
  <a name="ACTION" id="ACTION"></a>ACTION:<br />
  cpp_( ) test program. Reads the input parameters on the command line,<br />
  verify the validity of the parameters, open the source and destination files,<br />
  and transmit  parameters to cpp_( ) function.
  <br />
This  program is autotest an can easily be made independant by adding a fifth<br /> 
parameter at command line for enter the destination filename</p>
<p> <a name="SYNTAXE" id="SYNTAXE"></a>SYNTAX:<br />
mkdcpp.exe [--Options(nst)] [-Codes(DHOPSTUw(5 max)] source_file</p>
<p> Options :<br />
  n : adds the line number in first colomn<br />
  s : adds comment at the screen<br />
  t : text only.<br />
  v: verbose mode</p>
<p> Codes : 5 caracters maximum<br />
  Usual caracters in common programming:<br />
  <strong>D: to generate Documentation file ( functions listing)<br />
  H: to generate the header file *.h</strong><br />
  O: to generate the organizational file,  <i>or adds lines in file</i><br />
  P: to generate attentions  for the programmers in file, <i>or adds in file</i><br />
  S: to generate  structures file for  control, <i>or adds in file</i><br />
  T: to generate tests points file, <i>or adds in file</i><br />
  <strong>U, or lang : to generate  users documentation (F </strong>for Fr<strong>, E </strong>for En<strong> etc.) </strong><br />
  w: to generate warnings on file, <i>or adds in fle</i></p>
<p> source_file : <br />
  Source file that contains the code in the cpp style  C, C++, or php</p>
<p> destination file :<br />
The file will be documents will have the same name as the source file which<br /> 
we add the extension  ".txt"</p>
<p> <a name="PORTABILITE" id="PORTABILITE"></a>PORTABILITY:<br />
  x86-Win32	x64-Win64   (LINUX à vérifier)</p>
<p> <a name="RETOUR" id="RETOUR"></a>RETURN VALUE:<br />
  0 en cas de réussite<br />
  -1 on syntax error<br />
  -2 on open or close file error </p>
<p> <a name="DROIT" id="DROIT"></a>COPY RIGHT:<br />
© EELL, Editeurs Européens de Logiciels Libres, 20074<br />
Association à but non lucratif selon l'Article 11 de la convention <br />
européenne des droits de l'homme.<br />
  <br />
  Concédée sous licence EUPL, version 1.1 ou – dès leur approbation par la <br />
  Commission européenne - versions ultérieures de l’EUPL (la «Licence»).<br />
  Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.<br />
  Vous pouvez obtenir une copie de la Licence à l’adresse suivante:<br />
  <br />
  <a href="http://ec.europa.eu/idabc/en/document/7774.html">Licence EUPL  FR (pdf)</a><br />
  <a href="En : http://ec.europa.eu/idabc/servlets/Docbb6d.pdf?id=31979">Licence EUPL EN (pdf)</a><br />
  <a href="http://ec.europa.eu/idabc/en/document/7774.html">Licence EUPL 1.1 in other lang.</a><br />
  <br />
  Sauf obligation légale ou contractuelle écrite, le logiciel distribué <br />
  sous la Licence est distribué «en l’état»,<br />
  SANS GARANTIES OU CONDITIONS QUELLES QU’ELLES SOIENT, <br />
  expresses ou implicites.<br />
  Consultez la Licence pour les autorisations et les restrictions <br />
  linguistiques spécifiques relevant de la Licence.<br />
  <br />
</p>
<p></p>
</body>
</html>
*/

/*F
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>mkdcpp.exe</title>
</head>

<body>
<h2>mkdcpp.exe </h2>

<p>Programme de test unitaire du module cpp,  fonction cpp_( ) <br />
mkdcpp.c : Est le point d'entrée du programme de test (mkdcpp.exe)</p>
<p><a href="#ACTION" target="_self">Action</a><br />
  <a href="#SYNTAXE">Syntaxe</a><br />
  <a href="#PORTABILITE">Portabilité</a><br />
    <a href="#RETOUR">Valeur retournée</a> <br />
    <a href="#DROIT">Droit de copie<br />
  </a><br />
  -----------------------------------------------------------------------------<br />
  <a name="ACTION" id="ACTION"></a>ACTION:<br />
  Programme d'épreuve de la fonction cpp_( ). lit les paramètres entrés en<br />
  ligne de commande, vérifie la validité des paramètres, ouvre les fichiers<br />
  source et destination puis les transmet à la fonction cpp_( ).<br />
  Ce programme est auto éprouvé et peut être facilement rendu autonome en<br />
  ajoutant un cinquième paramètre à la ligne de commande pour entrer le nom<br />
  du fichier destinataire.</p>
<p> <a name="SYNTAXE" id="SYNTAXE"></a>SYNTAXE:<br />
  mkdcpp.exe [--Options(nst)] [-Codes(DHOPSTUw(5 max)] fichier_source</p>
<p> Options :<br />
  n : numéro de ligne (ajoute le numéro de ligne en 1ère colonne)<br />
  s : écran (screen) (ajoute le commentaire à l'écran)<br />
  t : texte seul (ne copie pas les caractères de 'Codes')<br />
  v : mode bavard</p>
<p> Codes : 5 caractères maximum<br />
  Caractères usuels en programmation:<br />
  D: pour la documentation générale sur les fonctions (listing)<br />
  H: pour générer le fichier d'entête .h<br />
  O: pour l'organigramme<br />
  P: à l'attention des programmeurs<br />
  S: pour le contrôle de la structure du programme<br />
  T: pour les points de tests<br />
  U: pour la documentation utilisateur<br />
  w: pour Attention (warning)</p>
<p> fichier_source : <br />
  fichier qui contient le code en style de commentaire C++ ou php</p>
<p> fichier destinataire :<br />
  Le fichier qui sera documenté aura le même nom que le fichier source <br />
  auquel on aura ajouté l'extension '.txt'</p>
<p> <a name="PORTABILITE" id="PORTABILITE"></a>PORTABILITE:<br />
  x86-Win32	x64-Win64   (LINUX à vérifier)</p>
<p> <a name="RETOUR" id="RETOUR"></a>VALEUR RETOURNEE:<br />
  0 en cas de réussite<br />
  -1 en cas d'erreur de syntaxe<br />
  -2 en cas d'erreur d'ouverture ou de fermeture de fichier</p>
<p> <a name="DROIT" id="DROIT"></a>DROIT DE COPIE:<br />
© EELL, Editeurs Européens de Logiciels Libres, 20074<br />
Association à but non lucratif selon l'Article 11 de la convention <br />
européenne des droits de l'homme.<br />
  <br />
  Concédée sous licence EUPL, version 1.1 ou – dès leur approbation par la <br />
  Commission européenne - versions ultérieures de l’EUPL (la «Licence»).<br />
  Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.<br />
  Vous pouvez obtenir une copie de la Licence à l’adresse suivante:<br />
  <br />
  	http://ec.europa.eu/idabc/eupl5<br />
  <br />
    Sauf obligation légale ou contractuelle écrite, le logiciel distribué <br />
    sous la Licence est distribué «en l’état»,<br />
    SANS GARANTIES OU CONDITIONS QUELLES QU’ELLES SOIENT, expresses ou <br />
  	implicites.<br />
  	Consultez la Licence pour les autorisations et les restrictions <br />
  	linguistiques spécifiques relevant de la Licence.<br />
  <br />
</p>
<p></p>
</body>
</html>
*/

//#include "..\..\include\version.h"
#include "version.h"
#include "cpp.h"

// Variables globales
	unsigned char n=0,s=0,t=0,v=0;				/*P déclaration et initialisation des variables */
	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.c */
	// 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 */
//	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("Epreuve de cpp.c ; mkdcpp version 01/2011 compilation avec MSDEV41 pour x86-32 (Windows XP a Windows 7\n");
	printf("Debug cpp.c ; mkdcpp version 01/2011 compiled with MSDEV41 for x86-32 (Windows xp to Windows 7\n");
	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 */
#ifdef VC10		
		if (strcpy_s(fsrc,argv[1])!=0)	/*w strcpy_s : évite l'erreur overflow */
#endif
#ifdef MSDEV41
		if (strcpy(fsrc,argv[1])==NULL)
#endif
		{
			printf("Err SRC : %d chars max\n",MAX);
			exit(-1);
		}
		else
		{ /*S*/
#ifdef VC10
			strcpy_s(fdoc,argv[1]); /*w strcpy_s : évite l'erreur overflow */
			strcat_s(fdoc,".txt");
#endif
#ifdef MSDEV41
			strcpy(fdoc,argv[1]); 
			strcat(fdoc,".txt");
#endif
			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 */
#ifdef VC10
		if (strcpy_s(fsrc,argv[2])!=0)
#endif
#ifdef MSDEV41
		if (strcpy(fsrc,argv[2])==NULL)
#endif
		{ /*S*/
			printf("Err SRC : %d chars max\n",MAX);
			exit(-1);
		} /*S*/
		else
		{ /*S*/
#ifdef VC10
			strcpy_s(fdoc,argv[2]);
			strcat_s(fdoc,".txt");
#endif
#ifdef MSDEV41
			strcpy(fdoc,argv[2]); 
			strcat(fdoc,".txt");
#endif
			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*/
#ifdef VC10
		if (strcpy_s(fsrc,argv[3])!=0)
#endif
#ifdef MSDEV41
		if (strcpy(fsrc,argv[3])==NULL)
#endif
		{ /*S*/
			printf("Err SRC : %d chars max\n",MAX);
			exit(-1);
		} /*S*/
		else
		{ /*S*/
#ifdef VC10
			strcpy_s(fdoc,argv[3]);
			strcat_s(fdoc,".txt");
#endif
#ifdef MSVC41
			strcpy(fdoc,argv[3]);
			strcat(fdoc,".txt");
#endif
			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 */
#ifdef VC10 		
		if (fopen_s(&pnfile, fsrc,"rb") !=0 )
#endif
#ifdef MSDEV41
		if  (( pnfile = fopen ( fsrc,"rb" )) == 0 )	 // old syntax 
#endif
		{ /*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 */
#ifdef VC10
			if((fopen_s(&pfdoc,fdoc,"wb")) != 0)
#endif
#ifdef MSDEV41
			if((pfdoc = fopen(fdoc,"wb")) == NULL)  // old syntax
#endif
			{ /*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 */

Outils personnels