C CUNIQ     SOURCE    GOUNAND   06/08/03    21:15:02     5513
      SUBROUTINE CUNIQ(LDOUBL,LNMOTS,NBMOTS,
     $     LMUNIQ,NBUNIQ,
     $     IMPR,IRET)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)
C***********************************************************************
C NOM         : CUNIQ
C PROJET      : Noyau linéaire NLIN
C DESCRIPTION : Un tableau de mots avec des doublons => un tableau de
C               mots sans doublons.
C               Algorithme en n^2 => pas de longs tableaux
C
C LANGAGE     : Fortran 77 (sauf E/S)
C AUTEUR      : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
C               mél : gounand@semt2.smts.cea.fr
C***********************************************************************
C APPELE PAR       : PRASEM
C***********************************************************************
C ENTREES            : LDOUBL, LNMOTS, NBMOTS
C SORTIES            : LMUNIQ, NBUNIQ
C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
C***********************************************************************
C VERSION    : v1, 30/09/99, version initiale
C HISTORIQUE : v1, 30/09/99, création
C HISTORIQUE :
C HISTORIQUE :
C***********************************************************************
C Prière de PRENDRE LE TEMPS de compléter les commentaires
C en cas de modification de ce sous-programme afin de faciliter
C la maintenance !
C***********************************************************************

-INC PPARAM
-INC CCOPTIO
      INTEGER LNMOTS,NBMOTS
      CHARACTER*(*) LDOUBL(NBMOTS)
      CHARACTER*(*) LMUNIQ(NBMOTS)
      INTEGER NBUNIQ
*
      INTEGER IMPR,IRET
*
      INTEGER I,J
      LOGICAL LFOUND
*
* Executable statements
*
      IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans cuniq'
      IF (NBMOTS.GT.0) THEN
         NBUNIQ=1
         LMUNIQ(1)(1:LNMOTS)=LDOUBL(1)(1:LNMOTS)
         DO 1 I=2,NBMOTS
            LFOUND=.FALSE.
            J=0
 12         CONTINUE
            J=J+1
            IF (LMUNIQ(J)(1:LNMOTS).EQ.LDOUBL(I)(1:LNMOTS)) THEN
               LFOUND=.TRUE.
            ELSE
               IF (J.LT.NBUNIQ) THEN
                  GOTO 12
               ENDIF
            ENDIF
            IF (.NOT.LFOUND) THEN
               NBUNIQ=NBUNIQ+1
               LMUNIQ(NBUNIQ)(1:LNMOTS)=LDOUBL(I)(1:LNMOTS)
            ENDIF
 1       CONTINUE
      ELSE
         NBUNIQ=0
      ENDIF
*
* Normal termination
*
      IRET=0
      RETURN
*
* Format handling
*
*
* Error handling
*
 9999 CONTINUE
      IRET=1
      WRITE(IOIMP,*) 'An error was detected in subroutine cuniq'
      RETURN
*
* End of subroutine CUNIQ
*
      END




