Utilisateur:Goelette Cardabela/mkdcpp/Version imprimable
JPL mkdcpp Programme de tests du module cpp.c |
Version originale de mkdcpp : Mkd_(Extracteur_de_documents)/Ajouter_des_modules[1]
version.h entête pour MSDEV.41 ou VC.10
modifierCette version d'entête contient la documentation nécessaire aux tests du logiciel.
version.h entête pour MSDEV.41 ou VC.10 afficher/masquer
/*
* © 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?*/ // Codes d'extraction de la doc.
/**# 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 *************************************************************************************/
/*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*/
Rustine (patch) Version.h pour minGW
modifierRustine (patch) Version.h pour minGW afficher/masquer
/*
* © 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 œ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.
*/
/*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: 10/01/2012 par JPL objet: Ajouté la définition std_C pour compilation UNIX STD
le: 25/03/2012 par Clara objet: internationalisation
le: 27/03/2012 par jpl objet: internationalisation en utf-8
le: 10/04/2013 par Cardabela: Modification mineure. Alignement des commentaires.
le: 11/05/2013 par jpl mise à jour des définitions CD* pour tri.c
le: 28/05/2013 par jpl pour MS Visual C++ 2010 Express
le: 16/01.2020 par GC, + commentaire de validation de MSDEV4 pour d'autres langages, ligne 102.
*/
// le: ../../.. par .............. objet de la modification ....
/**# MKD.C ############################*/ /*H*/
/*U UTILISATEURS */ /*H*/
/*O ORGANIGRAMME */ /*H*/
/*S STRUCTURE */ /*H*/
/*T TESTS */ /*H*/
/*P PROGRAMMEUR */ /*H*/
/*www remarques particulieres */ /*H*/
/**####################################*/ /*H*/
// define VERSION line 173
//#define UNIX /*O UNIX version */ /* Delete this line for PC version */
//#define GTKMM /*O Version fenêtrée avec gtkmm pour mkdcppw uniquement */
//#define GETTEXT //O Used only with gettext
#ifndef UNIX /*H*/
#define PC /*O version de compilation PC */ /*H*/
//#define PC_ONLY /*H find_ ne reconnaît pas: .s .f .p .sh .csh */
#define NL "\r\n" /*H*/
//#define VC10 /*O Microsoft Visual C 10.- */
#define MSDEV41 /*O Microsoft 2004 */
#define MinGW /*O Mingw environment for Windows */
#endif /*H*/
//H
#ifdef UNIX /*H*/
//#define UNIX_ONLY /*H find_ ne reconnaît pas: .BAS .PAS .FOR ... */
#endif /*H*/
//H
/*H #D *************************************************************************************/
/*H *** #Define OPTIONS DE COMPILATION: options par défaut, redéfinissables: **************
(#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 1ère colonne prend fin avec NL */
#define CD2 '<' /*H #Define Option CD2 en 1ère colonne prend fin avec NL */
#define CD3 '!' /*H #Define Option CD3 dans la ligne prend fin avec NL */
/*H #Define Option '!' commentaire Fortran 90 et ultérieurs */
/*H #Define Option '%' commentaire postcript */
/*H #Define Option '#' commentaire shell ou pour Makefile voir option S
( 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 *************************************************************************************/
//H
#define VERSION "130530" /*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*/ // inconnu dans MinGW
#include <process.h> /*H*/
#include <io.h> /*H*/
#endif /*H*/
#ifdef VC10 /*H Microsoft Visual C 10.- */
#define putch putchar // _putch /*H ISO C++ */
#define getch getchar // _getch /*H ISO C++ */
#define access _access /*H ISO C++ */
#endif /*H*/
//H
#ifdef MSDEV41 /*H Valider aussi pour minGW et linux. */
//#define STD_C /*H SVr4, 4.3BSD, C89, C99.*/
#include <string.h> /*H*/
#endif /*H*/
//H
#ifdef MinGW //H
#define exit return //H
#define bool int //H
//#define STD_C /*H SVr4, 4.3BSD, C89, C99.*/
#define getch() getchar() //H defined in mkd.c
#define putch putchar /*H*/
#include <strings.h> //H
#endif //H
//H
#ifdef UNIX /*H*/
#define NL "\n" /*H*/
#define exit return //H
#define bool int //H
//#define STD_C /*H SVr4, 4.3BSD, C89, C99.*/
//#define getch() getchar() //H defined in mkd.c
#define putch putchar /*H*/
#define _fcloseall closeall /*H int fcloseall(void);*/
#include <signal.h> /*H*/
#include <sys/file.h> /*H*/
#include <string.h> /*H*/
#endif /*H*/
cpp.h
modifierEntête de la fonction cpp().
cpp.h afficher/masquer
//%
//% 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.
//%
// cpp.cpp:
extern int cpp_ (FILE *pfdoc, FILE *pnfile);
cpp.c
modifierCode C, d'extraction de la documentation des fichiers en langage C ou c++.
cpp.c afficher/masquer
/*
* © 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.
*/
/*O
NOM DU FICHIER : cpp.cpp
PROJET : mkd http://edeulo.free.fr/wiki/index.php/Portail:mkd
PROJET INITIAL: mkdoc 1989 pour MS-DOS et UNIX, devenu obsolète.
DOSSIER : http://edeulo.free.fr/wiki/index.php/Projet_mkd
PROGRAMMEUR: http://edeulo.free.fr/wiki/index.php/Utilisateut:JPL
DATE: 10 janvier 2010
MODIFICATIONS:
Le: 11/02/2010 pour la mise à jour sous MS Visual C10 beta 2 par JPL
Le: 08/01/2011 par JPL pour essai de compilation avec MSDEV 41
remplacement de bool par char, Compilation correcte sans autre modif
Le: ../../.. par
Le: ../../.. par
*/
/*P
-----------------------------------------------------------------------------
© EELL, contact: http://edeulo.free.fr/wiki/index.php/Utilisateur:eudelo
© 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.
*/
/*D
fonction cpp_
-----------------------------------------------------------------------------
ACTION:
La fonction cpp_ lit le fichier source (pnfile) qui est transmis en
paramètre et décode les lignes de commentaires précodés dans le style C++
puis les transcrit dans le fichier de destination (pfdoc) lorsque le code
correspond à un des codes externes à la fonction;
Les variables globales sont les codes et les options.
Les codes, tabeau de 5 caractères:
extern char codes[];
ils doivent être définis dans le programme d'appel:
char codes[5] = {0,0,0,0,0};
Les options, n,s,t,v.
extern unsigned char n,s,t,v;
elles doivent définies dans le programme d'appel:
unsigned char n=0,s=0,t=0,v=0;
Avec les options :
n: La transcription est précédée du numéro de ligne. Ceci permet
d'atteindre facilement la ligne commentée.
t: Avec l'option t seul le texte commenté est recopié.
Sans l'option t le commentaire est entièrement recopié.
Cette option t permet donc de générer des documents directement
exploitables ou publiables.
s: ajoute le commentaire à l'écran.
v: mode bavard
Remarque :
Si la dédection d'un commentaire à transcrire commence par le caractère '/'
suivi de '*' il sera transcrit jusqu'à rencontrer le caractère '*' suivi
de '/', quel que soit le commentaire ligne inclus dans ce commentaire.
Si la détection d'un commentaire commence par deux caractères '/', le
commentaire sera copié jusqu'au prochain retour à la ligne (NL) ou fin de
fichier (EOF).
Ces dispositions facilitent la génération automatique des fichiers
d'entête fichier.h ou .hpp etc.
SYNTAXE:
#include "version.h"
#include "cpp.h"
int cpp(FILE *pfdoc, FILE *pnfile);
PORTABILITE:
Microsoft Visual studio sous Windows : x86(Win32) x64(Win32 et WIN64)
gcc sous Linux.
DESCRIPTION:
cpp_ fonction
FILE* pfdoc: pointeur sur le fichier de destination ouvert par le
programme appelant.
FILE* pnfile: pointeur sur le fichier source ouvert par le programme
appelant
VALEUR RETOURNEE:
Retourne 0
DROIT DE COPIE: (précisé dans cpp.h) :
*/
//%
//% DROIT DE COPIE:
//% © EELL contact: http://edeulo.free.fr/
//% © 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.
//%
/*H
// cpp.cpp:
extern int cpp_ (FILE *pfdoc, FILE *pnfile);
*/
#include "version.h"
#include "cpp.h"
int cpp_ (FILE* pfdoc, FILE* pnfile)
{ /*S cpp_ */
extern unsigned char n,s,t; //www rappels options booléennes à définir dans main() ou winmain()
extern char codes[];
unsigned int i,tab;
unsigned num = 0;
long ll,nl;
int c1 = STX; /* STX : Start Text */
int c2 = STX;
int c3 = STX;
/*O tant que l'on n'est pas en fin de fichier source */
while ( c1 != EOF && c2 != EOF && c3 != EOF )
{ /*S tq !EOF */
/*bool*/ char ligne = 0; /*www bool else : char for MSDEV */
/*O si on est en début de texte faire c1=LF */
if (c1==STX) c1='\n';
/*O sinon prendre pour c1 le char pointé */
else c1=getc(pnfile);
/*O si le char est NL, repérer la position qui suit NL, dans la variable nl */
if(c1=='\n')
{ /*S*/
nl=ftell(pnfile);
tab=0;
num++;
} /*S*/
else
{ /*S !NL */
/*O si le caractère est '\t' incrémenter la variable tab */
if (c1=='\t')tab++;
/*O sinon si le caractère est '/' */
else if(c1=='/')
/*O alors: */
{ /*S char = '/' */
c2=getc(pnfile);
c3=getc(pnfile);
/*O si il est suivi par c2 = '*' ou '/' et si l'options[0]=0 ou si il est suivi par caractère 'code utilisateur' */
if( (c2=='*'||c2=='/') && (!codes[0]||
c3 == codes[0] ||
c3 == codes[1] ||
c3 == codes[2] ||
c3 == codes[3] ||
c3 == codes[4]
)
)
/*O alors: */
{ /*S traiter le commentaire C */
/*O si c2 = '/' positionner le booléen ligne à vrai (=1) */
if(c2=='/') ligne=1;
/*O repérer la position commentaire */
//Pw Apparition de codes dans les lignes si les codes[] sont à 0
// if(!codes[0])ungetc(c3,pnfile); //Pw dépend de la déclaration de codes[]
ll=ftell(pnfile);
/*O si l'option n est validée, insérer le numéro de ligne */
if(n)
{ /*S*/
fprintf( pfdoc, "%5d ", num );
if(s) printf( "%5d ", num );
} /*S*/
/*O si l'option t n'est pas validée */
if(!t)
{ /*S!t*/
/*O se positionner en début de ligne */
fseek(pnfile,nl,0);
/*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
/*O copier la ligne jusqu'au commentaire, dans le fichier doc */
for(i=(int)(ll-nl);i>0;i--)
{ /*S*/
c1=getc(pnfile);
putc(c1,pfdoc);
if(s)putch(c1);
} /*S*/
} /*S!t*/
/*O sinon: (option t validée) */
else
{ /*St*/
/*O copier des tabulations autant qu'il y en a dans le fichier source */
for(i=0;i<tab;i++)
{ /*S*/
putc('\t',pfdoc);
if(s)putch('\t');
} /*S*/
/*O copier des blancs jusqu'à la position commentaire */
for(i=(int)(ll-nl-tab);i>0;i--)
{ /*S*/
putc(' ',pfdoc);
if(s)putch(' ');
} /*S*/
} /*St*/
/*O puis si le booléen 'ligne' est vrai (=1) */
if(ligne)
/*O alors : copier le commentaire jusqu'en fin de ligne ou End Of File (EOF) */
{ /*Sligne*/
while ( (c1=getc(pnfile)) != '\n' && c1 !=EOF)
{ /*S copier commentaire */
putc(c1,pfdoc);
if(s)putch(c1);
} /*S copier commentaire */
ungetc(c1,pnfile); /* pour la recopie fin de ligne */
} /*Sligne*/
/*O sinon : tant que l'on ne rencontre pas '*' suivi de '/', copier le commentaire */
else
{ /*Selse*/
while ( !(c1=='*' && c2=='/') )
{ /*Sw*/
if( (c1=getc(pnfile)) != '*')
{ /*S*/
/*www if(c1=='\n') fprintf(pfdoc, "%s", NL );*/ /*P CR/LF sous DOS */
/*www else */
putc(c1,pfdoc);
if(s)putch(c1);
/*O si l'option n=1 et le caractère est NL, insérer le numéro de la ligne qui suit NL */
if( n && c1=='\n' )
{ /*S*/
num++;
fprintf( pfdoc,"%5d ", num );
if(s) printf("%5d ", num );
} /*S*/
} /*S*/
else /*P (c1='*' voir c2) */
{ /*S*/
if((c2=getc(pnfile))=='/')
{ /*S*/
ungetc(c2,pnfile);
ungetc(c1,pnfile); /* pour la recopie fin de ligne */
} /*S*/
else /*P c1 = toujours '*' */
{ /*S fausse alerte */
ungetc(c2,pnfile);
putc(c1,pfdoc);
if(s)putch(c1);
} /*S fausse alerte */
} /*S*/
} /*Sw*/
} /*Selse*/
#ifdef FULL_LINE /*O Opt. compil. *** FULL_LINE *** */
/*O si l'option t n'est pas validée */
if(!t)
{ /*S*/
/*O copier les caractères jusqu'en fin de ligne (ou EOF) y compris '\r' sous DOS */
while ( (c1=getc(pnfile)) != '\n' && c1!=EOF )
{ /*S*/
putc(c1,pfdoc);
if(s)putch(c1);
} /*S*/
} /*S*/
/*O sinon (option t validée) */
else
#endif /*O Opt. compil. end *** FULL_LINE *** */
{ /*S*/
/*O aller au bout de la ligne sans copier, sauf les 'retour chariot' */
while ( (c1=getc(pnfile)) != '\n' && c1!=EOF )
{ /*Sw*/
if (c1=='\r')
{ /*S*/
putc( c1, pfdoc );
if(s) putch( c1 );
} /*S*/
} /*Sw*/
} /*S*/
/*O puis envoyer les NL sous forme \n */
/*www fprintf(pfdoc, "%s", NL );*/
/*www if(s) puts("");*/
putc(c1,pfdoc);
if(s)putch(c1);
/*O revenir sur NL */
ungetc(c1,pnfile);
} /*S traiter le commentaire C */
/*O sinon: (pas de commentaire */
else
{ /*S pas le cas */
/*O revenir en arrière de 2 caractères dans le fichier */
ungetc(c3,pnfile);
ungetc(c2,pnfile);
} /*S pas le cas */
} /*S endif char = '/' */
} /*S endif!NL */
} /*S end tq !EOF */
return 0;
} /*S cpp_ */
mkdcpp.c
modifierCode du programme principal (main).
mkdcpp.c afficher/masquer
/*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 ....
*/
<!-- manuel html anglais -->
/*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>
*/
<!-- manuel html en français -->
/*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 MSDEV41
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 */
Manuels de mkd pour mémoire anglais et français
modifier- mkd (Commande unix) inclut de module cpp.
- Préférer les versions officielles du manuel :
- https://fr.wikibooks.org/wiki/Mkd_(Extracteur_de_documents)/mkd-Manuel_(fr)
Manuels afficher/masquer
/*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='%'
******************************************************************************/
Fichiers de commandes pour les tests
modifierShell tests.bat (dos/windows)
modifierCe fichier est à copier dans le répertoire des tests, sous-répertoire des sources.
Copy tests.bat in src/tests/ or in src/Test_unitaire directory.
Directory src/ content: mkdcpp.c, cpp.c, cpp.h, version.h, (mkdcpp.exe or ./Debug/mkdcpp.exe)
Directory src/tests/ or src/Test_unitaire, content: tests.bat
- tests.bat copy all files in same directory for all tests
@TITLE TESTS.BAT
echo off
color 2E
REM **********************************************************************************
REM tests.bat R 11.01
REM mkdcpp est très simple et n'accepte pas de fichier de destination d'où l'artifice
REM avec les redirections > et >>
REM autrement: utiliser mkd.exe pour créer le fichier .h avec la syntaxe de mkd selon
REM les versions de mkd.exe
REM **********************************************************************************
echo mise a jour des fichier mkdcpp.exe, cpp.c et mkdcpp.c dans le repertoire courant.
echo efface les anciens fichiers texte
del *.txt
del *.h
del *.hpp
del *.c
del *.cpp
del *.html
del mkdcpp.exe
REM Si on est dans le répertoire de test_unitaire on copie les fichiers à éprouver
if exist ..\Debug\mkdcpp.exe (
xcopy ..\Debug\mkdcpp.exe . /D
) else (
if exist ..\mkdcpp.exe Xcopy ..\mkdcpp.exe . /D
)
if exist ..\cpp.c Xcopy ..\cpp.c . /D
if exist ..\mkdcpp.c Xcopy ..\mkdcpp.c . /D
if not exist mkdcpp.exe goto ERR1
if not exist cpp.c goto ERR2
if not exist mkdcpp.c goto ERR3
echo cree le fichier d'entete cpp.h
echo "mkdcpp --t -H cpp.c" doit créer le fichier d'entête cpp.h > cpp.h
echo ----------------------------------------------------------- >> cpp.h
mkdcpp --t -H cpp.c
type cpp.c.txt >> cpp.h
pause
echo cree l'organigramme de cpp.c et de mkdcpp.c
echo "mkdcpp --ns -O cpp.c" doit créer l'organigramme de cpp.c > cpp.org.txt
echo ------------------------------------------------------------ >> cpp.org.txt
mkdcpp --nst -O cpp.c
type cpp.c.txt >> cpp.org.txt
echo "mkdcpp --ns -O mkdcpp" doit créer l'organigramme de cpp.c > mkdcpp.org.txt
echo ------------------------------------------------------------ >> mkdcpp.org.txt
mkdcpp --nst -O mkdcpp.c
type mkdcpp.c.txt >> mkdcpp.org.txt
pause
echo cree la documentation hml en anglais
mkdcpp --t -E mkdcpp.c
type mkdcpp.c.txt > mkdccpp-en.html
pause
echo cree la documentation hml en français
mkdcpp --t -F mkdcpp.c
type mkdcpp.c.txt > mkdcpp-fr.html
pause
echo documente la structure de cpp.c et mkdcpp.c
mkdcpp --ns -S cpp.c
type cpp.c.txt > cpp.struct.txt
mkdcpp --ns -S mkdcpp.c
type mkdcpp.c.txt > mkdcpp.struct.txt
echo cree la doc programmeurs de cpp.c et mkdcpp.c
mkdcpp --stv -D cpp.c
type cpp.c.txt > cpp.docu.txt
mkdcpp --stv -D mkdcpp.c
type mkdcpp.c.txt > mkdcpp.org.txt
echo avec 3 arguments cree les docs texte de cpp.c et mkdcpp.c
echo avec 3 arguments > cpp.3doc.txt
echo ---------------- >> cpp.3doc.txt
mkdcpp --nst cpp.c
type cpp.c.txt >> cpp.3doc.txt
echo avec 3 arguments > mkdcpp.3doc.txt
echo avec 3 arguments >> mkdcpp.3doc.txt
mkdcpp --nst mkdcpp.c
type >> mkdcpp.3doc.txt
pause
echo 2 arguments cree les docs texte de cpp.c.txt et mkdcpp.c.txt
mkdcpp cpp.c
mkdcpp mkdcpp.c
echo FIN de ce test
pause
exit
:ERR1
echo mkdcpp.exe absent, not exist.
exit
:ERR2
echo cpp.c absent not, exist.
exit
:ERR3
echo mkdcpp.c absent, not exist.
exit
Shell tests.sh (unix/linux)
modifier- Ce fichier est à copier dans le répertoire des tests, sous-répertoire des sources.
# !/bin/sh
# TITLE TESTS.SH
# **********************************************************************************
# tests.sh R 200108
# mkdcpp est très simple et n'accepte pas de fichier de destination d'où l'artifice
# avec les redirections > et >>
# autre solution: utiliser mkd pour créer le fichier .h avec la syntaxe de mkd selon
# les versions de mkd
# **********************************************************************************
clear
pwd
if pwd | grep "mkdcpp/tests"; then
echo "Répertoire correct pour les tests";
elif pwd | grep "mkdcpp/ubuntu/tests"; then
echo "Répertoire correct pour les tests";
else echo "Ce n'est pas le répertoire des tests"; exit -1;
fi
echo "mise a jour des fichier mkdcpp, cpp.c et mkdcpp.c dans le repertoire courant."
echo "efface les anciens fichiers texte"
rm *.txt
rm *.h
rm *.hpp
rm *.c
rm *.cpp
rm *.html
rm mkdcpp
# Si on est dans le répertoire de test_unitaire on copie les fichiers à éprouver
cp ../mkdcpp .
cp ../*.c .
cp ../*.h .
erreur=0
if test -a mkdcpp; then
echo "mkdcpp présent";
else
echo "mkdcpp absent"; erreur=1;
fi
# echo $erreur
if test -a cpp.c; then echo "cpp.c présent"; else echo "cpp.c absent"; erreur=1; fi
if test -a mkdcpp.c; then echo "mkdcpp.c présent"; else echo "mkdcpp.c absent"; erreur=1; fi
if test $erreur -eq 1; then
echo "Fichiers absents, vérifier leur présence dans le répertoire ../.";
dir ../;
echo "quitte avec l'erreur: "$erreur;
exit $erreur;
fi
echo "make the file cpp.h" > cpp.c.header.txt
echo "./mkdcpp --t -H cpp.c create cpp.h content in cpp.c.txt" >> cpp.c.header.txt
echo "-----------------------------------------------------------" >> cpp.c.header.txt
./mkdcpp --t -H cpp.c #create the file cpp.c.txt
cat cpp.c.txt > cpp.h #copy the content in the file cpp.h
cat cpp.c.txt >> cpp.c.header.txt
echo "make organigrams of cpp.c and mkdcpp.c"
echo "./mkdcpp --ns -O cpp.c" create organigram of cpp.c > cpp.org.txt
echo "------------------------------------------------------------" >> cpp.org.txt
./mkdcpp --nst -O cpp.c
cat cpp.c.txt >> cpp.org.txt
echo "./mkdcpp --ns -O mkdcpp" create organigramme of cpp.c > mkdcpp.org.txt
echo "------------------------------------------------------------" >> mkdcpp.org.txt
./mkdcpp --nst -O mkdcpp.c
cat mkdcpp.c.txt >> mkdcpp.org.txt
echo "make html documentation in english"
./mkdcpp --t -E mkdcpp.c
cat mkdcpp.c.txt > mkdccpp-en.html
echo "make html documentation in french"
./mkdcpp --t -F mkdcpp.c
cat mkdcpp.c.txt > mkdcpp-fr.html
echo "Product the structure documentation from cpp.c and mkdcpp.c"
./mkdcpp --ns -S cpp.c
cat cpp.c.txt > cpp.struct.txt
./mkdcpp --ns -S mkdcpp.c
cat mkdcpp.c.txt > mkdcpp.struct.txt
echo "create the programmers doc from cpp.c et mkdcpp.c"
./mkdcpp --stv -D cpp.c
cat cpp.c.txt > cpp.docu.txt
./mkdcpp --stv -D mkdcpp.c
cat mkdcpp.c.txt > mkdcpp.docu.txt
echo "with 3 arguments extract the text docs from cpp.c and mkdcpp.c"
echo "avec 3 arguments" > cpp.3doc.txt
echo "----------------" >> cpp.3doc.txt
./mkdcpp --nst cpp.c
cat cpp.c.txt >> cpp.3doc.txt
echo "avec 3 arguments" > mkdcpp.3doc.txt
echo "avec 3 arguments" >> mkdcpp.3doc.txt
./mkdcpp --nst mkdcpp.c
cat >> mkdcpp.3doc.txt
echo "with 2 arguments extract the text docs from cpp.c.txt et mkdcpp.c.txt"
./mkdcpp cpp.c
./mkdcpp mkdcpp.c
echo FIN de ce test
sleep 10
echo "quitte avec l'erreur: "$erreur;
exit $erreur;
Shell tests.sh (unix/linux) pour compilation avec mingw sous linux et interface wine
modifier- Ce fichier est à copier dans le répertoire des tests, sous-répertoire des sources.
# Ce fichier est à copier dans le répertoire des tests, sous-répertoire des sources.
# !/bin/sh
# TITLE TESTS.SH
# **********************************************************************************
# tests.sh R 2021-03-09
# mkdcpp est très simple et n'accepte pas de fichier de destination d'où l'artifice
# avec les redirections > et >>
# autre solution: utiliser mkd pour créer le fichier .h avec la syntaxe de mkd selon
# les versions de mkd
# **********************************************************************************
clear
if pwd | grep "mkdcpp/tests"; then
echo "Répertoire correct pour les tests";
else echo "Ce n'est pas le répertoitre des tests"; exit -1;
fi
echo "mise a jour des fichier mkdcpp, cpp.c et mkdcpp.c dans le repertoire courant."
echo "efface les anciens fichiers texte"
rm *.txt
rm *.h
rm *.hpp
rm *.c
rm *.cpp
rm *.html
rm mkdcpp.exe
# Si on est dans le répertoire de test_unitaire on copie les fichiers à éprouver
cp ../mkdcpp.exe .
cp ../*.c .
cp ../*.h .
erreur=0
if test -a mkdcpp.exe; then
echo "mkdcpp.exe présent";
else
echo "mkdcpp.exe absent"; erreur=1;
fi
# echo $erreur
if test -a cpp.c; then echo "cpp.c présent"; else echo "cpp.c absent"; erreur=1; fi
if test -a mkdcpp.c; then echo "mkdcpp.c présent"; else echo "mkdcpp.c absent"; erreur=1; fi
if test $erreur -eq 1; then
echo "Fichiers absents, vérifier leur présence dans le répertoire ../.";
dir ../;
echo "quitte avec l'erreur: "$erreur;
exit $erreur;
fi
sleep 3 # pause de 3 secondes
clear
echo "make the file cpp.h"
sleep 3 # pause de 3 secondes
echo "make the file cpp.h" > cpp.c.header.txt
echo "wine ./mkdcpp.exe --t -H cpp.c create cpp.h content in cpp.c.txt" >> cpp.c.header.txt
echo "-----------------------------------------------------------" >> cpp.c.header.txt
wine ./mkdcpp.exe --t -H cpp.c #create the file cpp.c.txt
cat cpp.c.txt > cpp.h #copy the content in the file cpp.h
cat cpp.c.txt >> cpp.c.header.txt
cat cpp.c.header.txt
sleep 3 # pause de 3 secondes
clear
echo "make organigrams of cpp.c and mkdcpp.c"
sleep 3 # pause de 3 secondes
echo "wine ./mkdcpp.exe --ns -O cpp.c" create organigram of cpp.c > cpp.org.txt
echo "------------------------------------------------------------" >> cpp.org.txt
wine ./mkdcpp.exe --nst -O cpp.c
cat cpp.c.txt >> cpp.org.txt
sleep 3 # pause de 3 secondes
clear
echo "wine ./mkdcpp.exe --ns -O mkdcpp" create organigramme of cpp.c > mkdcpp.org.txt
echo "------------------------------------------------------------" >> mkdcpp.org.txt
wine ./mkdcpp.exe --nst -O mkdcpp.c
cat mkdcpp.c.txt >> mkdcpp.org.txt
sleep 3 # pause de 3 secondes
clear
echo "make html documentation in english"
sleep 3 # pause de 3 secondes
wine ./mkdcpp.exe --t -E mkdcpp.c
cat mkdcpp.c.txt > mkdccpp-en.html
cat mkdccpp-en.html
sleep 3 # pause de 3 seconde
clear
echo "make html documentation in french"
sleep 3 # pause de 3 secondes
wine ./mkdcpp.exe --t -F mkdcpp.c
cat mkdcpp.c.txt > mkdcpp-fr.html
cat mkdcpp-fr.html
sleep 3 # pause de 3 secondes
clear
echo "Product the structure documentation from cpp.c and mkdcpp.c"
sleep 3 # pause de 3 secondes
wine ./mkdcpp.exe --ns -S cpp.c
cat cpp.c.txt > cpp.struct.txt
sleep 3 # pause de 3 secondes
clear
wine ./mkdcpp.exe --ns -S mkdcpp.c
cat mkdcpp.c.txt > mkdcpp.struct.txt
sleep 3 # pause de 3 secondes
clear
echo "create the programmers doc from cpp.c et mkdcpp.c"
sleep 3 # pause de 3 secondes
wine ./mkdcpp.exe --stv -D cpp.c
cat cpp.c.txt > cpp.docu.txt
sleep 3 # pause de 3 secondes
clear
wine ./mkdcpp.exe --stv -D mkdcpp.c
cat mkdcpp.c.txt > mkdcpp.docu.txt
sleep 3 # pause de 3 secondes
clear
echo "with 3 arguments extract the text docs from cpp.c and mkdcpp.c"
echo "avec 3 arguments" > cpp.3doc.txt
echo "----------------" >> cpp.3doc.txt
sleep 3 # pause de 3 secondes
wine ./mkdcpp.exe --nst cpp.c
cat cpp.c.txt >> cpp.3doc.txt
clear
catcpp.3doc.txt
sleep 3 # pause de 3 secondes
clear
echo "avec 3 arguments" > mkdcpp.3doc.txt
echo "avec 3 arguments" >> mkdcpp.3doc.txt
sleep 3 # pause de 3 secondes
wine ./mkdcpp.exe --nst mkdcpp.c
cat >> mkdcpp.3doc.txt
clear
cat mkdcpp.3doc.txt
sleep 3 # pause de 3 secondes
clear
echo "avec 2 arguments extract the text docs from cpp.c et mkdcpp.c"
sleep 3 # pause de 3 secondes
wine ./mkdcpp.exe cpp.c
cat cpp.c.txt
wine ./mkdcpp.exe mkdcpp.c
cat mkdcpp.c.txt
echo "FIN de ce test"
sleep 3 # pause de 3 secondes
echo "quitte avec l'erreur: "$erreur;
exit $erreur;
makefile pour mingw-linux
modifier# Makefile : build exécutable Windows - compilation impérative
w-exe: mkdcpp.c cpp.c version.h cpp.h system.h lang.h # dépendances de mises à jour
x86_64-w64-mingw32-gcc -o mkdcpp.exe mkdcpp.c cpp.c
Outils
modifierLe package redistribuable Microsoft Visual C++ 2010 installe les composants runtime des bibliothèques Visual C++ nécessaires pour exécuter les applications développées en Visual C++ sur un ordinateur sur lequel Visual C++ 2010 n'est pas installé: https://www.microsoft.com/fr-fr/download/details.aspx?id=5555 Exemple de contenu d'un répertoire de travail et de test (test du module cpp.c avec mkdcpp.exe) : Utilisateur:Goelette_Cardabela/mkdcpp/Directory_contents
- minGW léger (avis)
- https://www.sqlpac.com/referentiel/docs/mingw-minimalist-gnu-pour-windows.html
- minGW minimalist complet
- https://sourceforge.net/projects/mingw/files/
- minGW 32 et 64 bits
- https://sourceforge.net/projects/mingw-w64/ (Threads POSIX pour les compilations multitâches.)
- Macros et fonctions de pthread : https://pubs.opengroup.org/onlinepubs/007904975/basedefs/pthread.h.html
Références
modifier