      SUBROUTINE LFILAS ( KREP, KNUMER, CDNOMA, KTAB, KLONG )
#include "lficomt.h"
C****
C        SOUS-PROGRAMME DE LECTURE DE L'ARTICLE (DE DONNEES) *SUIVANT*
C     SUR UNE UNITE LOGIQUE OUVERTE POUR LE LOGICIEL DE FICHIERS INDEXES
C     *LFI*; L'ARTICLE EN SORTIE EST UN "BLOC" DE DONNEES ADJACENTES.
C
C               ( "SUIVANT" = SUIVANT LE DERNIER *LU* )
C**
C    ARGUMENTS : KREP   (SORTIE) ==> CODE-REPONSE DU SOUS-PROGRAMME;
C                KNUMER (ENTREE) ==> NUMERO DE L'UNITE LOGIQUE;
C                CDNOMA (SORTIE) ==> NOM DE L'ARTICLE LU; CETTE VARIABLE
C                                    DOIT ETRE ASSEZ LONGUE POUR STOCKER
C                                    LE NOM DE L'ARTICLE ( BLANCS EN FIN
C                                    DE NOM EXCLUS, CEPENDANT );
C                KTAB   (ENTREE) ==> PREMIER MOT A LIRE;
C                KLONG  (ENTREE) ==> LONGUEUR DE L'ARTICLE A LIRE.
C
C          IL EST CHAUDEMENT RECOMMANDE DE N'UTILISER CE SOUS-PROGRAMME
C     QU'APRES AVOIR CONTROLE, PAR APPEL PREALABLE AU SOUS-PROGRAMME
C     *LFICAS*, L'EXISTENCE D'UN ARTICLE LOGIQUE DE DONNEES "SUIVANT".
C     SINON, IL FAUT PREVOIR DE GERER L'ERREUR DE CODE (-23) ...
C     ENTRE AUTRES.
C
#include "lficom0.h"
#ifndef f77
#include "precision.h"
#endif
#include "lficom1.h"
C
      CHARACTER CDNOMA*(*), CLNOMA*(JPNCPN)
C
      INTEGER KREP, KNUMER, KLONG
#ifndef f77
      INTEGER (KIND=JPDBLE)  KTAB (KLONG)
#else
      INTEGER KTAB (KLONG)
#endif
      INTEGER IREP, IRANG, ILCLNO, IRGPIM, IARTIC, IRGPIF, ILONEX, IREPX
      INTEGER IPOSEX, IDECBL, IPOSBL, IRETIN, INIMES, ILCDNO, IRANGF
C
      LOGICAL LLVERF
C
#include "lficom2.h"
C**
C     1.  -  CONTROLES DES PARAMETRES D'APPEL, PUIS INITIALISATIONS.
C-----------------------------------------------------------------------
C
C        Appel legerement anticipe a LFINUM, garantissant l'initialisa-
C     tion des variables globales du logiciel a la 1ere utilisation.
C
      CALL LFINUM (KNUMER,IRANG)
      LLVERF=.FALSE.
      IREP=0
      IREPX=0
      ILCDNO=LEN (CDNOMA)
C
      IF (ILCDNO.LE.0) THEN
        IREP=-15
        CLNOMA=CHINCO(:JPNCPN)
        ILCLNO=JPNCPN
        GOTO 1001
      ELSE
        CDNOMA=' '
        CLNOMA=' '
        ILCLNO=1
      ENDIF
C
      IF (KLONG.LE.0) THEN
        IREP=-14
        GOTO 1001
      ELSEIF (IRANG.EQ.0) THEN
        IREP=-1
        GOTO 1001
      ENDIF
C
       IF (LMULTI) CALL LFIVER (VERRUE(IRANG),'ON')
      LLVERF=LMULTI
C**
C     2.  -  EXPLORATION DES (PAIRES DE) PAGES ET ARTICLES D'INDEX,
C            A LA RECHERCHE DE L'ARTICLE LOGIQUE DEMANDE,
C            DEFINI PAR SON RANG "A PRIORI" DANS LE FICHIER.
C-----------------------------------------------------------------------
C
      CALL LFICAX (IREP,IRANG,IRGPIM,IARTIC,IRETIN)
C
      IF (IRETIN.EQ.1) THEN
        GOTO 903
      ELSEIF (IRETIN.EQ.2) THEN
        GOTO 904
      ELSEIF (IRETIN.NE.0) THEN
        GOTO 1001
      ELSEIF (IARTIC.EQ.0) THEN
        IREP=-23
        GOTO 1001
      ENDIF
C*
C     2.1 -  ARTICLE DE DONNEES TROUVE... CONTROLES SUPPLEMENTAIRES.
C-----------------------------------------------------------------------
C
      IRGPIF=MRGPIF(IRGPIM)
