[comp.lang.smalltalk] File-List Goodie

kww@cs.glasgow.ac.uk (Dr Kevin Waite) (09/10/90)

The following file-in allows UNIX shell environment variables to be
entered as the root of a file name in a FileListView.  For example,
if I enter:

	$HOME/bin

I get to browse the files in directory /users/iii/kww/bin.  This greatly
simplifies the browsing of files in important directories.  Note that the
file-in extends only the UnixFilename class.  The code was developed under
ObjectWorks-2.5 for Smalltalk.

------------------------------  CUT HERE  -------------------------------

'From Objectworks for Smalltalk-80(tm), Version 2.5 of 29 July 1989 on 10 September 1990 at 3:55:59 pm'!



!UnixFilename class methodsFor: 'private'!

baseDirectoryForList: list

	^list first = (String with: self separator)
		ifTrue:	[self named: list removeFirst]
		ifFalse:	[list first first = $$ 
					ifTrue: [self lookupEnvironment: list]
					ifFalse: [self currentDirectory]]!

lookupEnvironment: list
	"The first member of this list starts with a dollar sign and therefore
	could be a dereferencing of a UNIX environment variable.  Lookup this
	variable in the current environment and if it is there use its value as
	the directory root, otherwise treat the dollar as an ordinary character."

	| environ key value  root |

	environ := CEnvironment userEnvironment.
	key := list first copyFrom: 2 to: list first size.
	value := environ at: key ifAbsent: [^self currentDirectory].

	root := self named: value.
	(root exists and: [root isDirectory]) ifFalse: [
		^self currentDirectory].

	"The first part of the given name did correspond to an environment
	variable with a legal directory name as its value.  Use that directory
	as the base directory and strip off the name from the component list."
	
	list removeFirst. 
	^root! !

---------------------------------------  CUT -------------------------------
-- 
Email:   kww@uk.ac.glasgow.cs  (JANET)
	 kww%cs.glasgow.ac.uk@nsfnet-relay.ac.uk  (INTERNET)
Address: Dept. of Computing Science,  University of Glasgow,
	 17 Lilybank Gardens,  Glasgow,  United Kingdom.  G12 8QQ