Projet mkd/tri.c

De Wiki EELL.

(Différences entre les versions)
m
m (Sauvegarde des cadres)
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 &rarr;]]</small>
<small>[[Projet mkd/Fichiers en développement|Retour aux fichiers en développement &rarr;]]</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]]

Version du 11 mai 2013 à 11:05

Retour aux fichiers en développement →

Sommaire

Fichiers de la fonction tri()

 Remarks: (1991)
 Cette fonction de mkdoc permet le tri des commentaires en fonction des para-
 mètres CD1 CD2 CD3 CD4 CD5 compiles.
 avec l'option l (copie de ligne):
 CD1 et CD2 sont des caractères début de commentaires a placer en début de
 ligne comme en FORTRAN: c ou C ou * .
 CD3 est un caractère début de commentaire que l'on peut placer en tout point
 d'une ligne comme ; en assembleur, # en shell ou % en PostScript.
 Cette fonction permet des tris différents de SHELL_.C vu qu'elle ignore si
 # 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é.

Titre 1

Titre 2

Titre 3

Outils personnels