C
      IF (.NOT.LPHASP(IRGPIM)) THEN
C
        CALL LFIPHA (IREP,IRANG,IRGPIM,IRETIN)
C
        IF (IRETIN.EQ.1) THEN
          GOTO 903
        ELSEIF (IRETIN.EQ.2) THEN
          GOTO 904
        ELSEIF (IRETIN.NE.0) THEN
          GOTO 1001
        ENDIF
C
      ENDIF
C
      ILONEX=MLGPOS(IXM(2*IARTIC-1,IRGPIM))
      IPOSEX=MLGPOS(IXM(2*IARTIC,IRGPIM))
      CLNOMA=CNOMAR(IXC(IARTIC,IRGPIM))
C
C        Recherche de la longueur "utile" du nom d'article.
C        (c'est-a-dire sans tenir compte des blancs terminaux eventuels)
C
      IDECBL=0
C
  211 CONTINUE
      IPOSBL=IDECBL+INDEX (CLNOMA(IDECBL+1:),' ')
C
      IF (IPOSBL.LE.IDECBL) THEN
        ILCLNO=JPNCPN
      ELSEIF (CLNOMA(IPOSBL:).EQ.' ') THEN
        ILCLNO=IPOSBL-1
      ELSE
        IDECBL=IPOSBL
        GOTO 211
      ENDIF
C
      IF (ILCDNO.GE.ILCLNO) THEN
        CDNOMA=CLNOMA(:ILCLNO)
      ELSE
        IREP=-24
        CLACTI=CLNOMA
        GOTO 1001
      ENDIF
C
      IF (KLONG.LT.ILONEX) THEN
        IREP=-21
        LLFATA=LLMOER (IREP,IRANG)
C
        IF (LLFATA) THEN
          CLACTI=CLNOMA
          GOTO 1001
        ENDIF
C
C        SI L'ERREUR (-21) N'A PAS ETE FATALE, ON VA LIRE SEULEMENT
C       LE DEBUT DE L'ARTICLE ( LECTURE PARTIELLE DE *KLONG* MOTS )
C
      ELSEIF (KLONG.GT.ILONEX) THEN
        IREP=-22
        CLACTI=CLNOMA
        GOTO 1001
      ENDIF
C
      IREPX=IREP
C**
C     3.  -  LECTURE DES DONNEES PROPREMENT DITE.
C-----------------------------------------------------------------------
C
      CALL LFILED (IREP,IRANG,KTAB,KLONG,IRGPIM,IPOSEX,IRETIN)
C
      IF (IRETIN.EQ.1) THEN
        GOTO 903
      ELSEIF (IRETIN.EQ.2) THEN
        GOTO 904
      ELSEIF (IRETIN.NE.0) THEN
        GOTO 1001
      ENDIF
C
      IREP=IREPX
      IRANGF=JPNAPP*MFACTM(IRANG)*(IRGPIF-1)+IARTIC
C**
C     4.  -   MISE A JOUR DE STATISTIQUES ET DE TABLES.
C-----------------------------------------------------------------------
C
      NBLECT(IRANG)=NBLECT(IRANG)+1
      NBMOLU(IRANG)=NBMOLU(IRANG)+KLONG
      NDERGF(IRANG)=IRANGF
      CNDERA(IRANG)=CLNOMA
      NSUIVF(IRANG)=JPNIL
      NPRECF(IRANG)=JPNIL
      GOTO 1001
C**
C     9.  - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
C-----------------------------------------------------------------------
C
  903 CONTINUE
      CLACTI='WRITE'
      GOTO 909
C
  904 CONTINUE
      CLACTI='READ'
C
  909 CONTINUE
C
C      AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
C
      IREP=IABS (IREP)
C**
C    10.  -  PHASE TERMINALE : MESSAGERIE, AVEC "ABORT" EVENTUEL,
C            VIA LE SOUS-PROGRAMME "LFIEMS" .
C-----------------------------------------------------------------------
C
 1001 CONTINUE
      KREP=IREP
      LLFATA=LLMOER (IREP,IRANG)
C
      IF (IRANG.NE.0) THEN
        NDEROP(IRANG)=10
        NDERCO(IRANG)=IREP
         IF (LLVERF) CALL LFIVER (VERRUE(IRANG),'OFF')
      ENDIF
C
      IF (LLFATA.OR.IXNIMS (IRANG).EQ.2) THEN
        INIMES=2
      ELSE
        RETURN
      ENDIF
C
      CLNSPR='LFILAS'
      WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER='',I3,
     S       '', CDNOMA='''''',A,'''''', KLONG='',I7)')
     S     KREP,KNUMER,CLNOMA(:ILCLNO),KLONG
      CALL LFIEMS (KNUMER,INIMES,IREP,LLFATA,CLMESS,CLNSPR,CLACTI)
C
      RETURN
      END
