OpenVMSFilename.st
changeset 2948 1c957963711b
parent 2939 b7cebf237308
child 2960 55d3fa37f610
--- a/OpenVMSFilename.st	Thu Sep 18 21:04:42 1997 +0200
+++ b/OpenVMSFilename.st	Thu Sep 18 21:08:01 1997 +0200
@@ -350,6 +350,36 @@
 
 !OpenVMSFilename class methodsFor:'queries'!
 
+defaultTempDirectoryName
+    "return the default temp directory as a filename.
+     Here, the presence of a sys$tmp: or sys$scratch: volume
+     is checked, and if so, returned. Otherwise, the current directory
+     is returned.
+     This is used, if no special preferences were defined in
+     any of the TEMP-environment variables (see tempDirectory)."
+
+    |fn|
+
+    #( 'sys$tmp:[000000]' 'sys$scratch:[000000]')
+    do:[:try |
+	|fn|
+
+	fn := try asFilename.
+        (try isDirectory 
+	and:[try canBeWritten
+	and:[try isReadable]]) ifTrue:[
+	    ^ try
+	]
+    ].
+
+    "/ fallBack - use current.
+    ^ '.'
+
+    "
+     OpenVMSFilename defaultTempDirectoryName
+    "
+!
+
 directorySuffix
     ^ '.DIR'
 !
@@ -436,6 +466,18 @@
 	]
     ].
     ^ type
+!
+
+!OpenVMSFilename methodsFor:'queries'!
+
+isExecutableProgram
+    "return true, if such a file exists and is an executable program.
+     (i.e. for directories, false is returned.)"
+
+    (self hasSuffix:'exe') ifTrue:[
+	^ super isExecutableProgram
+    ].
+    ^ false
 ! !
 
 !OpenVMSFilename methodsFor:'private accessing'!
@@ -545,6 +587,68 @@
 
     osName := nameString , '[000000]'.
     ^ osName
+!
+
+osNameForAccess
+    "internal - return the OS's name for the receiver,
+     when asking for (stat-) info or to open the file.
+     This returns the files name unchanged, but translates
+     special directory names."
+  
+    |comps f d v idx|
+
+    comps := self parseComponentsFrom:nameString.
+    d := comps directory.
+
+    (f := comps filename) size > 0 ifTrue:[
+	d size == 0 ifTrue:[
+	    v := comps volume.
+	    v size > 0 ifTrue:[
+	        "/ something like v:file
+	        "/ make it: v:[000000]file
+	        comps directory:'000000'.
+	    ].
+	].
+	"/
+	"/ if it has no suffix, at least append a suffix character
+	"/
+	(f includes:$.) ifFalse:[
+	    f := f , '.'.
+	    comps filename:f.
+	].
+	osName := self nameFromComponents:comps.
+	^ osName
+    ].
+
+    "/ ok, an empty fileName
+    d size > 0 ifTrue:[
+        idx := d lastIndexOf:$..
+        idx ~~ 0 ifTrue:[
+	    "/
+	    "/ something like: '[d1.d2]' -> '[d1]d2.DIR'
+	    "/
+	    comps directory:(d copyTo:(idx-1)).
+	    comps filename:((d copyFrom:idx+1) , '.DIR').
+            osName := self nameFromComponents:comps.
+	    ^ osName
+        ].
+	"/
+	"/ something like: '[d]' -> '[000000]d.DIR'
+	"/
+	comps directory:'000000'.
+	comps filename:(d , '.DIR').
+	osName := self nameFromComponents:comps.
+	^ osName
+    ].
+
+    "/ mhmh - an empty directory and empty file
+    "/ i.e. something like v:
+    "/ make it: v:000000.dir
+
+    osName := nameString , '[000000]'.
+    ^ osName
+!
+
 ! !
 
 !OpenVMSFilename methodsFor:'instance creation'!
@@ -944,5 +1048,5 @@
 !OpenVMSFilename class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/OpenVMSFilename.st,v 1.8 1997-09-17 22:07:30 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/OpenVMSFilename.st,v 1.9 1997-09-18 19:08:01 cg Exp $'
 ! !