C MOTS SOURCE JC220346 12/05/16 21:15:06 7375 SUBROUTINE MOTS ************************************************************************ * * M O T S * ------- * * SOUS-PROGRAMME ASSOCIE A L'OPERATEUR "MOTS" * * FONCTION: * --------- * * ENREGISTRER UN OBJET DE TYPE 'LISTMOTS'. * * PHRASE D'APPEL (EN GIBIANE): * ---------------------------- * * OBJET1 = MOTS MOT1 (MOT2 (MOT3 ...) ) ; * * LES PARENTHESES INDIQUANT DES ARGUMENTS FACULTATIFS. * * ARGUMENTS (EN GIBIANE): * ----------------------- * * MOT1, ) CHAINES DE 4 CARACTERES QUELCONQUES NE * MOT2, )) CONTENANT NI BLANC, NI CARACTERE RESERVE * MOT3, ... ) (TEL LE SIGNE "="). * * OBJET1 'LISTMOTS' LISTE DE MOTS CREEE. * * DICTIONNAIRE DES VARIABLES: (ORDRE ALPHABETIQUE) * --------------------------- * * IPMOTS ENTIER POINTEUR SUR L'OBJET "OBJET1". * LEMOT ENTIER CONTIENT L'UN DES MOTS "MOT1", MOT2", ... * * SOUS-PROGRAMMES APPELES: * ------------------------ * * LIRCHA, ECROBJ, ERREUR. * * REMARQUES: * ---------- * * L'APPEL AU SOUS-PROGRAMME "ERREUR" EST DU AU FAIT QUE LE * SOUS-PROGRAMME "LIROBJ" NE FOURNIT PAS LE NOM DE L'OBJET, QUAND IL * EN RECONNAIT UN, MAIS SIMPLEMENT SA VALEUR. * OR, LA TABLE DES NOMS D'OBJETS NE PERMET PAS DE RETROUVER UN NOM * CONNAISSANT UN POINTEUR (C-A-D UN OBJET) CAR PLUSIEURS NOMS * PEUVENT AVOIR ETE ATTRIBUES A UN MEME OBJET. * IL N'EST DONC PAS POSSIBLE DE RECUPERER LE NOM COMME UN SIMPLE * MOT QUAND CE NOM EST UN NOM D'OBJET. * * LA LECTURE D'UN ENTIER OU D'UN REEL COMME UN SIMPLE MOT NE * FONCTIONNE PAS ACTUELLEMENT, MAIS CELA PEUT ETRE FAIT * (MOYENNANT UN APPEL A UN SOUS-PROGRAMME ACCEPTANT DE COMMETTRE * QUELQUES INDELICATESSES VIS-A-VIS DE LA NORME FORTRAN77). * * AUTEUR, DATE DE CREATION: * ------------------------- * * PASCAL MANIGOT 22 OCTOBRE 1984 * * LANGAGE: * -------- * * ESOPE + FORTRAN77 + EXTENSION: CARACTERES MIS DANS DES ENTIERS * ************************************************************************ * IMPLICIT INTEGER(I-N) -INC SMLMOTS -INC CCOPTIO * CHARACTER*4 MSPE(1) DATA MSPE/'* '/ CHARACTER*(4) LEMOT * PARAMETER (INFINI = 9999) * * JGN=4 JGM=10 SEGINI,MLMOTS IPMOTS=MLMOTS IMO=0 * * * BOUCLE SUR LA LISTE D'OBJETS PASSES A L'OPERATEUR MOTS * ---------------------------------------------------------------- DO 100 IB100=1,INFINI * * ON LIT UN EVENTUEL MOT-CLE DE REPETITION (*) ... NFOIS=1 CALL LIRENT(NFOIS,0,IRET1) * * ...PUIS ON CHERCHE UN NOUVEAU MOT CALL LIRCHA(LEMOT,0,IRETOU) * * * => PAS DE NOUVEAU MOT IF (IRETOU.EQ.0) THEN * * ERREUR, car on attendait le caractere special * IF (IRET1.NE.0) GOTO 999 * * Sinon, on ajuste eventuellement le LISTMOTS et on sort IF (IMO.NE.JGM) THEN JGM=IMO SEGADJ MLMOTS ENDIF GOTO 110 * * => NOUVEAU MOT TROUVE ELSE * IF (IRET1.NE.0) THEN * ERREUR, car on attendait le caractere special * IF (LEMOT.NE.MSPE(1)) GOTO 999 CALL LIRCHA(LEMOT,1,IRETOU) ENDIF * * Sinon, on complète le LISTMOTS IMO=IMO+NFOIS IF (IMO.GT.JGM) THEN JGM=IMO+10 SEGADJ MLMOTS ENDIF DO JJ=1,NFOIS MOTS(IMO+JJ-NFOIS)=LEMOT ENDDO * END IF 100 CONTINUE * END DO GOTO 110 * ---------------------------------------------------------------- * * 999 CONTINUE MOTERR(1:4)=MSPE(1) CALL ERREUR(396) RETURN * * 110 CONTINUE SEGDES,MLMOTS CALL ECROBJ ('LISTMOTS',IPMOTS) * END