C LIRE01    SOURCE    SP204843  24/09/05    21:15:03     12005          
      SUBROUTINE LIRE01 (IPOIN1,IPOS,IPOIN2)
************************************************************************
*
*                             L I R E 0 1
*                             -----------
*
* FONCTION:
* ---------
*
*     LIRE 2 OBJETS, L'UN ETANT UN INDICE DE POSITION DANS L'AUTRE
*     (UTILISE, A L'ORIGINE, POUR LES OPERATEURS "EXTRAIRE" ET
*     "ENLEVER").
*
* MODE D'APPEL:
* -------------
*
*     CALL LIRE01 (IPOIN1,IPOS,IPOIN2)
*
* PARAMETRES:   (E)=ENTREE   (S)=SORTIE
* -----------
*
*     IPOS    ENTIER    (E)  IPOS<>0  IPOIN2 PEUT ETRE UN LISTENTI
*                            IPOS=0   IPOIN2 NE PEUT PAS ETRE UN LISTENTI
*
*     IPOIN1  ENTIER    (S)  POINTEUR SUR LA LISTE A MODIFIER
*
*     IPOIN2  ENTIER    (S)  POINTEUR SUR LA LISTE D'INDICES DE POSITION
*                            (OU L'INDICE DE POSITION LUI-MEME).
*
*     IPOS    ENTIER    (S)  CHIFFRE INDIQUANT LES TYPES POINTES PAR
*                            IPOIN1 ET IPOIN2
*
*                            |IPOS|=1 :: IPOIN1=LISTREEL
*                            |IPOS|=2 :: IPOIN1=LISTENTI
*                            |IPOS|=3 :: IPOIN1=LISTMOTS
*                            |IPOS|=4 :: IPOIN1=LISTCHPO
*                            |IPOS|=5 :: IPOIN1=LISTOBJE
*
*                             IPOS>0  :: IPOIN2=ENTIER
*                             IPOS<0  :: IPOIN2=LISTENTI
*
*                             IPOS =0 :: PAS D'OBJET "LISTxxxx" TROUVÉ
*
*
* MODE DE FONCTIONNEMENT
* ----------------------
*
*
*    SUITE  A MODIF IL N'EST PLUS POSSIBLE DE LIRE UNE TABLE.
*
*
* SOUS-PROGRAMMES APPELES:
* ------------------------
*
*     LIRE, LIRENT
*
* AUTEUR, DATE DE CREATION:
* -------------------------
*
*     PASCAL MANIGOT     5 DECEMBRE 1984
*     DATE DE MODIFICATION   22 JANVIER 1988
*     SERGE PASCAL       5 SEPTEMBRE 2024 : LECTURE D'UN LISTOBJE
*
* LANGAGE:
* --------
*
*     FORTRAN77
*
************************************************************************
*
      IMPLICIT INTEGER(I-N)


-INC PPARAM
-INC CCOPTIO

      CHARACTER*(8) CMOT
      LOGICAL ZLENTI

      PARAMETER   (NBMO=5)
      CHARACTER*8  CLIST(NBMO)

      DATA CLIST /'LISTREEL','LISTENTI','LISTMOTS','LISTCHPO',
     &            'LISTOBJE'/

*     AUTORISE-T-ON INDIC1 A ETRE DE TYPE LISTENTI ?
      ZLENTI=(IPOS.NE.0)


*     LECTURE DE OBJET1 DANS IPOIN1
      CALL QUETYP(CMOT,0,IRETOU)
      IF (IRETOU.EQ.0) THEN
        CALL ERREUR(533)
        RETURN
      ENDIF

      CALL PLACE(CLIST,NBMO,IPOS,CMOT)
      IF (IPOS.EQ.0) THEN
        MOTERR(1:8)=CMOT
        CALL ERREUR(39)
        RETURN
      ELSE
          CALL LIROBJ(CMOT,IPOIN1,1,IRETOU)
      ENDIF


*     LECTURE DE INDIC1 DANS IPOIN2
      CALL QUETYP(CMOT,0,IRETOU)
      IF (IRETOU.EQ.0) THEN
        CALL ERREUR(533)
        RETURN
      ENDIF

      IF (CMOT.EQ.'ENTIER') THEN
        ISGN=1
        CALL LIRENT (IPOIN2,1,IRETOU)
        IF (IERR.NE.0) RETURN
      ELSEIF (ZLENTI.AND.CMOT.EQ.'LISTENTI') THEN
        ISGN=-1
        CALL LIROBJ('LISTENTI',IPOIN2,1,IRETOU)
        IF (IERR.NE.0) RETURN
      ELSE
        MOTERR(1:8)=CMOT
        CALL ERREUR(39)
        RETURN
      ENDIF
      IPOS=IPOS*ISGN

      RETURN
      END
 
 
