SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/LFI/mt/lfinfo_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe LFI
00002       SUBROUTINE LFINFO_MT (LFI, KREP, KNUMER, CDNOMA, KLONG, KPOSEX )
00003       USE LFIMOD, ONLY : LFICOM
00004       USE PARKIND1, ONLY : JPRB
00005       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
00006 C****
00007 C        SOUS-PROGRAMME CHARGE DE RENSEIGNER SUR EXISTENCE ET CARACTERI-
00008 C     STIQUES ( LONGUEUR, POSITION ) D'UN ARTICLE LOGIQUE, POUR UNE
00009 C     UNITE LOGIQUE OUVERTE PAR LE LOGICIEL DE FICHIERS INDEXES *LFI*.
00010 C**
00011 C    ARGUMENTS : KREP   (SORTIE) ==> CODE-REPONSE DU SOUS-PROGRAMME;
00012 C                KNUMER (ENTREE) ==> LFI%NUMERO DE L'UNITE LOGIQUE;
00013 C                CDNOMA (ENTREE) ==> NOM DE L'ARTICLE A CHERCHER;
00014 C                KLONG  (SORTIE) ==> LONGUEUR DE L'ARTICLE;
00015 C                KPOSEX (SORTIE) ==> POSITION ( DANS LE FICHIER, DU PRE-
00016 C                                    MIER MOT ) DE L'ARTICLE SUIVANT.
00017 C
00018 C       Noter que si l'unite logique est ouverte pour le logiciel LFI et
00019 C     que l'article demande n'y est pas trouve, KREP, KLONG et KPOSEX
00020 C     sont retournes a ZERO.
00021 C
00022 #ifndef f77
00023 #include "precision.h"
00024 #endif
00025 C
00026       TYPE(LFICOM) :: LFI
00027       CHARACTER CDNOMA*(*), CLNOMA*(LFI%JPNCPN)
00028 C
00029       INTEGER KREP, KNUMER, KLONG, KPOSEX, IREP, IRANG, ILCLNO, ILCDNO
00030       INTEGER IDECBL, IPOSBL, IARTEX, IRGPIM, INIMES, INBALO, IRETIN
00031 C
00032       LOGICAL LLVERF
00033 C
00034 #include "lficom2.h"
00035 #include "lficom_mt.h"
00036 C**
00037 C     1.  -  CONTROLES DES PARAMETRES D'APPEL, PUIS INITIALISATIONS.
00038 C-----------------------------------------------------------------------
00039 C
00040 C        Appel legerement anticipe a LFINUM, garantissant l'initialisa-
00041 C     tion des variables globales du logiciel a la 1ere utilisation.
00042 C
00043       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00044       IF (LHOOK) CALL DR_HOOK('LFINFO_MT',0,ZHOOK_HANDLE)
00045       CALL LFINUM_MT (LFI, KNUMER,IRANG)
00046       LLVERF=.FALSE.
00047       ILCDNO=LEN (CDNOMA)
00048       KLONG=0
00049       KPOSEX=0
00050 C
00051       IF (ILCDNO.LE.0) THEN
00052         IREP=-15
00053         CLNOMA=LFI%CHINCO(:LFI%JPNCPN)
00054         ILCLNO=LFI%JPNCPN
00055         GOTO 1001
00056       ELSEIF (CDNOMA.EQ.' ') THEN
00057         IREP=-18
00058         CLNOMA=' '
00059         ILCLNO=1
00060         GOTO 1001
00061       ENDIF
00062 C
00063 C        Recherche de la longueur "utile" du nom d'article specifie.
00064 C        (c'est-a-dire sans tenir compte des blancs terminaux eventuels)
00065 C
00066       IDECBL=0
00067 C
00068   101 CONTINUE
00069       IPOSBL=IDECBL+INDEX (CDNOMA(IDECBL+1:),' ')
00070 C
00071       IF (IPOSBL.LE.IDECBL) THEN
00072         ILCLNO=ILCDNO
00073       ELSEIF (CDNOMA(IPOSBL:).EQ.' ') THEN
00074         ILCLNO=IPOSBL-1
00075       ELSE
00076         IDECBL=IPOSBL
00077         GOTO 101
00078       ENDIF
00079 C
00080       IF (ILCLNO.LE.LFI%JPNCPN) THEN
00081         CLNOMA=CDNOMA(:ILCLNO)
00082       ELSE
00083         CLNOMA=CDNOMA(:LFI%JPNCPN)
00084         ILCLNO=LFI%JPNCPN
00085         IREP=-15
00086         GOTO 1001
00087       ENDIF
00088 C
00089       IF (IRANG.EQ.0) THEN
00090         IREP=-1
00091         GOTO 1001
00092       ENDIF
00093 C
00094        IF (LFI%LMULTI) CALL LFIVER_MT (LFI, LFI%VERRUE(IRANG),'ON')
00095       LLVERF=LFI%LMULTI
00096 C
00097       INBALO=LFI%MDES1D(IXM(LFI%JPNALO,IRANG))
00098 C
00099       IF (INBALO.NE.0) THEN
00100 C**
00101 C     2.  -  EXPLORATION DES (PAIRES DE) PAGES ET ARTICLES D'INDEX,
00102 C            A LA RECHERCHE DE L'ARTICLE LOGIQUE DEMANDE.
00103 C-----------------------------------------------------------------------
00104 C
00105         CALL LFIRAN_MT (LFI, IREP,IRANG,CLNOMA(:ILCLNO),
00106      S                  IRGPIM,IARTEX,IRETIN)
00107 C
00108         IF (IRETIN.EQ.1) THEN
00109           GOTO 903
00110         ELSEIF (IRETIN.EQ.2) THEN
00111           GOTO 904
00112         ELSEIF (IRETIN.NE.0) THEN
00113           GOTO 1001
00114         ENDIF
00115 C
00116       ELSE
00117         IARTEX=0
00118         IREP=0
00119       ENDIF
00120 C
00121       IF (IARTEX.EQ.0) THEN
00122         KLONG=0
00123         KPOSEX=0
00124       ELSE
00125 C
00126 C        ON COMPLETE LES CARACTERISTIQUES DE L'ARTICLE.
00127 C
00128         IF (.NOT.LFI%LPHASP(IRGPIM)) THEN
00129 C
00130           CALL LFIPHA_MT (LFI, IREP,IRANG,IRGPIM,IRETIN)
00131 C
00132           IF (IRETIN.EQ.1) THEN
00133             GOTO 903
00134           ELSEIF (IRETIN.EQ.2) THEN
00135             GOTO 904
00136           ELSEIF (IRETIN.NE.0) THEN
00137             GOTO 1001
00138           ENDIF
00139 C
00140         ENDIF
00141 C
00142         KLONG=LFI%MLGPOS(IXM(2*IARTEX-1,IRGPIM))
00143         KPOSEX=LFI%MLGPOS(IXM(2*IARTEX,IRGPIM))
00144 C
00145 C        On met a jour ce qui a trait aux acces pseudo-sequentiels...
00146 C     ceci surtout pour ne pas faire 2 recherches dans l'index lors
00147 C     d'un appel a LFILEC qui suivrait l'appel a LFINFO.
00148 C
00149         LFI%NDERGF(IRANG)=LFI%JPNAPP*LFI%MFACTM(IRANG)*
00150      S                    (LFI%MRGPIF(IRGPIM)-1)+IARTEX
00151         LFI%CNDERA(IRANG)=CLNOMA(:ILCLNO)
00152         LFI%NSUIVF(IRANG)=LFI%JPNIL
00153         LFI%NPRECF(IRANG)=LFI%JPNIL
00154       ENDIF
00155 C
00156       GOTO 1001
00157 C**
00158 C     9.  - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
00159 C-----------------------------------------------------------------------
00160 C
00161   903 CONTINUE
00162       CLACTI='WRITE'
00163       GOTO 909
00164 C
00165   904 CONTINUE
00166       CLACTI='READ'
00167 C
00168   909 CONTINUE
00169 C
00170 C      AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
00171 C
00172       IREP=IABS (IREP)
00173 C**
00174 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00175 C            VIA LE SOUS-PROGRAMME "LFIEMS" .
00176 C-----------------------------------------------------------------------
00177 C
00178  1001 CONTINUE
00179       KREP=IREP
00180       LLFATA=LLMOER (IREP,IRANG)
00181 C
00182       IF (IRANG.NE.0) THEN
00183         LFI%NDEROP(IRANG)=7
00184         LFI%NDERCO(IRANG)=IREP
00185          IF (LLVERF) CALL LFIVER_MT (LFI, LFI%VERRUE(IRANG),'OFF')
00186       ENDIF
00187 C
00188       IF (LLFATA.OR.IXNIMS (IRANG).EQ.2) THEN
00189         INIMES=2
00190       ELSE
00191         IF (LHOOK) CALL DR_HOOK('LFINFO_MT',1,ZHOOK_HANDLE)
00192         RETURN
00193       ENDIF
00194 C
00195       CLNSPR='LFINFO'
00196       WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER='
00197 ',I3,     S       '', CDNOMA='''''',A,'''''', KLONG='',I7,'', KPOSEX='',I8)')
00198      S     KREP,KNUMER,CLNOMA(:ILCLNO),KLONG,KPOSEX
00199       CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,LLFATA,
00200      S                CLMESS,CLNSPR,CLACTI)
00201 C
00202       IF (LHOOK) CALL DR_HOOK('LFINFO_MT',1,ZHOOK_HANDLE)
00203       END
00204