Projet mkd/tri.c
De Wiki EELL.
(Différences entre les versions)
JPL (discuter | contributions) m (!!) |
JPL (discuter | contributions) m |
||
| Ligne 1 : | Ligne 1 : | ||
{{Modèle:Pas fini/autre}} | {{Modèle:Pas fini/autre}} | ||
<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> | ||
| + | : tri.inc.c : Ce fichier n'est pas indépendant, il est à revoir ! | ||
| + | <pre> | ||
| + | /*E �C�*/ | ||
| + | /** ######################################### | ||
| + | # TRI # | ||
| + | ######################################### */ | ||
| + | /* maj 09/06/89 */ | ||
| + | /*P maj R3.11 09/01/91 par JPL */ | ||
| + | |||
| + | /** | ||
| + | Cette fonction de mkdoc permet le tri des commentaires en fonction des para- | ||
| + | metres CD1 CD2 CD3 CD4 CD5 compiles. | ||
| + | avec l'option l (copie de ligne): | ||
| + | CD1 et CD2 sont des caracteres debut de commentaires a placer en debut de | ||
| + | ligne comme en FORTRAN: c ou C ou * . | ||
| + | CD3 est un caractere debut de commentaire que l'on peut placer en tout point | ||
| + | d'une ligne comme ; en assembleur, # en shell ou % en postcript. | ||
| + | Cette fonction permet des tris differents de SHELL_.C vu qu'elle ignore si | ||
| + | # est dans une chaine ou si elle est precedee du char \ . | ||
| + | avec l'option p (copie de page ): | ||
| + | CD4 est le caractere de debut du commentaire et CD5 est la fin du commentaire | ||
| + | comme en PASCAL : CD4={ et CD5=} . CD4=CD5=" peut a la rigueur permettre | ||
| + | d'extraire des chaines de caracteres afin d'editer un dictionnaire syntaxique | ||
| + | toutefois " etant a la fois debut et fin de caractere le resultat n'est pas | ||
| + | assure. | ||
| + | */ | ||
| + | |||
| + | void tri_(FILE * pfdoc, FILE * pnfile) | ||
| + | // FILE *pfdoc, *pnfile; | ||
| + | { /*S tri */ | ||
| + | extern unsigned char l,p,s,t; | ||
| + | extern char codes[]; | ||
| + | unsigned int i,tabl,tabp; | ||
| + | unsigned int 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 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); | ||
| + | tabl=tabp=0; | ||
| + | } /*S*/ | ||
| + | |||
| + | /*O###### si option ligne ###################################################*/ | ||
| + | if (l) | ||
| + | { /*S cas lignes */ | ||
| + | |||
| + | /*O--------- si le char est NL ---------------------------------------------*/ | ||
| + | if (c1=='\n') | ||
| + | { /*S colonne 1 */ | ||
| + | /*O si suivi par c2 = CD1 ou CD2 ou CD3 | ||
| + | et si codes[0]=0 ou si suivi par un des 5 char code d'utilisateur */ | ||
| + | c2 = getc(pnfile); | ||
| + | c3 = getc(pnfile); | ||
| + | if( (c2 == CD1 || | ||
| + | c2 == CD2 || | ||
| + | c2 == CD3 | ||
| + | ) | ||
| + | && | ||
| + | (!codes[0]|| | ||
| + | c3 == codes[0] || | ||
| + | c3 == codes[1] || | ||
| + | c3 == codes[2] || | ||
| + | c3 == codes[3] || | ||
| + | c3 == codes[4] | ||
| + | ) | ||
| + | ) | ||
| + | |||
| + | /*O alors copier les caracteres dans le fichier doc, et si opt s a l'ecran: */ | ||
| + | { /*S*/ | ||
| + | /*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*/ | ||
| + | /*O copier le debut de ligne */ | ||
| + | putc (c2,pfdoc); putc(c3,pfdoc); | ||
| + | if(s) | ||
| + | { /*S si opt s */ | ||
| + | putch(c2);putch(c3); | ||
| + | } /*S si opt s */ | ||
| + | } /*S*/ | ||
| + | else if(!codes[0])ungetc(c3,pnfile); | ||
| + | |||
| + | /*O tant que pas fin de ligne */ | ||
| + | while ( (c1 = getc(pnfile)) != '\n') | ||
| + | { /*S w copy line */ | ||
| + | /*O copier les chars de la ligne */ | ||
| + | putc (c1,pfdoc);if(s)putch(c1); | ||
| + | } /*S w copy line */ | ||
| + | /*O copier le dernier caractere */ | ||
| + | putc (c1,pfdoc); | ||
| + | if(s) putch('\n'); | ||
| + | /*O revenir sur LF du fichier source */ | ||
| + | ungetc(c1,pnfile); | ||
| + | } /*S*/ | ||
| + | /*O sinon restituer les deux derniers caracteres */ | ||
| + | else | ||
| + | { /*S sinon */ | ||
| + | ungetc(c3,pnfile); | ||
| + | ungetc(c2,pnfile); | ||
| + | } /*S sinon */ | ||
| + | } /*S colonne 1 */ | ||
| + | |||
| + | |||
| + | /*O sinon: */ | ||
| + | else | ||
| + | { /*S else */ | ||
| + | /*O--------- si c1 = 'CD3' (& option ligne) --------------------------*/ | ||
| + | if (c1==CD3) | ||
| + | { /*S char = CD3 */ | ||
| + | /*O si codes[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 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*/ | ||
| + | /*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 NL LF, dans le fichier doc */ | ||
| + | while ( (c1=getc(pnfile)) != '\n') | ||
| + | { /*S*/ | ||
| + | putc(c1,pfdoc); | ||
| + | if(s)putch(c1); | ||
| + | } /*S*/ | ||
| + | } /*S*/ | ||
| + | /*O sinon: (option t) */ | ||
| + | else | ||
| + | { /*S*/ | ||
| + | /*O copier autant de tabulations qu'en source */ | ||
| + | for(i=0;i<tabl;i++) | ||
| + | { /*S*/ | ||
| + | putc('\t',pfdoc); | ||
| + | if(s)putch('\t'); | ||
| + | } /*S*/ | ||
| + | /*O puis copier des blancs jsqu'position commentaire */ | ||
| + | for(i=(int)(ll-nl-tabl);i>0;i--) | ||
| + | { /*S*/ | ||
| + | putc(' ',pfdoc); | ||
| + | if(s)putch(' '); | ||
| + | } /*S*/ | ||
| + | |||
| + | /*O puis copier le commentaire tq pas NL */ | ||
| + | while ( (c1=getc(pnfile)) != '\n') | ||
| + | { /*S*/ | ||
| + | putc(c1,pfdoc); | ||
| + | if(s)putch(c1); | ||
| + | } /*S*/ | ||
| + | } /*S*/ | ||
| + | putc('\n',pfdoc);if(s)putch('\n'); /*O copier NL */ | ||
| + | ungetc(c1,pnfile); /*O revenir sur NL */ | ||
| + | } /*S commentaire */ | ||
| + | /*O sinon: */ | ||
| + | else | ||
| + | { /*S*/ | ||
| + | ungetc(c2,pnfile); | ||
| + | } /*S*/ | ||
| + | } /*S char = CD3 */ | ||
| + | /*O sinon si c1='\t' inc tabl */ | ||
| + | else if(c1=='\t')tabl++; | ||
| + | } /*S else */ | ||
| + | } /*S cas lignes */ | ||
| + | /*O###### si option page ####################################################*/ | ||
| + | if (p) | ||
| + | { /*S cas page */ | ||
| + | /*O si le char est identique a CD4 */ | ||
| + | if(c1==CD4) | ||
| + | { /*S char = CD4 */ | ||
| + | c2=getc(pnfile); | ||
| + | /*O si codes[0]=0 ou si c1 est suivi par c2 char code utilisateur */ | ||
| + | if(!codes[0]|| | ||
| + | c2 == codes[0] || | ||
| + | c2 == codes[1] || | ||
| + | c2 == codes[2] || | ||
| + | c2 == codes[3] || | ||
| + | c2 == 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 les tabulations */ | ||
| + | for(i=0;i<tabp;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-tabp);i>0;i--) | ||
| + | { /*S*/ | ||
| + | putc(' ',pfdoc); | ||
| + | if(s)putch(' '); | ||
| + | } /*S*/ | ||
| + | } /*St*/ | ||
| + | |||
| + | |||
| + | /*O puis tq ne rencontre pas le char CD5, copier le commentaire */ | ||
| + | while ( (c1=getc(pnfile)) != CD5 ) | ||
| + | { /*S*/ | ||
| + | putc(c1,pfdoc); | ||
| + | if(s)putch(c1); | ||
| + | /*O si option n et NL incr‚menter et ajouter le num‚ro de ligne */ | ||
| + | if(n && c1=='\n') | ||
| + | { /*S*/ | ||
| + | num++; | ||
| + | fprintf(pfdoc, "%5d ", num ); | ||
| + | if(s) printf( "%5d ", num ); | ||
| + | } /*S*/ | ||
| + | } /*S*/ | ||
| + | |||
| + | |||
| + | #ifdef FULL_LINE /*O *** FULL_LINE *** */ | ||
| + | /*O si pas option t */ | ||
| + | if(!t) | ||
| + | { /*S*/ | ||
| + | /*O copier les chars jusqu'en fin de ligne */ | ||
| + | ungetc(c1,pnfile); | ||
| + | while ( (c1=getc(pnfile)) != '\n' ) | ||
| + | { /*S*/ | ||
| + | putc(c1,pfdoc); | ||
| + | if(s)putch(c1); | ||
| + | } /*S*/ | ||
| + | } /*S*/ | ||
| + | /*O sinon (option t) */ | ||
| + | else | ||
| + | #endif /*O *** END FULL_LINE *** */ | ||
| + | { /*S*/ | ||
| + | /*O aller au bout de la ligne sans copier sauf les '\r' */ | ||
| + | while ( (c1=getc(pnfile)) != '\n' ) | ||
| + | if (c1=='\r') | ||
| + | { /*S*/ | ||
| + | putc( c1, pfdoc ); | ||
| + | if(s) putch( c1); | ||
| + | } /*S*/ | ||
| + | } /*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(c2,pnfile); | ||
| + | } /*S pas le cas*/ | ||
| + | } /*S char = CD4 */ | ||
| + | /*O sinon si c1='\t' inc tabp */ | ||
| + | else if(c1=='\t')tabp++; | ||
| + | } /*S cas page */ | ||
| + | } /*S tq !EOF */ | ||
| + | } /*S tri */ | ||
| + | </pre> | ||
[[Catégorie:Générateurs de documentation]] | [[Catégorie:Générateurs de documentation]] | ||
Version du 19 décembre 2010 à 15:23
| | Cette page n'est pas finie. Veuillez considérer le plan et le contenu comme incomplets et en préparation, temporaires et sujets à caution. Si vous souhaitez participer, il vous est recommandé de consulter sa page de discussion au préalable. |
Retour aux fichiers en développement →
- tri.inc.c : Ce fichier n'est pas indépendant, il est à revoir !
/*E �C�*/
/** #########################################
# TRI #
######################################### */
/* maj 09/06/89 */
/*P maj R3.11 09/01/91 par JPL */
/**
Cette fonction de mkdoc permet le tri des commentaires en fonction des para-
metres CD1 CD2 CD3 CD4 CD5 compiles.
avec l'option l (copie de ligne):
CD1 et CD2 sont des caracteres debut de commentaires a placer en debut de
ligne comme en FORTRAN: c ou C ou * .
CD3 est un caractere debut de commentaire que l'on peut placer en tout point
d'une ligne comme ; en assembleur, # en shell ou % en postcript.
Cette fonction permet des tris differents de SHELL_.C vu qu'elle ignore si
# est dans une chaine ou si elle est precedee du char \ .
avec l'option p (copie de page ):
CD4 est le caractere de debut du commentaire et CD5 est la fin du commentaire
comme en PASCAL : CD4={ et CD5=} . CD4=CD5=" peut a la rigueur permettre
d'extraire des chaines de caracteres afin d'editer un dictionnaire syntaxique
toutefois " etant a la fois debut et fin de caractere le resultat n'est pas
assure.
*/
void tri_(FILE * pfdoc, FILE * pnfile)
// FILE *pfdoc, *pnfile;
{ /*S tri */
extern unsigned char l,p,s,t;
extern char codes[];
unsigned int i,tabl,tabp;
unsigned int 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 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);
tabl=tabp=0;
} /*S*/
/*O###### si option ligne ###################################################*/
if (l)
{ /*S cas lignes */
/*O--------- si le char est NL ---------------------------------------------*/
if (c1=='\n')
{ /*S colonne 1 */
/*O si suivi par c2 = CD1 ou CD2 ou CD3
et si codes[0]=0 ou si suivi par un des 5 char code d'utilisateur */
c2 = getc(pnfile);
c3 = getc(pnfile);
if( (c2 == CD1 ||
c2 == CD2 ||
c2 == CD3
)
&&
(!codes[0]||
c3 == codes[0] ||
c3 == codes[1] ||
c3 == codes[2] ||
c3 == codes[3] ||
c3 == codes[4]
)
)
/*O alors copier les caracteres dans le fichier doc, et si opt s a l'ecran: */
{ /*S*/
/*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*/
/*O copier le debut de ligne */
putc (c2,pfdoc); putc(c3,pfdoc);
if(s)
{ /*S si opt s */
putch(c2);putch(c3);
} /*S si opt s */
} /*S*/
else if(!codes[0])ungetc(c3,pnfile);
/*O tant que pas fin de ligne */
while ( (c1 = getc(pnfile)) != '\n')
{ /*S w copy line */
/*O copier les chars de la ligne */
putc (c1,pfdoc);if(s)putch(c1);
} /*S w copy line */
/*O copier le dernier caractere */
putc (c1,pfdoc);
if(s) putch('\n');
/*O revenir sur LF du fichier source */
ungetc(c1,pnfile);
} /*S*/
/*O sinon restituer les deux derniers caracteres */
else
{ /*S sinon */
ungetc(c3,pnfile);
ungetc(c2,pnfile);
} /*S sinon */
} /*S colonne 1 */
/*O sinon: */
else
{ /*S else */
/*O--------- si c1 = 'CD3' (& option ligne) --------------------------*/
if (c1==CD3)
{ /*S char = CD3 */
/*O si codes[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 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*/
/*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 NL LF, dans le fichier doc */
while ( (c1=getc(pnfile)) != '\n')
{ /*S*/
putc(c1,pfdoc);
if(s)putch(c1);
} /*S*/
} /*S*/
/*O sinon: (option t) */
else
{ /*S*/
/*O copier autant de tabulations qu'en source */
for(i=0;i<tabl;i++)
{ /*S*/
putc('\t',pfdoc);
if(s)putch('\t');
} /*S*/
/*O puis copier des blancs jsqu'position commentaire */
for(i=(int)(ll-nl-tabl);i>0;i--)
{ /*S*/
putc(' ',pfdoc);
if(s)putch(' ');
} /*S*/
/*O puis copier le commentaire tq pas NL */
while ( (c1=getc(pnfile)) != '\n')
{ /*S*/
putc(c1,pfdoc);
if(s)putch(c1);
} /*S*/
} /*S*/
putc('\n',pfdoc);if(s)putch('\n'); /*O copier NL */
ungetc(c1,pnfile); /*O revenir sur NL */
} /*S commentaire */
/*O sinon: */
else
{ /*S*/
ungetc(c2,pnfile);
} /*S*/
} /*S char = CD3 */
/*O sinon si c1='\t' inc tabl */
else if(c1=='\t')tabl++;
} /*S else */
} /*S cas lignes */
/*O###### si option page ####################################################*/
if (p)
{ /*S cas page */
/*O si le char est identique a CD4 */
if(c1==CD4)
{ /*S char = CD4 */
c2=getc(pnfile);
/*O si codes[0]=0 ou si c1 est suivi par c2 char code utilisateur */
if(!codes[0]||
c2 == codes[0] ||
c2 == codes[1] ||
c2 == codes[2] ||
c2 == codes[3] ||
c2 == 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 les tabulations */
for(i=0;i<tabp;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-tabp);i>0;i--)
{ /*S*/
putc(' ',pfdoc);
if(s)putch(' ');
} /*S*/
} /*St*/
/*O puis tq ne rencontre pas le char CD5, copier le commentaire */
while ( (c1=getc(pnfile)) != CD5 )
{ /*S*/
putc(c1,pfdoc);
if(s)putch(c1);
/*O si option n et NL incr‚menter et ajouter le num‚ro de ligne */
if(n && c1=='\n')
{ /*S*/
num++;
fprintf(pfdoc, "%5d ", num );
if(s) printf( "%5d ", num );
} /*S*/
} /*S*/
#ifdef FULL_LINE /*O *** FULL_LINE *** */
/*O si pas option t */
if(!t)
{ /*S*/
/*O copier les chars jusqu'en fin de ligne */
ungetc(c1,pnfile);
while ( (c1=getc(pnfile)) != '\n' )
{ /*S*/
putc(c1,pfdoc);
if(s)putch(c1);
} /*S*/
} /*S*/
/*O sinon (option t) */
else
#endif /*O *** END FULL_LINE *** */
{ /*S*/
/*O aller au bout de la ligne sans copier sauf les '\r' */
while ( (c1=getc(pnfile)) != '\n' )
if (c1=='\r')
{ /*S*/
putc( c1, pfdoc );
if(s) putch( c1);
} /*S*/
} /*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(c2,pnfile);
} /*S pas le cas*/
} /*S char = CD4 */
/*O sinon si c1='\t' inc tabp */
else if(c1=='\t')tabp++;
} /*S cas page */
} /*S tq !EOF */
} /*S tri */

