--- a/AutoDeletedFilename.st Wed Feb 06 11:01:21 2019 +0100
+++ b/AutoDeletedFilename.st Wed Feb 06 11:07:44 2019 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 2007 by eXept Software AG
All Rights Reserved
@@ -14,7 +16,7 @@
"{ NameSpace: Smalltalk }"
Filename subclass:#AutoDeletedFilename
- instanceVariableNames:''
+ instanceVariableNames:'concreteFilename'
classVariableNames:'Lobby'
poolDictionaries:''
category:'System-Support'
@@ -43,6 +45,9 @@
See -> Filename asAutoDeletedFilename
+ [instance variables:]
+ concreteFilename UnixFilename|PCFilename the concrete filename that
+ implements the OS-specific behavior
[author:]
cg - original code
sv - fixed and enhanced
@@ -106,6 +111,17 @@
Smalltalk addDependent:self. "inform me when smalltalk exits"
! !
+!AutoDeletedFilename class methodsFor:'instance creation'!
+
+named:aString
+ "return a filename for a directory named aString.
+ This is the same as 'aString asFilename'."
+
+ ^ self basicNew setName:aString
+
+ "Created: / 06-02-2019 / 10:15:01 / Stefan Vogel"
+! !
+
!AutoDeletedFilename class methodsFor:'change and update'!
update:anAspect with:aParameter from:changedObject
@@ -128,6 +144,10 @@
!AutoDeletedFilename methodsFor:'accessing'!
+concreteFilename:something
+ concreteFilename := something.
+!
+
keep
"do not delete the file on finalization"
@@ -136,7 +156,28 @@
setName:aString
super setName:aString.
- self registerForFinalization
+ concreteFilename := ConcreteClass named:aString.
+ self registerForFinalization
+
+ "Modified: / 06-02-2019 / 10:16:06 / Stefan Vogel"
+!
+
+species
+ "filenames derived from me should not be autodeleted themself"
+
+ ^ ConcreteClass. "of Filename"
+
+ "Modified: / 06-02-2019 / 10:06:23 / Stefan Vogel"
+! !
+
+!AutoDeletedFilename methodsFor:'converting'!
+
+asAutoDeletedFilename
+ "that's what I am"
+
+ ^ self
+
+ "Created: / 06-02-2019 / 10:10:43 / Stefan Vogel"
! !
!AutoDeletedFilename methodsFor:'copying'!
@@ -152,6 +193,149 @@
"
! !
+!AutoDeletedFilename methodsFor:'delegated to concrete filename'!
+
+directoryName
+ ^ concreteFilename directoryName.
+
+ "Modified: / 07-09-1995 / 10:42:03 / claus"
+ "Modified: / 21-10-1998 / 22:52:25 / cg"
+ "Modified: / 27-10-1998 / 13:19:26 / ps"
+ "Modified: / 06-02-2019 / 10:52:20 / Stefan Vogel"
+!
+
+fileType
+ ^ concreteFilename fileType.
+
+ "Modified: / 21-07-1998 / 11:25:56 / cg"
+ "Modified: / 06-02-2019 / 10:50:51 / Stefan Vogel"
+!
+
+fullAlternativePathName
+ ^ concreteFilename fullAlternativePathName.
+
+ "Modified: / 06-02-2019 / 10:53:56 / Stefan Vogel"
+!
+
+isDirectory
+ ^ concreteFilename isDirectory.
+
+ "Modified: / 21-09-1998 / 15:53:10 / cg"
+ "Modified: / 06-02-2019 / 10:51:48 / Stefan Vogel"
+!
+
+isExecutableProgram
+ ^ concreteFilename isExecutableProgram.
+
+ "Modified: / 06-02-2019 / 10:54:15 / Stefan Vogel"
+!
+
+isExplicitRelative
+ ^ concreteFilename isExplicitRelative.
+
+ "Modified: / 06-02-2019 / 10:52:48 / Stefan Vogel"
+!
+
+isHidden
+ ^ concreteFilename isHidden.
+
+ "Modified: / 06-02-2019 / 10:54:30 / Stefan Vogel"
+!
+
+isImplicit
+ ^ concreteFilename isImplicit.
+
+ "Created: / 18-09-1997 / 18:04:51 / stefan"
+ "Modified: / 06-02-2019 / 10:53:08 / Stefan Vogel"
+!
+
+isRootDirectory
+ ^ concreteFilename isRootDirectory.
+
+ "Modified: / 06-02-2019 / 10:20:31 / Stefan Vogel"
+!
+
+isVolumeAbsolute
+ ^ concreteFilename isVolumeAbsolute.
+
+ "Created: / 07-09-1997 / 23:54:20 / cg"
+ "Modified: / 09-09-1998 / 20:38:54 / cg"
+ "Modified: / 06-02-2019 / 10:20:43 / Stefan Vogel"
+!
+
+localPathName
+ ^ concreteFilename localPathName.
+
+ "Modified: / 24-09-1998 / 19:09:53 / cg"
+ "Modified (format): / 06-02-2019 / 10:21:08 / Stefan Vogel"
+!
+
+makeLegalFilename
+ ^ concreteFilename makeLegalFilename.
+
+ "Modified: / 01-12-2010 / 18:53:59 / cg"
+ "Modified: / 06-02-2019 / 10:21:28 / Stefan Vogel"
+!
+
+osNameForAccess
+ ^ concreteFilename osNameForAccess.
+
+ "Modified: / 06-02-2019 / 10:21:47 / Stefan Vogel"
+!
+
+osNameForDirectory
+ ^ concreteFilename osNameForDirectory.
+
+ "Modified: / 20-01-1998 / 15:39:06 / md"
+ "Modified: / 17-08-1998 / 10:04:01 / cg"
+ "Modified: / 06-02-2019 / 10:22:02 / Stefan Vogel"
+!
+
+osNameForDirectoryContents
+ ^ concreteFilename osNameForDirectoryContents.
+
+ "Modified: / 20-01-1998 / 15:39:06 / md"
+ "Created: / 03-08-1998 / 21:37:46 / cg"
+ "Modified: / 17-08-1998 / 10:04:22 / cg"
+ "Modified: / 06-02-2019 / 10:22:21 / Stefan Vogel"
+!
+
+osNameForFile
+ ^ concreteFilename osNameForFile.
+
+ "Modified: / 21-07-2012 / 19:35:19 / cg"
+ "Modified: / 06-02-2019 / 10:22:32 / Stefan Vogel"
+!
+
+pathName
+ ^ concreteFilename pathName.
+
+ "Modified: / 24-09-1998 / 19:09:53 / cg"
+ "Modified: / 06-02-2019 / 10:22:43 / Stefan Vogel"
+!
+
+renameTo:newName
+ ^ concreteFilename renameTo:newName.
+
+ "Modified: / 20-01-1998 / 15:33:00 / md"
+ "Modified: / 21-09-2006 / 18:19:47 / cg"
+ "Modified (format): / 12-12-2017 / 12:45:47 / stefan"
+ "Modified: / 06-02-2019 / 10:22:59 / Stefan Vogel"
+!
+
+setHidden
+ ^ concreteFilename setHidden.
+
+ "Modified: / 06-02-2019 / 10:23:25 / Stefan Vogel"
+!
+
+volume
+ ^ concreteFilename volume.
+
+ "Modified: / 24-09-1998 / 19:04:27 / cg"
+ "Modified: / 06-02-2019 / 10:23:54 / Stefan Vogel"
+! !
+
!AutoDeletedFilename methodsFor:'finalization'!
basicFinalize
@@ -168,7 +352,11 @@
!
executor
- ^ self class basicNew nameString:nameString
+ ^ self class basicNew
+ nameString:nameString;
+ concreteFilename:concreteFilename.
+
+ "Modified: / 06-02-2019 / 10:27:14 / Stefan Vogel"
!
finalizationLobby
@@ -189,14 +377,6 @@
] fork.
! !
-!AutoDeletedFilename methodsFor:'queries'!
-
-species
- "filenames derived from me should not be autodeleted themself"
-
- ^ Filename concreteClass.
-! !
-
!AutoDeletedFilename methodsFor:'removing'!
recursiveRemove