      SUBROUTINE LFIINI ( KOPTIO )
#include "lficomt.h"
C****
C        CE SOUS-PROGRAMME EST CHARGE DES INITIALISATIONS DU LOGICIEL
C     DE FICHIERS INDEXES LFI .
C**
C        ARGUMENT : KOPTIO  ==> OPTION CONCERNANT LE MODE D'UTILISATION.
C                  (ENTREE)     (MULTI-TACHE OU NON)
C     VALEURS POSSIBLES : 0 ==> MODE MONO-TACHE PRESCRIT
C                         1 ==> MODE MULTI-TACHE PRESCRIT
C                         2 ==> UTILISATION DU MODE PAR DEFAUT SI C'EST
C                               LE PREMIER APPEL; SINON ON GARDE LE MODE
C                               PRESCRIT ANTERIEUREMENT .
C
#include "lficom0.h"
#ifndef f77
#include "precision.h"
#endif
#include "lficom1.h"
C
      INTEGER KOPTIO, JNPAGE, J, JRANG, IREP, INIMES, INUMER, IRGPIM
C
      LOGICAL LLPREA, LLDEFM, LLNMUL, LLASGN, LLREL
      SAVE LLPREA, LLDEFM
C
      DATA LLPREA /.TRUE./, LLDEFM /.FALSE./
C
      IF (LLPREA) THEN
C
C         C'EST LE PREMIER APPEL AU SOUS-PROGRAMME - INITIALISATIONS .
C
        NBFIOU=0
        NFACTM=0
        NULOFM=0
        NUIMEX=0
        NERFAG=1
        NISTAG=1
        NIMESG=1
        NPISAF=0
        LTAMLG=.FALSE.
        LTAMEG=.TRUE.
        LMISOP=.FALSE.
        LFRANC=.TRUE.
        LERFAT(0)=.TRUE.
        NIVMES(0)=0
C
C          L'indice zero dans MFACTU correspond au facteur multiplicatif
C     "par defaut" .
C
#ifdef HIGHRES
        MFACTU(0)=6
#else
        MFACTU(0)=1
#endif
        MFACTM(0)=0
        NUMAPH(0)=JPNIL
C
        CFGMXD(0)='locale'
        NBMOSD(0)=JPNBIM
        NBCASD(0)=JPNBIC
        CFGMXD(1)='ieee'
        NBMOSD(1)=32
        NBCASD(1)=8
        CFGMXD(2)='ultrix'
        NBMOSD(2)=32
        NBCASD(2)=8
        CFGMXD(3)='ieee_dp'
        NBMOSD(3)=64
        NBCASD(3)=8
        CFGMXD(4)='ultrix_dp'
        NBMOSD(4)=64
        NBCASD(4)=8
        CTYPMX='ircdl'
C
        DO 101 JNPAGE=1,JPNXPI
        MCOPIF(JNPAGE)=JPNIL
        MRGPIF(JNPAGE)=JPNIL
        LECRPI(JNPAGE,1)=.FALSE.
        LECRPI(JNPAGE,2)=.FALSE.
  101   CONTINUE
C
        DO 103 J=1,JPNPIA
C
        DO 102 JRANG=1,JPNXFI
        IRGPIM=JRANG+(J-1)*JPNXFI
        MCOPIF(IRGPIM)=JRANG
        MRGPIM(J,JRANG)=IRGPIM
  102   CONTINUE
C
  103   CONTINUE
C
        DO 104 JRANG=1,JPNXFI
        MRGPIF(JRANG)=1
        NUMERO(JRANG)=JPNIL
        NUMAPH(JRANG)=JPNIL
  104   CONTINUE
C
        DO 105 J=1,JPNCPN
        CHINCO(J:J)='?'
  105   CONTINUE
C
        DO 106 J=1,JPIMEX
        MNUIEX(J)=JPNIL
        NREXPL(0,J)=0
  106   CONTINUE
C
        LLPREA=.FALSE.
        LLNMUL=(KOPTIO.EQ.1).OR.(KOPTIO.EQ.2.AND.LLDEFM)
        LLASGN=LLNMUL
        LLREL=.FALSE.
