      SUBROUTINE BITMAPS(NBON,IFORMAT,GEOM,ITYP,IREFRE,IBOUT,IOPT)
      INCLUDE 'com_coor.f'
      INCLUDE 'com_faces.f'
      INCLUDE 'com_options.f'
      PARAMETER (NBIMAX=2000)
      DIMENSION RSMOOTH(3,3,NBIMAX),RBID(3,3)
      CHARACTER*8192 LISTE,LISTE_S
      CHARACTER*128 IMAGES,FICLEC,FICPOST,FICLEC2,FICPOST2,CBIDON
     &             ,GIFSICLE
      CHARACTER*13  TS
      CHARACTER*11  RVB
      CHARACTER*7   CNUM
      LOGICAL*4     GEOM,TROUVE
      DIMENSION ROUGE(0:15),VERT(0:15),BLEU(0:15)
C
      IF (ILANG.EQ.0) THEN
        TS  = 'Sauve Bitmap '
        LTI = 13
      ELSE
        TS  = 'Bitmap dump '
        LTI = 12
      ENDIF
      ISOBID0 = ISOBID
      ISTDOUT0 = ISTDOUT
      ISTDOUT = 1
      NRALEN = 0
      IFIXB = 0
      VMIMI = VMIN
      VMAMA = VMAX
      ISUSU = 0
      FACEXA0 = FACEXA
      IDEFPS0 = IDEFPS
      FAC1 = 0.
      FAC2 = 0.
      IBOUNCE = 0
      LLIST = 1
      LLIST_S = 1
      LISTE(1:1) = '{'
      LISTE_S(1:1) = '{'
      DDD  = 0.
      DDD0 = FACEXA0
      IPROGRE0 = IPROGRE
      IF (IBOITE.EQ.0) THEN
cc        IOPTEXA = 1
        IOPTEXA = 0
      ELSE
        IOPTEXA = 0
      ENDIF
      CALL GETIDX(IDX0,IDY0,IECX,IECY)
      IF (ICADPS.EQ.1) THEN
        XDROI = XDMA2
      ELSE
        XDROI = XDMAX
      ENDIF
Cfj      MAXPIXX = NINT(REAL(IECX)*1.9)
Cfj      MAXPIXY = NINT(REAL(IECY)*2.9)
      CALL MAXPIXSIZE(MAXPIXX,MAXPIXY)
      MAXPIXX = MIN(MAXPIXX
     &         ,NINT(REAL(MAXPIXY)*(XDROI-XHELP)/(YDMAX-YDMIN)))
      IF (IFORMAT.EQ.-1.AND.IEXAG.NE.0) THEN
        IF (NOM_VIT(LONVIT-4:LONVIT).eq.'.depl') THEN
          IF (ILANG.EQ.0) THEN
            CALL LIENTIER('Spécial déformée (1:oui, 0:non) ?',0,IFF)
          ELSE
            CALL LIENTIER('Special deformation (1:yes, 0:no) ?',0,IFF)
          ENDIF
          IF (IFF.NE.0) IFF = 1
        ELSEIF(NOM_VIT(LONVIT-4:LONVIT).eq.'.mode') THEN
          IF (ILANG.EQ.0) THEN
            CALL LIENTIER('Spécial mode propre (1:oui, 0:non) ?',0,IFF)
          ELSE
            CALL LIENTIER('Special eigenmode (1:yes, 0:no) ?',0,IFF)
          ENDIF
          IF (IFF.NE.0) IFF = 2
        ELSE
          IFF = 0
        ENDIF
        IF (IFF.NE.0) THEN
          IMULFI = 0
          IRORO = 1
          IF (ILANG.EQ.0) THEN
            PRINT*,'Facteur d''exagération actuel =',FACEXA
            CALL LIREEL1('Facteur d''exagération ?',0,FACMA)
          ELSE
            PRINT*,'Effective exageration factor =',FACEXA
            CALL LIREEL1('Exageration factor ?',0,FACMA)
          ENDIF
          IF (IFF.EQ.1) THEN
            NBIMA = 10
            FACMI = 0.
          ELSE
            NBIMA = 20
            FACMI = -FACMA
          ENDIF
          NBPAS = 1000
          IBOUNCE = 1
        ENDIF
      ELSE
        IFF = 0
      ENDIF
      IF (ILANG.EQ.0) THEN
        PRINT*,'Taille de l''écran :',IECX,' x',IECY,' pixels'
        PRINT*,'---> Largeur maxi de l''image =',MAXPIXX
        CALL LIENTIER(
     &'Largeur de l''image en pixels (négatif -> dble résolution) ?'
     &       ,0,IPIXX)
      ELSE
        PRINT*,'Display''s size:',IECX,' x',IECY,' pixels'
        PRINT*,'---> Maximum image width =',MAXPIXX
        CALL LIENTIER('Image width in pixels ?',0,IPIXX)
      ENDIF
      IDBLERES = 0
      IF (IPIXX.LT.0) THEN
        IF (IFF.EQ.0.AND.IFORMAT.GE.0) IDBLERES = 1
        IPIXX = -IPIXX
      ELSEIF(IPIXX.EQ.0) THEN
        IPIXX = 512
      ENDIF
      IPIXX = MAX(10,MIN(IPIXX,MAXPIXX))
      IPIXY = NINT(REAL(IPIXX)*(YDMAX-YDMIN)/(XDROI-XHELP))
      IF (IPIXY.GT.MAXPIXY) THEN
        IPIXY = MAXPIXY
        IPIXX = NINT(REAL(IPIXY)*(XDROI-XHELP)/(YDMAX-YDMIN))
      ENDIF
      IF (IDBLERES.EQ.0) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'Taille de l''image :',IPIXX,' x',IPIXY
        ELSE
          PRINT*,'Image''s size:',IPIXX,' x',IPIXY
        ENDIF
      ELSE
        IF (ILANG.EQ.0) THEN
          PRINT*,
     &    'Taille de l''image haute résolution :',IPIXX,' x',IPIXY
          PRINT*,
     &    'Taille de l''image basse résolution :',IPIXX/2,' x',IPIXY/2
        ELSE
          PRINT*,'High resolution image''s size:',IPIXX,' x',IPIXY
          PRINT*,'Low resolution image''s size: ',IPIXX/2,' x',IPIXY/2
        ENDIF
      ENDIF
C
      IF (IFORMAT.EQ.1.AND.IPIXX.LT.200) THEN
        CALL QUICESTCELUILA('gifsicle',8,TROUVE,0)
        IF (TROUVE) THEN
          IF (ILANG.EQ.0) THEN
            IF (NBIMA.LE.1) THEN
              PRINT*,'Votre image est petite !'
              PRINT*,'Peut-être voulez-vous faire un GIF transparent ?'
            ELSE
              PRINT*,'Vos images sont petites !'
              PRINT*,
     &             'Peut-être voulez-vous faire des GIF transparents ?'
            ENDIF
            CALL LIENTIER('Tapez 1 pour les GIFs transparents, 0 sinon'
     &                   ,0,ITRANS)
          ELSE
            IF (NBIMA.LE.1) THEN
              PRINT*,'Small image !'
              PRINT*,'Maybe you want to create a transparent GIF ?'
            ELSE
              PRINT*,'Small images !'
              PRINT*,'Maybe you want to create some transparent GIFs ?'
            ENDIF
            CALL LIENTIER('Type 1 for transparent GIFs, 0 otherwise'
     &                   ,0,ITRANS)
          ENDIF
          IF (ITRANS.EQ.1) THEN
            MOINSUN = -1
            CALL ZCOLOR(ROUGE,VERT,BLEU,MOINSUN)
            WRITE(RVB,'(I3.3,2(",",I3.3))') NINT(ROUGE(ICTFON)*255.)
     &                                     ,NINT(VERT(ICTFON)*255.)
     &                                     ,NINT(BLEU(ICTFON)*255.)
          ENDIF
        ELSE
          ITRANS = 0
        ENDIF
      ELSE
        ITRANS = 0
        TROUVE = .TRUE.
      ENDIF
