C+ C NAME: C iFile2Dir C PURPOSE: C Convert from file name format to directory format C CATEGORY: C Environment C CALLING SEQUENCE: function iFile2Dir(cFile,cDir) C INPUTS: C cFile character*(*) File name to be converted C OUTPUTS: C cDir character*(*) Directory name after conversion C iFile2Dir integer Length of directory name C If the conversion fails then I=0 and cDir=' ' C CALLS: C iSetFileSpec, iGetFileSpec, Str2StrSet, iFullFragment C SEE ALSO: C iDir2File C INCLUDE: include 'dirspec.h' include 'filparts.h' include 'str2str_inc.h' C PROCEDURE: C On VMS convert from C UD1:[PHICK.SOFT]EXE.DIR to UD1:[PHICK.SOFT.EXE] C On Unix convert from C /home/phick/soft/exe to /home/phick/soft/exe/ C On DOS convert from C C:\home\phick\soft\exe to C:\home\phick\soft\exe\ C C Failure occurs: C On VMS when the file name has a zero zero length or the file type is not .DIR C On DOS and Unix when both file name and and file type have zero length C MODIFICATION HISTORY: C JUL-2000, Paul Hick (UCSD; pphick@ucsd.edu) C Added check for hidden directories for Unix C Set return value to ' ' on failure C- character cFile*(*) character cDir*(*) character cNam*80 integer Str2Str integer Str2StrSet I = iSetFileSpec(cFile) if (cOpSys .eq. OS__VMS) then iFile2Dir = 0 I = iGetFileSpec(FIL__TYPE,FIL__TYPE,cNam) if (cNam .eq. cDirExt) iFile2Dir = iGetFileSpec(FIL__NAME,FIL__NAME,cNam) else iFile2Dir = iGetFileSpec(FIL__NAME,FIL__TYPE,cNam) if (iFile2Dir .le. 1) then ! Only . for file type found iFile2Dir = 0 else if (iGetFileSpec(FIL__TYPE,FIL__TYPE,cNam) .le. 1) then ! File type . & iFile2Dir = iGetFileSpec(FIL__NAME,FIL__NAME,cNam) end if end if if (iFile2Dir .eq. 0) then cDir = ' ' else iStr = Str2StrSet(STR__TRIM) iPos = iGetFileSpec(0,FIL__DEVICE,cDir) ! Node+device I = iPos I = I+iGetFileSpec(FIL__DIRECTORY,FIL__DIRECTORY,cDir(I+1:)) ! Directory I = I-iTrail I = I+Str2Str(cDivide,cDir(I+1:)) ! Replace trail char by divide char !I = I+iGetFileSpec(FIL__NAME,FIL__NAME,cDir(I+1:)) ! Add file name I = I+Str2Str(cNam ,cDir(I+1:)) ! Add file name I = I+Str2Str(cTrail,cDir(I+1:)) ! Add trail char I = iPos+iLead ! Safety belt (cute) I = I+iFullFragment(cDir(iPos+1:),cDir(I+1:)) I = I+Str2Str(cTrail,cDir(I+1:)) iStr = Str2StrSet(iStr) iFile2Dir = I end if return end