C MSLIS1    SOURCE    PV        20/04/28    21:15:18     10593          
      SUBROUTINE MSLIS1(CTYP,IPOI1,ICLE,IPOI2,IPOI3,X1,I1,IKO,IRET,ISOM)
*     IKO =  0  =>  1 ou 2 LISTxxxx
*     IKO =  1  =>  1 nombre puis 1 LISTxxxx
*     IKO = -1  =>  1 LISTxxxx puis 1 nombre
      IMPLICIT INTEGER(I-N)
-INC SMLREEL
-INC SMLENTI
      CHARACTER*(*) CTYP
      REAL*8 X1
*
      IKOK=IKO
      IF (IKOK.EQ.0.AND.IPOI3.LE.0) IKOK=-1
*
*     TRAITEMENT D'UN LISTREEL
*     ========================
*
      IF (CTYP.EQ.'LISTREEL') THEN
         MLREE1=IPOI1
         MLREE2=IPOI2
         IF (MLREE1.PROG(/1).NE.MLREE2.PROG(/1)) THEN
            CALL ERREUR(263)
            RETURN
         ENDIF
         IF (IKOK.EQ.0) THEN
            MLREE3=IPOI3
            IF (MLREE1.PROG(/1).NE.MLREE3.PROG(/1)) THEN
               CALL ERREUR(263)
               RETURN
            ENDIF
         ENDIF
         SEGINI,MLREEL=MLREE1
         IRET=MLREEL
*
*        MOT-CLE "SUPE"
         IF (ICLE.EQ.1) THEN
           DO 1 I=1,PROG(/1)
             IF (MLREE1.PROG(I).GT.MLREE2.PROG(I)) THEN
                PROG(I)=1
             ELSE
                PROG(I)=0
             ENDIF
    1      CONTINUE
*
*        MOT-CLE "EGSU"
         ELSEIF (ICLE.EQ.2) THEN
           DO 2 I=1,PROG(/1)
             IF (MLREE1.PROG(I).GE.MLREE2.PROG(I)) THEN
                PROG(I)=1
             ELSE
                PROG(I)=0
             ENDIF
    2      CONTINUE
*
*        MOT-CLE "EGAL"
         ELSEIF (ICLE.EQ.3) THEN
           DO 3 I=1,PROG(/1)
             IF (MLREE1.PROG(I).EQ.MLREE2.PROG(I)) THEN
                PROG(I)=1
             ELSE
                PROG(I)=0
             ENDIF
    3      CONTINUE
*
*        MOT-CLE "EGIN"
         ELSEIF (ICLE.EQ.4) THEN
           DO 4 I=1,PROG(/1)
             IF (MLREE1.PROG(I).LE.MLREE2.PROG(I)) THEN
                PROG(I)=1
             ELSE
                PROG(I)=0
             ENDIF
    4      CONTINUE
*
*        MOT-CLE "INFE"
         ELSEIF (ICLE.EQ.5) THEN
           DO 5 I=1,PROG(/1)
             IF (MLREE1.PROG(I).LT.MLREE2.PROG(I)) THEN
                PROG(I)=1
             ELSE
                PROG(I)=0
             ENDIF
    5      CONTINUE
*
*        MOT-CLE "DIFF"
         ELSEIF (ICLE.EQ.6) THEN
           DO 6 I=1,PROG(/1)
             IF (MLREE1.PROG(I).NE.MLREE2.PROG(I)) THEN
                PROG(I)=1
             ELSE
                PROG(I)=0
             ENDIF
    6      CONTINUE
*
*        MOT-CLE "COMP"
         ELSEIF (ICLE.EQ.7) THEN
           IF (IKOK.EQ.0) THEN
             DO 71 I=1,PROG(/1)
               IF (MLREE1.PROG(I).GE.MLREE2.PROG(I).AND.
     &             MLREE1.PROG(I).LE.MLREE3.PROG(I)) THEN
                  PROG(I)=1
               ELSE
                  PROG(I)=0
               ENDIF
   71        CONTINUE
           ELSEIF (IKOK.GT.0) THEN
             DO 72 I=1,PROG(/1)
               IF (MLREE1.PROG(I).GE.X1.AND.
     &             MLREE1.PROG(I).LE.MLREE2.PROG(I)) THEN
                  PROG(I)=1
               ELSE
                  PROG(I)=0
               ENDIF
   72        CONTINUE
           ELSE
             DO 73 I=1,PROG(/1)
               IF (MLREE1.PROG(I).GE.MLREE2.PROG(I).AND.
     &             MLREE1.PROG(I).LE.X1) THEN
                  PROG(I)=1
               ELSE
                  PROG(I)=0
               ENDIF
   73        CONTINUE
           ENDIF
         ENDIF