C
      IF (IFF.NE.0) THEN
        IF (ILANG.EQ.0) THEN
          CALL LIENTIER(
     &         'Temps d''attente entre chaque image (ms) ?',0,NRALEN)
        ELSE
          CALL LIENTIER(
     &         'Time between each image (ms) ?',0,NRALEN)
        ENDIF
        TEMPSAPERDRE = REAL(NRALEN)*0.001
        PRINT*,' '
        IF (ILANG.EQ.0) THEN
          PRINT*,'****************************************'
          PRINT*,'* Cliquez sur le dessin pour l''arrêter *'
          PRINT*,'****************************************'
        ELSE
          PRINT*,'*****************************************'
          PRINT*,'* Click on the window to stop animation *'
          PRINT*,'*****************************************'
        ENDIF
        PRINT*,' '
        NEXAG = 2*NBIMA
        NEXAG2 = NBIMA
        GOTO 3636
      ENDIF
 3512 IF (ILANG.EQ.0) THEN
        CALL LIENTIER('Nombre d''images ?',0,NBIMA)
      ELSE
        CALL LIENTIER('Number of images ?',0,NBIMA)
      ENDIF
C
      IF (NBIMA.LE.0) GOTO 3637
C
      IF (NBIMA.GT.NBIMAX) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'Nombre max d''images =',NBIMAX,' --> tronqué'
        ELSE
          PRINT*,'Max number of images =',NBIMAX,' --> truncated'
        ENDIF
        NBIMA = NBIMAX
      ENDIF
      NBIMA = MAX(NBIMA,1)
      NEXAG = 2*NBIMA
      NEXAG2 = NBIMA
      IMULFI = 0
      IRORO  = 0
      IF (NBIMA.GT.1) THEN
        IF (ICOURB.GT.0) THEN
          IF (IEXAG.NE.0.AND.NOM_VIT(LONVIT-4:LONVIT).eq.'.depl') THEN
            IF (ILANG.EQ.0) THEN
              CALL LIENTIER('Lect. de plusieurs fich. '//
     &'(2:vec+scal, 1:oui, 0:non, -1:spécial déformée) ?'
     &             ,0,IMULFI)
            ELSE
              CALL LIENTIER('Read several files '//
     &'(2:vec+scal, 1:yes, 0:no, -1:special deformation) ?'
     &             ,0,IMULFI)
            ENDIF
            IF (IMULFI.LT.0) IMULFI=-1
          ELSEIF(IEXAG.NE.0
     &           .AND.NOM_VIT(LONVIT-4:LONVIT).eq.'.mode') THEN
            IF (ILANG.EQ.0) THEN
              CALL LIENTIER('Lect. de plusieurs fich. '//
     &           '(2:vec+scal, 1:oui, 0:non, -1:spécial mode propre) ?'
     &             ,0,IMULFI)
            ELSE
              CALL LIENTIER('Read several files '//
     &             '(2:vec+scal, 1:yes, 0:no, -1:special eigenmode) ?'
     &             ,0,IMULFI)
            ENDIF
            IF (IMULFI.LT.0) IMULFI=-2
          ELSE
            IF (ILANG.EQ.0) THEN
              CALL LIENTIER(
     &'Lecture dans plusieurs fichiers (2:vec+scal, 1:oui, 0:non) ?'
     &             ,0,IMULFI)
            ELSE
              CALL LIENTIER(
     &'Read several successive files (2:vec+scal, 1:yes, 0:no) ?'
     &             ,0,IMULFI)
            ENDIF
            IF (IMULFI.NE.0.AND.IMULFI.NE.2) IMULFI = 1
          ENDIF
        ELSE
          IMULFI = 0
        ENDIF
        IF (IMULFI.LE.0) THEN
          IF (IEXAG.NE.0) THEN
            IF (IMULFI.LT.0) THEN
              IRORO = 1
            ELSE
              IF (ILANG.EQ.0) THEN
                CALL LIENTIER(
     &       'Rotation (0), exagération (1) ou les deux (2) ?',0,IRORO)
              ELSE
                CALL LIENTIER(
     &       'Rotation (0), exageration (1) or both (2) ?',0,IRORO)
              ENDIF
            ENDIF
          ELSE
            IRORO = 0
          ENDIF
          IF (IRORO.EQ.0.OR.IRORO.EQ.2) THEN
            DO I=1,3
              DO J=1,3
                ROTLOC(J,I) = ROTA(J,I)
              ENDDO
            ENDDO
            IF (ILANG.EQ.0) THEN
              CALL LIENTIER(
     &'Rotation élémentaire fixe (0) ou mouvement fluide (1) ?',0,IROT)
            ELSE
              CALL LIENTIER(
     &'Fixed elementary rotation (0) or smooth movement (1) ?',0,IROT)
            ENDIF
            IF (IROT.EQ.0) THEN
              IF (ILANG.EQ.0) THEN
                CALL LI3REEL1(
     &      'Rotation autour de Ox, Oy, Oz (3 valeurs en degrés) ?'
     &      ,0,ANGX,ANGY,ANGZ)
              ELSE
                CALL LI3REEL1(
     &      'Rotation about Ox, Oy, Oz (3 values in degrees) ?'
     &      ,0,ANGX,ANGY,ANGZ)
              ENDIF
              CALL ARCROT(ANGX,ANGY,ANGZ)
              DO I=1,3
                DO J=1,3
                  RSMOOTH(J,I,1) = ROTA(J,I)
                  CALL ECHR(ROTLOC(J,I),ROTA(J,I))
                ENDDO
              ENDDO
            ELSE
              IF (ILANG.EQ.0) THEN
                CALL LIENTIER(
     &               'Axe de rotation = Ox, Oy ou Oz (1,2,3) ?',0,IROT)
              ELSE
                CALL LIENTIER(
     &               'Rotation axis = Ox, Oy or Oz (1,2,3) ?',0,IROT)
              ENDIF
              IROT = MIN(3,MAX(1,IROT))
              IF (IROT.EQ.1) THEN
                ANGY = 0.
                ANGZ = 0.
              ELSEIF(IROT.EQ.2) THEN
                ANGZ = 0.
                ANGX = 0.
              ELSE
                ANGX = 0.
                ANGY = 0.
              ENDIF
              IF (ILANG.EQ.0) THEN
                CALL LIREEL1('Angle total (degrés) ?',0,ANGTOT)
              ELSE
                CALL LIREEL1('Total angle (degrees) ?',0,ANGTOT)
              ENDIF
              AA0 = 0.
              DO IM=1,NBIMA
                AAA = 3.14159265359*REAL(IM)/REAL(NBIMA-1)
