Projet mkd/fortran.c

De Wiki EELL.

Retour aux fichiers en développement →

fortran.inc.c à revoir, il n'est pas indépendant !
/*E �C�*/
/** #########################################
    #                FORTRAN                #
    ######################################### */
/*  maj: 23/3/89 */
/*P maj R3.11 3/1/91 */

void fortran_(FILE * pfdoc, FILE * pnfile)
// FILE *pfdoc, *pnfile;
     { /*S fortran */
    extern unsigned char l,p;
    extern char codes[];
    unsigned int num;
    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 ---------------------------------------------*/
              if (c1=='\n')
              { /*S colonne 1 */
              num++;
/*O          si suivi par c2 = 'C' ou 'c' ou '*'
                et si codes[0]=0 ou si suivi par un des 5 char code d'utilisateur */
              c2 = getc(pnfile);
              c3 = getc(pnfile);
              if( (c2 == 'C'||
                   c2 == 'c'||
                   c2 == '*'
                  )
                  &&
                  (!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 */

        } /*S tq !EOF */
     } /*S fortran */
Outils personnels