FileDirectory.st
changeset 2921 f42da059311e
parent 2859 3fdccb7b5134
child 2951 256e90eee7f9
--- a/FileDirectory.st	Mon Sep 15 22:33:15 1997 +0200
+++ b/FileDirectory.st	Mon Sep 15 22:34:41 1997 +0200
@@ -43,12 +43,12 @@
 
 
     Notice:
-        This class is not available in other ST-systems, while for example,
-        ST-80 provides a Filename class.
+        This class is not available in other ST-systems;
+	in contrast, ST-80 provides a Filename class.
         Therefore, Filename will take over much of the functionality in the near 
         future.
 
-        Use instances of Filename if possible.
+        This is going to be obsoleted - use instances of Filename if possible.
 
     [author:]
         Claus Gittinger
@@ -84,7 +84,8 @@
 currentDirectory
     "create and return a new FileDirectory for the current directory"
 
-    ^ self directoryNamed:'.'
+    self obsoleteMethodWarning:'use Filename'.
+    ^ (self basicNew) pathName:(Filename currentDirectory name)
 
     "
      FileDirectory currentDirectory contents
@@ -98,7 +99,13 @@
     "create and return a new FileDirectory for the directory
      with given pathname"
 
-    ^ (self basicNew) pathName:name
+    self obsoleteMethodWarning:'use Filename'.
+    name asString = '.' ifTrue:[
+	Filename currentDirectory name ~= '.' ifTrue:[
+	    ^ self currentDirectory
+	]
+    ].
+    ^ (self basicNew) pathName:(name asFilename constructString:'')
 
     "
      (FileDirectory directoryNamed:'..') pathName
@@ -112,37 +119,47 @@
 
     |baseName sep|
 
-    sep := OperatingSystem fileSeparator.
-    ((name at:1) == sep) ifTrue:[
+    self obsoleteMethodWarning:'use Filename'.
+
+"/ OLD:
+"/    sep := OperatingSystem fileSeparator.
+"/    ((name at:1) == sep) ifTrue:[
+"/        ^ self directoryNamed:name
+"/    ].
+"/    "/ temporary kludge; this and the previous should
+"/    "/ go into OS isAbsolutePath ..
+"/
+"/    OperatingSystem isMSDOSlike ifTrue:[
+"/        ('[a-zA-Z]:*' match:name) ifTrue:[
+"/            "/ drive spec ...
+"/            ^ self directoryNamed:name
+"/        ]
+"/    ].                  
+"/    (aFileDirectory isKindOf:FileDirectory) ifTrue:[
+"/        baseName := aFileDirectory pathName
+"/    ] ifFalse:[
+"/        baseName := aFileDirectory
+"/    ].
+"/    (name = '.') ifTrue:[^ aFileDirectory].
+"/
+"/    (baseName = sep asString) ifFalse:[
+"/        (baseName endsWith:sep) ifFalse:[
+"/            baseName := baseName copyWith:sep
+"/        ]
+"/    ].
+"/    ^ self directoryNamed:(baseName , name)
+
+"/ NEW:
+    name asFilename isAbsolute ifTrue:[
         ^ self directoryNamed:name
     ].
-    "/ temporary kludge; this and the previous should
-    "/ go into OS isAbsolutePath ..
-
-    OperatingSystem isMSDOSlike ifTrue:[
-        ('[a-zA-Z]:*' match:name) ifTrue:[
-            "/ drive spec ...
-            ^ self directoryNamed:name
-        ]
-    ].                  
+    
     (aFileDirectory isKindOf:FileDirectory) ifTrue:[
         baseName := aFileDirectory pathName
     ] ifFalse:[
         baseName := aFileDirectory
     ].
-"
-    (name = '..') ifTrue:[
-        ^ (self basicNew) pathName:(OperatingSystem directoryNameOf:baseName)
-    ].
-"
-    (name = '.') ifTrue:[^ aFileDirectory].
-
-    (baseName = sep asString) ifFalse:[
-        (baseName endsWith:sep) ifFalse:[
-            baseName := baseName copyWith:sep
-        ]
-    ].
-    ^ self directoryNamed:(baseName , name)
+    ^ (self basicNew) pathName:((Filename named:baseName) constructString:name)
 
     "Modified: 28.4.1997 / 23:23:51 / cg"
     "Modified: 28.4.1997 / 22:34:47 / dq"
@@ -151,7 +168,8 @@
 rootDirectory
     "create and return a new FileDirectory for the root directory"
 
-    ^ self directoryNamed:(OperatingSystem fileSeparator asString)
+    self obsoleteMethodWarning:'use Filename'.
+    ^ (self basicNew) pathName:(Filename rootDirectory name)
 
     "
      FileDirectory rootDirectory contents
@@ -195,7 +213,7 @@
      - thats the directory name without leading parent-dirs"
 
     lazy ifTrue:[self getFullPathName].
-    ^ OperatingSystem baseNameOf:pathName
+    ^ pathName asFilename baseName
 !
 
 contents 
@@ -236,7 +254,7 @@
      - thats the directory name where I'm in"
 
     lazy ifTrue:[self getFullPathName].
-    ^ OperatingSystem directoryNameOf:pathName
+    ^ pathName asFilename directoryName
 !
 
 files
@@ -292,7 +310,8 @@
 	    ] ifFalse:[
 		realName := newName
 	    ].
