C REDLEC SOURCE PV 13/07/05 21:15:12 7792 C LECTURE DE DONNEES EN FORMAT LIBRE C SUBROUTINE REDLEC(SREDLE) C C LECTURE DE DONNEES EN FORMAT LIBRE C LES RESULTATS SONT DANS LE COMMON /COPTIO/ C LE TYPE DE LA DONNEE EFFECTIVEMENT LUE EST IRE C IRE=1 : ENTIER IRE=2 : FLOTTANT IRE=3 : MOT IRE=4 : TEXTE C IRE=5 : LOGIQUE IRE=0 : FIN DE DIRECTIVE C C - ENTIER NFIX AU PLUS NEUF CHIFFRES SIGNIFICATIFS C - FLOTTANT AU PLUS SEIZE CHIFFRES SIGNIFICATIFS C - MOT OU TEXTE AU PLUS SOIXANTE-DOUZE CARACTERES C - LE NOMBRE DE CARACTERE DU MOT OU DU TEXTE EST NCAR C - LES SEPARATEURS (QUI SONT TRANSMIS COMME DES MOTS) SONT : C ' ','=','+','-','*','/','%' C LE POINT '.' DANS UN MOT EST PRIS COMME SEPARATEUR IL EST MEME C RENVOYE COMMME TYPE SEPARATEUR IRE = 6 C C IMPLICIT INTEGER(I-N) -INC CCREDLE * SAVE SEPARA,EPSI,CARAC * LOGICAL SEPARA CHARACTER*25 CARAC CHARACTER*117 CAROK REAL*8 DP C 1111111111222 C 1 234567890123456789012 DATA CARAC /' ''+-/*=.0123456789DEQdeq%'/ DATA CAROK/'1234567890°+&é(-è_çà)=~#{[|`\\^@]}¤?azertyuiop^$qsdfgh >jklmù*wxcvbn,;:!AZERTYUIOPQSDFGHJKLM%µWXCVBN?.§<>äëÿüïöâêûîô£''/'/ C ith=0 call ooonth(ith) * write (6,*) ' thread ',ith, 'redlec pointeur ',sredle MOT(1:8)=' ' 5 NRAN=NRAN+1 IF (NRAN.GT.ICOUR) GOTO 2 INDC=INDEX(CAROK,TEXT(NRAN:NRAN)) IF (INDC.EQ.0) TEXT(NRAN:NRAN)=' ' INDIN=23 IND=INDEX(CARAC,TEXT(NRAN:NRAN)) * SI SEPARA EST VRAI ON CONSIDERE + ET - ET . COMME DES MOTS IF (SEPARA.AND.(IND.EQ.3.OR.IND.EQ.4.OR.IND.EQ.8)) THEN INDIN=IND GOTO 60 ENDIF SEPARA=.FALSE. IF (IND.EQ.0) GOTO 60 IF (IND.EQ.1) GOTO 5 INDIN=IND IF(IND.EQ.2) GOTO 60 IF(IND.GT.18) GOTO 60 IF (IND.GE.5.AND.IND.LE.7) GOTO 60 C C ON A LU UN NOMBRE C IRE=1 IDE=NRAN NFIX=0 ISGN=0 IDEC=-1 IEXP=0 KSGN=1 IF (IND.EQ.4) KSGN=-1 IF (IND.NE.3.AND.IND.NE.4) GOTO 25 22 NRAN=NRAN+1 IF(NRAN.GT.ICOUR) GOTO 30 INDC=INDEX(CAROK,TEXT(NRAN:NRAN)) IF (INDC.EQ.0) TEXT(NRAN:NRAN)=' ' IND=INDEX(CARAC,TEXT(NRAN:NRAN)) IF (IND.NE.0) GOTO 25 24 CONTINUE NRAN=IDE IND=INDIN GOTO 60 25 IF(IND.LT.9.OR.IND.GT.18) GOTO 28 ISGN=ISGN+1 IF(IDEC.GE.0) IDEC=IDEC+1 IF(ISGN-10) 26,252,255 252 MFIX=NFIX NFIX=0 GOTO 26 255 IF(ISGN.LT.19) GOTO 26 IF(IDEC.LT.0) IEXP=IEXP+1 IF(IDEC.GE.0) IDEC=IDEC-1 GOTO 22 26 NFIX=10*NFIX+IND-9 GOTO 22 28 IF(IND.EQ.1) GOTO 30 IF (IND.EQ.8) GOTO 29 IF(IND.LE.7.AND.IND.GE.3) GOTO 300 IF(IND.GT.18) GOTO 40 GOTO 24 29 IF (IDEC.GE.0) GOTO 24 IDEC=0 GOTO 22 300 IF (IDEC.LT.0) NRAN=NRAN-1 SEPARA=.TRUE. 30 IF (ISGN.EQ.0) GOTO 24 IF (IDEC.GE.0) GOTO 40 C C ON A LU UN ENTIER C NCAR=NRAN-IDE IRE=1 IF(ISGN.GT.9) GOTO 40 IF(KSGN.LT.0) NFIX=-NFIX FLOT=NFIX RETURN C C ON A LU UN FLOTTANT C 40 IRE=2 FLOT=NFIX IF(ISGN.LT.10) GOTO 41 DP=MFIX IF(ISGN.GT.18) ISGN=18 FLOT=FLOT+DP*1D1**(ISGN-9) 41 IF(IDEC.LT.0) IDEC=0 IEXP=IEXP-IDEC IF(IND.EQ.1) GOTO 55 IF (IND.LE.7.AND.IND.GE.3) GOTO 550 ISGN=1 NFIX=0 NRAN=NRAN+1 IF (NRAN.GT.ICOUR) GOTO 53 IND=INDEX(CARAC(3:4),TEXT(NRAN:NRAN))+2 IF (IND.EQ.2) GOTO 305 IF (IND.EQ.4) ISGN=-1 42 NRAN=NRAN+1 IF(NRAN.GT.ICOUR) GOTO 53 305 CONTINUE INDC=INDEX(CAROK,TEXT(NRAN:NRAN)) IF (INDC.EQ.0) TEXT(NRAN:NRAN)=' ' IND=INDEX(CARAC,TEXT(NRAN:NRAN)) IF (IND.EQ.0) GOTO 24 IF(IND.EQ.1) GOTO 52 IF (IND.LE.7.AND.IND.GE.3) GOTO 520 IF(IND.LT.9.OR.IND.GT.18) GOTO 24 NFIX=10*NFIX+IND-9 GOTO 42 52 NRAN1=NRAN-1 IF (INDEX(CARAC(19:24),TEXT(NRAN1:NRAN1)).NE.0) GOTO 42 GOTO 521 520 NRAN=NRAN-1 SEPARA=.TRUE. 521 CONTINUE 53 IF(ISGN.LT.0) NFIX=-NFIX IEXP=IEXP+NFIX GOTO 55 550 NRAN=NRAN-1 SEPARA=.TRUE. 55 FLOT=FLOT*1D1**IEXP IF(KSGN.LT.0) FLOT=-FLOT NCAR=NRAN-IDE RETURN C C ON A LU UN MOT OU UN TEXT C 60 MOT=' ' IF (IND.EQ.2) GOTO 70 C C ON A LU UN MOT C IRE=3 IDEB=NRAN IF ((INDIN.LT.3.OR.INDIN.GT.8).AND.INDIN.NE.25) GOTO 66 NRAN=NRAN+1 IF (INDIN.NE.6) GOTO 68 IF (NRAN.GT.ICOUR) GOTO 68 IF (TEXT(NRAN:NRAN).NE.CARAC(6:6)) GOTO 68 NRAN=NRAN+1 GOTO 68 66 NRAN=NRAN+1 IF(NRAN.GT.ICOUR) GOTO 68 INDC=INDEX(CAROK,TEXT(NRAN:NRAN)) IF (INDC.EQ.0) TEXT(NRAN:NRAN)=' ' INDAUX=INDEX(CARAC,TEXT(NRAN:NRAN)) IF (INDAUX.EQ.1.OR.INDAUX.EQ.2) GOTO 68 IF ((INDAUX.LT.3.OR.INDAUX.GT.8).AND.INDAUX.NE.25) GOTO 66 SEPARA=.TRUE. IFIN=NRAN-1 GO TO 680 68 IFIN=NRAN-1 SEPARA=.FALSE. 680 CONTINUE NCAR=IFIN-IDEB+1 NCAR=MIN(72,NCAR) MOT(1:NCAR)=TEXT(IDEB:IFIN) NRAN=NRAN-1 IF(MOT(1:1).EQ.'.') IRE=6 IF(MOT(1:1).EQ.'%') IRE=7 C C CE MOT EST-IL 'VRAI' OU 'FAUX' AUQUEL CAS ON A LU UN LOGIQUE C IF (MOT(1:5).EQ.'VRAI') THEN BOOL=.TRUE. IRE=5 ELSEIF (MOT(1:5).EQ.'FAUX') THEN BOOL=.FALSE. IRE=5 ENDIF RETURN 70 IRE=4 NRAN=NRAN+1 IDEB=NRAN 71 NRAN=NRAN+1 IF (NRAN.GT.ICOUR) GOTO 72 IF (TEXT(NRAN:NRAN).EQ.CARAC(2:2)) GOTO 72 GOTO 71 72 IFIN=NRAN-1 NCAR=IFIN-IDEB+1 NCAR=MIN(72,NCAR) MOT(1:NCAR)=TEXT(IDEB:IFIN) RETURN 2 IRE=0 RETURN END