C ECCTAB SOURCE CHAT 06/03/16 21:17:04 5336 SUBROUTINE ECCTAB(MTABLE,TAPIND,IVALIN,XVALIN,CHARIN,LOGIN,IOBIN, $ TAPOBJ,IVALRE,XVALRE,CHARRE,LOGRE,IOBRE) C C **** MET UN OBJET DANS UNE TABLE C **** TAPIND TYPE DE L'INDICE CHARACTER*(*) C **** PUIS LA VALEUR DE L'INDICE IVALIN SI ENTIER C **** XVALIN SI FLOTTANT C **** CHARIN SI MOT C **** LOGIN SI LOGIQUE C **** IOBIN POUR TOUT AUTRE TYPE C **** TAPOBJ TYPE DE L'OBJET CHARACTER*(*) C **** PUIS LA VALEUR DE L'INDICE IVALRE SI ENTIER C **** XVALRE SI FLOTTANT C **** CHARRE SI MOT C **** LOGRE SI LOGIQUE C **** IOBRE POUR TOUT AUTRE TYPE C **** C C IMPLICIT INTEGER(I-N) -INC CCNOYAU -INC SMTABLE -INC CCOPTIO -INC CCASSIS external long REAL*8 XVALIN,XVALRE LOGICAL LOGRE,LOGIN CHARACTER*(*) TAPIND,TAPOBJ,CHARIN,CHARRE CHARACTER*(8) CHARA,TYPIND,TYPOBJ if(nbesc.ne.0) segact ipiloc TYPIND=TAPIND TYPOBJ=TAPOBJ SEGACT MTABLE*MOD IN = MLOTAB C C ***** RECHERCHE DE L'INDICE S'IL EXISTE C IA=4 IF(TYPIND.EQ.'ENTIER ') IA=1 IF(TYPIND.EQ.'FLOTTANT') IA=2 IF(TYPIND.EQ.'MOT ') IA=3 IF(TYPIND.EQ.'METHODE ') IA=3 IF(TYPIND.EQ.'LOGIQUE ') IA=5 C ****** dans le cas des mots on ignore les blancs situes a la fin IF(IA.EQ.3) IL=LONG(CHARIN) IF(IN.EQ.0) GO TO 10 DO 1 I=1,IN MT=I 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) IL1=LONG(ICHARA(ID:IFI-1)) IF(IL1.NE.IL) GO TO 1 IF(CHARIN(1:IL).NE.ICHARA(ID:ID+IL-1)) GO TO 1 GO TO 20 1 CONTINUE 10 CONTINUE C C ***** L'INDICE N'EXISTE PAS ON L'AJOUTE C MLOTAB=MLOTAB+1 M=MTABII(/1) IF (M.LT.MLOTAB) THEN M=M+50 SEGADJ MTABLE ENDIF M=MLOTAB MT=M MTABTI(M)=TYPIND IF(IA.EQ.1) THEN IRET=IVALIN ELSEIF(IA.EQ.2) THEN RMTABI(MT)=XVALIN GO TO 20 ELSEIF(IA.EQ.3) THEN CALL POSCHA( CHARIN(1:IL),IRET) GO TO 200 ELSEIF(IA.EQ.5) THEN call poslog(login,iret) GO TO 200 ELSEIF(IA.EQ.4) THEN IRET=IOBIN ENDIF 200 MTABII(MT)=IRET * if(nbesc.ne.0) segact ipiloc 20 CONTINUE C C ***** FINI POUR L'INDICE FAIRE LA VALEUR C IA=4 IF(TYPOBJ.EQ.'ENTIER ') IA=1 IF(TYPOBJ.EQ.'FLOTTANT') IA=2 IF(TYPOBJ.EQ.'MOT ') IA=3 IF(TYPOBJ.EQ.'LOGIQUE ') IA=5 IF(IA.EQ.3) IL=LEN(CHARRE) MTABTV(MT)= TYPOBJ IF(IA.EQ.1) THEN IRET=IVALRE ELSEIF(IA.EQ.2) THEN IRET=0 RMTABV(MT)=XVALRE GO TO 300 ELSEIF(IA.EQ.3) THEN CALL POSCHA(CHARRE,IRET) GO TO 300 ELSEIF(IA.EQ.5) THEN call poslog(logre,iret) GO TO 300 ELSEIF(IA.EQ.4) THEN IRET=IOBRE ENDIF 300 MTABIV(MT)=IRET SEGDES MTABLE If(nbesc.ne.0) segdes ipiloc RETURN END