-	    ^ OperatingSystem createDirectory:(self pathNameOf:realName)
+	    ^ (self filenameFor:realName) makeDirectory
+	    "/ ^ OperatingSystem createDirectory:(self pathNameOf:realName)
 	]
     ].
     ^ false
@@ -311,13 +330,15 @@
 remove:aFileOrDirectoryName
     "remove the file or directory from myself; return true if successful"
 
-    |path|
+    ^ (self filenameFor:aFileOrDirectoryName) remove
 
-    path := self pathNameOf:aFileOrDirectoryName.
-    (OperatingSystem isDirectory:path) ifTrue:[
-	^ OperatingSystem removeDirectory:path
-    ].
-    ^ OperatingSystem removeFile:path
+"/    |path|
+"/
+"/    path := self pathNameOf:aFileOrDirectoryName.
+"/    (OperatingSystem isDirectory:path) ifTrue:[
+"/	^ OperatingSystem removeDirectory:path
+"/    ].
+"/    ^ OperatingSystem removeFile:path
 !
 
 removeDirectory:dirName
@@ -325,27 +346,30 @@
      If the directory is not empty, the containing files/directories are also
      removed."
 
-    |path|
+    ^ (self filenameFor:dirName) recursiveRemove
 
-    path := self pathNameOf:dirName.
-    (OperatingSystem removeDirectory:path) ifTrue:[^ true].
-    ^ OperatingSystem recursiveRemoveDirectory:path
+"/    |path|
+"/
+"/    path := self pathNameOf:dirName.
+"/    (OperatingSystem removeDirectory:path) ifTrue:[^ true].
+"/    ^ OperatingSystem recursiveRemoveDirectory:path
 !
 
 removeFile:fileName
     "remove the file 'fileName' from myself; return true if successful"
 
-    ^ OperatingSystem removeFile:(self pathNameOf:fileName).
+    ^ (self filenameFor:fileName) remove
+"/    ^ OperatingSystem removeFile:(self pathNameOf:fileName).
 !
 
 renameFile:oldFileName newName:newFileName
     "rename the file; return true if successful"
 
-    |path1 path2|
+    |f1 f2|
 
-    path1 := self pathNameOf:oldFileName.
-    path2 := self pathNameOf:newFileName.
-    ^ OperatingSystem renameFile:path1 to:path2
+    f1 := self filenameFor:oldFileName.
+    f2 := self filenameFor:newFileName.
+    ^ f1 renameTo:f2
 ! !
 
 !FileDirectory methodsFor:'converting'!
@@ -493,6 +517,7 @@
 
     |shortPathName|
 
+
     (pathName = OperatingSystem fileSeparator asString) ifTrue:[
 	lazy := false.
 	^ self
@@ -521,8 +546,17 @@
     ]
 !
 
