SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/XRD38/LFI/mt/lfiouv_mt.F
Go to the documentation of this file.
00001 C Jan-2011 P. Marguinaud Thread-safe LFI
00002       SUBROUTINE LFIOUV_MT (LFI, KREP, KNUMER, LDNOMM, CDNOMF, 
00003      S                      CDSTTO, LDERFA,
00004      S                      LDIMST, KNIMES, KNBARP, KNBARI )
00005       USE LFIMOD, ONLY : LFICOM
00006       USE PARKIND1, ONLY : JPRB
00007       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
00008 C****
00009 C        SOUS-PROGRAMME D'OUVERTURE D'UNE UNITE LOGIQUE DEVANT ETRE
00010 C     TRAITEE COMME UN FICHIER INDEXE, PAR LE LOGICIEL LFI.
00011 C**
00012 C     ARGUMENTS : KREP   (SORTIE) ==> CODE-REPONSE DU SOUS-PROGRAMME;
00013 C                 KNUMER (ENTREE) ==> LFI%NUMERO DE L'UNITE LOGIQUE;
00014 C                 LDNOMM (ENTREE) ==> VRAI SI L'UNITE LOGIQUE DOIT ETRE
00015 C                                     ASSOCIEE A UN NOM DE FICHIER EXP-
00016 C                                     LICITE LORS DE L'"OPEN" FORTRAN;
00017 C                 CDNOMF (ENTREE) ==> NOM DE FICHIER EXPLICITE, SI
00018 C                                     *LDNOMM* EST VRAI - MEME SI CE
00019 C                                     N'EST PAS LE CAS, CE *DOIT* ETRE
00020 C                                     UN OBJET DE TYPE "CHARACTER" .
00021 C                 CDSTTO (ENTREE) ==> "STATUS" POUR L'"OPEN" FORTRAN
00022 C                                     ('OLD','NEW','UNKNOWN','SCRATCH')
00023 C                                     PAR DEFAUT, METTRE 'UNKNOWN';
00024 C                 LDERFA (ENTREE) ==> OPTION D'ERREUR FATALE;
00025 C                 LDIMST (ENTREE) ==> OPTION IMPRESSION DE STATISTIQUES
00026 C                                     AU MOMENT DE LA FERMETURE;
00027 C                 KNIMES (ENTREE) ==> NIVEAU DE LA MESSAGERIE (0,1 OU 2)
00028 C                                     ( 0==>RIEN, 2==>TOUT )
00029 C                 KNBARP (ENTREE) ==> NOMBRE D'ARTICLES LOGIQUES PREVUS,
00030 C                                     CE QUI N'EST UTILISE QUE LORS DE
00031 C                                     LA CREATION DU FICHIER,
00032 C                                     ET QUI N'EMPECHE QUAND MEME PAS
00033 C                                     D'AVOIR PLUS D'ARTICLES LOGIQUES;
00034 C                 KNBARI (SORTIE) ==> NOMBRE D'ARTICLES LOGIQUES DE DON-
00035 C                                     NEES SUR LE FICHIER, INITIALEMENT.
00036 C                                     (ZERO SI CREATION)
00037       CHARACTER CPNOMD*(*)
00038       PARAMETER ( CPNOMD='%%%%% FICHIER SANS NOM %%%%%' )
00039 C
00040 C    Modifications:
00041 C
00042 C    02/06/97, Jean Clochard.
00043 C
00044 C              -Modification des impressions pour que l'annee puisse
00045 C               etre imprimee avec 4 chiffres.
00046 C
00047 #ifndef f77
00048 #include "precision.h"
00049 #endif
00050 C
00051       TYPE(LFICOM) :: LFI
00052       INTEGER KREP, KNUMER, KNIMES, KNBARP, KNBARI
00053 #ifndef f77
00054       INTEGER (KIND=JPDBLE) IDATE, IHEURE
00055 #else
00056       INTEGER IDATE, IHEURE
00057 #endif
00058       INTEGER ILSTTU, IREPX, IRANG, IRANMS, INBARI, IDECBL, IPOSBL, J
00059       INTEGER ILNOMF, INLNOM, INIMES, IREP, ILNOMS, IFACTM, ILSTTO, IJ
00060       INTEGER IRANFM, ILACTI, ICOMPT, ITAILS, ICRITS, IPOFIN, ICRITG
00061       INTEGER ICRITD, ICRITR, IPOSCA, INREAD, INWRIT, IBASE, ILOREC
00062       INTEGER INAPHY, JREC, ILARPH, INALPP, IFACPH, IFACPP, INBPIR
00063       INTEGER IRANGD, IREC, INBALO, ILUTIL, IRGPIF, IRETIN
00064 C
00065       LOGICAL LDNOMM, LDERFA, LDIMST, LLEXFI, LLNOUF, LLNOMS
00066       LOGICAL LLVERG, LLEXUL
00067 C
00068       CHARACTER CDNOMF*(*), CDSTTO*(*)
00069       CHARACTER*(LFI%JPLSTX) CLSTTO
00070       CHARACTER*(LFI%JPLFTX) CLNOMF, CLNOMS
00071 C
00072 #include "lficom2.h"
00073 #include "lficom_mt.h"
00074 C
00075 C     1.  -  CONTROLES DIVERS, ET INITIALISATIONS.
00076 C-----------------------------------------------------------------------
00077 C*
00078 C     1.0 - PARTIE "ELEMENTAIRE".
00079 C-----------------------------------------------------------------------
00080 C
00081       REAL(KIND=JPRB) :: ZHOOK_HANDLE
00082       IF (LHOOK) CALL DR_HOOK('LFIOUV_MT',0,ZHOOK_HANDLE)
00083       ILSTTU=MIN0 (LEN (CLSTTO), LEN (CDSTTO))
00084       IREPX=0
00085       IRANG=0
00086       IRANMS=0
00087       INBARI=0
00088       LLVERG=.FALSE.
00089 C
00090 C        Appel legerement anticipe a LFINUM, permettant une initialisa-
00091 C     tion des variables globales du logiciel a la 1ere utilisation.
00092 C
00093       CALL LFINUM_MT (LFI, KNUMER,IRANG)
00094 C
00095       IF (LDNOMM) THEN
00096 C
00097 C        Recherche de la longueur "utile" du nom de fichier specifie.
00098 C        (c'est-a-dire sans tenir compte des blancs terminaux eventuels)
00099 C
00100         IDECBL=0
00101 C
00102   101   CONTINUE
00103         IPOSBL=IDECBL+INDEX (CDNOMF(IDECBL+1:),' ')
00104 C
00105         IF (IPOSBL.LE.IDECBL) THEN
00106           ILNOMF=LEN (CDNOMF)
00107         ELSEIF (CDNOMF(IPOSBL:).EQ.' ') THEN
00108           ILNOMF=MAX0 (IPOSBL-1,1)
00109         ELSE
00110           IDECBL=IPOSBL
00111           GOTO 101
00112         ENDIF
00113 C
00114         IF (ILNOMF.GT.LFI%JPLFTX) THEN
00115           INLNOM=LFI%JPLFTX
00116           INIMES=LFI%NIMESG
00117 C
00118           IF (INIMES.GE.1) THEN
00119 C
00120 C        Message preventif, car le controle de non ouverture d'un meme
00121 C     fichier via deux unites logiques differentes risque de "sauter"
00122 C     artificiellement... et pas forcement a cet appel.
00123 C
00124 C        Le code-reponse ci-dessous est bidon, mais permet de mettre
00125 C     en relief le message via LFIEMS.
00126 C
00127             IREP=LFI%JPNIL
00128             CLNSPR='LFIOUV'
00129 C
00130             IF (LFI%LFRANC) THEN
00131               WRITE (UNIT=CLMESS,FMT=
00132      S               '(''ATTENTION: NOM DE FICHIER TRONQUE A'
00133 ',I4,     S                 '' CARACTERES...'')') LFI%JPLFTX
00134             ELSE
00135               WRITE (UNIT=CLMESS,FMT=
00136      S               '(''WARNING: FILE NAME TRUNCATED TO ONLY'
00137 ',I4,     S                 '' CHARACTERS...'')') LFI%JPLFTX
00138             ENDIF
00139 C
00140             CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,
00141      S                      CLMESS,CLNSPR,
00142      S                      CLACTI)
00143           ENDIF
00144 C
00145         ELSE
00146           INLNOM=ILNOMF
00147         ENDIF
00148 C
00149         CLNOMF=CDNOMF(:INLNOM)
00150       ELSE
00151         ILNOMF=LEN (CPNOMD)
00152         CLNOMF=CPNOMD
00153         INLNOM=ILNOMF
00154       ENDIF
00155 C
00156 C       Ci-dessous, initialisations destinees a forcer l'impression
00157 C     du nom du fichier en cas de problemes.
00158 C
00159       CLNOMS=CLNOMF
00160       ILNOMS=INLNOM
00161       IFACTM=0
00162 C
00163 C        Controle de validite FORTRAN du Numero d'Unite Logique.
00164 C
00165       INQUIRE (UNIT=KNUMER,EXIST=LLEXUL,ERR=901,IOSTAT=IREP)
00166 C
00167       IF (.NOT.LLEXUL) THEN
00168         IREP=-30
00169         GOTO 1001
00170       ENDIF
00171 C
00172 C        CONTROLE DE L'ARGUMENT D'APPEL "KNIMES"
00173 C
00174       IF (KNIMES.LT.0.OR.KNIMES.GT.2) THEN
00175         IREP=-2
00176         GOTO 1001
00177       ENDIF
00178 C
00179 C        CONTROLE DE L'ARGUMENT D'APPEL "CDSTTO"
00180 C
00181       DO 103 J=1,LFI%JPNBST
00182       IF (CDSTTO.EQ.LFI%LFIOUV_CLSTEX(J)) GOTO 104
00183   103 CONTINUE
00184 C
00185       ILACTI=MIN0 (LEN (CDSTTO),LEN (CLACTI))
00186       CLACTI=CDSTTO(:ILACTI)
00187       IREP=-7
00188       GOTO 1001
00189 C
00190   104 CONTINUE
00191       ILSTTO=INDEX (CDSTTO,' ')-1
00192       IF (ILSTTO.GT.0) ILSTTU=ILSTTO
00193       CLSTTO=CDSTTO(:ILSTTU)
00194 C
00195 C               CONTROLE DE NON-OUVERTURE PREALABLE.
00196 C
00197       IF (IRANG.NE.0) THEN
00198         IREP=-5
00199         GOTO 1001
00200       ENDIF
00201 C
00202        IF (LFI%LMULTI) CALL LFIVER_MT (LFI, LFI%VERGLA,'ON')
00203       LLVERG=LFI%LMULTI
00204 C
00205 C        Recherche d'un eventuel facteur multiplicatif predefini pour
00206 C     l'unite logique en question.
00207 C
00208       CALL LFIFMP_MT (LFI, KNUMER,IRANFM)
00209       IFACTM=LFI%MFACTU(IRANFM)
00210 C
00211       IF (LDNOMM) THEN
00212 C
00213 C        SI LE FICHIER EST NOMME, ON VERIFIE QU'IL N'A PAS ETE
00214 C        DEJA OUVERT POUR UNE AUTRE UNITE LOGIQUE.
00215 C
00216         DO 105 J=1,LFI%NBFIOU
00217         IJ=LFI%NUMIND(J)
00218 C
00219         IF (CLNOMF.EQ.LFI%CNOMFI(IJ)(:MIN0 (LFI%JPLFTX,LFI%NLNOMF(IJ))))
00220      S  THEN
00221           ILACTI=MIN0(LEN (CLNOMF),LEN (CLACTI))
00222           CLACTI=CLNOMF(:ILACTI)
00223           IRANMS=IJ
00224           IREP=-13
00225           GOTO 1001
00226         ENDIF
00227 C
00228   105   CONTINUE
00229 C
00230       ENDIF
00231 C
00232   110 CONTINUE
00233 C*
00234 C     1.1 - RECHERCHE D'UN EMPLACEMENT DISPONIBLE DANS LA TABLE DES
00235 C           NUMEROS D'UNITES LOGIQUES *LFI%NUMERO* .
00236 C           (Il faut IFACTM emplacements CONSECUTIFS)
00237 C-----------------------------------------------------------------------
00238 C
00239       IF ((LFI%NFACTM+IFACTM).GT.LFI%JPNXFI) THEN
00240         IREP=-6
00241         GOTO 1001
00242       ENDIF
00243 C
00244       ICOMPT=0
00245       ITAILS=LFI%JPNXFI+1
00246       ICRITS=0
00247 C
00248       DO 111 J=1,LFI%JPNXFI
00249 C
00250       IF (LFI%NUMERO(J).EQ.LFI%JPNIL) THEN
00251         ICOMPT=ICOMPT+1
00252         IF (J.NE.LFI%JPNXFI.OR.ICOMPT.LT.IFACTM.OR.ICOMPT.GT.ITAILS)
00253      S    GOTO 111
00254         IPOFIN=LFI%JPNXFI
00255       ELSEIF (ICOMPT.LT.IFACTM.OR.ICOMPT.GT.ITAILS) THEN
00256         ICOMPT=0
00257 C
00258         IF ((LFI%JPNXFI-J).LT.IFACTM) THEN
00259           GOTO 112
00260         ELSE
00261           GOTO 111
00262         ENDIF
00263 C
00264       ELSE
00265         IPOFIN=J-1
00266       ENDIF
00267 C
00268 C       Les lignes qui suivent sont atteintes si on a trouve un espace
00269 C     contigu suffisant dans la table LFI%NUMERO, et de taille inferieure
00270 C     ou egale a ce qu'on aurait pu trouver precedemment.
00271 C       On calcule alors un critere de cadrage (a gauche ou a droite)
00272 C     dans cet espace, en privilegiant une occupation decentree.
00273 C
00274       ICRITG=IABS (LFI%JPNXFI+1-2*(IPOFIN-ICOMPT+1))
00275       ICRITD=IABS (LFI%JPNXFI+1-2*IPOFIN)
00276 C
00277       IF (ICRITG.GE.ICRITD) THEN
00278         ICRITR=ICRITG
00279         IPOSCA=IPOFIN-ICOMPT+1
00280       ELSE
00281         ICRITR=ICRITD
00282         IPOSCA=IPOFIN-IFACTM+1
00283       ENDIF
00284 C
00285 C       On retient l'espace trouve s'il est plus petit que ce qu'on
00286 C     avait pu trouver precedemment, ou en cas d'egalite de taille
00287 C     s'il est plus decentre.
00288 C
00289       IF (ICOMPT.LT.ITAILS.OR.ICRITR.GT.ICRITS) THEN
00290         ITAILS=ICOMPT
00291         IRANG=IPOSCA
00292         ICRITS=ICRITR
00293       ENDIF
00294 C
00295       ICOMPT=0
00296       IF ((LFI%JPNXFI-J).LT.IFACTM) GOTO 112
00297 C
00298   111 CONTINUE
00299 C
00300   112 CONTINUE
00301 C
00302       IF (ITAILS.GT.LFI%JPNXFI) THEN
00303 C
00304 C         On n'a pas trouve d'espace ad hoc.
00305 C
00306         IF (IFACTM.GT.1) THEN
00307           IREP=-27
00308         ELSE
00309           IREP=-16
00310         ENDIF
00311 C
00312         GOTO 1001
00313 C
00314       ENDIF
00315 C
00316       IRANMS=IRANG
00317       IF (LFI%LMISOP) WRITE (UNIT=LFI%NULOUT,FMT=*)
00318      S  '====> LFIOUV - IRANG = ',IRANG, ', IFACTM = ',IFACTM
00319       LFI%LERFAT(IRANG)=LDERFA
00320       LFI%NIVMES(IRANG)=KNIMES
00321       INREAD=0
00322       INWRIT=0
00323 C
00324 C        CETTE INITIALISATION QUI PEUT PARAITRE BIEN COMPLIQUEE SERT
00325 C     DE PARADE AU MAUVAIS COMPORTEMENT DU "READ" SUR UN FICHIER VIDE,
00326 C     sur CRAY-2 sous UNICOS 4.0 et 5.0... ( Debut )
00327 C
00328       CALL LFIDAH_MT (LFI, IDATE,IHEURE)
00329       IBASE=IHEURE+LFI%JPNIL
00330 C
00331       DO 113 J=1,LFI%JPLDOC
00332       LFI%MDES1D(IXM(J,IRANG))=IBASE-J
00333   113 CONTINUE
00334 C**
00335 C     2.  -  OUVERTURE DU FICHIER AU SENS FORTRAN DU TERME (*OPEN*).
00336 C-----------------------------------------------------------------------
00337 C
00338       ILOREC=LFI%JPRECL*IFACTM
00339 C
00340       IF (LDNOMM) THEN
00341 C*
00342 C     2.1 - CAS OU L'UNITE LOGIQUE DOIT ETRE ASSOCIEE A UN FICHIER
00343 C           DONT LE NOM EST EXPLICITEMENT DONNE.
00344 C-----------------------------------------------------------------------
00345 C
00346         INQUIRE (FILE=CDNOMF,EXIST=LLEXFI,IOSTAT=IREP,ERR=901)
00347 C
00348         IF (LLEXFI.AND.CLSTTO.EQ.'NEW'
00349      S      .OR..NOT.LLEXFI.AND.CLSTTO.EQ.'OLD') THEN
00350           CLACTI=CLSTTO
00351           IREP=-9
00352           IRANG=0
00353           IRANMS=0
00354           GOTO 1001
00355         ENDIF
00356 C
00357         LLNOUF=CLSTTO.EQ.'NEW'.OR.CLSTTO.EQ.'SCRATCH'.OR..NOT.LLEXFI
00358 C
00359 C     APRES TOUS CES CONTROLES DE BASE, ON TENTE L'"OPEN" DU FICHIER .
00360 C
00361         OPEN (UNIT=KNUMER,FILE=CDNOMF,STATUS=CLSTTO,ERR=902,
00362      S       FORM='UNFORMATTED',ACCESS='DIRECT',RECL=ILOREC,IOSTAT=IREP)
00363 C
00364       ELSE
00365 C*
00366 C     2.2 - CAS OU L'UNITE LOGIQUE N'A PAS DE NOM DE FICHIER ASSOCIE
00367 C           EXPLICITE; ON TENTE DIRECTEMENT L'"OPEN" .
00368 C-----------------------------------------------------------------------
00369 C
00370         IF (CLSTTO.NE.'OLD'.AND.CLSTTO.NE.'NEW') THEN
00371           OPEN (UNIT=KNUMER,STATUS=CLSTTO,FORM='UNFORMATTED',
00372      S          ACCESS='DIRECT',RECL=ILOREC,ERR=902,IOSTAT=IREP)
00373         ELSE
00374           OPEN (UNIT=KNUMER,FORM='UNFORMATTED',
00375      S          ACCESS='DIRECT',RECL=ILOREC,ERR=902,IOSTAT=IREP)
00376         ENDIF
00377 C
00378         LLNOUF=CLSTTO.EQ.'SCRATCH'
00379 C
00380       ENDIF
00381 C*
00382 C     2.3 - L'"OPEN" S'EST BIEN PASSE... ON ESSAIE DE RECUPERER LE NOM
00383 C           *SYSTEME* EVENTUEL ASSOCIE A L'UNITE LOGIQUE.
00384 C-----------------------------------------------------------------------
00385 C
00386       INQUIRE (UNIT=KNUMER,NAMED=LLNOMS,NAME=CLNOMS,ERR=901,
00387      S         IOSTAT=IREP)
00388 C
00389       IF (LLNOMS) THEN
00390 C
00391 C        Recherche de la longueur "utile" du nom systeme du fichier.
00392 C        (c'est-a-dire sans tenir compte des blancs terminaux eventuels)
00393 C
00394         IDECBL=0
00395 C
00396   231   CONTINUE
00397         IPOSBL=IDECBL+INDEX (CLNOMS(IDECBL+1:),' ')
00398 C
00399         IF (IPOSBL.LE.IDECBL) THEN
00400           ILNOMS=LEN (CLNOMS)
00401         ELSEIF (CLNOMS(IPOSBL:).EQ.' ') THEN
00402           ILNOMS=MAX0 (IPOSBL-1,1)
00403         ELSE
00404           IDECBL=IPOSBL
00405           GOTO 231
00406         ENDIF
00407 C
00408         IF (.NOT.LDNOMM) THEN
00409           ILNOMF=ILNOMS
00410           INLNOM=ILNOMS
00411           CLNOMF=CLNOMS
00412         ENDIF
00413 C
00414         DO 233 J=1,LFI%NBFIOU
00415         IJ=LFI%NUMIND(J)
00416 C
00417         IF (CLNOMS.EQ.LFI%CNOMSY(IJ)(:LFI%NLNOMS(IJ))) THEN
00418           ILACTI=MIN0(LEN (CLNOMS),LEN (CLACTI))
00419           CLACTI=CLNOMS(:ILACTI)
00420           IREP=-13
00421           IRANG=0
00422           IRANMS=0
00423           GOTO 1001
00424         ENDIF
00425 C
00426   233   CONTINUE
00427 C
00428       ELSE
00429         ILNOMS=LEN (CPNOMD)
00430         CLNOMS=CPNOMD
00431       ENDIF
00432 C
00433       IF (CLSTTO.EQ.'OLD'.OR..NOT.LLNOUF) THEN
00434 C**
00435 C     3.  -  DANS LE CAS OU LE FICHIER DEVAIT OU POUVAIT EXISTER AVANT
00436 C            OUVERTURE, ON ESSAIE DE LIRE LES PREMIERS ARTICLES.
00437 C-----------------------------------------------------------------------
00438 C        ( L'ARTICLE DOCUMENTAIRE ET UNE PAIRE D'ARTICLES D'INDEX;
00439 C          ON COMMENCE PAR L'ARTICLE NO. 3 CAR IL Y A PLUS DE CHANCES
00440 C          D'AVOIR UNE MAUVAISE LECTURE POUR CELUI-CI )
00441 C
00442 C          DANS LE CAS DU "STATUS" 'UNKNOWN', IL S'AGIT DE LEVER
00443 C       L'AMBIGUITE: FICHIER DEJA ECRIT PAR LE LOGICIEL, OU DEVANT ETRE
00444 C       CREE PAR LUI ?
00445 C
00446         DO 301 JREC=3,1,-2
00447         INAPHY=JREC
00448         CALL LFILDO_MT (LFI, IREP,KNUMER,JREC,LFI%MDES1D(IXM(1,IRANG)),
00449      S                  INREAD,IFACTM,IRETIN)
00450 C
00451         IF (IRETIN.NE.0) THEN
00452           GOTO 302
00453         ENDIF
00454 C
00455   301   CONTINUE
00456 C
00457   302   CONTINUE
00458 C
00459         IF (IREP.EQ.0) THEN
00460 C
00461 C           LECTURE OK... ON CONTROLE QUELQUES VALEURS "DOCUMENTAIRES"
00462 C
00463 C            Fin de la parade sur CRAY2, sous UNICOS 4.0 et 5.0 .
00464 C
00465           DO 303 J=1,LFI%JPLDOC
00466           IF (LFI%MDES1D(IXM(J,IRANG)).NE.(IBASE-J)) GOTO 304
00467   303     CONTINUE
00468 C
00469           LLNOUF=.TRUE.
00470           GOTO 390
00471 C
00472   304     CONTINUE
00473           LLNOUF=.FALSE.
00474           ILARPH=LFI%MDES1D(IXM(LFI%JPLPAR,IRANG))
00475           INALPP=LFI%MDES1D(IXM(LFI%JPXAPI,IRANG))
00476           IFACPH=ILARPH/LFI%JPLARD
00477           IFACPP=INALPP/LFI%JPNAPP
00478 C
00479           IF (MIN0 (ILARPH,INALPP).LE.0.OR.MOD (ILARPH,LFI%JPLARD).NE.0
00480      S        .OR.LFI%MDES1D(IXM(LFI%JPLMNA,IRANG)).NE.LFI%JPNCPN
00481      S        .OR.LFI%MDES1D(IXM(LFI%JPLLDO,IRANG)).NE.LFI%JPLDOC
00482      S        .OR.MOD (INALPP,LFI%JPNAPP).NE.0.OR.IFACPP.NE.IFACPH) THEN
00483             IREP=-10
00484             IRANG=0
00485             IRANMS=0
00486             GOTO 1001
00487           ELSEIF (LFI%MDES1D(IXM(LFI%JPFEAM,IRANG)).NE.0) THEN
00488             IREP=-11
00489             LLFATA=LLMOER (IREP,IRANG)
00490 C
00491             IF (LLFATA) THEN
00492               IRANG=0
00493               IRANMS=0
00494               GOTO 1001
00495             ENDIF
00496 C
00497 C        SI L'ERREUR (-11) N'A PAS ETE FATALE, ON DONNE LA POSSIBILITE
00498 C       DE TRAITER LE FICHIER DONT LA DERNIERE MODIFICATION N'A PAS ETE
00499 C       "ENREGISTREE" . MAIS SANS AUCUNE GARANTIE ...
00500 C
00501           ENDIF
00502 C
00503           IF (IFACPH.NE.IFACTM) THEN
00504 C
00505 C     Messagerie de Niveau 1 pour prevenir de l'incident...
00506 C
00507             INIMES=IXNIMS (IRANMS)
00508 C
00509             IF (INIMES.GE.1) THEN
00510               CLNSPR='LFIOUV'
00511 C
00512               IF (LFI%LFRANC) THEN
00513                 WRITE (UNIT=CLMESS,FMT='(''Unite logique'
00514 ',I3,     S '', facteur multiplicatif lu sur fichier='',I3,'', attendu='
00515 ',     S                 I3)')KNUMER,IFACPH,IFACTM
00516               ELSE
00517                 WRITE (UNIT=CLMESS,FMT='(''Logical Unit'
00518 ',I3,     S '', multiply factor read on file='',I3,'', expected='',I3)')
00519      S          KNUMER,IFACPH,IFACTM
00520               ENDIF
00521 C
00522               IREPX=IREP
00523               IREP=0
00524               CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,
00525      S                        CLMESS,CLNSPR,CLACTI)
00526 C
00527               IF (LFI%LFRANC) THEN
00528                 ILUTIL=MIN0 (INLNOM,LFI%JPLFIX,LEN (CLMESS)-6)
00529                 CLMESS='Nom='''//CLNOMF(:ILUTIL)//''''
00530               ELSE
00531                 ILUTIL=MIN0 (INLNOM,LFI%JPLFIX,LEN (CLMESS)-7)
00532                 CLMESS='Name='''//CLNOMF(:ILUTIL)//''''
00533               ENDIF
00534 C
00535               CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,
00536      S                        CLMESS,CLNSPR,CLACTI)
00537 C
00538               IF (LDNOMM.AND.CLNOMS.NE.CLNOMF) THEN
00539 C
00540                 IF (LFI%LFRANC) THEN
00541                   ILUTIL=MIN0 (ILNOMS,LFI%JPLFIX,LEN (CLMESS)-14)
00542                   CLMESS='Nom SYSTEME='''//CLNOMS(:ILUTIL)//''''
00543                 ELSE
00544                   ILUTIL=MIN0 (ILNOMS,LFI%JPLFIX,LEN (CLMESS)-14)
00545                   CLMESS='SYSTEM Name='''//CLNOMS(:ILUTIL)//''''
00546                 ENDIF
00547 C
00548                 CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,
00549      S                          CLMESS,CLNSPR,CLACTI)
00550               ENDIF
00551 C
00552               IF (LFI%LFRANC) THEN
00553                 CLMESS='On essaie de s''adapter au facteur '
00554      S               //'multiplicatif lu sur le fichier...'
00555               ELSE
00556                 CLMESS='One tries to adapt to multiply '
00557      S               //'factor read on the file...'
00558               ENDIF
00559 C
00560               CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,
00561      S                        CLMESS,CLNSPR,CLACTI)
00562               IREP=IREPX
00563             ENDIF
00564 C
00565 C        On va essayer de traiter le fichier avec la longueur d'Article
00566 C     Physique lue sur le fichier. Pour cela, on doit d'abord le fermer,
00567 C     puis on va recommencer le traitement depuis le paragraphe 1.1 .
00568 C
00569             IRANG=0
00570             IRANMS=0
00571             CLOSE (UNIT=KNUMER,STATUS='KEEP',ERR=905,IOSTAT=IREP)
00572 C
00573             IF (IFACPH.GT.LFI%JPFACX) THEN
00574               IREP=-28
00575               GOTO 1001
00576             ENDIF
00577 C
00578             IFACTM=IFACPH
00579             GOTO 110
00580           ENDIF
00581 C
00582         ELSEIF (CLSTTO.EQ.'OLD') THEN
00583           IREP=-12
00584           IRANG=0
00585           IRANMS=0
00586           GOTO 1001
00587         ELSE
00588           IREP=0
00589           LLNOUF=.TRUE.
00590         ENDIF
00591 C
00592       ENDIF
00593 C
00594   390 CONTINUE
00595 C
00596 C         Controle ultime avant le paragraphe suivant, dans la mesure
00597 C     ou, contrairement au FORTRAN, on autorise les "STATUS" 'OLD'
00598 C     et 'NEW' pour une unite logique sans nom de fichier explicite...
00599 C     puisque le logiciel a sa propre mecanique de discrimination entre
00600 C     un fichier "existant" ou "en mode creation".
00601 C
00602       IF (LLNOUF.AND.CLSTTO.EQ.'OLD'
00603      S    .OR..NOT.LLNOUF.AND.CLSTTO.EQ.'NEW') THEN
00604         CLACTI=CLSTTO
00605         IREP=-9
00606         IRANG=0
00607         IRANMS=0
00608         GOTO 1001
00609       ENDIF
00610 C**
00611 C     4.  -  L'OUVERTURE FORTRAN EST OK, ON SAIT SI ON EST EN MODE
00612 C            CREATION DU FICHIER INDEXE OU NON... ON COMMENCE A GARNIR
00613 C            LES VARIABLES EN COMMON, MAIS SANS INCREMENTER *LFI%NBFIOU*
00614 C            CAR ON PEUT ENCORE AVOIR DE (MAUVAISES) SURPRISES.
00615 C-----------------------------------------------------------------------
00616 C
00617       IREPX=IREP
00618       LFI%CNOMFI(IRANG)=CLNOMF
00619       LFI%NLNOMF(IRANG)=ILNOMF
00620       LFI%CNOMSY(IRANG)=CLNOMS
00621       LFI%NLNOMS(IRANG)=ILNOMS
00622       LFI%NDEROP(IRANG)=0
00623       LFI%CSTAOP(IRANG)=CLSTTO
00624       LFI%LNOUFI(IRANG)=LLNOUF
00625       LFI%LMODIF(IRANG)=.FALSE.
00626       LFI%NDERCO(IRANG)=IREP
00627       LFI%NTRULZ(IRANG)=0
00628       LFI%NRFPTZ(IRANG)=0
00629       LFI%NRFDTZ(IRANG)=0
00630       LFI%NBMOLU(IRANG)=0
00631       LFI%NBMOEC(IRANG)=0
00632       LFI%NDERGF(IRANG)=LFI%JPNIL
00633       LFI%CNDERA(IRANG)=' '
00634       LFI%MFACTM(IRANG)=IFACTM
00635       LFI%NSUIVF(IRANG)=LFI%JPNIL
00636       LFI%NPRECF(IRANG)=LFI%JPNIL
00637 C
00638 C     N.B.: LES PAGES D'INDEX DE RANG "IRANG" SONT AUTOMATIQUEMENT
00639 C        "AFFECTEES" A L'UNITE LOGIQUE AYANT CE RANG, ET SERVENT
00640 C        A Y STOCKER LA PREMIERE P.A.I. EN RANG DANS LE FICHIER.
00641 C
00642 C     ( LES PAGES D'INDEX DE RANG "IRANG+(J-1)*LFI%JPNXFI" OU J VARIE
00643 C       DE 1 A LFI%JPNPIA, SONT AUTOMATIQUEMENT AFFECTEES A L'UNITE
00644 C       LOGIQUE DE RANG "IRANG" )
00645 C
00646       LFI%NBLECT(IRANG)=0
00647       LFI%NBNECR(IRANG)=0
00648       LFI%NREESP(IRANG)=0
00649       LFI%NREECO(IRANG)=0
00650       LFI%NREELO(IRANG)=0
00651       LFI%NBTROU(IRANG)=0
00652       LFI%NBRENO(IRANG)=0
00653       LFI%NBSUPP(IRANG)=0
00654       LFI%LISTAT(IRANG)=LDIMST
00655       LFI%LMIMAL(IRANG)=.FALSE.
00656        IF (LFI%LMULTI) CALL LFIVER_MT (LFI, LFI%VERRUE(IRANG),'ASGN')
00657 C
00658       IF (LLNOUF) THEN
00659 C*
00660 C     4.1 - CAS DE CREATION DU FICHIER INDEXE - INITIALISATIONS DIVERSES
00661 C-----------------------------------------------------------------------
00662 C
00663         ILARPH=LFI%JPLARD*IFACTM
00664         INALPP=LFI%JPNAPP*IFACTM
00665 C
00666         DO 412 J=1,ILARPH
00667         LFI%MLGPOS(IXM(J,IRANG))=0
00668   412   CONTINUE
00669 C
00670         DO 413 J=1,LFI%JPNXNA
00671         LFI%CNOMAR(IXC(J,IRANG))=' '
00672   413   CONTINUE
00673 C
00674         DO 414 J=1,ILARPH
00675         LFI%MDES1D(IXM(J,IRANG))=0
00676   414   CONTINUE
00677 C
00678 C         NOMBRE DE PAIRES D'ARTICLES D'INDEX RESERVES,
00679 C         (ELLES OCCUPERONT LES ARTICLES 2 A (2*INBPIR+1) DU FICHIER)
00680 C         ET REMPLISSAGE DE CERTAINS MOTS DE L'ARTICLE DOCUMENTAIRE.
00681 C
00682         INBPIR=MAX0 (1,MIN0 (LFI%JPNXPR,1+(KNBARP-1)/INALPP))
00683         LFI%MDES1D(IXM(LFI%JPNPIR,IRANG))=INBPIR
00684         LFI%MDES1D(IXM(LFI%JPNAPH,IRANG))=1+2*INBPIR
00685         LFI%MDES1D(IXM(LFI%JPLPAR,IRANG))=ILARPH
00686         LFI%MDES1D(IXM(LFI%JPLMNA,IRANG))=LFI%JPNCPN
00687         LFI%MDES1D(IXM(LFI%JPLLDO,IRANG))=LFI%JPLDOC
00688         LFI%MDES1D(IXM(LFI%JPXAPI,IRANG))=INALPP
00689         LFI%MDES1D(IXM(LFI%JPFEAM,IRANG))=1
00690         LFI%NPODPI(IRANG)=1
00691         LFI%NALDPI(IRANG)=0
00692         LFI%NPPIMM(IRANG)=1
00693         IRANGD=IRANG
00694         CALL LFIDAH_MT (LFI, LFI%MDES1D(IXM(LFI%JPDCRE,IRANG)),
00695      S               LFI%MDES1D(IXM(LFI%JPHCRE,IRANG)))
00696 C
00697 C          ECRITURE DU PREMIER ARTICLE (DESCRIPTIF)
00698 C
00699         IREC=1
00700         INAPHY=IREC
00701         CALL LFIEDO_MT (LFI, IREP,KNUMER,IREC,LFI%MDES1D(IXM(1,IRANG)),
00702      S                  INWRIT,IFACTM,IRETIN)
00703 C
00704         IF (IRETIN.NE.0) THEN
00705           GOTO 904
00706         ENDIF
00707 C
00708 C
00709 C     Remise a zero du descripteur en vue d'une fermeture normale.
00710 C
00711         LFI%MDES1D(IXM(LFI%JPFEAM,IRANG))=0
00712 C
00713 C          ECRITURE DES ARTICLES CONTENANT LES PAIRES D'ARTICLES D'INDEX
00714 C          "RESERVES".
00715 C
00716         DO 415 J=1,INBPIR
00717         IREC=IREC+1
00718         INAPHY=IREC
00719         CALL LFIECC_MT (LFI, IREP,KNUMER,IREC,LFI%CNOMAR(IXC(1,IRANG)),
00720      S                  INWRIT,IFACTM,IRETIN)
00721 C
00722         IF (IRETIN.NE.0) THEN
00723           GOTO 903
00724         ENDIF
00725 C
00726         IREC=IREC+1
00727         INAPHY=IREC
00728         CALL LFIEDO_MT (LFI, IREP,KNUMER,IREC,LFI%MLGPOS(IXM(1,IRANG)),
00729      S                  INWRIT,IFACTM,IRETIN)
00730 C
00731         IF (IRETIN.NE.0) THEN
00732           GOTO 904
00733         ENDIF
00734 C
00735   415   CONTINUE
00736 C
00737       ELSE
00738 C*
00739 C     4.2 - LE FICHIER EXISTAIT DEJA... ON LIT LA 1ERE PAIRE D'ARTICLES
00740 C           D'INDEX ( + LA DERNIERE S'IL Y EN A AU MOINS 2 *UTILISEES* )
00741 C-----------------------------------------------------------------------
00742 C
00743         INBALO=LFI%MDES1D(IXM(LFI%JPNALO,IRANG))
00744         INBPIR=LFI%MDES1D(IXM(LFI%JPNPIR,IRANG))
00745         IREC=2
00746         INAPHY=IREC
00747         CALL LFILCC_MT (LFI, IREP,KNUMER,IREC,LFI%CNOMAR(IXC(1,IRANG)),
00748      S                  INREAD,IFACTM,IRETIN)
00749 C
00750         IF (IRETIN.NE.0) THEN
00751           GOTO 904
00752         ENDIF
00753 C
00754         IREC=3
00755         INAPHY=IREC
00756         CALL LFILDO_MT (LFI, IREP,KNUMER,IREC,LFI%MLGPOS(IXM(1,IRANG)),
00757      S                  INREAD,IFACTM,IRETIN)
00758 C
00759         IF (IRETIN.NE.0) THEN
00760           GOTO 904
00761         ENDIF
00762 C
00763         IF (INBALO.LE.INALPP) THEN
00764           LFI%NALDPI(IRANG)=INBALO
00765           LFI%NPODPI(IRANG)=1
00766           LFI%NPPIMM(IRANG)=1
00767           IRANGD=IRANG
00768         ELSE
00769 C
00770 C          CAS OU IL Y A AU MOINS 2 PAIRES D'ARTICLES D'INDEX UTILISEES.
00771 C
00772           IRGPIF=1+(INBALO-1)/INALPP
00773           CALL LFIREC_MT (LFI, IRGPIF,IRANG,IREC)
00774           IRANGD=IRANG+LFI%JPNXFI
00775           INAPHY=IREC
00776           CALL LFILCC_MT (LFI, IREP,KNUMER,IREC,
00777      S                    LFI%CNOMAR(IXC(1,IRANGD)),
00778      S                    INREAD,IFACTM,IRETIN)
00779 C
00780           IF (IRETIN.NE.0) THEN
00781             GOTO 904
00782           ENDIF
00783 C
00784           IREC=IREC+1
00785           INAPHY=IREC
00786           CALL LFILDO_MT (LFI, IREP,KNUMER,IREC,
00787      S                    LFI%MLGPOS(IXM(1,IRANGD)),
00788      S                    INREAD,IFACTM,IRETIN)
00789 C
00790           IF (IRETIN.NE.0) THEN
00791             GOTO 904
00792           ENDIF
00793 C
00794           LFI%NALDPI(IRANG)=1+MOD (INBALO-1,INALPP)
00795           LFI%NPODPI(IRANG)=2
00796           LFI%NPPIMM(IRANG)=2
00797           LFI%MRGPIM(2,IRANG)=IRANGD
00798           LFI%MRGPIF(IRANGD)=IRGPIF
00799         ENDIF
00800 C
00801       ENDIF
00802 C**
00803 C     5.  -  L'OUVERTURE AU SENS DU LOGICIEL DE FICHIERS INDEXES LFI
00804 C            EST COMPLETE; ON MET DONC A JOUR LES DERNIERES VARIABLES
00805 C            EN COMMON, DONT *LFI%NBFIOU*.
00806 C-----------------------------------------------------------------------
00807 C
00808 C           REMARQUE: LA PREMIERE ET LA DERNIERE P.P.I. SONT TOUJOURS
00809 C                     "PHASEES".
00810 C
00811       DO 501 J=IRANG,IRANGD,LFI%JPNXFI
00812       LFI%LECRPI(J,1)=.FALSE.
00813       LFI%LECRPI(J,2)=.FALSE.
00814       LFI%LPHASP(J)=.TRUE.
00815   501 CONTINUE
00816 C
00817       DO 502 J=0,LFI%JPNPDF-1
00818       LFI%NUMAPD(J,IRANG)=LFI%JPNIL
00819       LFI%NLONPD(J,IRANG)=0
00820       LFI%LECRPD(J,IRANG)=.FALSE.
00821   502 CONTINUE
00822 C
00823       DO 503 J=1,IFACTM
00824       LFI%NUMERO(IRANG+J-1)=KNUMER
00825   503 CONTINUE
00826 C
00827       LFI%NDERPD(IRANG)=LFI%JPNPDF-1
00828       LFI%NBFIOU=LFI%NBFIOU+1
00829       LFI%NFACTM=LFI%NFACTM+IFACTM
00830       LFI%NUMIND(LFI%NBFIOU)=IRANG
00831       INBARI=LFI%MDES1D(IXM(LFI%JPNALO,IRANG))-
00832      S       LFI%MDES1D(IXM(LFI%JPNTRU,IRANG))
00833       LFI%NBREAD(IRANG)=INREAD
00834       LFI%NBWRIT(IRANG)=INWRIT
00835       LFI%LTAMPL(IRANG)=LFI%LTAMLG
00836       LFI%LTAMPE(IRANG)=LFI%LTAMEG
00837       LFI%NEXPOR(IRANG)=LFI%JPNIL
00838       LFI%NIMPOR(IRANG)=LFI%JPNIL
00839 C
00840       IREP=IREPX
00841       GOTO 1001
00842 C**
00843 C     9.  - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
00844 C-----------------------------------------------------------------------
00845 C
00846   901 CONTINUE
00847       CLACTI='INQUIRE'
00848       INAPHY=0
00849       GOTO 909
00850 C
00851   902 CONTINUE
00852       CLACTI='OPEN'
00853       IRANG=0
00854       IRANMS=0
00855       INAPHY=0
00856       GOTO 909
00857 C
00858   903 CONTINUE
00859       CLACTI='WRITE'
00860       GOTO 909
00861 C
00862   904 CONTINUE
00863       CLACTI='READ'
00864       GOTO 909
00865 C
00866   905 CONTINUE
00867       CLACTI='CLOSE'
00868       INAPHY=0
00869 C
00870   909 CONTINUE
00871 C
00872 C      AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
00873 C
00874       IREP=IABS (IREP)
00875       LFI%NUMAPH(IRANG)=INAPHY
00876       IF (IRANG.EQ.0) LFI%MFACTM(0)=IFACTM
00877 C**
00878 C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
00879 C            VIA LE SOUS-PROGRAMME "LFIEMS" .
00880 C-----------------------------------------------------------------------
00881 C
00882  1001 CONTINUE
00883       KREP=IREP
00884       KNBARI=INBARI
00885       LLFATA=LLMOER (IREP,IRANG)
00886 C
00887       IF (LLFATA) THEN
00888         INIMES=2
00889       ELSE
00890         INIMES=IXNIMS (IRANMS)
00891       ENDIF
00892 C
00893        IF (LFI%LMULTI.AND.LLVERG) CALL LFIVER_MT (LFI, LFI%VERGLA,'OFF')
00894 C
00895       IF (.NOT.LLFATA.AND.INIMES.EQ.0)  THEN 
00896         IF (LHOOK) CALL DR_HOOK('LFIOUV_MT',1,ZHOOK_HANDLE)
00897         RETURN
00898       ENDIF
00899 C
00900       CLNSPR='LFIOUV'
00901 C
00902       IF (INIMES.GE.1) THEN
00903 C
00904 C           Impression du nom du fichier.
00905 C
00906         IF (LFI%LFRANC) THEN
00907           ILUTIL=MIN0 (INLNOM,LFI%JPLFIX,LEN (CLMESS)-6)
00908           CLMESS='Nom='''//CLNOMF(:ILUTIL)//''''
00909         ELSE
00910           ILUTIL=MIN0 (INLNOM,LFI%JPLFIX,LEN (CLMESS)-7)
00911           CLMESS='Name='''//CLNOMF(:ILUTIL)//''''
00912         ENDIF
00913 C
00914         CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,
00915      S                  CLMESS,CLNSPR,CLACTI)
00916 C
00917         IF (LDNOMM.AND.CLNOMS(:ILNOMS).NE.CLNOMF(:INLNOM)) THEN
00918 C
00919           IF (LFI%LFRANC) THEN
00920             ILUTIL=MIN0 (ILNOMS,LFI%JPLFIX,LEN (CLMESS)-14)
00921             CLMESS='Nom SYSTEME='''//CLNOMS(:ILUTIL)//''''
00922           ELSE
00923             ILUTIL=MIN0 (ILNOMS,LFI%JPLFIX,LEN (CLMESS)-14)
00924             CLMESS='SYSTEM Name='''//CLNOMS(:ILUTIL)//''''
00925           ENDIF
00926 C
00927           CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,
00928      S                    CLMESS,CLNSPR,CLACTI)
00929         ENDIF
00930 C
00931       ENDIF
00932 C
00933       IF (INIMES.EQ.2) THEN
00934         WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER='
00935 ',I3,     S     '', LDNOMM= '',L1,'', CDSTTO='''''',A,'''''', LDERFA= '
00936 ',L1,     S     '',  LDIMST= '
00937 ',L1,     S         '', KNIMES='',I2,'', KNBARP='',I6,'' KNBARI='',I6)')
00938      S   KREP,KNUMER,LDNOMM,CDSTTO(:ILSTTU),LDERFA,LDIMST,KNIMES,KNBARP,
00939      S   KNBARI
00940         CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,LLFATA,
00941      S                  CLMESS,CLNSPR,CLACTI)
00942       ENDIF
00943 C
00944 C        LA MESSAGERIE QUI SUIT N'EST PAS EMISE EN CAS D'ERREUR FATALE.
00945 C
00946       IF (INIMES.GE.1.AND.(IREP.EQ.0.OR.IREP.EQ.-11)) THEN
00947 C
00948         IF (LLNOUF) THEN
00949 C
00950           IF (LFI%LFRANC) THEN
00951             WRITE (UNIT=CLMESS,FMT='(''Unite'
00952 ',I3,     S   '' OUVERTE, CREATION de Fichier,'',I7,'' Articles prevus,'
00953 ',I7,     S   '' Articles gerables sans debordement'')')
00954      S      KNUMER,KNBARP,INALPP*INBPIR
00955           ELSE
00956             WRITE (UNIT=CLMESS,FMT='(''Unit'
00957 ',I3,     S   '' OPENED, File CREATION,'',I7,'' expected Records,'
00958 ',I7,     S   '' Records may be handled without overflow'')')
00959      S      KNUMER,KNBARP,INALPP*INBPIR
00960           ENDIF
00961 C
00962         ELSE
00963 C
00964           IF (LFI%LFRANC) THEN
00965             WRITE (UNIT=CLMESS,FMT='(''Unite'
00966 ',I3,     S       '' OUVERTE, derniere Modification OK a'',I9.6,''_'
00967 ',I6.6,     S       '','',I7,'' Articles de donnees,'',I9,'' mots en tout'')')
00968      S     KNUMER,LFI%MDES1D(IXM(LFI%JPDDMG,IRANG)),
00969      S     LFI%MDES1D(IXM(LFI%JPHDMG,IRANG)),
00970      S            KNBARI,ILARPH*LFI%MDES1D(IXM(LFI%JPNAPH,IRANG))
00971           ELSE
00972             WRITE (UNIT=CLMESS,FMT='(''Unit'
00973 ',I3,     S       '' OPENED, last Modification OK at'',I9.6,''_'
00974 ',I6.6,     S       '','',I7,'' data Records,'',I9,'' words in file'')')
00975      S     KNUMER,LFI%MDES1D(IXM(LFI%JPDDMG,IRANG)),
00976      S     LFI%MDES1D(IXM(LFI%JPHDMG,IRANG)),
00977      S            KNBARI,ILARPH*LFI%MDES1D(IXM(LFI%JPNAPH,IRANG))
00978           ENDIF
00979 C
00980         ENDIF
00981 C
00982         CALL LFIEMS_MT (LFI, KNUMER,INIMES,IREP,.FALSE.,
00983      S                  CLMESS,CLNSPR,CLACTI)
00984       ENDIF
00985 C
00986       IF (LHOOK) CALL DR_HOOK('LFIOUV_MT',1,ZHOOK_HANDLE)
00987       END
00988