Projet mkd/basic.c
De Wiki EELL.
(Différences entre les versions)
JPL (discuter | contributions) m (Mise mais ATTENTION : non vérifié à la compilation) |
JPL (discuter | contributions) m (!!) |
||
Ligne 104 : | Ligne 104 : | ||
// FILE *pfdoc, *pnfile; | // FILE *pfdoc, *pnfile; | ||
{ /*S basic */ | { /*S basic */ | ||
- | extern unsigned char l,p,s,t; | + | extern unsigned char n,l,p,s,t; |
extern char codes[]; | extern char codes[]; | ||
unsigned int num, tab, i; | unsigned int num, tab, i; |
Version du 29 novembre 2012 à 13:07
Retour aux fichiers en développement →
- basic.inc.c : La présentation de ce fichier est à revoir, notament son entête non conforme. Il est obligatoire de préciser ce que fait le fichier et de donner les indications pour le fichier d'entête basic.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. */ /*O NOM DU FICHIER: basic.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: 10/03/2010 par JPL objet de la modification simplification de l'entête Le: 27/11/2012 par JPL objet de la modification .... Le: ../../.... par ... objet de la modification .... Le: ../../.... par ... objet de la modification .... */ /*D fonction basic_ ----------------------------------------------------------------------------- ACTION: La fonction basic_ lit le fichier écrit en BASIC et extrait les renseignements de structure, l'organigramme, la documentation destinée aux programmeurs, au fichier d'entête (.h) ou à la documentation destinée à l'utilisateur etc. Les commentaires commencent par le caractère ';' et se termine en fin de ligne On utilise généralement les caractères codes suivants : ;D: pour la documentation générale sur les fonctions (listing) ;H: pour générer le fichier d'entête .h ;O: pour l'organigramme ;S: pour le contrôle de la structure du programme ;T: pour les points de tests ;U: pour la documentation utilisateur Options : n : numéro de ligne (ajoute du numéro de ligne) s : écran (ajoute le commentaire à l'écran) t : texte seul (ne copie pas les caractères de repérage) SYNTAXE: #include "version.h" #include "basic.h" // peut être redondant avec "mkd.h" void basic_(FILE *pfdoc, FILE *pnfile); // void peut être refusé selon les compilateurs, dans ce cas utiliser int et retourner 0 PORTABILITE: Win32 Win64 UNIX LINUX DESCRIPTION: FILE *pfdoc : pointeur sur le flux du fichier de destination File *pnfile : pointeur sur le flux du fichier source VALEUR RETOURNEE: Ne retourne rien DROIT DE COPIE: © mkd, 20074 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 // basic.c: extern void basic_(FILE *pfdoc, FILE *pnfile); */ /*E */ /*F ######################################### # BASIC # ######################################### */ /* 09/02/89 */ /*P maj R3.12 12/02/91 par JPL */ void basic_(FILE * pfdoc, FILE * pnfile) // FILE *pfdoc, *pnfile; { /*S basic */ extern unsigned char n,l,p,s,t; extern char codes[]; unsigned int num, tab, i; long ll,nl; register int c1; int c2,c3,c4; num = 0; c1 = c2 = c3 = c4 = STX; /* Start Text */ /*### DECODAGE BASIC OU SIMILAIRES ##########################################*/ /*O tant que pas fin de fichier source */ while ( c1 != EOF && c2 != EOF && c3 != EOF ) { /*S tq !EOF */ /*O si debut de texte faire c1=LF */ if (c1==STX) c1='\n'; /*O sinon prendre pour c1 le char suivant */ else c1=getc(pnfile); /*O si le char est NL reperer la position suivant NL dans nl */ if(c1=='\n') { /*S*/ num++; nl=ftell(pnfile); tab=0; } /*S*/ /*O si le char est 'R' ou '\'' */ if(c1=='\''||c1=='R') /*O alors: */ { /*S voir si decoder */ /*O si c1='\'' ou si ( c1='R' et c2='E' et c3='M') */ if(c1=='\''||(c1=='R'&& (c2=getc(pnfile))=='E'&& (c3=getc(pnfile))=='M')) /*O alors: */ { /*S decoder */ c4=getc(pnfile); /*O si codes[0]=0 ou si c4 char code utilisateur */ if(!codes[0]|| c4 == codes[0] || c4 == codes[1] || c4 == codes[2] || c4 == codes[3] || c4 == codes[4] ) /*O alors: */ { /*S traiter le commentaire */ /*O reperer la position commentaire */ if(!codes[0]) ungetc(c2,pnfile); ll=ftell(pnfile); /*O si option n ins‚rer le num‚ro de ligne */ if(n) { /*S*/ fprintf( pfdoc, "%5d ", num ); if(s) printf( "%5d ",num ); } /*S*/ /*O si pas option t */ if(!t) { /*S!t*/ /*O se positionner en dedut 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 autant de tabulations qu'il y en a dans le source */ for (i=0;i<tab;i++) { /*S*/ putc('\t',pfdoc); if(s)putch('\t'); } /*S*/ /*O puis copier des blancs jusqu'a la position commentaire */ for(i=(int)(ll-nl-tab);i>0;i--) { /*S*/ putc(' ',pfdoc); if(s)putch(' '); } /*S*/ } /*St*/ /*O puis tq ne rencontre pas le char '\n', copier le commentaire */ while ( (c1=getc(pnfile)) != '\n' ) { /*S*/ putc(c1,pfdoc); if(s)putch(c1); } /*S*/ putc('\n',pfdoc);if(s)putch('\n'); /*O copier NL */ ungetc(c1,pnfile); /*O revenir sur NL */ } /*S traiter le commentaire */ /*O sinon: */ else { /*S pas le cas */ ungetc(c4,pnfile); } /*S pas le cas*/ } /*S decoder */ /*O sinon: */ { /*S*/ /*O si c1='R' renvoyer c3 et c2 */ if(c1=='R') { ungetc(c3,pnfile); ungetc(c2,pnfile); } } /*S*/ } /* voir si decoder */ /*O sinon si c1 =tabulation incrementer tab */ else if(c1=='\t')tab++; } /*S tq !EOF */ //www Il ne faut pas que le commentaire se termine par EOF } /*S basic */