#FEATURE by stefan
authorStefan Vogel <sv@exept.de>
Fri, 12 Aug 2016 17:45:11 +0200
changeset 20247 8ee29af28553
parent 20246 dacb56e06db1
child 20248 34ed3b6c7307
child 20249 bb87d67d6b26
#FEATURE by stefan class: PCFilename added: #nameWithSpecialExpansions: changed: #osNameForFile do %EnvironmentVariable% - expansion in Filenames
PCFilename.st
--- a/PCFilename.st	Fri Aug 12 17:44:15 2016 +0200
+++ b/PCFilename.st	Fri Aug 12 17:45:11 2016 +0200
@@ -11,6 +11,8 @@
 "
 "{ Package: 'stx:libbasic' }"
 
+"{ NameSpace: Smalltalk }"
+
 Filename subclass:#PCFilename
 	instanceVariableNames:''
 	classVariableNames:'StandardSuffixTable NextTempFilenameIndex'
@@ -218,6 +220,32 @@
     ^ 'c:'
 ! !
 
+!PCFilename class methodsFor:'misc'!
+
+nameWithSpecialExpansions:aString
+    "return the nameString, expanding any OS specific macros.
+     Here, a ~/ or ~user/ prefix is expanded to the users home dir (as in csh)"
+
+    |expandedString|
+
+    expandedString := aString.
+    (expandedString includes:$%) ifTrue:[
+        expandedString := OperatingSystem expandEnvironmentStrings:expandedString.
+    ].
+
+    (expandedString startsWith:$~) ifTrue:[
+        ^ super nameWithSpecialExpansions:expandedString.
+    ].
+    ^ expandedString
+
+    "
+        self nameWithSpecialExpansions:'c:/windows'
+        self nameWithSpecialExpansions:'%ProgramFiles%\exept\expecco'
+        self nameWithSpecialExpansions:'~\exept\expecco'
+        self nameWithSpecialExpansions:'~stefan\exept\expecco'
+    "
+! !
+
 !PCFilename class methodsFor:'queries'!
 
 isBadCharacter:aCharacter
@@ -907,11 +935,8 @@
     "internal - return the OS's name for the receiver to
      access it as a file."
 
-    (nameString includes:$~) ifTrue:[
-	(nameString startsWith:'~') ifTrue:[
-	    ^ self class nameWithSpecialExpansions:nameString.
-	].
-	"/ self makeNonDOSName.
+    (nameString includesAny:'~%') ifTrue:[
+        ^ self class nameWithSpecialExpansions:nameString.
     ].
 
     ^ nameString
@@ -941,3 +966,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+