C ACCTAB SOURCE PV 06/04/13 21:15:02 5400 SUBROUTINE ACCTAB(MTABLE,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN, $ TYPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE) C C **** DONNE ACCES A UN OBJET DANS UNE TABLE CONNAISSANT LE TYPE C **** DE L'INDICE ( TAPIND ) ET LA VALEUR DE L'INDICE SUIVANT SON C **** TYPE . ENTIER-IVAL;FLOTTANT-XVAL;MOT-CHARIN;LOGIQUE-LOGIN; C **** AUTRE-IOBIN C ON PEUT PRECISER LE TYPE D'OBJET ATTENDU DANS TYPOBJ CE C QUI PROVOQUE UN MESSAGE D'ERREUR S'IL N'EXISTE PAS. C **** EN SORTIE : TYPOBJ TYPE DE L'OBJET AU CAS OU TYPOBJ ETAIT = ' ' C **** VALEUR DE L'OBJET DANS IVALRE SI ENTIER; XVALRE SI C **** FLOTTANT; CHARRE SI MOT ( DE LA LONGUEUR DE LA C **** CHAINE ENVOYEE EN ARGUMENT);LOGRE SI LOGIQUE; C **** IOBRE POUR TOUT AUTRE TYPE C IMPLICIT INTEGER(I-N) -INC CCNOYAU -INC CCOPTIO -INC SMTABLE -INC SMCOORD -INC CCASSIS external long CHARACTER*(*) TAPIND,TYPOBJ,CHARIN,CHARRE REAL*8 XVALIN,XVALRE LOGICAL LOGRE,LOGIN character*72 motass logical iloremp,lomisa,LOLO CHARACTER*(8) CHARA,TYPIND nth=0 if (nbesc.ne.0) call ooonth(nth) TYPIND=TAPIND CHARA=TYPOBJ IOBRE=0 IF(CHARA.EQ.' ') THEN IF(LEN(TYPOBJ).LT.8) THEN CALL ERREUR(5) RETURN ENDIF ENDIF SEGACT MTABLE IN = MLOTAB IF(IN.EQ.0.AND.CHARA.NE.' ') GO TO 1000 IF(IN.EQ.0) then segdes mtable RETURN end if IA=4 IF(TYPIND.EQ.'ENTIER ') IA=1 IF(TYPIND.EQ.'FLOTTANT') IA=2 IF(TYPIND.EQ.'MOT ') IA=3 IF(TYPIND.EQ.'LOGIQUE ') IA=5 IF(TYPIND.EQ.'METHODE ') IA=3 IF(IA.EQ.3) IL=LONG(CHARIN) if(nbesc.ne.0) segact ipiloc DO 1 I=1,IN IF(MTABTI(I).NE.TYPIND ) GO TO 1 GO TO (11,12,13,14,15),IA 11 CONTINUE IF(MTABII(I).NE.IVALIN) GO TO 1 GOTO 20 12 CONTINUE IF(RMTABI(I).NE.XVALIN ) GO TO 1 GO TO 20 15 CONTINUE IF(IPLOGI(MTABII(I)).NEQV.LOGIN ) GO TO 1 GO TO 20 14 CONTINUE IF(MTABII(I).NE.IOBIN) GO TO 1 GOTO 20 13 CONTINUE IP=MTABII(I) ID=IPCHAR(IP) IFI=IPCHAR(IP+1) IF(CHARIN(1:IL).EQ.ICHARA(ID:IFI-1)) GO TO 20 IL2=LONG(ICHARA(ID:IFI-1)) IF(CHARIN(1:IL).EQ.ICHARA(ID:ID+IL2-1)) GO TO 20 1 CONTINUE C C ***** L'INDICE N'EXISTE PAS C 1000 IF(CHARA.NE.' ') THEN IF ( TYPIND.EQ.'FLOTTANT') THEN REAERR(1)= XVALIN CALL ERREUR ( 534) ELSEIF (TYPIND.EQ.'MOT ') THEN * WRITE(6,FMT='(A40)') CHARIN IOL=LEN(CHARIN) MOTERR=CHARIN IF(IOL.GT.8) MOTERR(9:11) = '...' CALL ERREUR (535) ELSE MOTERR(1:8) = TYPIND INTERR(1)= IOBIN IF(TYPIND.EQ.'ENTIER ') INTERR(1) = IVALIN CALL ERREUR (171) ENDIF * CALL ERREUR (314) * WRITE(6,FMT='('' INDICE EXISTE PAS '') ') * WRITE(6,FMT='('' TAPIND '',A8) ')TAPIND * WRITE(6,FMT='('' CHARIN '',A8) ')CHARIN * WRITE(6,FMT='('' CHARA '',A8) ')CHARA * WRITE(6,FMT='('' TYPIND '',A8) ')TYPIND ENDIF if(nbesc.ne.0) segdes ipiloc segdes mtable RETURN C C ***** ON A TROUVE L'INDICE C 20 CONTINUE if(nbesc.ne.0) segdes ipiloc TYPIND =MTABTV(I) * decodage des objets esclaves si necessaire if (typind.eq.'ESCLAVE ') then LOMISA = .FALSE. if (.not.lodesl.or.nth.ne.0) lomisa =.true. IF ( LOMISA ) THEN segdes mcoord mesres = mtabiv(i) SEGACT MESRES NESRES = IESRES segact nesres if (.not.loremp) then 10 continue segdes nesres*record segdes mesres * segdes ipiloc SEGACT NESRES*(ECR=1,MOD) segact mesres if (.not.loremp) then write(6,*) ' loremp pas vrai dans acctab ' goto 10 endif endif segdes mesres segact mcoord call tabesc(mtable,i,nesres) TYPIND=esrety segact MESRES*MOD segdes nesres,mesres endif endif IF(CHARA.NE.' ') THEN IF(TYPIND.NE.CHARA) THEN IF(TYPIND.NE.'ENTIER '.OR.CHARA.NE.'FLOTTANT') THEN C L'INDICE EXISTE MAIS LE TYPE NE CORRESPOND PAS IOL=LEN(CHARIN) MOTERR=CHARIN IF(IOL.GT.8) MOTERR(9:11) = '...' MOTERR(12:20)=CHARA CALL ERREUR(627) RETURN ENDIF ENDIF ELSE TYPOBJ=TYPIND ENDIF if(nbesc.ne.0) segact ipiloc IF(TYPIND.EQ.'ENTIER ') THEN IVALRE=MTABIV(I) IF(CHARA.EQ.'FLOTTANT' ) XVALRE=IVALRE ELSEIF(TYPIND.EQ.'FLOTTANT') THEN XVALRE=RMTABV(I) ELSEIF(TYPIND.EQ.'MOT ') THEN IP=MTABIV(I) ID=IPCHAR(IP) IFI=IPCHAR(IP+1) CHARRE=ICHARA(ID:IFI-1) IVALRE=MIN(LEN(CHARRE),IFI - ID ) ELSEIF(TYPIND.EQ.'LOGIQUE ') THEN LOGRE=IPLOGI(MTABIV(I)) ELSE IOBRE=MTABIV(I) ENDIF if(nbesc.ne.0) segdes ipiloc segdes mtable RETURN C1000 CONTINUE C WRITE(6,FMT='('' APRES 1000 '') ') C WRITE(6,FMT='('' TAPIND '',A8) ')TAPIND C WRITE(6,FMT='('' CHARIN '',A8) ')CHARIN C WRITE(6,FMT='('' CHARA '',A8) ')CHARA C WRITE(6,FMT='('' TYPIND '',A8) ')TYPIND C CALL ERREUR(314) C RETURN END