      SUBROUTINE LFICAS ( KREP, KNUMER, CDNOMA, KLONG, KPOSEX, LDAVAN )
#include "lficomt.h"
C****
C        SOUS-PROGRAMME DONNANT LES CARACTERISTIQUES ( NOM, LONGUEUR,
C     POSITION ) DE L'ARTICLE LOGIQUE *DE DONNEES* SUIVANT, SUR UNE
C     UNITE LOGIQUE OUVERTE POUR LE LOGICIEL DE FICHIERS INDEXES *LFI* .
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 SUIVANT;
C                KLONG  (SORTIE) ==> LONGUEUR DE L'ARTICLE SUIVANT;
C                KPOSEX (SORTIE) ==> POSITION ( DANS LE FICHIER, DU PRE-
C                                    MIER MOT ) DE L'ARTICLE SUIVANT;
C                LDAVAN (ENTREE) ==> VRAI SI ON DOIT "AVANCER" LE
C                                    POINTEUR DU FICHIER.
C
C     SI L'ON SOUHAITE LIRE ENSUITE L'ARTICLE EN QUESTION (VIA *LFILAS*)
C     IL FAUT PRECISER A L'APPEL LDAVAN=.FALSE. ; LDAVAN=.TRUE. SERT
C     ESSENTIELLEMENT A ANALYSER LE CONTENU DU FICHIER EN TERMES
C     D'ARTICLES LOGIQUES, SANS LIRE LES DONNEES.
C
C     SI LE FICHIER EST VIDE OU QUE LE DERNIER ARTICLE LOGIQUE LU ETAIT
C     LE DERNIER, LE SOUS-PROGRAMME "RETOURNE" KLONG=0, ET CDNOMA=' ' .
C
#include "lficom0.h"
#ifndef f77
#include "precision.h"
#endif
#include "lficom1.h"
C
      CHARACTER CDNOMA*(*), CLNOMA*(JPNCPN)
C
      INTEGER KREP, KNUMER, KLONG, KPOSEX, IREP, ILCDNO, IDECBL, IPOSBL
      INTEGER ILCLNO, IRANG, IRGPIM, IARTIC, IRGPIF, INIMES, IRETIN
C
      LOGICAL LDAVAN, 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
      KLONG=0
      KPOSEX=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 (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.OR.IARTIC.EQ.0) THEN
        GOTO 1001
      ENDIF
C*
C     2.1 -  ARTICLE DE DONNEES TROUVE... APRES CONTROLES SUPPLEMENTAI-
C            RES, ON RETOURNE SES CARACTERISTIQUES.
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
      KLONG=MLGPOS(IXM(2*IARTIC-1,IRGPIM))
      KPOSEX=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 (LDAVAN) THEN
C
C          ON AVANCE LE "POINTEUR" DU FICHIER...
C       ET ON REINITIALISE LES "POINTEURS" SUIVANT ET PRECEDENT.
C
        NDERGF(IRANG)=JPNAPP*MFACTM(IRANG)*(IRGPIF-1)+IARTIC
        CNDERA(IRANG)=CLNOMA
        NSUIVF(IRANG)=JPNIL
        NPRECF(IRANG)=JPNIL
      ENDIF
C
      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)=11
        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='LFICAS'
      WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KNUMER='',I3,
     S    '', CDNOMA='''''',A,'''''', KLONG='',I7,'', KPOSEX='',I8,
     S    '', LDAVAN= '',L1)')
     S  KREP,KNUMER,CLNOMA(:ILCLNO),KLONG,KPOSEX,LDAVAN
      CALL LFIEMS (KNUMER,INIMES,IREP,LLFATA,CLMESS,CLNSPR,CLACTI)
C
      RETURN
      END