cc                AA = 0.5*ANGTOT*(1.-COS(AAA))
                AA = ANGTOT*(SIN(AAA*0.5))**2
                DA = AA-AA0
                AA0 = AA
                IF (IROT.EQ.1) THEN
                  ANGX = DA
                ELSEIF(IROT.EQ.2) THEN
                  ANGY = DA
                ELSE
                  ANGZ = DA
                ENDIF
                CALL ARCROT(ANGX,ANGY,ANGZ)
                DO I=1,3
                  DO J=1,3
                    RSMOOTH(J,I,IM) = ROTA(J,I)
                  ENDDO
                ENDDO
              ENDDO
Cfj              DO I=1,3
Cfj                DO J=1,3
Cfj                  CALL ECHR(ROTLOC(J,I),ROTA(J,I))
Cfj                ENDDO
Cfj              ENDDO
            ENDIF
          ENDIF
          IF (IRORO.GE.1) THEN
            IF (IMULFI.LT.0) THEN
              IF (ILANG.EQ.0) THEN
                PRINT*,'Facteur d''exagération actuel =',FACEXA
                CALL LIREEL1('Facteur d''exagération ?',0,FACMA)
              ELSE
                PRINT*,'Effective exageration factor =',FACEXA
                CALL LIREEL1('Exageration factor ?',0,FACMA)
              ENDIF
            ENDIF
            IF (IMULFI.EQ.-1) THEN
              FACMI = 0.
            ELSEIF(IMULFI.EQ.-2) THEN
              FACMI = -FACMA
            ELSE
              IF (ILANG.EQ.0) THEN
                PRINT*,'Facteur d''exagération actuel =',FACEXA
                CALL LI2REEL1('Facteurs d''exagération mini et maxi ?',0
     &               ,FACMI,FACMA)
                CALL LIENTIER(
     &'Une exagération (0) ou nombre d''images / aller-retour (N) ?',0
     &               ,NEXAG)
              ELSE
                PRINT*,'Effective exageration factor =',FACEXA
                CALL LI2REEL1('Max and min exageration factors ?',0
     &               ,FACMI,FACMA)
                CALL LIENTIER(
     &'One exageration (0) or number of images / bounce (N) ?',0
     &               ,NEXAG)
              ENDIF
              IF (FACMI.GT.FACMA) CALL ECHR(FACMI,FACMA)
              IF (NEXAG.LE.0) THEN
                NEXAG = 2*NBIMA
              ELSEIF(MOD(NEXAG,2).EQ.1) THEN
                NEXAG = NEXAG+1
              ENDIF
              NEXAG2 = NEXAG/2
            ENDIF
