m |
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 */
| |
| | | |
- | /**
| + | == Fichiers de la fonction tri() == |
- | 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)
| + | Remarks: (1991) |
- | // FILE *pfdoc, *pnfile;
| + | Cette fonction de mkdoc permet le tri des commentaires en fonction des para- |
- | { /*S tri */
| + | mètres CD1 CD2 CD3 CD4 CD5 compiles. |
- | extern unsigned char l,p,s,t;
| + | avec l'option l (copie de ligne): |
- | extern char codes[];
| + | CD1 et CD2 sont des caractères début de commentaires a placer en début de |
- | unsigned int i,tabl,tabp;
| + | ligne comme en FORTRAN: c ou C ou * . |
- | unsigned int num;
| + | CD3 est un caractère début de commentaire que l'on peut placer en tout point |
- | long ll,nl;
| + | d'une ligne comme ; en assembleur, # en shell ou % en PostScript. |
- | register int c1;
| + | Cette fonction permet des tris différents de SHELL_.C vu qu'elle ignore si |
- | int c2,c3;
| + | # est dans une chaîne ou si elle est précédée du char \ . |
| + | avec l'option p (copie de page ): |
| + | CD4 est le caractère de début 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 chaînes de caractères afin d’éditer un dictionnaire syntaxique |
| + | toutefois " étant a la fois début et fin de caractère le résultat n'est pas |
| + | assuré. |
| | | |
- | num = 0;
| + | {{Boîte déroulante/début|titre=tri.h, tri.c Updated 2013-05-11}} |
- | c1 = c2 = c3 = STX; /* Start Text */
| + | * |
| + | <pre style="color:black> |
| | | |
- | /*O tant que pas fin de fichier source */ | + | </pre> |
- | while ( c1 != EOF && c2 != EOF && c3 != EOF )
| + | * |
- | { /*S tq !EOF */
| + | <pre style="color:black> |
- | /*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 ###################################################*/ | + | </pre> |
- | if (l)
| + | {{Boîte déroulante/fin}} |
- | { /*S cas lignes */
| + | |
| | | |
- | /*O--------- si le char est NL ---------------------------------------------*/
| + | == Titre 1 == |
- | 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: */
| + | {{Boîte déroulante/début|titre=tri.h, tri.c Updated 2013-05-11}} |
- | { /*S*/
| + | * |
- | /*O si option n ins‚rer le num‚ro de ligne */
| + | <pre style="color:black> |
- | 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 */ | + | </pre> |
- | while ( (c1 = getc(pnfile)) != '\n')
| + | * |
- | { /*S w copy line */
| + | <pre style="color:black> |
- | /*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 */
| + | |
| | | |
| + | </pre> |
| + | {{Boîte déroulante/fin}} |
| | | |
- | /*O sinon: */
| + | == Titre 2 == |
- | 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 */
| + | {{Boîte déroulante/début|titre=tri.h, tri.c Updated 2013-05-11}} |
- | while ( (c1=getc(pnfile)) != '\n')
| + | * |
- | { /*S*/
| + | <pre style="color:black> |
- | 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 */ | + | </pre> |
- | if(n)
| + | * |
- | { /*S*/
| + | <pre style="color:black> |
- | 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*/
| + | |
| | | |
| + | </pre> |
| + | {{Boîte déroulante/fin}} |
| | | |
- | /*O puis tq ne rencontre pas le char CD5, copier le commentaire */
| + | == Titre 3 == |
- | 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*/
| + | |
| | | |
| + | {{Boîte déroulante/début|titre=tri.h, tri.c Updated 2013-05-11}} |
| + | * |
| + | <pre style="color:black> |
| | | |
- | #ifdef FULL_LINE /*O *** FULL_LINE *** */
| + | </pre> |
- | /*O si pas option t */
| + | * |
- | if(!t)
| + | <pre style="color:black> |
- | { /*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> | | </pre> |
| + | {{Boîte déroulante/fin}} |
| | | |
| [[Catégorie:Générateurs de documentation]] | | [[Catégorie:Générateurs de documentation]] |