	LOGICAL FUNCTION DIR_VAL (DIRECTORY,RESULT) !	SUBROUTINE DIR_VAL
	CHARACTER*(*) DIRECTORY
	CHARACTER*(*) RESULT
C******************************************************************************
C***
C***	THIS FUNCTION RETURNS .TRUE. IF THE DIRECTORY SPECIFIED IS A VALID
C***	EXISTING DIRECTORY, OR .FALSE. IF IT IS NOT.
C***
C***	PARAMETERS :
C***
C***		DIRECTORY	(C*?)	DIRECTORY SPECIFICATION TO BE TESTED.
C***
C***		RESULT		(C*?) 	RESULTING DIRECTORY TRANSLATION.
C***
C******************************************************************************
C*MCT
C	EXTERNAL IODEF
	INCLUDE '($RMSDEF)'
	INCLUDE '($LIBDEF)'
C
C***	LOCAL VARIABLES
	INTEGER*4 STATUS
	CHARACTER*100 RES
	CHARACTER*100 DIR
	INTEGER*4 CONTEXT
C
C***	BEGIN
	I = INDEX (DIRECTORY,'.')
	J = INDEX (DIRECTORY,';')
	K = INDEX (DIRECTORY,']')
	IF ((J .NE. 0) .OR.
	1   (I .NE. 0 .AND. K .NE. 0 .AND. I .GT. K)) THEN
	    DIR_VAL = .FALSE.
            RETURN
	ELSE
	ENDIF
C
	DIR = DIRECTORY
	CONTEXT = 0
	L = LENGTH (DIR) 
	M = INDEX (DIR,':')
	IF (M .NE. 0 .AND. M .NE. L) THEN
	    IF (DIR(M+1:M+1) .NE. '[') THEN
		DIR_VAL = .FALSE.
		RETURN
	    ELSE
	    ENDIF
	ELSE
	ENDIF
	IF (DIR(1:1) .EQ. '[') THEN 
	    IF (DIR(L:L) .NE. ']') THEN
		DIR_VAL = .FALSE.
		RETURN
	    ELSE
	    ENDIF
	ELSE
	    IF (DIR(L:L) .NE. ':') THEN
		L = L + 1
		DIR(L:L) = ':'
	    ELSE
	    ENDIF
	ENDIF
C
	STATUS = LIB$FIND_FILE (DIR(1:L)//'*.*',RES,CONTEXT,,,,)
	CALL LIB$FIND_FILE_END (CONTEXT)
C
	DIR_VAL = .NOT. ((STATUS .EQ. RMS$_BUG_DDI) 
	1	  .OR.   (STATUS .EQ. RMS$_DEV) 
	2	  .OR.   (STATUS .EQ. RMS$_DIR) 
	3	  .OR.   (STATUS .EQ. RMS$_DNF))
C
	IF (DIR_VAL) THEN
	    I = INDEX (RES,']')
	    IF (I .NE. 0) THEN
	        RESULT = RES (1:I)
	    ELSE
		DIR_VAL = .FALSE.
	    ENDIF
	ELSE
	ENDIF
C
	RETURN
	END

