FUNCTION chk_dir, dir_name, output, fullname=fullname,err=err ; ON_ERROR, 2 err='' IF N_ELEMENTS(dir_name) EQ 0 THEN BEGIN err='Syntax: Result = CHK_PATH(dir_name)' return,0 ENDIF IF datatype(dir_name) NE 'STR' THEN BEGIN err='Input parameter must be of string type.' return,0 ENDIF IF TRIM(dir_name) EQ '' THEN RETURN,0 output = '' IF (!version.os NE 'vms') THEN BEGIN IF OS_FAMILY() EQ 'Windows' THEN suffix = '\..' ELSE suffix = '/..' IF STRPOS(dir_name,'~') EQ 0 THEN temp = chklog(dir_name) $ ELSE temp = dir_name rr = findfile(temp+suffix) IF rr(0) EQ '' THEN RETURN, 0 ELSE BEGIN output = temp IF KEYWORD_SET(fullname) THEN BEGIN ;--------------------------------------------------------------------------- ; On unix or dos, FINDFILE does not return the full path ; specification of the directory, we have to do this with two CDs. ;--------------------------------------------------------------------------- cd, temp, current = old_dir cd, old_dir, current = output ENDIF RETURN, 1 ENDELSE RETURN, 0 ENDIF name_dir = STRUPCASE(dir_name) p_dir = STRPOS(name_dir,'.DIR') IF p_dir EQ -1 THEN BEGIN ;---------------------------------------------------------------------- ; DIR_NAME must be either a logical symbol or a directory name ; with "[..]" format, if it is indeed a directory name ;---------------------------------------------------------------------- aa = chklog(name_dir) IF (aa NE '') THEN BEGIN output = aa RETURN, 1 ENDIF ;---------------------------------------------------------------------- ; Try to see if it is already a valid directory name ;---------------------------------------------------------------------- d_len = STRLEN(name_dir) rquote = STRPOS(name_dir,']') ;---------------------------------------------------------------------- ; Since dir_name is not a logical name, it should have [..] format ; to be a directory name ;---------------------------------------------------------------------- IF rquote EQ -1 THEN RETURN, 0 lquote = STRPOS(name_dir,'[') IF lquote EQ -1 THEN BEGIN MESSAGE, 'Invalid directory name',/cont RETURN, 0 ENDIF IF rquote EQ d_len-1 THEN BEGIN ;---------------------------------------------------------------------- ; directory name in [...] format ;---------------------------------------------------------------------- idx = str_index(name_dir,'.') IF idx(0) EQ -1 THEN BEGIN IF lquote EQ 0 THEN temp_dir = '[000000]'+$ STRMID(name_dir,1,rquote-1)+'.DIR' $ ELSE temp_dir = STRMID(name_dir,0,lquote+1)+'000000]'+$ STRMID(name_dir,lquote+1,rquote-lquote-1)+'.DIR' ENDIF ELSE BEGIN n_idx = N_ELEMENTS(idx) last_name = STRMID(name_dir,idx(n_idx-1)+1,$ d_len-idx(n_idx-1)-2)+'.DIR' temp_dir = STRMID(name_dir,0,idx(n_idx-1))+']'+last_name ENDELSE ENDIF ELSE BEGIN ;---------------------------------------------------------------------- ; directory name in [...]xxx format ;---------------------------------------------------------------------- temp_dir = name_dir+'.DIR' ENDELSE ENDIF ELSE temp_dir = dir_name ;---------------------------------------------------------------------- ; DIR_NAME ends with ".dir" and could be a subdirectory ;---------------------------------------------------------------------- temp = findfile(temp_dir,count = aa) f_name = STRCOMPRESS(temp(0)) IF aa GT 0 THEN BEGIN t_len = STRLEN(f_name) rquote = STRPOS(f_name,']') lquote = STRPOS(f_name,'[') root = STRPOS(f_name,'000000') p_dir = STRPOS(f_name,'.DIR') IF root EQ -1 THEN $ output = STRMID(f_name,0,rquote)+'.'+$ STRMID(f_name,rquote+1,p_dir-rquote-1)+']' $ ELSE $ output = STRMID(f_name,0,lquote+1)+$ STRMID(f_name,root+7,p_dir-rquote-1)+']' RETURN, 1 ENDIF RETURN, 0 END ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; End of 'chk_dir.pro'. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;