Projet mkd/c.c
De Wiki EELL.
Version du 9 février 2014 à 17:46 par Eudelo (discuter | contributions)
Retour aux fichiers en développement →
- c.inc.c: Lentête est absente ! à revoir !
/*E */ /** ######################################### # C_ # ######################################### */ /* maj: R3.0 09/06/89 */ /*P maj R3.11 09/01/91 */ void c_(FILE * pfdoc, FILE * pnfile) // FILE *pfdoc, *pnfile; { /*S C_ */ extern unsigned char l,p; extern char codes[]; unsigned int i,tab; unsigned num; long ll,nl; register int c1; int c2,c3; num = 0; 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 qui suit NL, dans nl */ if(c1=='\n') { /*S*/ nl=ftell(pnfile); tab=0; num++; } /*S*/ else { /*S !NL */ /*O si le char est '\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 options[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 commentaire C */ /*O reperer la position commentaire */ if(!codes[0])ungetc(c3,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 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'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 * suivi de /, copier le commentaire */ 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 option n et char=NL ins‚rer le num‚ro de ligne */ 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*/ #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 y compris '\r' sous DOS */ while ( (c1=getc(pnfile)) != '\n' ) { /*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' ) if (c1=='\r') { /*S*/ putc( c1, pfdoc ); if(s) putch( c1 ); } /*S*/ } /*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); ungetc(c1,pnfile); /*O revenir sur NL */ } /*S traiter le commentaire C */ /*O sinon: */ else { /*S pas le cas */ ungetc(c3,pnfile); ungetc(c2,pnfile); } /*S pas le cas */ } /*S endif char = '/' */ } /*S endif!NL */ } /*S end tq !EOF */ } /*S C_ */