Projet mkd/special.c
De Wiki EELL.
(Différences entre les versions)
JPL (discuter | contributions) m (!!) |
JPL (discuter | contributions) m |
||
Ligne 1 : | Ligne 1 : | ||
- | |||
<small>[[Projet mkd/Fichiers en développement|Retour aux fichiers en développement →]]</small> | <small>[[Projet mkd/Fichiers en développement|Retour aux fichiers en développement →]]</small> | ||
+ | Fichier special.inc.c : Ce fichier n'est pas indépendant il est nécessaire de le revoir. | ||
+ | <pre> | ||
+ | /** ######################################### | ||
+ | # SPE. SHELL # | ||
+ | ######################################### */ | ||
+ | /* maj: 23/3/89 */ | ||
+ | /** | ||
+ | Ce programme copie les commentaires des lignes contenant le caractere # et | ||
+ | les lignes qui suivent le caractere '\'. | ||
+ | */ | ||
+ | void shell_(FILE * pfdoc, FILE * pnfile) | ||
+ | // FILE *pfdoc, *pnfile; | ||
+ | { /*S shell */ | ||
+ | extern unsigned char l,p; | ||
+ | extern char codes[]; | ||
+ | unsigned int i; | ||
+ | long ll,nl; | ||
+ | register char c1; | ||
+ | char c2,c3; | ||
+ | c1 = c2 = c3 = STX; /* Start Text */ | ||
+ | |||
+ | /*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 pointe */ | ||
+ | else c1=getc(pnfile); | ||
+ | /*O si le char est NL reperer la position suivant NL dans nl */ | ||
+ | if(c1=='\n')nl=ftell(pnfile); | ||
+ | else | ||
+ | { /*S !NL */ | ||
+ | /*O si le char est '#' */ | ||
+ | if (c1=='#') | ||
+ | /*O alors: */ | ||
+ | { /*S char = # */ | ||
+ | /*O si options[0]=0 ou si suivi par c2 = char code utilisateur */ | ||
+ | c2=getc(pnfile); | ||
+ | if (!codes[0]|| | ||
+ | c2 == codes[0] || | ||
+ | c2 == codes[1] || | ||
+ | c2 == codes[2] || | ||
+ | c2 == codes[3] || | ||
+ | c2 == codes[4] | ||
+ | ) | ||
+ | /*O alors: */ | ||
+ | { /*S comment*/ | ||
+ | /*O reperer la position commentaire */ | ||
+ | if(!codes[0])ungetc(c2,pnfile); | ||
+ | ll=ftell(pnfile); | ||
+ | /*O si pas option t */ | ||
+ | if(!t) | ||
+ | { /*S*/ | ||
+ | /*O se positionner en dedut de ligne */ | ||
+ | fseek(pnfile,nl,0); | ||
+ | /*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */ | ||
+ | /*O copier toute la ligne tq pas LF, dans le fichier doc */ | ||
+ | while ( (c1=getc(pnfile)) != '\n') | ||
+ | { | ||
+ | putc(c1,pfdoc); | ||
+ | if(s)putch(c1); | ||
+ | } | ||
+ | } /*S*/ | ||
+ | /*O sinon: */ | ||
+ | else | ||
+ | { /*S*/ | ||
+ | /*O copier des blancs jusqu'a la position commentaire */ | ||
+ | for(i=(int)(ll-nl);i>0;i--) | ||
+ | { /*S*/ | ||
+ | putc(' ',pfdoc); | ||
+ | if(s)putch(' '); | ||
+ | } /*S*/ | ||
+ | |||
+ | /*O puis copier le commentaire tq pas fin de commentaire */ | ||
+ | while (c1!='\n') | ||
+ | { /*S*/ | ||
+ | /*O copier le commentaire tq pas NL ou pas char '\' */ | ||
+ | while ( (c1=getc(pnfile)) != '\n' && c1!='\\' ) | ||
+ | { /*S*/ | ||
+ | putc(c1,pfdoc); | ||
+ | if(s)putch(c1); | ||
+ | } /*S*/ | ||
+ | /*O si le char est '\' */ | ||
+ | if (c1== '\\') | ||
+ | /*O alors: */ | ||
+ | { | ||
+ | |||
+ | /*O copier jusqu'a NL et masquer NL */ | ||
+ | while ( c1 != '\n') | ||
+ | { /*S*/ | ||
+ | putc(c1,pfdoc); | ||
+ | if(s)putch(c1); | ||
+ | c1=getc(pnfile); | ||
+ | } /*S*/ | ||
+ | putc(c1,pfdoc);if(s)putch(c1); | ||
+ | c1=0; /* masquage */ | ||
+ | } | ||
+ | } /*S*/ | ||
+ | } /*S*/ | ||
+ | putc('\n',pfdoc);if(s)putch('\n'); /*O copier NL */ | ||
+ | ungetc(c1,pnfile); /*O revenir sur NL */ | ||
+ | } /*S comment */ | ||
+ | /*O sinon: */ | ||
+ | else | ||
+ | { | ||
+ | ungetc(c2,pnfile); | ||
+ | } | ||
+ | } /*S char = # */ | ||
+ | } /*S cas lignes */ | ||
+ | } /*S !NL */ | ||
+ | } /*S tq !EOF */ | ||
+ | </pre> | ||
[[Catégorie:Générateurs de documentation]] | [[Catégorie:Générateurs de documentation]] |
Version actuelle en date du 19 décembre 2010 à 15:00
Retour aux fichiers en développement → Fichier special.inc.c : Ce fichier n'est pas indépendant il est nécessaire de le revoir.
/** ######################################### # SPE. SHELL # ######################################### */ /* maj: 23/3/89 */ /** Ce programme copie les commentaires des lignes contenant le caractere # et les lignes qui suivent le caractere '\'. */ void shell_(FILE * pfdoc, FILE * pnfile) // FILE *pfdoc, *pnfile; { /*S shell */ extern unsigned char l,p; extern char codes[]; unsigned int i; long ll,nl; register char c1; char c2,c3; c1 = c2 = c3 = STX; /* Start Text */ /*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 pointe */ else c1=getc(pnfile); /*O si le char est NL reperer la position suivant NL dans nl */ if(c1=='\n')nl=ftell(pnfile); else { /*S !NL */ /*O si le char est '#' */ if (c1=='#') /*O alors: */ { /*S char = # */ /*O si options[0]=0 ou si suivi par c2 = char code utilisateur */ c2=getc(pnfile); if (!codes[0]|| c2 == codes[0] || c2 == codes[1] || c2 == codes[2] || c2 == codes[3] || c2 == codes[4] ) /*O alors: */ { /*S comment*/ /*O reperer la position commentaire */ if(!codes[0])ungetc(c2,pnfile); ll=ftell(pnfile); /*O si pas option t */ if(!t) { /*S*/ /*O se positionner en dedut de ligne */ fseek(pnfile,nl,0); /*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */ /*O copier toute la ligne tq pas LF, dans le fichier doc */ while ( (c1=getc(pnfile)) != '\n') { putc(c1,pfdoc); if(s)putch(c1); } } /*S*/ /*O sinon: */ else { /*S*/ /*O copier des blancs jusqu'a la position commentaire */ for(i=(int)(ll-nl);i>0;i--) { /*S*/ putc(' ',pfdoc); if(s)putch(' '); } /*S*/ /*O puis copier le commentaire tq pas fin de commentaire */ while (c1!='\n') { /*S*/ /*O copier le commentaire tq pas NL ou pas char '\' */ while ( (c1=getc(pnfile)) != '\n' && c1!='\\' ) { /*S*/ putc(c1,pfdoc); if(s)putch(c1); } /*S*/ /*O si le char est '\' */ if (c1== '\\') /*O alors: */ { /*O copier jusqu'a NL et masquer NL */ while ( c1 != '\n') { /*S*/ putc(c1,pfdoc); if(s)putch(c1); c1=getc(pnfile); } /*S*/ putc(c1,pfdoc);if(s)putch(c1); c1=0; /* masquage */ } } /*S*/ } /*S*/ putc('\n',pfdoc);if(s)putch('\n'); /*O copier NL */ ungetc(c1,pnfile); /*O revenir sur NL */ } /*S comment */ /*O sinon: */ else { ungetc(c2,pnfile); } } /*S char = # */ } /*S cas lignes */ } /*S !NL */ } /*S tq !EOF */