C
      ELSEIF (KOPTIO.EQ.2) THEN
C
C         CE N'EST PAS LE PREMIER APPEL, MAIS COMME L'ARGUMENT VAUT 2,
C         ON LAISSE LES CHOSES EN PLACE .
C
        LLNMUL=LMULTI
        LLASGN=.FALSE.
        LLREL =.FALSE.
      ELSE
C
C     CE N'EST PAS LE PREMIER APPEL ET LE MODE EST PASSE 'EXPLICITEMENT'
C
        LLNMUL=KOPTIO.EQ.1
        LLASGN=LLNMUL.AND.(.NOT.LMULTI)
        LLREL =(.NOT.LLNMUL).AND.LMULTI
C
        IF ((LLASGN.OR.LLREL).AND.NBFIOU.NE.0) THEN
          IREP=-4
          GOTO 1001
        ENDIF
C
      ENDIF
C
      LMULTI=LLNMUL
C
C        Le controle de coherence ci-dessous ne peut etre fait qu'apres
C     l'initialisation eventuelle des variables globales du logiciel.
C
      IF (KOPTIO.LT.0.OR.KOPTIO.GT.2) THEN
        IREP=-2
        GOTO 1001
      ENDIF
C
      IREP=0
C
      IF (LLASGN) THEN
        CALL LFIVER (VERGLA,'ASGN')
      ELSEIF (LLREL) THEN
        CALL LFIVER (VERGLA,'REL')
      ENDIF
C
 1001 CONTINUE
C
C        MESSAGERIE EVENTUELLE, AVEC ABORT SI NECESSAIRE .
C
      LLFATA=IREP.NE.0.AND.NERFAG.NE.2
C
      IF (LLFATA) THEN
        INIMES=2
      ELSEIF (IREP.NE.0) THEN
        INIMES=0
      ELSEIF (NIMESG.EQ.2.OR.(NIMESG.EQ.1.AND.KOPTIO.NE.2)) THEN
        INIMES=NIMESG
      ELSE
        RETURN
      ENDIF
C
      CLNSPR='LFIINI'
      INUMER=JPNIL
C
      IF (MAX0 (INIMES,NIMESG).EQ.2) THEN
C
        IF (LFRANC) THEN
          WRITE (UNIT=CLMESS,FMT='(''KOPTIO='',I5,'', CODE INTERNE='',
     S           I4)') KOPTIO,IREP
        ELSE
          WRITE (UNIT=CLMESS,FMT='(''KOPTIO='',I5,'', INTERNAL CODE='',
     S           I4)') KOPTIO,IREP
        ENDIF
C
        IF (INIMES.NE.2) CALL LFIEMS (INUMER,NIMESG,IREP,.FALSE.,CLMESS,
     S                                CLNSPR,CLACTI)
      ENDIF
C
      CALL LFIEMS (INUMER,INIMES,IREP,LLFATA,CLMESS,CLNSPR,CLACTI)
C
      IF (INIMES.GE.1.AND.KOPTIO.NE.2) THEN
C
C        Cette messagerie de niveau 1 n'est pas emise en cas d'erreur,
C     meme non fatale.
C
        IF (LFRANC) THEN
C
          IF (KOPTIO.EQ.0) THEN
            CLMESS='$ Mode MONO-TACHE Prescrit explicitement... $'
          ELSE
            CLMESS='$ Mode MULTI-TACHE Prescrit explicitement... $'
          ENDIF
C
        ELSE
C
          IF (KOPTIO.EQ.0) THEN
            CLMESS='$ MONO-TASKING Mode explicitely Specified... $'
          ELSE
            CLMESS='$ MULTI-TASKING Mode explicitely Specified... $'
          ENDIF
C
        ENDIF
C
        CALL LFIEMS (INUMER,INIMES,IREP,.FALSE.,CLMESS,CLNSPR,CLACTI)
      ENDIF
C
      RETURN
      END
