C+ C NAME: C iSetFileSpec C PURPOSE: C Deconstruct file names into components C CALLING SEQUENCE: function iSetFileSpec(cInOut) C INPUTS: C cInOut character*(*) file specification C OUTPUTS: C iSetFileSpec integer Always 1 C CALLS: C LocFirst, LocLast, uppercase, itrim, ParseRepair C SEE ALSO: C iGetFileSpec, iPutFileSpec C INCLUDE: include 'dirspec.h' include 'filparts.h' include 'str2str_inc.h' C PROCEDURE: C Deconstructs the input file name cFile into its constituents C and stores them internally in a character array. C MODIFICATION HISTORY: C JUN-1995, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- character cInOut*(*) !------- ! Arguments to entry point iGetFileSpec (also uses cInOut) integer nFrst integer nLast !------- ! Arguments by entry point iGetFileSpec (also uses cInOut) integer iD character FileSpec(FIL__NPARTS)*(FIL__LENGTH) !------- character cFile*(FIL__LENGTH) integer Str2Str integer Str2StrSet character Spec(FIL__NPARTS)*(FIL__LENGTH) save iNod, iDev, iDir, iNam, iTyp, iVer, Spec iSetFileSpec = 1 do I=1,FIL__NPARTS Spec(I) = ' ' end do iNod = 0 iDev = 0 iDir = 0 iNam = 0 iTyp = 0 iVer = 0 if (cInOut .eq. ' ') return cFile = cInOut if (bOS__NotCaseSensitive) call uppercase(cFile) if (iNode .ne. 0) then ! Check for node name I = LocFirst(cNode,cFile) if (I .ne. 0) then Spec(FIL__NODE) = cFile(:I+1) iNod = I+1 cFile = cFile(I+2:) end if end if if (iDevi .ne. 0) then ! Check for device name I = LocFirst(cDevi,cFile) if (I .ne. 0) then Spec(FIL__DEVICE) = cFile(:I) iDev = I cFile = cFile(I+1:) end if end if if (iTrail .ne. 0) then ! Check for directory I = LocLast(cTrail,cFile) if (I .ne. 0) then Spec(FIL__DIRECTORY) = cFile(:I) iDir = I cFile = cFile(I+iTrail:) end if end if I = LocFirst('.',cFile) ! Check for file name if (I .eq. 0) then Spec(FIL__NAME) = cFile iNam = itrim(cFile) cFile = '.' else if (I .ne. 1) then Spec(FIL__NAME) = cFile(:I-1) iNam = I-1 cFile = cFile(I:) end if I = 0 if (iVersion .ne. 0) I = LocFirst(cVersion,cFile) if (I .eq. 0) then ! Check for file type Spec(FIL__TYPE) = cFile iTyp = itrim(cFile) cFile = cVersion else if (I .ne. 1) then Spec(FIL__TYPE) = cFile(:I-1) iTyp = I-1 cFile = cFile(I:) end if Spec(FIL__VERSION) = cFile ! Check for version number iVer = itrim(cFile) call ParseRepair(Spec,iDir,iNam) return C+ C NAME: C iGetFileSpec C PURPOSE: C Reconstruct file names into components C CALLING SEQUENCE: entry iGetFileSpec(nFrst,nLast,cInOut) C INPUTS: C nFirst integer first component to be extracted C nLast integer last component to be extracted C OUTPUTS: C iGetFileSpec integer Length of string returned in cFile C cFile character*(*) File name components requested C CALLS: C Str2StrSet, Str2Str C SEE ALSO: C iSetFileSpec, iPutFileSpec C PROCEDURE: C > Entry point in iSetFileSpec C > Arguments 'nFrst' and 'nLast' should be set to one of the following C constants defined in include file 'filparts.h': C FIL__NODE pick up from/upto node name (VMS only) C FIL__DEVICE pick up from/upto device name C FIL__DIRECTORY pick up from/upto directory C FIL__NAME pick up from/upto file name C FIL__TYPE pick up from/upto file type C FIL__VERSION pick up from/upto version number (VMS only) C > Setting nFrst=0 is the same as setting nFrst=FIL__NODE C > Setting nLast=0 is the same as setting nLast=FIL__VERSION C MODIFICATION HISTORY: C JUN-1995, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- iStr = Str2StrSet(STR__TRIM) iFrst = max(nFrst,1) iLast = min(nLast,FIL__NPARTS) if (iLast .le. 0) iLast = FIL__NPARTS cInOut = ' ' ! Safety belt L = len(cInOut) N = 0 do I=iFrst,iLast if (N .lt. L) then N = N+Str2Str(Spec(I),cInOut(N+1:)) else cInOut(L-1:L) = '@' end if end do iStr = Str2StrSet(iStr) iGetFileSpec = N return C+ C NAME: C iFileStructure C PURPOSE: C (Internal use only) Deconstruct file names into components C CALLING SEQUENCE: entry iFileStructure(iD,FileSpec) C INPUTS: C integer iD C OUTPUTS: C SEE ALSO: C iSetFileSpec, iGetFileSpec C PROCEDURE: C Entry point in iSetFileSpec C MODIFICATION HISTORY: C JUN-1995, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- iFileStructure = 1 if (iD .eq. 0) then do I=1,FIL__NPARTS FileSpec(I) = Spec(I) end do else do I=1,FIL__NPARTS Spec(I) = FileSpec(I) end do end if return C+ C NAME: C iGetParentDirectory C PURPOSE: C Deconstruct file names into components C CALLING SEQUENCE: entry iGetParentDirectory(cInOut) C INPUTS: C OUTPUTS: C CALLS: C Str2StrSet, Str2Str, iParentFragment C PROCEDURE: C Entry point in iSetFileSpec C MODIFICATION HISTORY: C JUN-1995, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- iGetParentDirectory = iParentFragment(Spec(FIL__DIRECTORY),cInOut) if (cInOut(:iNoWhere) .eq. cNoWhere) return iStr = Str2StrSet(STR__TRIM) L = len(cInOut) I = 0 if (I .lt. L) I = I+Str2Str(Spec(FIL__NODE),cInOut(I+1:)) if (I .lt. L) I = I+Str2Str(Spec(FIL__DEVICE),cInOut(I+1:)) if (I .lt. L) I = I+Str2Str(cLead,cInOut(I+1:)) if (I .lt. L) I = I+iParentFragment(Spec(FIL__DIRECTORY),cInOut(I+1:)) if (I .lt. L) I = I+Str2Str(cTrail,cInOut(I+1:)) iStr = Str2StrSet(iStr) iGetParentDirectory = I return C+ C NAME: C iGetTopDirectory C PURPOSE: C Deconstruct file names into components C CALLING SEQUENCE: entry iGetTopDirectory(cInOut) C INPUTS: C OUTPUTS: C CALLS: C Str2StrSet, Str2Str, iTopFragment C INCLUDE: C PROCEDURE: C Entry point in iSetFileSpec C MODIFICATION HISTORY: C JUN-1995, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- iStr = Str2StrSet(STR__TRIM) L = len(cInOut) I = 0 if (I .lt. L) I = I+Str2Str(Spec(FIL__NODE),cInOut(I+1:)) if (I .lt. L) I = I+Str2Str(Spec(FIL__DEVICE),cInOut(I+1:)) if (I .lt. L) I = I+Str2Str(cLead,cInOut(I+1:)) if (I .lt. L) I = I+iTopFragment(Spec(FIL__DIRECTORY),cInOut(I+1:)) if (I .lt. L) I = I+Str2Str(cTrail,cInOut(I+1:)) iStr = Str2StrSet(iStr) iGetTopDirectory = I return C+ C NAME: C iGetDirectoryFragment C PURPOSE: C Deconstruct file names into components C CALLING SEQUENCE: entry iGetDirectoryFragment(iGet,cInOut) C INPUTS: C OUTPUTS: C CALLS: C iFullFragment, iTopFragment, iParentFragment, iLastFragment C INCLUDE: C PROCEDURE: C Entry point in iSetFileSpec C C 0 = full C 1 = first fragment (top) C 2 = parent fragment C 3 = last fragment C MODIFICATION HISTORY: C JUN-1995, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C- if (iGet .eq. 0) then iGetDirectoryFragment = iFullFragment(Spec(FIL__DIRECTORY),cInOut) else if (iGet .eq. 1) then iGetDirectoryFragment = iTopFragment(Spec(FIL__DIRECTORY),cInOut) else if (iGet .eq. 2) then iGetDirectoryFragment = iParentFragment(Spec(FIL__DIRECTORY),cInOut) else if (iGet .eq. 3) then iGetDirectoryFragment = iLastFragment(Spec(FIL__DIRECTORY),cInOut) end if return end