lirabj
C LIRABJ SOURCE CB215821 24/07/17 21:15:08 11961 IMPLICIT INTEGER(I-N) -INC PPARAM -INC CCNOYAU -INC CCOPTIO -INC SMBLOC -INC CCASSIS -INC SMCOORD -INC SMLOBJE LOGICAL JTYP CHARACTER*(*) ITYPE CHARACTER*(8) ITYP,INTERM,MOVID8 CHARACTER*8 JTYOBI * SAVE IPLAC LOGICAL LOMISA,ILOREMP integer desrev character*(8) desret MOVID8=' ' IF(LEN(ITYPE).LT.8) THEN RETURN ENDIF iextab=0 * initialisation de lotesc lotesc=.false. ith=0 if (nbesc.ne.0) ith = oothrd if (ith .ne.0) lotesc=.true. * write (6,*) ' dans lirabj ',ith if (lotesc) then return endif IRETOU=0 IF (IERR.GT.1) RETURN INSTAB=0 ITYP=' ' JTYP=.FALSE. C DANS LE CAS DE LECTURE D'UN FLOTTANT ON ADMET DE LIRE UN ENTIER IF (ITYPE(1:8).EQ.'FLOTTANT') THEN ITYP='ENTIER' JTYP=.TRUE. ENDIF C DANS LE CAS DE LECTURE D'UN MOT ON ADMET DE LIRE UNE PROCEDURE IF (ITYPE(1:4).EQ.'MOT ') THEN ITYP='PROCEDUR' JTYP=.TRUE. ENDIF * if ( iimpi.eq.1876) THEN * write(6,*) ' lirabj on demande ',itype * write(6,*) ' ibpile,ihpile ',ibpile,ihpile * write(6,*) ' instab,lectab,iextab' ,instab,lectab,iextab * endif 5 L = IHPILE-IBPILE ILTTA = 0 INSTAB= 0 IF (L .lt. 0) goto 2 C********************** ON CHERCHE SI UN OBJET DU TYPE DESIRE EST C********************** DEJA DANS LA PILE 1 IBPILN=0 * write(6,*) ' apres 1 lectab instab iextab ibpile ihpile' * write(6,*) lectab ,instab, iextab, ibpile,ihpile DO 10 I=IBPILE,IHPILE * write(6,*) 'bcl 10 i jpoob1(i) iva' ,i,JPOOB1(I),jpoob4(i) IF(.NOT.JPOOB1(I)) THEN * ON MET A 0 INSTAB CAR LA SPECIFICATION PRECISE QUE LA DONNEE INDICE * DOIT IMMEDIATEMENT SUIVRE LA DONNEE DE LA TABLE INSTAB=0 GO TO 10 ENDIF IF (IBPILN.EQ.0) IBPILN=I IF (INSTAB.NE.0.AND.LECTAB.EQ.0 ) THEN * LA DONNEE QUI PRECEDE EST UNE TABLE ou un objet ON REGARDE SI * CELLE CI EST UN SEPARATEUR SUIVI D'UN INDICE * DANS CE CAS ON SE CONTENTE DE REMPLACER CE NOUVEL OBJET PAR CELUI * CONTENU DANS LA TABLE SINON ON REND CE NOUVEL OBJET * DANS TOUS LES CAS ON POSITIONNE INSTAB A 0 ISUCC=INSTAB * write (6,*) ' lirabj appel a rempil ' * write(6,*) ' apres rempil i isucc',i,isucc iextab=0 if (i+1.le.ihpile) then endif * if( iimpi.eq.1876) call ecpil ('lirabj boucle') INSTAB=0 IF(IERR.NE.0) RETURN ENDIF C---------------------------- C VECTORIZATION avec LISTOBJE C---------------------------- C C Si LISTOBJE de contenu 'ESCLAVE' en sequentiel, remplace par les C objets resultat lorsqu'ils sont disponibles et on met MLOBJE.TYPOBJ C a jour C IF ( jtyobj(I) .eq. 'LISTOBJE' .and. LUPARA .eq. 0) THEN MLOBJE = JPOOB4(I) segact, MLOBJE NOBJ1 =MLOBJE.LISOBJ(/1) if (MLOBJE.TYPOBJ .eq. 'ESCLAVE ' .and. NOBJ1 .GT. 0) then if (iimpi .eq. 1234) write(ioimp,*) & 'Liste d''objets esclaves utilisee en sequentiel !!',MLOBJE LOMISA = .FALSE. if (.not.lodesl.or.ith.ne.0) lomisa = .true. IF ( LOMISA ) THEN call oooeta(mcoord,ieta,imod) if (ieta.eq.1) segdes mcoord C On attend que les NOBJ1 objets soient disponibles en partant du dernier DO 13 IOB1=NOBJ1,1,-1 MESRES =MLOBJE.LISOBJ(IOB1) SEGACT MESRES if (.not.loremp) then 130 continue segdes mesres*record SEGACT MESRES*(ECR=1,MOD) if (.not.loremp) then write(6,*) ' loremp pas vrai dans lirabj ' goto 130 endif endif if (ieta.eq.1) segact mcoord if (iimpi .eq. 1234) & write(ioimp,*) 'le segment a ete mis a jour ',MESRES C Remplacement de l'objet et placement du type segact, MLOBJE*MOD MLOBJE.LISOBJ(IOB1) = desrev if(MLOBJE.TYPOBJ .eq.'ESCLAVE ') MLOBJE.TYPOBJ = desret SEGDES, MESRES 13 continue ENDIF endif SEGACT, MLOBJE IF (LISOBJ(/1).NE.0) THEN ** IF (IPLA.EQ.0) THEN ** CALL ERREUR(1138) ** RETURN ** ENDIF ENDIF ENDIF C---------------------------- C Actualisation objet ESCLAVE C---------------------------- C C JYY IF ( jtyobj(I) .eq. 'ESCLAVE ' ) then MESRES = JPOOB4(I) if (iimpi .eq. 1234) & write(ioimp,*) ' un objet esclave utilise !!!',mesres LOMISA = .FALSE. if (.not.lodesl.or.ith.ne.0) lomisa =.true. C * il faut faire la mise a jour pour continuer le travail C * mise a jour eventuelle et menage eventuel IF ( LOMISA ) THEN * on essaye de recuperer un travail d'assistant. A priori mcoord est * actif et le pauvre assistant risque d'etre bloque dessus * on va donc desactiver mcoord puis le reactiver son etat * de même pour la tétralogie ipflo... * call oooeta(mcoord,ieta,imod) if (ieta.eq.1) segdes mcoord SEGACT MESRES if (.not. loremp) then 15 continue segdes mesres*record SEGACT MESRES*(ECR=1,MOD) if (.not. loremp) then write(6,*) ' loremp pas vrai dans lirabj ' goto 15 endif endif if (ieta.eq.1) segact,mcoord if (iimpi .eq. 1234) & write(ioimp,*) 'le segment a ete mis a jour ',MESRES JPOOB4(I) = desrev JTYOBJ(I) = desret * c'est un element d'une table on ne fais pas de mise a jour de celle ci * write (6,*) 'lirabj esclave mais pas de nom ' else endif SEGDES MESRES ENDIF ENDIF C JYYY JTYOBI=JTYOBJ(I) * write(6,*) ' jtyobi itype iextab ',jtyobi,itype ,iextab IF(ITYPE(1:8).EQ.JTYOBI.and.iextab.eq.0) GO TO 11 IF(JTYP) THEN IF(ITYP.EQ.JTYOBI.and.iextab.eq.0) GO TO 11 ENDIF C ON VIENT DE TOMBER SUR UN OBJET DE TYPE TEXTE IIO=JPOOB4(I) GO TO 5 ENDIF IF(ITYPE(1:8).EQ.MOVID8) THEN IF(JTYOBI.NE.'SEPARATE'.AND.JTYOBI.NE.'TABLE '.AND. $ JTYOBI.NE.'METHODOL' ) GO TO 11 ENDIF * write(6,*) ' iblqm ' , iblqm if (iblqm.eq.1) then IF (JTYOBI.EQ.'MOT ') GOTO 20 IF (JTYOBI.EQ.'PROCEDUR') GOTO 20 endif IF(JTYOBI.EQ.'TABLE '.OR.JTYOBI.EQ.'OBJET ') THEN INSTAB=1 * write(6,*) ' on positionne instab à 1' IF(ILTTA.EQ.0) ILTTA=I ENDIF IF(JTYOBI.EQ.'METHODOL') THEN IF(MOBJCO.NE.0) THEN IF(ITYPE(1:6).EQ.'OBJET ') THEN JPOOB4(I) =MOBJCO GO TO 11 ENDIF INSTAB=2 IF(ILTTA.EQ.0) ILTTA=I ELSE IF(ITYPE(1:8).EQ.MOVID8) GO TO 11 ENDIF ENDIF 10 CONTINUE 2 CONTINUE C********************** IL N'EN EXISTE PAS C********************** ON VA LIRE DANS LA TABLE INTERMEDIAIRE IF(ISTOP.EQ.1) GO TO 20 IPLAC=ITINTE(IINTPO) * write (6,*) ' iplac dans lirabj apres 2 ',iplac IRAZ=IPLAC IF(IRAZ.LE.0) GO TO 28 N= JTYOBJ(/2) IF( IHPILE.GE.N) THEN N=N+1 SEGADJ JPOOB JTYOBJ(N)=' ' ENDIF IIP=IOUEP2(IPLAC) IF(INOOB2(IPLAC).EQ.MOVID8) THEN * ON MET INSTAB A ZERO INSTAB=0 IINTPO=IINTPO+1 GO TO 2 ENDIF IHPILE=IHPILE+1 interm=inoob2(iplac) JTYOBJ(IHPILE)=interm JPOOB1(IHPILE)=.TRUE. JPOOB2(IHPILE)=IPLAC JPOOB4(IHPILE)=IIP I=IHPILE IINTPO=IINTPO+1 C************************** ON VIENT DE LIRE UN OBJET INSTAB=0 * write (6,*) ' lirabj iintpo itinte interm ',iintpo,itinte(iintpo), * > interm if( interm.eq.ITYPE(1:8)) go to 1 if (itinte(iintpo).gt.0.and. > (interm.eq.'TABLE '.or.interm.eq.'SEPARATE')) goto 2 if (jtyobj(ihpile-2).eq.'TABLE '.AND. > jtyobj(ihpile-1).eq.'SEPARATE') iextab=1 * write (6,*) ' jtyobj instab ',jtyobj(ihpile-2), * > jtyobj(ihpile-1),jtyobj(ihpile),instab GO TO 1 11 CONTINUE C**************************** ON A TROUVE L'INFORMATION DEMANDE * write (6,*) ' ancien ibpile ',ibpile,' nouveau ',ibpiln IPLAC=JPOOB2(I) * write (6,*) ' iplac dans lirabj apres 11 ',iplac,jtyobj(i) IF (IBPILN.NE.0) IBPILE=IBPILN IRETOU=1 IF(ITYPE(1:8).EQ.MOVID8.AND.ILTTA.NE.0) THEN I = ILTTA ENDIF * write(6,*) ' i ' , i JPOOB1(I)=.FALSE. IF(ITYPE(1:8).EQ.'FLOTTANT'.AND.JTYOBJ(I).EQ.'ENTIER ') THEN ITYPE='ENTIER ' ENDIF IRET=JPOOB4(I) MESERR=0 IF(JTYOBJ(I).EQ.'PROCEDUR'.AND.ITYPE(1:4).EQ.'MOT ') THEN C FAIRE ATTENTION POUR REMPLACEMENT D'UNE PROCEDURE PAR SON NOM C DE TYPE MOT * IF(iimpi.eq.1754.OR.iimpi.eq.1876) * $ write (6,fmt='('' remplacement '' * $ ,'' d une procedure par son nom'')') IRET=INOOB1(IPLAC) ITYPE='MOT ' IMOTLU=I if(iimpi.eq.1876) write(6,*) ' imotlu ', imotlu * IF(IIMPI.EQ.1876)THEN * do 255 IK=IBPILE,IHPILE * write(6,*) 'lirabj IK JTYOBj JPOOB1 JPOOB2 JPOOB4', * $ ik, JTYOBJ(IK),JPOOB1(IK),JPOOB2(IK),JPOOB4(IK) * 255 continue * write(6,*) 'on a trouver type valeur',itype,iret * ENDIF RETURN ENDIF IMOTLU=I IF(ITYPE(1:8).NE.MOVID8) RETURN ITYPE=JTYOBJ(I) * IF(IIMPI.EQ.1876)THEN * do 254 IK=IBPILE,IHPILE * write(6,*) 'lirabj IK JTYOBj JPOOB1 JPOOB2 JPOOB4', * $ ik, JTYOBJ(IK),JPOOB1(IK),JPOOB2(IK),JPOOB4(IK) * 254 continue * write(6,*) 'on a trouver type valeur',itype,iret * ENDIF RETURN C******************************** LECTURE DU POINT VIRGULE 28 ISTOP=1 C******************************** ON N'A PAS TROUVEE L'INFORMATION 20 CONTINUE C DANS LE CAS DE LECTURE BLANCHE ET DE LA SEULE PRESENCE D'UNE TABLE C ON ARRIVE ICI AVEC ILTTA NE 0 IF(ILTTA.NE.0) THEN IF(ITYPE(1:8).EQ.MOVID8) THEN ISTOP=0 ITYPE = 'TABLE ' IMOTLU= ILTTA IRETOU=1 JPOOB1(IMOTLU)=.FALSE. IRET=JPOOB4(IMOTLU) MESERR=0 RETURN ENDIF ENDIF IRETOU=0 IF(ICODE.gt.0) goto 31 RETURN 31 CONTINUE MOTERR(1:8)=ITYPE MESERR=0 END
© Cast3M 2003 - Tous droits réservés.
Mentions légales