*
*        ******************************
*
*        DEUXIEME MOT-CLE "SOMM"
         IF (ISOM.EQ.1) THEN
           IRET=0
           DO 7 I=1,PROG(/1)
             IF (PROG(I).GT.0) IRET=IRET+1
    7      CONTINUE
         ENDIF
*
*
*     TRAITEMENT D'UN LISTENTI
*     ========================
*
      ELSEIF (CTYP.EQ.'LISTENTI') THEN
         MLENT1=IPOI1
         MLENT2=IPOI2
         IF (MLENT1.LECT(/1).NE.MLENT2.LECT(/1)) THEN
            CALL ERREUR(263)
            RETURN
         ENDIF
         IF (IKOK.EQ.0) THEN
            MLENT3=IPOI3
            IF (MLENT1.LECT(/1).NE.MLENT3.LECT(/1)) THEN
               CALL ERREUR(263)
               RETURN
            ENDIF
         ENDIF
         SEGINI,MLENTI=MLENT1
         IRET=MLENTI
*
*        MOT-CLE "SUPE"
         IF (ICLE.EQ.1) THEN
           DO 11 I=1,LECT(/1)
             IF (MLENT1.LECT(I).GT.MLENT2.LECT(I)) THEN
                LECT(I)=1
             ELSE
                LECT(I)=0
             ENDIF
   11      CONTINUE
*
*        MOT-CLE "EGSU"
         ELSEIF (ICLE.EQ.2) THEN
           DO 12 I=1,LECT(/1)
             IF (MLENT1.LECT(I).GE.MLENT2.LECT(I)) THEN
                LECT(I)=1
             ELSE
                LECT(I)=0
             ENDIF
   12      CONTINUE
*
*        MOT-CLE "EGAL"
         ELSEIF (ICLE.EQ.3) THEN
           DO 13 I=1,LECT(/1)
             IF (MLENT1.LECT(I).EQ.MLENT2.LECT(I)) THEN
                LECT(I)=1
             ELSE
                LECT(I)=0
             ENDIF
   13      CONTINUE
*
*        MOT-CLE "EGIN"
         ELSEIF (ICLE.EQ.4) THEN
           DO 14 I=1,LECT(/1)
             IF (MLENT1.LECT(I).LE.MLENT2.LECT(I)) THEN
                LECT(I)=1
             ELSE
                LECT(I)=0
             ENDIF
   14      CONTINUE
*
*        MOT-CLE "INFE"
         ELSEIF (ICLE.EQ.5) THEN
           DO 15 I=1,LECT(/1)
             IF (MLENT1.LECT(I).LT.MLENT2.LECT(I)) THEN
                LECT(I)=1
             ELSE
                LECT(I)=0
             ENDIF
   15      CONTINUE
*
*        MOT-CLE "DIFF"
         ELSEIF (ICLE.EQ.6) THEN
           DO 16 I=1,LECT(/1)
             IF (MLENT1.LECT(I).NE.MLENT2.LECT(I)) THEN
                LECT(I)=1
             ELSE
                LECT(I)=0
             ENDIF
   16      CONTINUE
*
*        MOT-CLE "COMP"
         ELSEIF (ICLE.EQ.7) THEN
           IF (IKOK.EQ.0) THEN
             DO 171 I=1,LECT(/1)
               IF (MLENT1.LECT(I).GE.MLENT2.LECT(I).AND.
     &             MLENT1.LECT(I).LE.MLENT3.LECT(I)) THEN
                  LECT(I)=1
               ELSE
                  LECT(I)=0
               ENDIF
  171        CONTINUE
           ELSEIF (IKOK.GT.0) THEN
             DO 172 I=1,LECT(/1)
               IF (MLENT1.LECT(I).GE.I1.AND.
     &             MLENT1.LECT(I).LT.MLENT2.LECT(I)) THEN
                  LECT(I)=1
               ELSE
                  LECT(I)=0
               ENDIF
  172        CONTINUE
           ELSE
             DO 173 I=1,LECT(/1)
               IF (MLENT1.LECT(I).GE.MLENT2.LECT(I).AND.
     &             MLENT1.LECT(I).LT.I1) THEN
                  LECT(I)=1
               ELSE
                  LECT(I)=0
               ENDIF
  173        CONTINUE
           ENDIF
         ENDIF
*
*        ******************************
*
*        DEUXIEME MOT-CLE "SOMM"
         IF (ISOM.EQ.1) THEN
           IRET=0
           DO 17 I=1,LECT(/1)
             IF (LECT(I).GT.0) IRET=IRET+1
   17      CONTINUE
         ENDIF
      ENDIF
      END


 
