Utilisateur:Goelette Cardabela/mkd-getwikifiles/Version imprimable
JPL mkd-getwikifiles Programme de tests du module mkd-getwikifiles.c |
version.h
modifierEntête standard
modifierVoir : Utilisateur:Goelette_Cardabela/mkdcpp#
Entête pour pour compiler avec minGW et linux.
modifierVersion.h 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: 19/03/2020 par GC, Validation pour linux et mingw
*/
/**# 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: ***
//H(#D pour extraction des options de compilation 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 *
//H 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*/
#include <signal.h> /*H*/
#include <sys/file.h> /*H*/
#include <string.h> /*H*/
#endif /*H*/
getwikifiles.h
modifierEntête de la fonction getwikifiles().
getwikifiles.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.
//%
// getwikifiles.c :
extern int getwikifiles_ (FILE *pfdoc, FILE *pnfile);
getwikifiles.c
modifierCode C, de traitement des fichiers issus de pages wiki.
getwikifiles.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 : getwikifiles.c
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 ... (Voir mkdcpp pour les modifications successives.)
Le: 20/02/2020 par Goelette Cardabela pour extraire les noms de fichiers
de MediaWiki.
Le: 19/03/2020 par GC pour validation avec mingw
*/
// 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 getwikifiles_
-----------------------------------------------------------------------------
ACTION:
Cette fonction particulière doit permettre d'extraire les noms des
fichiers d'images contenus dans les pages de MediaWiki.
La fonction getwikifiles_ 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 "getwikifiles.h"
// int getwikifiles(FILE *pfdoc, FILE *pnfile);
PORTABILITE:
Microsoft Visual studio sous Windows : x86(Win32) x64(Win32 et WIN64)
gcc sous Linux et mingw.
DESCRIPTION:
getwikifiles_ 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: (il est précisé dans getwikifiles.h) :
*/
/*
// getwikifiles.h
extern int getwikifiles_ (FILE *pfdoc, FILE *pnfile);
*/
//%
//% DROIT DE COPIE:
//% © Jean-Paul LOUYOT contact: http://jeanpaullouyot.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
// getwikifiles.h
extern int getwikifiles_ (FILE *pfdoc, FILE *pnfile);
*/
#include "version.h"
#include "getwikifiles.h"
int getwikifiles_ (FILE* pfdoc, FILE* pnfile)
{ /*S getwikifiles_ */
//www rappels : les options booleennes à définir dans main() ou winmain()
extern unsigned char n,s,t;
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'arrive pas à la fin du 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 caractère pointé */
else c1=getc(pnfile);
/*O si le caractère est 'NL' repérer la position qui suit NL, dans nl */
if(c1=='\n')
{ /*S*/
nl=ftell(pnfile);
tab=0;
num++;
} /*S*/
else
{ /*S !NL */
/*O si le char est la tabulation '\t' incrementer tab */
if (c1=='\t')tab++;
/*O sinon si le char est '[' */
else if(c1=='[')
/*O alors: */
{ /*S char = '[' */
c2=getc(pnfile);
c3=getc(pnfile);
/*O si suivi par c2 = '[' et si codes[0]=0 ou si suivi par char code utilisateur */
if( (c2=='[') && (!codes[0]||
c3 == codes[0] ||
c3 == codes[1] ||
c3 == codes[2] ||
c3 == codes[3] ||
c3 == codes[4]
)
)
/*O alors: */
{ /*S traiter le texte */
/*O si c2 = '[' positionner le booléen ligne à vrai (=1) */
if(c2=='[') ligne=1; // ligne=1; pour recopier jusqu'en fin de ligne.
/*O repérer la position du repère '[' */
//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[]
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 = copy to screen
} /*S*/
/*O si l'option t n'est pas validée (t=text only)*/
if(!t)
{ /*S!t*/
/*O se positionner en dédut 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) */
else
{ /*St*/
/*O copier des tab autant qu'il y en a dans le 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*/
fputs("https://fr.wikibooks.org/wiki/",pfdoc);
} /*St*/
/*O puis si booléen ligne est vrai (=1) */
if(ligne)
/*O alors : copier le commentaire jusqu'à '|' ou fin de ligne ou End Of File (EOF) */
{ /*Sligne*/
while ( (c1=getc(pnfile)) != '|' && c1 != '\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 : tq ne rencontre pas ] suivi de ], copier le texte */
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 */
if (c1!='\n') putc(c1,pfdoc);
if(s) putch(c1);
/*O //w si option n et char=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=']' vérifier 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 pas option t */
if(!t)
{ /*S*/
/*O copier les chars 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) */
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 */
ungetc(c3,pnfile);
ungetc(c2,pnfile);
} /*S pas le cas */
} /*S endif char = '/' */
} /*S endif!NL */
} /*S end tq !EOF */
return 0;
} /*S getwikifiles_ */
mkd-getwikifiles.c
modifierCode du programme principal (main).
mkd-getwikifiles.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: mkd-getwikifiles.c
Fichier source d'entrÃée du programme de test unitaire de la fonction
getwikifiles_ 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 êtretre 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.
mkd-getwikifiles.c 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: 19/03/2020 par CG pour mingw
Le: ../../.... par ... objet de la modification ....
*/
'''
#include "version.h"
#include "getwikifiles.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 getwikifiles_()
Il peut être nécessaire de modifier les lignes (~161?) dans getwikifiles.c */
// char codes[5] = {' ',' ',' ',' ',' '}; /*P version qui copie les commentaires après le caractère ' ' dans getwikifiles_()*/
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 ce module */
// 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 d'un module du programme d'extraction de documents avec mkd\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) "Nom-de-l'exécutable [--nst] [-Code(DHOPSTUw)] Fichier-source" */
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)] Fichier-source\n",argv[0]);
printf("Appuyer sur la touche 'Entree' pour quitter.\n\n");
#endif
#ifdef EN
printf("Syntax: %s [--Options(nst)] [-5 Codes(DHOPSTUw)] Fichier-_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 source 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" pas trouvé ou erreur d'ouverture */
#ifdef FR
printf ("fichier \'%s\' : absent ou erreur d'ouverture\n",fsrc);
puts("Appuyer sur la touche 'Retour-chariot' pour quitter\n\n");
#endif
#ifdef EN
printf ("file \'%s\' : non found or open error\n",fsrc);
puts("Press 'Enter' to quit.\n");
#endif
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*/
#ifdef FR
printf("fichier \'%s\' : erreur d'ouverture en écriture\n",fdoc);
puts("Tapez sur la touche 'Retour-chariot' pour quitter\n\n");
#endif
#ifdef EN
printf("file \'%s\' : open error\n",fdoc);
puts("Press 'Enter' to quit.\n");
#endif
getchar();
exit(-2);
} /*S si err à l'ouverture de pfdoc */
else
{ /*S sinon*/
/*O si options n ou v ou s valides 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 */
getwikifiles_ (pfdoc,pnfile);
/*O fermer le fichier source et en cas d'erreur écrire "Erreur de fermeture */
if (fclose(pnfile))
{ /*S si*/
#ifdef FR
printf("Erreur de fermeture : \'%s\'\n",fsrc);
#endif
#ifdef EN
printf("Error on closed : \'%s\'\n",fsrc);
#endif
exit(2);
} /*S fin si*/
/*O Fermer tous les autres fichiers */
{ /* fermer */
int numclosed = _fcloseall( ); //P sous unix retourne 0 ou EOF
#ifdef FR
printf( "Nombre de fichiers clos par _fcloseall : %u\n", numclosed );
#endif
#ifdef EN
printf( "Number of files closed by _fcloseall: %u\n", numclosed );
#endif
} /* fermer */
} /*S demarrage du test */
#ifdef FR
puts("pressez sur la touche 'Retour-chariot' pour quitter\n");
#endif
#ifdef EN
puts("Press 'Enter' to quit.\n");
#endif
getchar();
return 0;
} /*O main Test */
Fichiers de commandes WINDOWS/DOS
modifierCompiler.bat
modifierrem Fichier : compiler.bat
rem rm *.o
rem gcc -c getwikifiles.c
rem gcc -c mkd-getwikifiles.c
rem gcc -o getwikifiles.o mkd-getwikifiles.o -o mkd-getwikifiles.exe
gcc -g -o mkd-getwikifiles.exe mkd-getwikifiles.c getwikifiles.c
Environnement mingw
modifierrem Fichier : env-mingw.bat
rem pour établir l'environnement de travail avec mingw
rem cmd /? pour les options de la ligne de commandes
cmd /K set PATH=c:\MinGW\bin;%PATH%
echo "environnement de travail pour mingw"
echo "exit pour quitter"
Shell tests.bat
modifierProgramme des tests du module getwikifiles.
@TITLE TESTS.BAT
echo off
color 2E
REM **********************************************************************************
REM tests.bat R 11.01
REM mkd-getwikifiles.exe est simplifé par rapport à mkd et n'accepte pas de fichier de
REM destination pour cela on utilise l'artifice les artifices de redirection > 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 du fichier mkd-getwikifiles.exe, ... dans le repertoire courant.
if exist ..\mkd-getwikifiles.exe Xcopy ..\mkd-getwikifiles.exe . /D
if not exist mkd-getwikifiles.exe goto ERR1
pause
cls
echo test sans argument donne la syntaxe.
pause
mkd-getwikifiles
pause
cls
echo test avec pour argument le fichier Contenus
pause
mkd-getwikifiles Contenus
type Contenus.txt
pause
cls
echo test avec numérotation de ligne
pause
mkd-getwikifiles --n Contenus
type Contenus.txt
pause
cls
echo test avec copie à l'écran
pause
mkd-getwikifiles --s Contenus
type Contenus.txt
pause
cls
echo test avec texte seul et copie à l'écran (sans les double crochets)
pause
mkd-getwikifiles --ts Contenus
type Contenus.txt
copy /Y Contenus.txt .\files\*
pause
cls
echo test avec texte seul et copie à l'écran (sans les double crochets)
pause
mkd-getwikifiles --ts -FI ArticleTrois
type ArticleTrois.txt
copy /Y ArticleTrois.txt .\files\.
pause
exit 0
:ERR1
echo mkd-getwikifiles.exe absent, not exist.
exit 1
Fichiers de commandes LINUX
modifier