+filenameFor:fileName
+    |f|
+
+    f := fileName asFilename.
+    f isAbsolute ifTrue:[^ f].
+    ^ (pathName asFilename construct:fileName)
+!
+
 pathNameOf:fileName
-    ^ self class fullPathNameOf:fileName in:pathName
+    ^ (pathName asFilename construct:fileName) osName
+    "/ ^ self class fullPathNameOf:fileName in:pathName
 ! !
 
 !FileDirectory methodsFor:'queries'!
@@ -542,7 +576,8 @@
 exists
     "return true if this directory exists"
 
-    ^ OperatingSystem isDirectory:pathName
+    ^ (Filename named:pathName) isDirectory
+"/    ^ OperatingSystem isDirectory:pathName
 
     "
      (FileDirectory directoryNamed:'fooBar') exists
@@ -553,26 +588,30 @@
 exists:name
     "return true, if the given name exists in myself"
 
-    ^ OperatingSystem isValidPath:(self pathNameOf:name)
+    ^ (self filenameFor:name) exists
+"/     ^ OperatingSystem isValidPath:(self pathNameOf:name)
 !
 
 id
     "return the directories file-id (inode number)"
 
-    ^ OperatingSystem idOf:pathName
+    ^ (Filename named:pathName) id
+"/    ^ OperatingSystem idOf:pathName
 !
 
 infoOf:name
     "return an array filled with file info for the file 'aFileName';
      return nil if such a file does not exist"
 
-    ^ OperatingSystem infoOf:(self pathNameOf:name)
+    ^ (self filenameFor:name) info
+"/    ^ OperatingSystem infoOf:(self pathNameOf:name)
 !
 
 isDirectory:name
     "return true, if the given name is that of a directory in myself"
 
-    ^ OperatingSystem isDirectory:(self pathNameOf:name)
+    ^ (self filenameFor:name) isDirectory
+"/    ^ OperatingSystem isDirectory:(self pathNameOf:name)
 !
 
 isEmpty
@@ -588,19 +627,22 @@
 isExecutable:name
     "return true, if the given file is executable"
 
-    ^ OperatingSystem isExecutable:(self pathNameOf:name)
+    ^ (self filenameFor:name) isExecutable
+"/    ^ OperatingSystem isExecutable:(self pathNameOf:name)
 !
 
 isReadable:name
     "return true, if the given file is readable"
 
-    ^ OperatingSystem isReadable:(self pathNameOf:name)
+    ^ (self filenameFor:name) isReadable
+"/    ^ OperatingSystem isReadable:(self pathNameOf:name)
 !
 
 isWritable:name
     "return true, if the given file is readable"
 
-    ^ OperatingSystem isWritable:(self pathNameOf:name)
+    ^ (self filenameFor:name) isWritable
+"/    ^ OperatingSystem isWritable:(self pathNameOf:name)
 !
 
 species
@@ -610,24 +652,27 @@
 timeOfLastChange
     "return the timeStamp of myself"
 
-    ^ OperatingSystem timeOfLastChange:pathName
+    ^ (Filename named:pathName) modificationTime
+"/    ^ OperatingSystem timeOfLastChange:pathName
 !
 
 timeOfLastChange:name
     "return the timeStamp of a file in myself"
 
-    ^ OperatingSystem timeOfLastChange:(self pathNameOf:name)
+    ^ (self filenameFor:name) modificationTime
+"/    ^ OperatingSystem timeOfLastChange:(self pathNameOf:name)
 !
 
 typeOf:name
     "return the symbolic type of a file in myself"
 
-    ^ OperatingSystem typeOf:(self pathNameOf:name)
+    ^ (self filenameFor:name) type
+"/    ^ OperatingSystem typeOf:(self pathNameOf:name)
 ! !
 
 !FileDirectory class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/FileDirectory.st,v 1.31 1997-08-15 19:44:50 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/FileDirectory.st,v 1.32 1997-09-15 20:34:40 cg Exp $'
 ! !
 FileDirectory initialize!