/usr/share/gnudatalanguage/coyote/cgrootname.pro is in gdl-coyote 2016.11.13-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | ; docformat = 'rst'
;
; NAME:
; cgRootName
;
; PURPOSE:
; The purpose of this routine is to extract from a long file path the
; base or root file name. That is, the name of the actual file without
; the preceeding directory information or the final file extension.
; The directory information and file extension can be obtained via
; keywords. It is similar to File_Basename in IDL.
;
;******************************************************************************************;
; ;
; Copyright (c) 2012, by Fanning Software Consulting, Inc. All rights reserved. ;
; ;
; Redistribution and use in source and binary forms, with or without ;
; modification, are permitted provided that the following conditions are met: ;
; ;
; * Redistributions of source code must retain the above copyright ;
; notice, this list of conditions and the following disclaimer. ;
; * Redistributions in binary form must reproduce the above copyright ;
; notice, this list of conditions and the following disclaimer in the ;
; documentation and/or other materials provided with the distribution. ;
; * Neither the name of Fanning Software Consulting, Inc. nor the names of its ;
; contributors may be used to endorse or promote products derived from this ;
; software without specific prior written permission. ;
; ;
; THIS SOFTWARE IS PROVIDED BY FANNING SOFTWARE CONSULTING, INC. ''AS IS'' AND ANY ;
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ;
; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT ;
; SHALL FANNING SOFTWARE CONSULTING, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, ;
; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;
; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ;
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ;
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;
;******************************************************************************************;
;
;+
; The purpose of this routine is to extract from a long file path, the
; base or root file name. That is, the name of the actual file without
; the preceeding directory information or the final file extension.
; The directory information and file extension can be obtained via
; keywords. It is similar to File_Basename in IDL.
;
; :Categories:
; Utilities
;
; :Returns:
; The base or root file name is returned. This is the "name" of the file
; without either the preceeding directory information, or the prepended
; file extension.
;
; :Params:
; filename: in, required, type=string
; This file name to be parsed. It may be a relative or absolute path
; name to a file.
;
; :Keywords:
; directory: out, optional, type=string
; The name of the directory preceeding the root file name. If the file name
; contains no directory information, this keyword is set equal to the current
; working directory at the time the program is called.
; extension: out, optional, type=string
; The (usually!) three character file extention of the file.
; path_separator: in, optional, type=string
; The string to use as a path separator in parsing the file. If undefined
; the out of Path_Sep() is used.
;
; :Examples:
; Print, the root name, directory, and extension of a file::
; IDL> thePath = "C:\rsi\idl7.8\lib\jester.pro"
; IDL> Print, cgRootName(thePath, Directory=theDirectory, Extension=theExtension)
; jester
; IDL> Print, theDirectory
; C:\rsi\idl7.8\lib\
; IDL> Print, theExtension
; pro
;
; Get the name of the current directory, with the path separator as the last character. This is
; the equivalent of CD, Current=current & current = current + Path_Sep().
; IDL> void = cgRootName(Directory=current)
; IDL> Print, current
;
; :Author:
; FANNING SOFTWARE CONSULTING::
; David W. Fanning
; 1645 Sheely Drive
; Fort Collins, CO 80526 USA
; Phone: 970-221-0438
; E-mail: david@idlcoyote.com
; Coyote's Guide to IDL Programming: http://www.idlcoyote.com
;
; :History:
; Change History::
; Written by: David W. Fanning, 31 July 2003.
; Modified by KaRo, 13 Feb. 2005 to allow dots in the filename.
; Added PATH_SEPARATOR keyword. 25 July 2005. DWF.
; Added ability to recongnize directory by path separator in last character. 19 Sept 2005. DWF.
; If directory is blank (because a relative filename was passed), set to current directory. 6 Aug 2009. DWF.
; There were a couple of instances where the directory did NOT end in a path separator. Fixed. 24 Feb 2012. DWF.
; Added ability to get the current directory with a path separator in one step instead of two. See example
; section for details. 26 Sept 2013. DWF.
;
; :Copyright:
; Copyright (c) 2003-2012, Fanning Software Consulting, Inc.
;-
FUNCTION cgRootName, filename, $
Directory=directory, $
Extension=extension, $
Path_Separator=pathsep
On_Error, 2
; Default values.
directory = ""
extension = ""
file = ""
; Is a path separator specified?
IF N_Elements(pathsep) EQ 0 THEN pathsep = Path_Sep()
; If there is no filename, return a null string. But, before you leave get the
; current directory.
IF (N_Elements(filename) EQ 0) || (filename EQ "") THEN BEGIN
; Make the directory the current directory.
CD, CURRENT=directory
lastChar = StrMid(directory, 0, 1, /REVERSE_OFFSET)
IF lastChar NE pathsep THEN directory = directory + pathsep
RETURN, file
ENDIF
; If the last element of filename is a path separator, then separation is easy.
IF StrMid(filename, StrLen(filename)-1, 1) EQ pathsep THEN BEGIN
directory = filename
RETURN, file
ENDIF
; Split the file by the path separator and extract into parts.
parts = StrSplit(filename, pathsep, /Extract)
IF StrMid(filename, 0, 1) EQ pathsep AND N_Elements(parts) GT 1 THEN parts[0] = pathsep + parts[0]
numParts = N_Elements(parts)
; Put the parts back together after identifying them.
CASE numParts OF
1: BEGIN
subparts = StrSplit(filename, ".", /Extract)
numsubParts = N_Elements(subparts)
CASE numsubParts OF
1: file = subparts[0]
2: BEGIN
file = subparts[0]
extension = subparts[1]
END
ELSE: BEGIN
file = StrJoin(subparts[0:numsubParts-2],'.')
extension = subparts[numsubParts-1]
END
ENDCASE
END
2: BEGIN
file = parts[1]
directory = parts[0] + pathsep
subparts = StrSplit(file, ".", /Extract)
numsubParts = N_Elements(subparts)
CASE numsubParts OF
1: file = subparts[0]
2: BEGIN
file = subparts[0]
extension = subparts[1]
END
ELSE: BEGIN
file = StrJoin(subparts[0:numsubParts-2],'.')
extension = subparts[numsubParts-1]
END
ENDCASE
END
ELSE: BEGIN
file = parts[numParts-1]
subparts = StrSplit(file, ".", /Extract)
numsubParts = N_Elements(subparts)
CASE numsubParts OF
1: file = subparts[0]
2: BEGIN
file = subparts[0]
extension = subparts[1]
END
ELSE: BEGIN
file = StrJoin(subparts[0:numsubParts-2],'.')
extension = subparts[numsubParts-1]
END
ENDCASE
directory = parts[0]
FOR j=1,numParts-2 DO BEGIN
directory = directory + pathsep + parts[j]
ENDFOR
directory = directory + pathsep
END
ENDCASE
; If the directory is a null string. Make it the current directory.
IF directory EQ "" THEN CD, CURRENT=directory
; Does the directory need a final path separator.
IF (directory NE "") THEN BEGIN
lastChar = StrMid(directory, 0, 1, /REVERSE_OFFSET)
IF lastChar NE pathsep THEN directory = directory + pathsep
ENDIF
RETURN, file
END
|