Projet mkd/tri.c
De Wiki EELL.
(Différences entre les versions)
JPL (discuter | contributions) m (!!) |
JPL (discuter | contributions) 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 */ | ||
+ | |||
+ | /** | ||
+ | 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) | ||
+ | // FILE *pfdoc, *pnfile; | ||
+ | { /*S tri */ | ||
+ | extern unsigned char l,p,s,t; | ||
+ | extern char codes[]; | ||
+ | unsigned int i,tabl,tabp; | ||
+ | unsigned int num; | ||
+ | long ll,nl; | ||
+ | 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 reperer la position suivant NL dans nl */ | ||
+ | if(c1=='\n') | ||
+ | { /*S*/ | ||
+ | num++; | ||
+ | nl=ftell(pnfile); | ||
+ | tabl=tabp=0; | ||
+ | } /*S*/ | ||
+ | |||
+ | /*O###### si option ligne ###################################################*/ | ||
+ | if (l) | ||
+ | { /*S cas lignes */ | ||
+ | |||
+ | /*O--------- si le char est NL ---------------------------------------------*/ | ||
+ | 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: */ | ||
+ | { /*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 */ | ||
+ | |||
+ | |||
+ | /*O sinon: */ | ||
+ | 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 */ | ||
+ | while ( (c1=getc(pnfile)) != '\n') | ||
+ | { /*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 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 */ | ||
+ | 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 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*/ | ||
+ | |||
+ | |||
+ | /*O puis tq ne rencontre pas le char CD5, copier le commentaire */ | ||
+ | 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*/ | ||
+ | |||
+ | |||
+ | #ifdef FULL_LINE /*O *** FULL_LINE *** */ | ||
+ | /*O si pas option t */ | ||
+ | if(!t) | ||
+ | { /*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> | ||
[[Catégorie:Générateurs de documentation]] | [[Catégorie:Générateurs de documentation]] |
Version du 19 décembre 2010 à 15:23
![]() | Cette page n'est pas finie. Veuillez considérer le plan et le contenu comme incomplets et en préparation, temporaires et sujets à caution. Si vous souhaitez participer, il vous est recommandé de consulter sa page de discussion au préalable. |
Retour aux fichiers en développement →
- tri.inc.c : Ce fichier n'est pas indépendant, il est à revoir !
/*E �C�*/ /** ######################################### # TRI # ######################################### */ /* maj 09/06/89 */ /*P maj R3.11 09/01/91 par JPL */ /** 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) // FILE *pfdoc, *pnfile; { /*S tri */ extern unsigned char l,p,s,t; extern char codes[]; unsigned int i,tabl,tabp; unsigned int num; long ll,nl; 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 reperer la position suivant NL dans nl */ if(c1=='\n') { /*S*/ num++; nl=ftell(pnfile); tabl=tabp=0; } /*S*/ /*O###### si option ligne ###################################################*/ if (l) { /*S cas lignes */ /*O--------- si le char est NL ---------------------------------------------*/ 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: */ { /*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 */ /*O sinon: */ 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 */ while ( (c1=getc(pnfile)) != '\n') { /*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 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 */ 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 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*/ /*O puis tq ne rencontre pas le char CD5, copier le commentaire */ 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*/ #ifdef FULL_LINE /*O *** FULL_LINE *** */ /*O si pas option t */ if(!t) { /*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 */