C ???? (7/2002)
Cfj            IF (ISO.NE.0.AND.ISOBID.NE.0
Cfj     &           .AND.NOM_ISO(1:2).EQ.'$'//NOM_FICH(1:1)) THEN
            IF (ISO.NE.0) THEN
              IF (ILANG.EQ.0) THEN
                CALL LIENTIER(
     &  'Bornes des isovaleurs fixes (0) ou variables (1) ?',0,IFIXB)
              ELSE
                CALL LIENTIER(
     &  'Bounds for contour plot fixed (0) or variable (1) ?',0,IFIXB)
              ENDIF
              IF (IFIXB.EQ.0) THEN
                IF (ILANG.EQ.0) THEN
                  CALL LI2REEL1('Bornes des isovaleurs ?',0,VMIMI,VMAMA)
                ELSE
                  CALL LI2REEL1('Bounds for contour plot ?',0
     &                 ,VMIMI,VMAMA)
                ENDIF
                IF (VMIMI.GT.VMAMA) THEN
                  CALL ECHR(VMIMI,VMAMA)
                ELSEIF(VMIMI.EQ.VMAMA) THEN
                  IFIXB = 1
                ENDIF
              ENDIF
            ENDIF
          ENDIF
          INUM0 = 1
          ISTEP = 1
          IDERN = NBIMA
        ELSE
          IPAS = 0
          IRORO = 3
          IF (IMULFI.EQ.2) THEN
            IF (ILANG.EQ.0) THEN
              CALL LIFICH(
     &'Préfixe des noms de fichiers à lire (vectoriels) ?',0,FICLEC,LF)
              CALL LIENTIER('Numéro du premier fichier ?',0,INUM0)
              CALL LIENTIER('Pas de la boucle sur les fichiers ?',0
     &             ,ISTEP)
              CALL LIFICH(
     &'Postfixe des noms de fichiers (vectoriels) ?',0,FICPOST,LFP)
              CALL LIFICH(
     &'Préfixe des noms de fichiers à lire (scalaires) ?',0,FICLEC2,LF2)
              CALL LIFICH(
     &'Postfixe des noms de fichiers (scalaires) ?',0,FICPOST2,LFP2)
            ELSE
              CALL LIFICH(
     &'Prefix of the filenames to read (vect) ?',0,FICLEC,LF)
              CALL LIENTIER('Number of the first file ?',0,INUM0)
              CALL LIENTIER('Step of the loop over the files ?',0
     &             ,ISTEP)
              CALL LIFICH(
     &'Extension for the filenames (vect) ?',0,FICPOST,LFP)
              CALL LIFICH(
     &'Prefix of the filenames to read (scalar) ?',0,FICLEC2,LF2)
              CALL LIFICH(
     &'Extension for the filenames (scalar) ?',0,FICPOST2,LFP2)
            ENDIF
          ELSE
            IF (ILANG.EQ.0) THEN
              CALL LIFICH(
     &             'Préfixe des noms de fichiers à lire ?',0,FICLEC,LF)
              CALL LIENTIER('Numéro du premier fichier ?',0,INUM0)
              CALL LIENTIER('Pas de la boucle sur les fichiers ?',0
     &             ,ISTEP)
              CALL LIFICH(
     &             'Postfixe des noms de fichiers ?',0,FICPOST,LFP)
            ELSE
              CALL LIFICH(
     &             'Prefix of the filenames to read ?',0,FICLEC,LF)
              CALL LIENTIER('Number of the first file ?',0,INUM0)
              CALL LIENTIER('Step of the loop over the files ?',0
     &             ,ISTEP)
              CALL LIFICH(
     &             'Extension for the filenames ?',0,FICPOST,LFP)
            ENDIF
          ENDIF
          IF (ISTEP.EQ.0) ISTEP = 1
 3522     IDERN = INUM0+ISTEP*(NBIMA-1)
          CALL ECCNUM(INUM0,IDERN,CCOU,LC)
          CALL ECCNUM(IDERN,IDERN,CNUM,LC)
          IF (IPAS.EQ.0) THEN
            IF (ILANG.EQ.0) THEN
              IF (LFP.LE.0) THEN
                PRINT*,
     &         'On va lire les fichiers '//FICLEC(1:LF)//CCOU(1:LC)//
     &                            ' ... '//FICLEC(1:LF)//CNUM(1:LC)
              ELSE
                PRINT*,
     &         'On va lire les fichiers '
     &                      //FICLEC(1:LF)//CCOU(1:LC)//FICPOST(1:LFP)//
     &               ' ... '//FICLEC(1:LF)//CNUM(1:LC)//FICPOST(1:LFP)
              ENDIF
              IF (IMULFI.EQ.2) THEN
cc                PRINT*,' '
                IF (LFP2.LE.0) THEN
                  PRINT*,
     &'                     et '//FICLEC2(1:LF2)//CCOU(1:LC)//
     &                   ' ... '//FICLEC2(1:LF2)//CNUM(1:LC)
                ELSE
                  PRINT*,'                     et '
     &          //FICLEC2(1:LF2)//CCOU(1:LC)//FICPOST2(1:LFP2)//
     &   ' ... '//FICLEC2(1:LF2)//CNUM(1:LC)//FICPOST2(1:LFP2)
                ENDIF
              ENDIF
              CALL LIENTIER('OK ? (1:oui, 0:non)',0,IOK)
            ELSE
              IF (LFP.LE.0) THEN
                PRINT*,
     &'I''am gonna read files '//FICLEC(1:LF)//CCOU(1:LC)//
     &                  ' ... '//FICLEC(1:LF)//CNUM(1:LC)
              ELSE
                PRINT*,
     &         'I''am gonna read files '
     &                      //FICLEC(1:LF)//CCOU(1:LC)//FICPOST(1:LFP)//
     &               ' ... '//FICLEC(1:LF)//CNUM(1:LC)//FICPOST(1:LFP)
              IF (IMULFI.EQ.2) THEN
                PRINT*,' '
                IF (LFP2.LE.0) THEN
                  PRINT*,
     &'                  and '//FICLEC2(1:LF2)//CCOU(1:LC)//
     &                 ' ... '//FICLEC2(1:LF2)//CNUM(1:LC)
                ELSE
                  PRINT*,'                  and '
     &          //FICLEC2(1:LF2)//CCOU(1:LC)//FICPOST2(1:LFP2)//
     &   ' ... '//FICLEC2(1:LF2)//CNUM(1:LC)//FICPOST2(1:LFP2)
                ENDIF
              ENDIF
                CALL LIENTIER('OK ? (1:yes, 0:no)',0,IOK)
              ENDIF
            ENDIF
            IF (IOK.NE.1) GOTO 3512
            IF (NSURF.GT.0.AND.IFC.LT.0) ISUSU = 1
          ENDIF
          IRC = 1
          IF (LFP.LE.0) THEN
            LBID = LF+LC
            CBIDON(1:LBID) = FICLEC(1:LF)//CCOU(1:LC)
          ELSE
            LBID = LF+LC+LFP
            CBIDON(1:LBID) = FICLEC(1:LF)//CCOU(1:LC)//FICPOST(1:LFP)
          ENDIF
          CALL LIVAL(CBIDON,LBID,IVAL,ICLAS,ICONTR,NDSEL,IRC)
          PRINT*,' '
          IF (IMULFI.EQ.2) THEN
            IRC2 = 1
            IF (LFP2.LE.0) THEN
              LBID = LF2+LC
              CBIDON(1:LBID) = FICLEC2(1:LF2)//CCOU(1:LC)
            ELSE
              LBID = LF2+LC+LFP2
              CBIDON(1:LBID) = FICLEC2(1:LF2)//CCOU(1:LC)
     &             //FICPOST2(1:LFP2)
            ENDIF
            CALL LIVAL(CBIDON,LBID,IVAL,ICLAS,ICONTR,NDSEL,IRC2)
            PRINT*,' '
            IRC = MIN(IRC,IRC2)
          ENDIF
          IF (IRC.LT.0) THEN
            NBIMA = NBIMA-1
            INUM0 = INUM0+1
            IPAS = 1
            IF (NBIMA.GT.0) THEN
              GOTO 3522
            ELSE
              IF (ILANG.EQ.0) THEN
                PRINT*,
     &'*** Echec total dans la lecture de la série de fichiers'
              ELSE
                PRINT*,
     &'*** Reading of the series of files UNSUCCESSFUL'
              ENDIF
              GOTO 3512
            ENDIF
          ENDIF
          IF (IVAL.NE.1.AND.IVAL.NE.4) THEN
            IF (IVAL.EQ.-1) THEN
              IVAVA = 2
            ELSE
              IVAVA = 0
            ENDIF
Cfj            IF (IVIT.LT.0) THEN
Cfj              CALL ECR16COUL(ICTFLE,ILANG)
Cfj              IF (ILANG.EQ.0) THEN
Cfj                PRINT*,'>15 : coloration en fonction du champ scalaire'
Cfj                CALL LIENTIER('Couleur des flèches ?',0,ICTFLE)
Cfj                IF (ICTFLE.LT.0)  ICTFLE = 7
Cfj                IF (ICTFLE.GT.15) ICTFLE = 16
Cfj                PRINT*,'Types de pointes de flèches disponibles :'
Cfj                PRINT*,'  1 : pas de pointe'
Cfj                PRINT*,'  2 : au trait'
Cfj                PRINT*,'  3 : pointe triangulaire'
Cfj                PRINT*,'  4 : pointe jolie'
Cfj                PRINT*,'  idem <0 : double flèche'
Cfj                CALL LIENTIER('Type des flèches ?',0,ITYPFL)
Cfj              ELSE
Cfj                PRINT*,'>15 : coloring according to the scalar field'
Cfj                CALL LIENTIER('Arrows colors?',0,ICTFLE)
Cfj                IF (ICTFLE.LT.0)  ICTFLE = 7
Cfj                IF (ICTFLE.GT.15) ICTFLE = 16
Cfj                PRINT*,'Types of arrows extremities:'
Cfj                PRINT*,'  1 : no extremities'
Cfj                PRINT*,'  2 : outline'
Cfj                PRINT*,'  3 : triangle'
Cfj                PRINT*,'  4 : fancy extremities'
Cfj                PRINT*,'  idem <0 : double arrows'
Cfj                CALL LIENTIER('Type of arrows ?',0,ITYPFL)
Cfj              ENDIF
Cfj              IF (ITYPFL.EQ.0.OR.ABS(ITYPFL).GT.4) ITYPFL = 4
Cfj            ENDIF
          ELSE
            IDEPL = 1
            IF (I2D.NE.0.AND.FACEXA.NE.0.) THEN
              IF (ILANG.EQ.0) THEN
                PRINT*,
     &'*** La config. actuelle est déformée (fac d''exag =',FACEXA,')'
                CALL LIENTIER(
     &               'Fichiers scalaires pour nouvelle déformée (0)'//
     &               ' ou juste pour iso sur l''ancienne (1) ?',0,IREP)
              ELSE
                PRINT*,
     &'*** The current config is exagerated (exag. fac. =',FACEXA,')'
                CALL LIENTIER(
     &               'Scalar field for a new deformation (0)'//
     &        ' or for contour plot on the previous one (1) ?',0,IREP)
              ENDIF
              IF (IREP.EQ.0) THEN
                FACEXA0 = FACEXA
                DFACX = -FACEXA
                DFACY = -FACEXA
                DFACZ = -FACEXA
                CALL EXAGERE(DFACX,DFACY,DFACZ,IOPTEXA)
              ELSE
                IDEPL = 0
              ENDIF
            ENDIF
          ENDIF
          IF (ISO.NE.0) THEN
            IF (ILANG.EQ.0) THEN
              CALL LIENTIER(
     &  'Bornes des isovaleurs fixes (0) ou variables (1) ?',0,IFIXB)
            ELSE
              CALL LIENTIER(
     &  'Bounds for contour plot fixed (0) or variable (1) ?',0,IFIXB)
            ENDIF
            IF (IFIXB.EQ.0) THEN
              IF (ILANG.EQ.0) THEN
                CALL LI2REEL1('Bornes des isovaleurs ?',0,VMIMI,VMAMA)
              ELSE
                CALL LI2REEL1('Bounds for contour plot ?',0,VMIMI,VMAMA)
              ENDIF
              IF (VMIMI.GT.VMAMA) THEN
                CALL ECHR(VMIMI,VMAMA)
              ELSEIF(VMIMI.EQ.VMAMA) THEN
                IFIXB = 1
              ENDIF
            ENDIF
          ENDIF
        ENDIF
      ENDIF
      IF (IFORMAT.GE.0) THEN
        PRINT*,' '
        IF (ILANG.EQ.0) THEN
          PRINT*,'****************************************************'
          PRINT*,'*    La sauvegarde des images bitmap va démarrer   *'
          PRINT*,'* Attention de ne pas cacher les fenêtres qui vont *'
          PRINT*,'* s''afficher successivement (en général en haut à  *'
          PRINT*,
     &         '* gauche de l''écran). Risque d''images incomplètes  *'
          PRINT*,'****************************************************'
          PRINT*,' '
          CALL LIFICH('Préfixe des noms d''images ?',0,IMAGES,LIM)
        ELSE
          PRINT*,
     &         '*******************************************************'
          PRINT*,
     &         '*      The bitmap image saving is about to begin      *'
          PRINT*,
     &         '*    Be careful to avoid obscuring the successive     *'
          PRINT*,
     &         '* windows that will appear (generally on the top left *'
          PRINT*,
     &         '* corner of your display). Risk of uncomplete images  *'
          PRINT*,
     &         '*******************************************************'
          PRINT*,' '
          CALL LIFICH('Prefix of the images names ?',0,IMAGES,LIM)
        ENDIF
        NBPAS = 1
        IBOUNCE = 0
      ELSE
        IF (IMULFI.LT.0) THEN
          IMULFI = 0
          IF (ILANG.EQ.0) THEN
            CALL LIENTIER('Nombre de passages ?',0,NBPAS)
          ELSE
            CALL LIENTIER('Number of passes ?',0,NBPAS)
          ENDIF
          IBOUNCE = 1
          NBPAS = MAX(1,ABS(NBPAS))
        ELSE
          IF (ILANG.EQ.0) THEN
            CALL LIENTIER('Nombre de passages (<0: bounce) ?',0,NBPAS)
          ELSE
            CALL LIENTIER('Number of passes (<0: bounce) ?',0,NBPAS)
          ENDIF
          IF (NBPAS.GT.0) THEN
            IBOUNCE = 0
          ELSE
            IBOUNCE = 1
            NBPAS = MAX(1,-NBPAS)
          ENDIF
        ENDIF
      ENDIF
      IF (IDEFPS.GE.8) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,'*** ATTENTION : l''option de sauvegarde "Dessin seul"'
          PRINT*,'*** ne marche pas avec les bitmaps'
          PRINT*,
     &       '*** On sauve le dessin encadré, sans les infos de droite'
        ELSE
          PRINT*,'*** WARNING: the option "plot alone"'
          PRINT*,'*** doesn''t work with bitmaps'
          PRINT*,
     &  '*** Saving picture without the information zone on the right'
        ENDIF
        IDEFPS = 0
        CALL DEFPS(IDEFPS,SIG,ANGPS,ICADPS,HELPPS,IDSEUL,0,ILANG)
      ENDIF
C
 3636 CALL TAILLE_FEN(-IPIXX,-IPIXY,1)
      IXIMAGE = IPIXX
      IYIMAGE = IPIXY
      IPOST = -2
      IF (IPROGRE.GT.0) IPROGRE = -IPROGRE
      IF (IFIXB.NE.0.AND.ISO.NE.0.AND.NBIMA.GT.1.AND.IFORMAT.GE.0) THEN
        IF (ILANG.EQ.0) THEN
          PRINT*,
     &    'On crée '//IMAGES(1:LIM)//'.bornes pour stocker les bornes'
        ELSE
          PRINT*,
     &     'Creating '//IMAGES(1:LIM)//'.bornes to save bounds'
        ENDIF
        CALL PREMIER_LIBRE(IFICHB)
        OPEN(IFICHB,FILE=IMAGES(1:LIM)//'.bornes')
      ENDIF
      DO NBP=1,NBPAS
        IF (IBOUNCE.EQ.0.OR.MOD(NBP,2).EQ.1) THEN
          IM1 = 1
          IM2 = NBIMA
          ISS = 1
          IF (IRORO.GE.1) THEN
            FAC1 = FACMI
            FAC2 = FACMA
          ENDIF
        ELSE
          IM1 = NBIMA
          IM2 = 1
          ISS = -1
          IF (IRORO.GE.1) THEN
            FAC1 = FACMA
            FAC2 = FACMI
          ENDIF
        ENDIF
        IF ((IRORO.EQ.0.OR.IRORO.EQ.2)
     & .AND.IROT.EQ.0.AND.IBOUNCE.NE.0.AND.NBP.GT.1) THEN
          DO J=1,3
            DO I=1,3
              RBID(I,J) = ROTLOC(I,J)
            ENDDO
          ENDDO
          CALL INV3X3(RBID,ROTLOC,IERR)
        ENDIF
        IPREMIER = 0
        DO I=IM1,IM2,ISS
          IF (IMULFI.LE.0) THEN
            IF (IRORO.GE.1) THEN
              IF (IPREMIER.EQ.0) THEN
                DFAC = FAC1-DDD0
                IPREMIER = 1
              ELSE
                IF (MOD((I-1)/NEXAG2,2).EQ.0) THEN
                  DFAC = (FAC2-FAC1)/REAL(NEXAG2-1)
                ELSE
                  DFAC = (FAC1-FAC2)/REAL(NEXAG2-1)
                ENDIF
              ENDIF
              IF (NRECON.GT.1) THEN
                NRECON0 = NRECON
                NFACE0 = NFACE
                NRECON = 1
                NFACE = NF
                CALL SYMETRISE(NRECON0,0)
                CALL EXAGERE(DFAC,DFAC,DFAC,IOPTEXA)
                IF (NSURF.GT.0) CALL CALSUR(0)
                NRECON = NRECON0
                NFACE = NFACE0
                NRECON0 = 1
                CALL SYMETRISE(NRECON0,0)
                IF (NSURF.GT.0.AND.ICTFAC.GT.15.AND.ICTFAC.LE.97)
     &               CALL ELISO(IRC)
              ELSE
                CALL EXAGERE(DFAC,DFAC,DFAC,IOPTEXA)
                IF (NSURF.GT.0) CALL CALSUR(0)
              ENDIF
Cfj              IF (ISO.NE.0.AND.ISOBID.NE.0
Cfj     &           .AND.NOM_ISO(1:2).EQ.'$'//NOM_FICH(1:1)) CALL MYISO
              IF (ISO.NE.0.AND.ISOBID.NE.ISOBID0.AND.ISOBID0.NE.0) THEN
                ISOBID = ISOBID0
                CALL MYISO
              ENDIF
              DDD  = DDD+DFAC
              DDD0 = DDD0+DFAC
            ENDIF
            IF (IFIXB.EQ.0) THEN
              VMIN = VMIMI
              VMAX = VMAMA
            ENDIF
            IF (I.GT.1.OR.IRORO.GE.1) THEN
              CALL PROJET(NBON,XMIN,XMAX,YMIN,YMAX)
              IF (I2D.EQ.0.OR.(IDEFOR.EQ.2.AND.FACEXA.NE.0.)) THEN
                IF (NSURF.GT.0.AND.IFC.LT.0) THEN
                  CALL PROSUR(NBON)
                  CALL RANGEMENT(NBON+NSURF)
                ELSE
                  CALL RANGEMENT(NBON)
                ENDIF
              ELSE
                DO J=1,NBON
                  IORDRE(J) = J
                ENDDO
              ENDIF
            ENDIF
            IF (NBIMA.GT.1) CALL ECCNUM(I,NBIMA,CNUM,LC)
          ELSEIF(NBIMA.GT.1) THEN
            CALL ECCNUM(INUM0+(I-1)*ISTEP,IDERN,CNUM,LC)
            IF (LFP.LE.0) THEN
              LBID = LF+LC
              CBIDON(1:LBID) = FICLEC(1:LF)//CNUM(1:LC)
            ELSE
              LBID = LF+LC+LFP
              CBIDON(1:LBID) = FICLEC(1:LF)//CNUM(1:LC)//FICPOST(1:LFP)
            ENDIF
            IF (ILANG.EQ.0) THEN
              PRINT*,'Lecture de '//CBIDON(1:LBID)
            ELSE
              PRINT*,'Reading '//CBIDON(1:LBID)
            ENDIF
            OPEN(2,FILE=CBIDON(1:LBID),STATUS='OLD',IOSTAT=IERR)
            IF (IERR.NE.0) THEN
              IF (ILANG.EQ.0) THEN
                PRINT*,'*** Problème à l''ouverture de '//CBIDON(1:LBID)
              ELSE
                PRINT*,'*** Troubles opening '//CBIDON(1:LBID)
              ENDIF
              GOTO 3532
            ENDIF
            IF ((IVAL.NE.1.AND.IVAL.NE.4).OR.IMULFI.EQ.2) THEN
              IF (IMULFI.EQ.2) IVAVA=0
              CALL LIVIT(ICLAS,IVAVA,CBIDON,LBID,IRC,0,1)
              IF (ISO.NE.0.AND.ISOBID.NE.ISOBID0.AND.ISOBID0.NE.0) THEN
                ISOBID = ISOBID0
                CALL MYISO
              ENDIF
              IF (LBID.GT.5) THEN
                IF (CBIDON(LBID-4:LBID).EQ.'.depl'
     &          .OR.CBIDON(LBID-4:LBID).EQ.'.mode') THEN
                  IF (FACEXA.NE.0.) THEN
                    CALL PROJET(NBON,XMIN,XMAX,YMIN,YMAX)
                    CALL RANGEMENT(NBON)
                  ENDIF
                ENDIF
              ENDIF
            ELSE
              CALL LIISO(ICLAS,CBIDON,LBID,IRC,ICONTR,IDEPL,IVAL)
              IF (I2D.NE.0.AND.FACEXA0.NE.0..AND.IREP.EQ.0) THEN
                FACEXA = FACEXA0
                DFACX = FACEXA
                DFACY = FACEXA
                DFACZ = FACEXA
                CALL EXAGERE(DFACX,DFACY,DFACZ,IOPTEXA)
                CALL PROJET(NBON,XMIN,XMAX,YMIN,YMAX)
                CALL RANGEMENT(NBON)
              ENDIF
            ENDIF
            IF (IRC.NE.0) GOTO 3532
            IF (IMULFI.EQ.2) THEN
              IF (LFP2.LE.0) THEN
                LBID = LF2+LC
                CBIDON(1:LBID) = FICLEC2(1:LF2)//CNUM(1:LC)
              ELSE
                LBID = LF2+LC+LFP2
                CBIDON(1:LBID) = FICLEC2(1:LF2)//CNUM(1:LC)
     &               //FICPOST2(1:LFP2)
              ENDIF
              IF (ILANG.EQ.0) THEN
                PRINT*,'Lecture de '//CBIDON(1:LBID)
              ELSE
                PRINT*,'Reading '//CBIDON(1:LBID)
              ENDIF
              OPEN(2,FILE=CBIDON(1:LBID),STATUS='OLD',IOSTAT=IERR)
              IF (IERR.NE.0) THEN
                IF (ILANG.EQ.0) THEN
                  PRINT*,
     &                 '*** Problème à l''ouverture de '//CBIDON(1:LBID)
                ELSE
                  PRINT*,
     &                 '*** Troubles opening '//CBIDON(1:LBID)
                ENDIF
                GOTO 3532
              ENDIF
              CALL LIISO(ICLAS,CBIDON,LBID,IRC,ICONTR,IDEPL,IVAL)
              IF (IRC.NE.0) GOTO 3532
            ENDIF
            IF (IFIXB.EQ.0) THEN
              VMIN = VMIMI
              VMAX = VMAMA
            ELSEIF(ISO.NE.0.AND.IFORMAT.GE.0) THEN
              WRITE(IFICHB,*)
     &     'Image',I,' '//IMAGES(1:LIM)//CNUM(1:LC)//' : bornes ='
     &             ,VMIN,VMAX
            ENDIF
            IF (ISUSU.NE.0) THEN
              CALL CALSUR(0)
              CALL PROJET(NBON,XMIN,XMAX,YMIN,YMAX)
              IF (NSURF.GT.0) THEN
                CALL PROSUR(NBON)
                CALL RANGEMENT(NBON+NSURF)
              ELSE
                CALL RANGEMENT(NBON)
              ENDIF
            ENDIF
          ENDIF
          DO IRES=1,IDBLERES+1
            IF (IDBLERES.GT.0) THEN
              IF (IRES.EQ.1) THEN
                CALL TAILLE_FEN(-IPIXX,-IPIXY,1)
                IXIMAGE = IPIXX
                IYIMAGE = IPIXY
              ELSE
                CALL TAILLE_FEN(-IPIXX/2,-IPIXY/2,1)
                IXIMAGE = IPIXX/2
                IYIMAGE = IPIXY/2
              ENDIF
            ENDIF
            IF (NBIMA.GT.1) THEN
              IF (IRES.EQ.1) THEN
                CALL ECCNUM(I,NBIMA,CBIDON,LBID0)
                CALL ECCNUM(NBIMA,NBIMA,CBIDON(LBID0+2:13),LBID1)
                CBIDON(LBID0+1:LBID0+1) = '/'
                LBID = LBID0 + LBID1 + 1
                IF (NBPAS.GT.1) THEN
                  IF (NBPAS.LT.10) THEN
                    WRITE(CBIDON(LBID+1:LBID+6),'(" (",I1,"/",I1,")")')
     &                   NBP,NBPAS
                    LBID = LBID+6
                  ELSEIF(NBPAS.LT.100) THEN
                    WRITE(CBIDON(LBID+1:LBID+8)
     &                   ,'(" (",I2.2,"/",I2.2,")")') NBP,NBPAS
                    LBID = LBID+8
                  ELSEIF(NBPAS.LT.1000) THEN
                    WRITE(CBIDON(LBID+1:LBID+10)
     &                   ,'(" (",I3.3,"/",I3.3,")")') NBP,NBPAS
                    LBID = LBID+10
                  ELSE
                    WRITE(CBIDON(LBID+1:LBID+16)
     &                   ,'(" (",I4.4,"/",I4.4,")")') NBP,NBPAS
                    LBID = LBID+16
                  ENDIF
                ENDIF
              ENDIF
              CALL x11nomfenetre(
     &             'Sauve Bitmap '//CBIDON(1:LBID)//CHAR(0),13+LBID)
            ELSE
              CALL x11nomfenetre('Sauve Bitmap'//CHAR(0),12)
            ENDIF
            IF (IFF.NE.0) CALL x11allevents
            CALL TRACE(NBON,IOPT,GEOM,ITYP,IREFRE,IABAND,IBOUT,1)
            IF (IFF.NE.0) THEN
              CALL getxycx11d(IEV)
              IF (IEV.EQ.0) THEN
                CALL viderbuff2
                GOTO 3637
              ENDIF
              IF (NRALEN.GT.0) CALL PERDDUTEMPS(TEMPSAPERDRE)
            ENDIF
            CALL viderbuff2
C
            IF (NBIMA.GT.1) THEN
              IF (IFORMAT.GE.0) THEN
                IF (IRES.EQ.1) THEN
                  LILI = LIM+LC
                  IMAGES(1:LILI) = IMAGES(1:LIM)//CNUM(1:LC)
                  IF (IFORMAT.EQ.1) THEN
                    IF (LLIST+LILI.LT.4096-155) THEN
                      LISTE(LLIST+1:LLIST+LILI+1) =
     &                     IMAGES(1:LILI)//','
                      LLIST = LLIST+LILI+1
                    ELSE
                      PRINT*,'*** LISTE trop petit (animation)'
                    ENDIF
                  ENDIF
                ELSE
                  LILI = LIM+LC+2
                  IMAGES(1:LILI) = IMAGES(1:LIM)//'_s'//CNUM(1:LC)
                  IF (IFORMAT.EQ.1) THEN
                    IF (LLIST_S+LILI.LT.4096-155) THEN
                      LISTE_S(LLIST_S+1:LLIST_S+LILI+1) =
     &                     IMAGES(1:LILI)//','
                      LLIST_S = LLIST_S+LILI+1
                    ELSE
                      PRINT*,'*** LISTE_S trop petit (animation)'
                    ENDIF
                  ENDIF
                ENDIF
                CALL SAUVEBIT(IMAGES(1:LILI)//CHAR(0),LILI
     &  ,TS(1:LTI)//NOM_FICH(1:LONG)//' '//CBIDON(1:LBID)//CHAR(0)
     &               ,LTI+LONG+LBID+1,IFORMAT,IXIMAGE,IYIMAGE)
                IF (ITRANS.EQ.1) THEN
                  CALL EXEC('gifsicle --batch --transparent '
     &                 //RVB//' '//IMAGES(1:LILI)//'.gif')
                ENDIF
              ENDIF
              IF (I*ISS.LT.IM2*ISS.AND.(IRORO.EQ.0.OR.IRORO.EQ.2)
     &             .AND.IRES.EQ.1) THEN
                IF (IROT.NE.0) THEN
                  IF (ISS.GT.0) THEN
                    DO K=1,3
                      DO J=1,3
                        ROTLOC(J,K) = RSMOOTH(J,K,I)
                      ENDDO
                    ENDDO
                  ELSE
                    CALL INV3X3(RSMOOTH(1,1,I),ROTLOC,IERR)
                  ENDIF
                ELSEIF(IRORO.EQ.2) THEN
                  DO K=1,3
                    DO J=1,3
                      ROTLOC(J,K) = RSMOOTH(J,K,1)
                    ENDDO
                  ENDDO
                ENDIF
                CALL ROTATE(1)
              ENDIF
            ELSE
              IF (IFORMAT.GE.0) THEN
                IF (IRES.EQ.1) THEN
                  CALL SAUVEBIT(IMAGES,LIM,TS(1:LTI)//NOM_FICH(1:LONG)
     &                 ,LTI+LONG,IFORMAT,IXIMAGE,IYIMAGE)
                  IF (ITRANS.EQ.1) THEN
                    CALL EXEC('gifsicle --batch  --transparent '
     &                   //RVB//' '//IMAGES(1:LIM)//'.gif')
                  ENDIF
                ELSE
                  CALL SAUVEBIT(IMAGES(1:LIM)//'_s',LIM+2
     &                 ,TS(1:LTI)//NOM_FICH(1:LONG),LTI+LONG
     &                 ,IFORMAT,IXIMAGE,IYIMAGE)
                  IF (ITRANS.EQ.1) THEN
                    CALL EXEC('gifsicle --batch  --transparent '
     &                   //RVB//' '//IMAGES(1:LIM)//'_s.gif')
                  ENDIF
                ENDIF
              ENDIF
            ENDIF
          ENDDO
 3532     CONTINUE
        ENDDO
      ENDDO
 3637 IF (IFIXB.NE.0.AND.ISO.NE.0.AND.NBIMA.GT.1.AND.IFORMAT.GE.0)
     &     CLOSE(IFICHB)
      CALL x11videqueue
      IF (IPROGRE0.GT.0) IPROGRE = -IPROGRE
      IF (IDEFPS.NE.IDEFPS0) THEN
        IDEFPS = IDEFPS0
        CALL DEFPS(IDEFPS,SIG,ANGPS,ICADPS,HELPPS,IDSEUL,0,ILANG)
      ENDIF
      IPOST = 1
      IF (IMULFI.LE.0.AND.IRORO.GE.1) THEN
        IF (NRECON.GT.1) THEN
          NRECON0 = NRECON
          NFACE0 = NFACE
          NRECON = 1
          NFACE = NF
          CALL SYMETRISE(NRECON0,0)
          CALL EXAGERE(-DDD,-DDD,-DDD,0)
          IF (NSURF.GT.0) CALL CALSUR(1)
          NRECON = NRECON0
          NFACE = NFACE0
          NRECON0 = 1
          CALL SYMETRISE(NRECON0,0)
          IF (NSURF.GT.0.AND.ICTFAC.GT.15.AND.ICTFAC.LE.97)
     &         CALL ELISO(IRC)
        ELSE
          CALL EXAGERE(-DDD,-DDD,-DDD,0)
          IF (NSURF.GT.0) CALL CALSUR(1)
        ENDIF
        IF (ISO.NE.0.AND.ISOBID.NE.0.AND.
     &       NOM_ISO(1:2).EQ.'$'//NOM_FICH(1:1)) CALL MYISO
      ENDIF
C
      IF (IFORMAT.EQ.1.AND.NBIMA.GT.1.AND.TROUVE) THEN
        IF (IPIXX.GE.128) CALL QUICESTCELUILA('gifsicle',8,TROUVE,0)
        IF (TROUVE) THEN
          IF (ILANG.EQ.0) THEN
            CALL LIENTIER(
     & 'Voulez-vous créer un GIF animé (1:oui, 0:non) ?',0,IGIFANIM)
          ELSE
            CALL LIENTIER(
     & 'Do you want to generate an animated GIF (1:yes, 0:no) ?'
     &           ,0,IGIFANIM)
          ENDIF
          IF (IGIFANIM.EQ.1) THEN
            IF (ILANG.EQ.0) THEN
              CALL LIENTIER(
     &'Attente entre les images du film (en ms, valeur conseillée=5) ?'
     &             ,0,IWAIT)
              CALL LIENTIER('Option "loop" (1:oui, 0:non) ?',0,ILOOP)
            ELSE
              CALL LIENTIER(
     &'Time between frames (ms, recommended value=5) ?'
     &             ,0,IWAIT)
              CALL LIENTIER('Option "loop" (1:yes, 0:no) ?',0,ILOOP)
            ENDIF
            GIFSICLE =
     &           'gifsicle -v -D 2 -O2 -k 256 --careful'
            LGC = 37
            IF (ILOOP.EQ.1) THEN
              GIFSICLE = GIFSICLE(1:LGC)//' -l'
              LGC = LGC + 3
            ENDIF
            IF (IWAIT.GT.0) THEN
              CALL ECCNUM(IWAIT,IWAIT,CNUM,LC)
              GIFSICLE = GIFSICLE(1:LGC)//' -d '//CNUM(1:LC)
              LGC = LGC + 4 + LC
            ENDIF
            GIFSICLE = GIFSICLE(1:LGC)//' -o '
            LGC = LGC + 4
            LISTE(LLIST:LLIST+4) = '}.gif'
            LLIST = LLIST+4
            LISTE_S(LLIST_S:LLIST_S+4) = '}.gif'
            LLIST_S = LLIST_S+4
            IF (ILANG.EQ.0) THEN
              CALL LIFICH('Préfixe du GIF animé ?',0,IMAGES,LANIM)
            ELSE
              CALL LIFICH('Prefix of the animated GIF ?',0,IMAGES,LANIM)
            ENDIF
            IF (LLIST*2+LANIM+LGC+3+4*IDBLERES.LE.8192) THEN
              IF (ILANG.EQ.0) THEN
                CALL LIENTIER(
     &               'Aller simple (0) ou aller-retour (1) ?',0,IBOUNCE)
              ELSE
                CALL LIENTIER('One way (0) or bounce (1) ?',0,IBOUNCE)
              ENDIF
            ELSE
              IBOUNCE = 0
            ENDIF
            LL = LANIM+LGC+5
            IF (IBOUNCE.EQ.1) THEN
              LISTE(LLIST+1+LL:LLIST+8+LL) = ' `ls -r '
              LISTE_S(LLIST_S+3+LL:LLIST_S+10+LL) = ' `ls -r '
              DO I=1,LLIST
                LISTE(LLIST+8+I+LL:LLIST+8+I+LL) = LISTE(I:I)
              ENDDO
              DO I=1,LLIST_S
                LISTE_S(LLIST_S+10+I+LL:LLIST_S+10+I+LL) = LISTE_S(I:I)
              ENDDO
              LEXEC = 2*LLIST+LL+9
              LISTE(LEXEC:LEXEC) = '`'
              LEXEC_S = 2*LLIST_S+LL+11
              LISTE_S(LEXEC_S:LEXEC_S) = '`'
            ELSE
              LEXEC = LLIST+LL
              LEXEC_S = LLIST_S+LL+2
            ENDIF
            DO I=LLIST,1,-1
              LISTE(I+LL:I+LL) = LISTE(I:I)
            ENDDO
            DO I=LLIST_S,1,-1
              LISTE_S(I+LL+2:I+LL+2) = LISTE_S(I:I)
            ENDDO
            LISTE(1:LL) = GIFSICLE(1:LGC)//IMAGES(1:LANIM)//'.gif '
            PRINT*,' '
            PRINT*,LISTE(1:LEXEC)//CHAR(0)
            PRINT*,' '
            CALL EXEC(LISTE(1:LEXEC)//CHAR(0))
C
            IF (IDBLERES.GT.0) THEN
              PRINT*,' '
              LISTE_S(1:LL+2) = GIFSICLE(1:LGC)
     &             //IMAGES(1:LANIM)//'_s.gif '
              PRINT*,LISTE_S(1:LEXEC_S)//CHAR(0)
              PRINT*,' '
              CALL EXEC(LISTE_S(1:LEXEC_S)//CHAR(0))
            ENDIF
C
            PRINT*,' '
            IF (ILANG.EQ.0) THEN
              CALL LIENTIER(
     &'On efface les fichiers GIF individuels (1:oui, 0:non) ?',0,IEFFA)
            ELSE
              CALL LIENTIER(
     &'Remove individual GIFs (1:yes, 0:no) ?',0,IEFFA)
            ENDIF
            IF (IEFFA.EQ.1) THEN
              PRINT*,' '
              PRINT*,'/bin/rm -f '//LISTE(LL+1:LL+LLIST)
              CALL EXEC('/bin/rm -f '//LISTE(LL+1:LL+LLIST)//CHAR(0))
              IF (IDBLERES.GT.0) THEN
                PRINT*,'/bin/rm -f '//LISTE_S(LL+3:LL+2+LLIST_S)
                CALL EXEC('/bin/rm -f '
     &               //LISTE_S(LL+3:LL+2+LLIST_S)//CHAR(0))
              ENDIF
              PRINT*,' '
            ENDIF
            CALL EXEC('ls -l '//IMAGES(1:LANIM)//'.gif')
            CALL QUICESTCELUILA('gifview',7,TROUVE,0)
            IF (TROUVE) THEN
              IF (ILANG.EQ.0) THEN
                CALL LIENTIER(
     &'On joue '//IMAGES(1:LANIM)//'.gif pour voir (1:oui, 0:non) ?'
     &               ,0,IVERIF)
              ELSE
                CALL LIENTIER(
     &'Do you want to play '//IMAGES(1:LANIM)//
     &               '.gif to check it (1:yes, 0:no) ?'
     &               ,0,IVERIF)
              ENDIF
              IF (IVERIF.EQ.1) THEN
                IF (ILANG.EQ.0) THEN
                  PRINT*,
     &       '*** Tapez "q" dans la fenêtre animée pour revenir à xd3d'
                ELSE
                  PRINT*,
     &       '*** Type "q" on the animation to come back to xd3d'
                ENDIF
                CALL EXEC('gifview -a '//IMAGES(1:LANIM)//'.gif')
              ENDIF
            ENDIF
          ENDIF
        ELSE
          PRINT*,' '
          IF (ILANG.EQ.0) THEN
            PRINT*,
     &'*** Ici vous auriez pu générer directement un GIF animé,'
            PRINT*,
     &'*** à condition d''installer "gifsicle" qui se trouve là :'
          ELSE
            PRINT*,
     &'*** You could have been able to generate an animated GIF,'
            PRINT*,
     &'*** if you had installed "gifsicle", which can be found here:'
          ENDIF
          PRINT*,'http://www.lcdf.org/~eddietwo/gifsicle/'
          PRINT*,' '
        ENDIF
      ENDIF
C
      ISTDOUT = ISTDOUT0
      END
C-----------------------------------------------------------------------
      SUBROUTINE ECCNUM(I,NBIMA,CNUM,LC)
      CHARACTER*7 CNUM
C
      IF (NBIMA.LT.10) THEN
        WRITE(CNUM(1:1),'(I1)') I
        LC = 1
      ELSEIF(NBIMA.LT.100) THEN
        WRITE(CNUM(1:2),'(I2.2)') I
        LC = 2
      ELSEIF(NBIMA.LT.1000) THEN
        WRITE(CNUM(1:3),'(I3.3)') I
        LC = 3
      ELSEIF(NBIMA.LT.10000) THEN
        WRITE(CNUM(1:4),'(I4.4)') I
        LC = 4
      ELSEIF(NBIMA.LT.100000) THEN
        WRITE(CNUM(1:5),'(I5.5)') I
        LC = 5
      ELSEIF(NBIMA.LT.100000) THEN
        WRITE(CNUM(1:6),'(I6.6)') I
        LC = 6
      ELSE
        WRITE(CNUM(1:7),'(I7.7)') I
        LC = 7
      ENDIF
      END
