C OPERFL    SOURCE    BP208322  16/05/24    21:15:12     8932           

C=======================================================================
C
C   CONVERTIT : - UN ENTIER EN FLOTTANT
C               - OU UN LISTENTI/MOT/LISTMOTS EN LISTREEL
C
C=======================================================================

      SUBROUTINE OPERFL
      IMPLICIT REAL*8 (A-H,O-Z)
      IMPLICIT INTEGER(I-N)
      

-INC PPARAM
-INC CCOPTIO

c       REAL*8       X1
c       CHARACTER*32 CH
      REAL*8       XVALRE
      CHARACTER*32 CHARIN
      CHARACTER*8  CHA8
      

C=======================================================================
C     LECTURE DES OBJETS EN ENTREE + CONVERSION EN FLOTTANT
C=======================================================================

      CALL QUETYP(CHA8,0,IRETOU)
      IF (IRETOU.EQ.0) GOTO 998

*     Conversion d'un LISTENTI en LISTREEL
      IF (CHA8.EQ.'LISTENTI') THEN
          CALL LIROBJ('LISTENTI',MLENTI,1,IRETOU)
          IF (IERR.NE.0) RETURN
c           SEGACT MLENTI
c           JG=LECT(/1)
c           SEGINI MLREEL
c           DO IG=1,JG
c              PROG(IG)=LECT(IG)
c           ENDDO
c           SEGDES MLREEL
c           SEGDES MLENTI
          IOBIN=MLENTI
          CALL FLOT(CHA8,IVALIN,CHARIN,IOBIN,XVALRE,IOBRE)
          MLREEL=IOBRE
          CALL ECROBJ('LISTREEL',MLREEL)
          RETURN

*     Conversion d'un ENTIER ou d'un FLOTTANT en FLOTTANT
c       ELSEIF (CHA8.EQ.'ENTIER'.OR.CHA8.EQ.'FLOTTANT') THEN
c           CALL LIRREE(X1,1,IRETOU)
c           IF (IERR.NE.0) RETURN
c           CALL ECRREE(X1)
c           RETURN
*     Conversion d'un ENTIER en FLOTTANT : on passe par FLOT
      ELSEIF (CHA8.EQ.'ENTIER') THEN
          CALL LIRENT(IVALIN,1,IRETOU)
          IF (IERR.NE.0) RETURN
          CALL FLOT(CHA8,IVALIN,CHARIN,IOBIN,XVALRE,IOBRE)
          CALL ECRREE(XVALRE)
          RETURN          
*     Conversion d'un FLOTTANT en FLOTTANT : on ne passe pas dans FLOT !
      ELSEIF (CHA8.EQ.'FLOTTANT') THEN
          CALL LIRREE(XVALRE,1,IRETOU)
          IF (IERR.NE.0) RETURN
          CALL ECRREE(XVALRE)
          RETURN

*     Conversion d'un LISTMOTS en LISTREEL
      ELSEIF (CHA8.EQ.'LISTMOTS') THEN
          CALL LIROBJ('LISTMOTS',MLMOTS,1,IRETOU)
          IF (IERR.NE.0) RETURN
c           SEGACT MLMOTS
c           JG=MOTS(/2)
c           SEGINI MLREEL
c           DO IG=1,JG
c              READ(MOTS(IG),FMT='(F4.0)',ERR=999) PROG(IG)
c           ENDDO
c           SEGDES MLREEL
c           SEGDES MLMOTS
          IOBIN=MLMOTS
          CALL FLOT(CHA8,IVALIN,CHARIN,IOBIN,XVALRE,IOBRE)
          MLREEL=IOBRE
          CALL ECROBJ('LISTREEL',MLREEL)
          RETURN

*     Conversion d'un MOT en FLOTTANT
      ELSEIF (CHA8.EQ.'MOT') THEN
c           CALL LIRCHA(CH,1,IRETOU)
c           WRITE(CHA8,FMT='("(F",I2,".0)")') IRETOU
c           READ(CH(1:IRETOU),FMT=CHA8,ERR=999) X1
          CALL LIRCHA(CHARIN,1,IVALIN)
          IF (IERR.NE.0) RETURN
          CALL FLOT(CHA8,IVALIN,CHARIN,IOBIN,XVALRE,IOBRE)
          CALL ECRREE(XVALRE)
          RETURN

      ENDIF
      
      
C=======================================================================
C     ERREURS
C=======================================================================

* /!\ ERREUR : AUCUN OBJET COMPATIBLE TROUVE
 998  MOTERR(1:40)='ENTIER  FLOTTANTLISTENTIMOT     LISTMOTS'
      CALL ERREUR(471)
      RETURN


c * /!\ ERREUR LORS DE LA CONVERSION MOT=>FLOTTANT
c  999  CALL ERREUR(21)
c       RETURN

      END



 
