      SUBROUTINE LFIMOD ( KREP, KRANG, KRETIN )
#include "lficomt.h"
C****
C        SOUS-PROGRAMME *INTERNE* DU LOGICIEL DE FICHIERS INDEXES LFI
C     MODIFICATION DE L'ARTICLE DOCUMENTAIRE, LIMITEE A 3 ELEMENTS,
C     LORSQUE LE FICHIER A SUBI SA PREMIERE MODIFICATION DEPUIS LA
C     DERNIERE OUVERTURE.
C
C     APPELE PAR LFIECR, LFIREN, LFISUP.
C**
C    ARGUMENTS : KREP   (SORTIE) ==> CODE-REPONSE DU SOUS-PROGRAMME;
C                KRANG  (ENTREE) ==> RANG ( DANS LA TABLE *NUMERO* )
C                                    DE L'UNITE LOGIQUE CONCERNEE;
C                KRETIN (SORTIE) ==> CODE-RETOUR INTERNE.
C
#include "lficom0.h"
#ifndef f77
#include "precision.h"
#endif
#include "lficom1.h"
C
#ifndef f77
      INTEGER (KIND=JPDBLE) IDESCR (JPLARX)
#else
      INTEGER IDESCR (JPLARX)
#endif
      INTEGER KREP, KRANG, KRETIN, INUMER, IFACTM, IREC
      INTEGER IRANG, INAPHY, IRETOU, INIMES, IRETIN
C
#include "lficom2.h"
C**
C     1. -  CONTROLES DES PARAMETRES D'APPEL ET INITIALISATIONS.
C-----------------------------------------------------------------------
C
      IRETOU=0
C
      IF (KRANG.LE.0.OR.KRANG.GT.JPNXFI) THEN
        KREP=-16
        GOTO 1001
      ENDIF
C
      IRANG=KRANG
      KREP=0
      INUMER=NUMERO(IRANG)
      IFACTM=MFACTM(IRANG)
      IREC=1
C**
C     2. -  LECTURE/MODIFICATION/REECRITURE DE L'ARTICLE DOCUMENTAIRE.
C-----------------------------------------------------------------------
C
      INAPHY=IREC
      CALL LFILDO (KREP,INUMER,IREC,IDESCR(1),
     S             NBREAD(IRANG),IFACTM,IRETIN)
C
      IF (IRETIN.NE.0) THEN
        GOTO 904
      ENDIF
C
      IDESCR(JPFEAM)=1
      CALL LFIDAH (IDESCR(JPDMNG),IDESCR(JPHMNG))
      MDES1D(IXM(JPDMNG,IRANG))=IDESCR(JPDMNG)
      MDES1D(IXM(JPHMNG,IRANG))=IDESCR(JPHMNG)
      CALL LFIEDO (KREP,INUMER,IREC,IDESCR(1),
     S             NBWRIT(IRANG),IFACTM,IRETIN)
C
      IF (IRETIN.NE.0) THEN
        GOTO 903
      ENDIF
C
      GOTO 1001
C**
C     9.  - CI-DESSOUS, ETIQUETTES DE BRANCHEMENT EN CAS D'ERREUR E/S.
C      AU CAS OU, ON FORCE LE CODE-REPONSE ENTREE/SORTIE A ETRE POSITIF.
C-----------------------------------------------------------------------
C
  903 CONTINUE
      IRETOU=1
      CLACTI='WRITE'
      GOTO 909
C
  904 CONTINUE
      IRETOU=2
      CLACTI='READ'
C
  909 CONTINUE
      KREP=IABS (KREP)
      NUMAPH(IRANG)=INAPHY
C**
C    10.  -  PHASE TERMINALE : MESSAGERIE INTERNE EVENTUELLE,
C            VIA LE SOUS-PROGRAMME "LFIEMS", PUIS RETOUR.
C-----------------------------------------------------------------------
C
 1001 CONTINUE
      LLFATA=LLMOER (KREP,KRANG)
C
      IF (KREP.EQ.0) THEN
        KRETIN=0
      ELSEIF (KREP.GT.0) THEN
        KRETIN=IRETOU
      ELSE
        KRETIN=3
      ENDIF
C
      IF (LMISOP.OR.LLFATA) THEN
        INUMER=NUMERO(KRANG)
        INIMES=2
        CLNSPR='LFIMOD'
        WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KRANG='',I3,
     S  '', KRETIN='',I2)')
     S    KREP,KRANG,KRETIN
        CALL LFIEMS (INUMER,INIMES,KREP,.FALSE.,CLMESS,CLNSPR,CLACTI)
      ENDIF
C
      RETURN
C
      END
