Projet mkd/special.c

De Wiki EELL.

(Différences entre les versions)
m (!!)
m
 
Ligne 1 : Ligne 1 :
-
{{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>
 +
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 */
Outils personnels