Projet mkd/basic.c

De Wiki EELL.

(Différences entre les versions)
m (!)
m (!!)
Ligne 1 : Ligne 1 :
 +
<small>[[Portail:mkd|Retour au portail mkd &rarr;]]</small>
 +
: La présentation de ce fichier est à revoir, notament son entête non conforme. Il est obligatoire de préciser ce que fait le fichier et de donner les indications pour le fichier d'entête basic.h  
: La présentation de ce fichier est à revoir, notament son entête non conforme. Il est obligatoire de préciser ce que fait le fichier et de donner les indications pour le fichier d'entête basic.h  

Version du 19 décembre 2010 à 14:15

Retour au portail mkd →

La présentation de ce fichier est à revoir, notament son entête non conforme. Il est obligatoire de préciser ce que fait le fichier et de donner les indications pour le fichier d'entête basic.h
/*E */
/*F #########################################
    #                BASIC                  #
    ######################################### */
/*  09/02/89 */
/*P maj R3.12 12/02/91 par JPL */

void basic_(FILE * pfdoc, FILE * pnfile)
// FILE *pfdoc, *pnfile;
     { /*S basic */
        extern unsigned char l,p,s,t;
        extern char codes[];
        unsigned int num, tab, i;
        long ll,nl;
        register int c1;
        int c2,c3,c4;

        num = 0;
        c1 = c2 = c3 = c4 = STX; /* Start Text */

/*### DECODAGE BASIC OU SIMILAIRES ##########################################*/

/*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);
              tab=0;
           } /*S*/

/*O       si le char est 'R' ou '\'' */
           if(c1=='\''||c1=='R')
/*O       alors: */
           { /*S voir si decoder */
/*O          si c1='\'' ou si ( c1='R' et c2='E' et c3='M') */
              if(c1=='\''||(c1=='R'&&
                           (c2=getc(pnfile))=='E'&&
                           (c3=getc(pnfile))=='M'))
/*O          alors: */
              { /*S decoder */
                 c4=getc(pnfile);
/*O             si codes[0]=0 ou si c4 char code utilisateur */
                 if(!codes[0]||
                    c4 == codes[0] ||
                    c4 == codes[1] ||
                    c4 == codes[2] ||
                    c4 == codes[3] ||
                    c4 == 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 autant de tabulations qu'il y en a dans le source */
                       for (i=0;i<tab;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-tab);i>0;i--)
                       { /*S*/
                          putc(' ',pfdoc);
                          if(s)putch(' ');
                       } /*S*/
                    } /*St*/


/*O                puis tq ne rencontre pas le char '\n', copier le commentaire */
                    while ( (c1=getc(pnfile)) != '\n' )
                    { /*S*/
                       putc(c1,pfdoc);
                       if(s)putch(c1);
                    } /*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(c4,pnfile);
                 } /*S pas le cas*/
              } /*S decoder */
/*O          sinon: */
              { /*S*/
/*O             si c1='R' renvoyer c3 et c2 */
                 if(c1=='R')
                 {
                    ungetc(c3,pnfile);
                    ungetc(c2,pnfile);
                 }
              } /*S*/
           } /* voir si decoder */
/*O       sinon si c1 =tabulation incrementer tab */
           else if(c1=='\t')tab++;
        } /*S tq !EOF */
     } /*S basic */
Outils personnels