      SUBROUTINE LFIVID ( KREP, KRANG, KNUMPD, KTAMPO, KRETIN )
#include "lficomt.h"
C****
C        SOUS-PROGRAMME *INTERNE* DU LOGICIEL DE FICHIERS INDEXES LFI
C     "VIDAGE" SUR FICHIER D'UNE PAGE DE DONNEES, APRES L'AVOIR DUMENT
C     COMPLETEE SI NECESSAIRE ( AVEC LES DONNEES DEJA PRESENTES SUR
C     FICHIER, OU AVEC DES ZEROS DANS LE CAS DU DERNIER ARTICLE ).
C**
C    ARGUMENTS : KREP   (SORTIE) ==> CODE-REPONSE DE L'ECRITURE FORTRAN;
C                KRANG  (ENTREE) ==> RANG EN MEMOIRE DE L'UNITE LOGIQUE;
C                KNUMPD (ENTREE) ==> NUMERO DE LA PAGE DE DONNEES;
C                KTAMPO (ENTREE) ==> ZONE SERVANT A RELIRE L'ARTICLE
C                                    PHYSIQUE CORRESPONDANT SUR FICHIER,
C                                    SI NECESSAIRE. (LONGUEUR: JPLARX)
C                KRETIN (SORTIE) ==> CODE-RETOUR INTERNE.
C
#include "lficom0.h"
#ifndef f77
#include "precision.h"
#endif
#include "lficom1.h"
C
      INTEGER KREP, KRANG, KNUMPD, KRETIN
#ifndef f77
      INTEGER (KIND=JPDBLE)  KTAMPO (JPLARX)
#else
      INTEGER KTAMPO (JPLARX)
#endif
      INTEGER INUMER, ILONPD, INUMAE, IFACTM, ILARPH, JD, INAPHY, IRETOU
      INTEGER INIMES, IRETIN
C
      LOGICAL LLADON
C
#include "lficom2.h"
C**
C     1.  -  CONTROLES ET INITIALISATIONS.
C-----------------------------------------------------------------------
C
      IF (KRANG.LE.0.OR.KRANG.GT.JPNXFI) THEN
        INUMER=JPNIL
      ELSE
        INUMER=NUMERO(KRANG)
        KREP=0
      ENDIF
C
      IRETOU=0
C
      IF (INUMER.EQ.JPNIL) THEN
        KREP=-14
        GOTO 1001
      ENDIF
C
      ILONPD=NLONPD(KNUMPD,KRANG)
      INUMAE=NUMAPD(KNUMPD,KRANG)
      IFACTM=MFACTM(KRANG)
      ILARPH=JPLARD*IFACTM
C**
C     2.  -  COMPLEMENT EVENTUEL DE LA PAGE DE DONNEES A TRAITER.
C-----------------------------------------------------------------------
C
      IF (ILONPD.NE.ILARPH) THEN
C
C             PAGE DE DONNEES INSUFFISAMMENT REMPLIE.
C
        IF (INUMAE.GT.MDES1D(IXM(JPAXPD,KRANG))) THEN
C*
C     2.1 -  PAS D'ARTICLE PHYSIQUE ASSOCIE SUR FICHIER,
C            ON LA COMPLETE AVEC DES ZEROS.
C-----------------------------------------------------------------------
C
          DO 211 JD=ILONPD+1,ILARPH
          MTAMPD(IXT(JD,KNUMPD,KRANG))=0
  211     CONTINUE
C
        ELSE
C*
C     2.2 -  NECESSITE D'ALLER RELIRE L'ARTICLE PHYSIQUE DE DONNEES
C            SUR FICHIER, ET DE "RECOLLER LES MORCEAUX".
C-----------------------------------------------------------------------
C
          INAPHY=INUMAE
          CALL LFILDO (KREP,INUMER,INUMAE,KTAMPO,NBREAD(KRANG),
     S                 IFACTM,IRETIN)
C
          IF (IRETIN.NE.0) THEN
            GOTO 904
          ENDIF
C
          DO 221 JD=ILONPD+1,ILARPH
          MTAMPD(IXT(JD,KNUMPD,KRANG))=KTAMPO(JD)
  221     CONTINUE
C
        ENDIF
C
      ENDIF
C**
C     3.  -  ECRITURE OU REECRITURE DE LA PAGE DE DONNEES COMPLETE
C            OU COMPLETEE SUR FICHIER.
C-----------------------------------------------------------------------
C
      LLADON=.TRUE.
      INAPHY=0
      CALL LFIECX (KREP,KRANG,INUMAE,MTAMPD(IXT(1,KNUMPD,KRANG)),LLADON,
     S             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
      LECRPD(KNUMPD,KRANG)=.FALSE.
      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)
      IF (INAPHY.NE.0) NUMAPH(KRANG)=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
        INIMES=2
        CLNSPR='LFIVID'
        WRITE (UNIT=CLMESS,FMT='(''KREP='',I4,'', KRANG='',I3,
     S         '', KNUMPD='',I3,'', KRETIN='',I2)')
     S     KREP,KRANG,KNUMPD,KRETIN
        CALL LFIEMS (INUMER,INIMES,KREP,.FALSE.,CLMESS,CLNSPR,CLACTI)
      ENDIF
C
      RETURN
C
      END
