more bells & whistles
authorClaus Gittinger <cg@exept.de>
Tue, 08 Sep 1998 12:24:20 +0200
changeset 1868 528b1549b065
parent 1867 e0ed5b958579
child 1869 f975e008bcbc
more bells & whistles
FBrowser.st
FileBrowser.st
--- a/FBrowser.st	Tue Sep 08 12:23:56 1998 +0200
+++ b/FBrowser.st	Tue Sep 08 12:24:20 1998 +0200
@@ -99,7 +99,7 @@
 
     f := aFilename asFilename.
     f isDirectory ifTrue:[
-        ^ self openOn:aFilename
+	^ self openOn:aFilename
     ].
 
     browser := self new.
@@ -128,35 +128,35 @@
     Icons := Dictionary new.
 
     #(
-        "/ internal-type to icon mappings.
-        (#directory       'ICON_DIRECTORY'        'tiny_yellow_dir.xpm'       )
-        (#directoryLocked 'ICON_DIRECTORY_LOCKED' 'tiny_yellow_dir_locked.xpm')
-        (#directoryLink   'ICON_DIRECTORY_LINK'   'tiny_yellow_dir_link.xpm'  )
-        (#file            'ICON_FILE'             'tiny_file_plain.xpm'       )
-        (#fileLink        'ICON_FILE_LINK'        'tiny_file_link.xpm'        )
-        (#fileLocked      'ICON_FILE_LOCKED'      'tiny_file_lock.xpm'        )
-        (#imageFile       'ICON_IMAGE_FILE'       'tiny_file_pix.xpm'         )
-        (#textFile        'ICON_TEXT_FILE'        'tiny_file_text.xpm'        )
-        (#executableFile  'ICON_EXECUTABLEFILE'   'tiny_file_exec.xpm'        )
-
-        "/ mime-type to icon mappings.
-        ('text/plain'                     nil     'tiny_file_text.xpm'        )
-        ('text/html'                      nil     'tiny_file_text.xpm'        )
-        ('application/x-smalltalk-source' nil     'tiny_file_st.xpm'          )
+	"/ internal-type to icon mappings.
+	(#directory       'ICON_DIRECTORY'        'tiny_yellow_dir.xpm'       )
+	(#directoryLocked 'ICON_DIRECTORY_LOCKED' 'tiny_yellow_dir_locked.xpm')
+	(#directoryLink   'ICON_DIRECTORY_LINK'   'tiny_yellow_dir_link.xpm'  )
+	(#file            'ICON_FILE'             'tiny_file_plain.xpm'       )
+	(#fileLink        'ICON_FILE_LINK'        'tiny_file_link.xpm'        )
+	(#fileLocked      'ICON_FILE_LOCKED'      'tiny_file_lock.xpm'        )
+	(#imageFile       'ICON_IMAGE_FILE'       'tiny_file_pix.xpm'         )
+	(#textFile        'ICON_TEXT_FILE'        'tiny_file_text.xpm'        )
+	(#executableFile  'ICON_EXECUTABLEFILE'   'tiny_file_exec.xpm'        )
+
+	"/ mime-type to icon mappings.
+	('text/plain'                     nil     'tiny_file_text.xpm'        )
+	('text/html'                      nil     'tiny_file_text.xpm'        )
+	('application/x-smalltalk-source' nil     'tiny_file_st.xpm'          )
      ) do:[:entry |
-        |key resource defaultName nm|
-
-        key := entry at:1.
-        resource := entry at:2.
-        defaultName := entry at:3.
-
-        resource notNil ifTrue:[
-            nm := resources at:resource default:nil.
-        ].
-        nm isNil ifTrue:[
-            nm := 'bitmaps/xpmBitmaps/document_images/' , defaultName
-        ].
-        Icons at:key put:(Image fromFile:nm).
+	|key resource defaultName nm|
+
+	key := entry at:1.
+	resource := entry at:2.
+	defaultName := entry at:3.
+
+	resource notNil ifTrue:[
+	    nm := resources at:resource default:nil.
+	].
+	nm isNil ifTrue:[
+	    nm := 'bitmaps/xpmBitmaps/document_images/' , defaultName
+	].
+	Icons at:key put:(Image fromFile:nm).
     ]
 
     "
@@ -245,43 +245,43 @@
      
        #(#Menu
           
-           #(
-             #(#MenuItem
-                #label: 'Copy Path'
-                #translateLabel: true
-                #value: #copyPath
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Up'
-                #translateLabel: true
-                #value: #changeToParentDirectory
-                #enabled: #currentDirectoryIsNotTop
-            )
-             #(#MenuItem
-                #label: 'Back'
-                #translateLabel: true
-                #value: #changeToPreviousDirectory
-            )
-             #(#MenuItem
-                #label: 'Home'
-                #translateLabel: true
-                #value: #changeToHomeDirectory
-            )
-             #(#MenuItem
-                #label: 'Default'
-                #translateLabel: true
-                #value: #changeToDefaultDirectory
-            )
-             #(#MenuItem
-                #label: 'Goto...'
-                #translateLabel: true
-                #value: #changeCurrentDirectory
-            )
-          ) nil
-          nil
+	   #(
+	     #(#MenuItem
+		#label: 'Copy Path'
+		#translateLabel: true
+		#value: #copyPath
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Up'
+		#translateLabel: true
+		#value: #changeToParentDirectory
+		#enabled: #currentDirectoryIsNotTop
+	    )
+	     #(#MenuItem
+		#label: 'Back'
+		#translateLabel: true
+		#value: #changeToPreviousDirectory
+	    )
+	     #(#MenuItem
+		#label: 'Home'
+		#translateLabel: true
+		#value: #changeToHomeDirectory
+	    )
+	     #(#MenuItem
+		#label: 'Default'
+		#translateLabel: true
+		#value: #changeToDefaultDirectory
+	    )
+	     #(#MenuItem
+		#label: 'Goto...'
+		#translateLabel: true
+		#value: #changeCurrentDirectory
+	    )
+	  ) nil
+	  nil
       )
 
     "Created: / 4.8.1998 / 17:21:16 / cg"
@@ -310,12 +310,12 @@
     "/ add the history items ...
 
     DirectoryHistory size > 0 ifTrue:[
-        base addItem:(MenuItem labeled:'-').
-        DirectoryHistory do:[:dirName |
-            base addItem:((MenuItem label:dirName value:#changeDirectoryTo:)
-                            argument:dirName;
-                            yourself).
-        ].
+	base addItem:(MenuItem labeled:'-').
+	DirectoryHistory do:[:dirName |
+	    base addItem:((MenuItem label:dirName value:#changeDirectoryTo:)
+			    argument:dirName;
+			    yourself).
+	].
     ].
 
     ^ base
@@ -341,151 +341,151 @@
      
        #(#Menu
           
-           #(
-             #(#MenuItem
-                #label: 'Spawn'
-                #translateLabel: true
-                #value: #fileSpawn
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Get Contents'
-                #translateLabel: true
-                #value: #fileGet
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: 'Insert Contents'
-                #translateLabel: true
-                #value: #fileInsert
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: 'FileIn'
-                #translateLabel: true
-                #value: #fileFileIn
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Unix Command...'
-                #translateLabel: true
-                #isVisible: #systemIsUnix
-                #value: #menuOSCommand
-            )
-             #(#MenuItem
-                #label: 'DOS Command...'
-                #translateLabel: true
-                #isVisible: #systemIsDOS
-                #value: #menuOSCommand
-            )
-             #(#MenuItem
-                #label: 'VMS Command...'
-                #translateLabel: true
-                #isVisible: #systemIsVMS
-                #value: #menuOSCommand
-            )
-             #(#MenuItem
-                #label: 'ST/X Tools'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+	   #(
+	     #(#MenuItem
+		#label: 'Spawn'
+		#translateLabel: true
+		#value: #fileSpawn
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Get Contents'
+		#translateLabel: true
+		#value: #fileGet
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: 'Insert Contents'
+		#translateLabel: true
+		#value: #fileInsert
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: 'FileIn'
+		#translateLabel: true
+		#value: #fileFileIn
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Unix Command...'
+		#translateLabel: true
+		#isVisible: #systemIsUnix
+		#value: #menuOSCommand
+	    )
+	     #(#MenuItem
+		#label: 'DOS Command...'
+		#translateLabel: true
+		#isVisible: #systemIsDOS
+		#value: #menuOSCommand
+	    )
+	     #(#MenuItem
+		#label: 'VMS Command...'
+		#translateLabel: true
+		#isVisible: #systemIsVMS
+		#value: #menuOSCommand
+	    )
+	     #(#MenuItem
+		#label: 'ST/X Tools'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Changes Browser'
-                          #translateLabel: true
-                          #value: #openChangesBrowser
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Editor'
-                          #translateLabel: true
-                          #value: #openEditor
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'HTML Reader'
-                          #translateLabel: true
-                          #value: #openHTMLReader
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Image Inspect'
-                          #translateLabel: true
-                          #value: #openImageInspector
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Image Editor'
-                          #translateLabel: true
-                          #value: #openImageEditor
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'ZipFile Tool'
-                          #translateLabel: true
-                          #value: #openZipTool
-                          #enabled: #hasZipFileSelected
-                      )
-                       #(#MenuItem
-                          #label: 'Show File Differences'
-                          #translateLabel: true
-                          #value: #openDiffView
-                      )
-                       #(#MenuItem
-                          #label: 'Terminal'
-                          #translateLabel: true
-                          #isVisible: #systemIsUnix
-                          #value: #openTerminal
-                          #enabled: #systemIsUnix
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Remove...'
-                #translateLabel: true
-                #value: #fileRemove
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: 'Rename...'
-                #translateLabel: true
-                #value: #fileRename
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'New Directory...'
-                #translateLabel: true
-                #value: #newDirectory
-            )
-             #(#MenuItem
-                #label: 'New File...'
-                #translateLabel: true
-                #value: #newFile
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Update'
-                #translateLabel: true
-                #value: #updateCurrentDirectory
-            )
-          ) nil
-          nil
+		     #(
+		       #(#MenuItem
+			  #label: 'Changes Browser'
+			  #translateLabel: true
+			  #value: #openChangesBrowser
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Editor'
+			  #translateLabel: true
+			  #value: #openEditor
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'HTML Reader'
+			  #translateLabel: true
+			  #value: #openHTMLReader
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Image Inspect'
+			  #translateLabel: true
+			  #value: #openImageInspector
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Image Editor'
+			  #translateLabel: true
+			  #value: #openImageEditor
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'ZipFile Tool'
+			  #translateLabel: true
+			  #value: #openZipTool
+			  #enabled: #hasZipFileSelected
+		      )
+		       #(#MenuItem
+			  #label: 'Show File Differences'
+			  #translateLabel: true
+			  #value: #openDiffView
+		      )
+		       #(#MenuItem
+			  #label: 'Terminal'
+			  #translateLabel: true
+			  #isVisible: #systemIsUnix
+			  #value: #openTerminal
+			  #enabled: #systemIsUnix
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Remove...'
+		#translateLabel: true
+		#value: #fileRemove
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: 'Rename...'
+		#translateLabel: true
+		#value: #fileRename
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'New Directory...'
+		#translateLabel: true
+		#value: #newDirectory
+	    )
+	     #(#MenuItem
+		#label: 'New File...'
+		#translateLabel: true
+		#value: #newFile
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Update'
+		#translateLabel: true
+		#value: #updateCurrentDirectory
+	    )
+	  ) nil
+	  nil
       )
 
     "Modified: / 26.8.1998 / 16:34:00 / cg"
@@ -509,325 +509,325 @@
      
        #(#Menu
           
-           #(
-             #(#MenuItem
-                #label: 'About'
-                #translateLabel: true
-                #labelImage: #(#ResourceRetriever #ToolApplicationModel #menuIcon)
-                #submenu: 
-                 #(#Menu
+	   #(
+	     #(#MenuItem
+		#label: 'About'
+		#translateLabel: true
+		#labelImage: #(#ResourceRetriever #ToolApplicationModel #menuIcon)
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'About Smalltalk/X...'
-                          #translateLabel: true
-                          #value: #showAboutSTX
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'About FileBrowser...'
-                          #translateLabel: true
-                          #value: #openAboutThisApplication
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'File'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'About Smalltalk/X...'
+			  #translateLabel: true
+			  #value: #showAboutSTX
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'About FileBrowser...'
+			  #translateLabel: true
+			  #value: #openAboutThisApplication
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'File'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Open'
-                          #translateLabel: true
-                          #value: #menuOpen
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'FileIn'
-                          #translateLabel: true
-                          #value: #fileFileIn
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'New'
-                          #translateLabel: true
-                          #submenu: 
-                           #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'Open'
+			  #translateLabel: true
+			  #value: #menuOpen
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'FileIn'
+			  #translateLabel: true
+			  #value: #fileFileIn
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'New'
+			  #translateLabel: true
+			  #submenu: 
+			   #(#Menu
                               
-                               #(
-                                 #(#MenuItem
-                                    #label: 'Directory...'
-                                    #translateLabel: true
-                                    #value: #newDirectory
-                                )
-                                 #(#MenuItem
-                                    #label: 'File...'
-                                    #translateLabel: true
-                                    #value: #newFile
-                                )
-                                 #(#MenuItem
-                                    #label: 'Hard Link...'
-                                    #translateLabel: true
-                                    #isVisible: #systemIsUnix
-                                    #value: #newHardLink
-                                )
-                                 #(#MenuItem
-                                    #label: 'Symbolic Link...'
-                                    #translateLabel: true
-                                    #isVisible: #systemIsUnix
-                                    #value: #newSoftLink
-                                )
-                              ) nil
-                              nil
-                          )
-                      )
-                       #(#MenuItem
-                          #label: 'Remove'
-                          #translateLabel: true
-                          #value: #fileRemove
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Rename'
-                          #translateLabel: true
-                          #value: #fileRename
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Properties...'
-                          #translateLabel: true
-                          #value: #fileGetLongInfo
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Spawn'
-                          #translateLabel: true
-                          #value: #fileSpawn
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Exit'
-                          #translateLabel: true
-                          #value: #menuExit
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'Directory'
-                #translateLabel: true
-                #submenuChannel: #directoryMenuSpec
-            )
-             #(#MenuItem
-                #label: 'Edit'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+			       #(
+				 #(#MenuItem
+				    #label: 'Directory...'
+				    #translateLabel: true
+				    #value: #newDirectory
+				)
+				 #(#MenuItem
+				    #label: 'File...'
+				    #translateLabel: true
+				    #value: #newFile
+				)
+				 #(#MenuItem
+				    #label: 'Hard Link...'
+				    #translateLabel: true
+				    #isVisible: #systemIsUnix
+				    #value: #newHardLink
+				)
+				 #(#MenuItem
+				    #label: 'Symbolic Link...'
+				    #translateLabel: true
+				    #isVisible: #systemIsUnix
+				    #value: #newSoftLink
+				)
+			      ) nil
+			      nil
+			  )
+		      )
+		       #(#MenuItem
+			  #label: 'Remove'
+			  #translateLabel: true
+			  #value: #fileRemove
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Rename'
+			  #translateLabel: true
+			  #value: #fileRename
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Properties...'
+			  #translateLabel: true
+			  #value: #fileGetLongInfo
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Spawn'
+			  #translateLabel: true
+			  #value: #fileSpawn
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Exit'
+			  #translateLabel: true
+			  #value: #menuExit
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'Directory'
+		#translateLabel: true
+		#submenuChannel: #directoryMenuSpec
+	    )
+	     #(#MenuItem
+		#label: 'Edit'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Get Contents'
-                          #translateLabel: true
-                          #value: #fileGet
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Insert Contents'
-                          #translateLabel: true
-                          #value: #fileInsert
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Copy File List'
-                          #translateLabel: true
-                          #value: #copyFileList
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'View'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'Get Contents'
+			  #translateLabel: true
+			  #value: #fileGet
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Insert Contents'
+			  #translateLabel: true
+			  #value: #fileInsert
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Copy File List'
+			  #translateLabel: true
+			  #value: #copyFileList
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'View'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Details'
-                          #translateLabel: true
-                          #indication: #showingDetails
-                      )
-                       #(#MenuItem
-                          #label: 'Show Hidden Files'
-                          #translateLabel: true
-                          #indication: #showingHiddenFiles
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Sort By Name'
-                          #translateLabel: true
-                          #choice: #sortByWhat
-                          #choiceValue: #name
-                      )
-                       #(#MenuItem
-                          #label: 'Sort By Type'
-                          #translateLabel: true
-                          #choice: #sortByWhat
-                          #choiceValue: #type
-                      )
-                       #(#MenuItem
-                          #label: 'Sort By Time'
-                          #translateLabel: true
-                          #choice: #sortByWhat
-                          #choiceValue: #time
-                      )
-                       #(#MenuItem
-                          #label: 'Ignore Case'
-                          #translateLabel: true
-                          #enabled: #sortByName
-                          #indication: #sortCaseless
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Encoding...'
-                          #translateLabel: true
-                          #value: #fileEncoding
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Update'
-                          #translateLabel: true
-                          #value: #updateCurrentDirectory
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'Tools'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'Details'
+			  #translateLabel: true
+			  #indication: #showingDetails
+		      )
+		       #(#MenuItem
+			  #label: 'Show Hidden Files'
+			  #translateLabel: true
+			  #indication: #showingHiddenFiles
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Sort By Name'
+			  #translateLabel: true
+			  #choice: #sortByWhat
+			  #choiceValue: #name
+		      )
+		       #(#MenuItem
+			  #label: 'Sort By Type'
+			  #translateLabel: true
+			  #choice: #sortByWhat
+			  #choiceValue: #type
+		      )
+		       #(#MenuItem
+			  #label: 'Sort By Time'
+			  #translateLabel: true
+			  #choice: #sortByWhat
+			  #choiceValue: #time
+		      )
+		       #(#MenuItem
+			  #label: 'Ignore Case'
+			  #translateLabel: true
+			  #enabled: #sortByName
+			  #indication: #sortCaseless
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Encoding...'
+			  #translateLabel: true
+			  #value: #fileEncoding
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Update'
+			  #translateLabel: true
+			  #value: #updateCurrentDirectory
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'Tools'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Unix Command'
-                          #translateLabel: true
-                          #isVisible: #systemIsUnix
-                          #value: #menuOSCommand
-                      )
-                       #(#MenuItem
-                          #label: 'DOS Command'
-                          #translateLabel: true
-                          #isVisible: #systemIsDOS
-                          #value: #menuOSCommand
-                      )
-                       #(#MenuItem
-                          #label: 'VMS Command'
-                          #translateLabel: true
-                          #isVisible: #systemIsVMS
-                          #value: #menuOSCommand
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Changes Browser'
-                          #translateLabel: true
-                          #value: #openChangesBrowser
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Editor'
-                          #translateLabel: true
-                          #value: #openEditor
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'HTML Reader'
-                          #translateLabel: true
-                          #value: #openHTMLReader
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Image Inspector'
-                          #translateLabel: true
-                          #value: #openImageInspector
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Image Editor'
-                          #translateLabel: true
-                          #value: #openImageEditor
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'ZipFile Tool'
-                          #translateLabel: true
-                          #value: #openZipTool
-                          #enabled: #hasZipFileSelected
-                      )
-                       #(#MenuItem
-                          #label: 'File Differences...'
-                          #translateLabel: true
-                          #value: #openDiffView
-                      )
-                       #(#MenuItem
-                          #label: 'Shell Terminal'
-                          #translateLabel: true
-                          #isVisible: #systemIsUnix
-                          #value: #openTerminal
-                          #enabled: #systemIsUnix
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'Help'
-                #translateLabel: true
-                #startGroup: #right
-                #submenu: 
-                 #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'Unix Command'
+			  #translateLabel: true
+			  #isVisible: #systemIsUnix
+			  #value: #menuOSCommand
+		      )
+		       #(#MenuItem
+			  #label: 'DOS Command'
+			  #translateLabel: true
+			  #isVisible: #systemIsDOS
+			  #value: #menuOSCommand
+		      )
+		       #(#MenuItem
+			  #label: 'VMS Command'
+			  #translateLabel: true
+			  #isVisible: #systemIsVMS
+			  #value: #menuOSCommand
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Changes Browser'
+			  #translateLabel: true
+			  #value: #openChangesBrowser
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Editor'
+			  #translateLabel: true
+			  #value: #openEditor
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'HTML Reader'
+			  #translateLabel: true
+			  #value: #openHTMLReader
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Image Inspector'
+			  #translateLabel: true
+			  #value: #openImageInspector
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Image Editor'
+			  #translateLabel: true
+			  #value: #openImageEditor
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'ZipFile Tool'
+			  #translateLabel: true
+			  #value: #openZipTool
+			  #enabled: #hasZipFileSelected
+		      )
+		       #(#MenuItem
+			  #label: 'File Differences...'
+			  #translateLabel: true
+			  #value: #openDiffView
+		      )
+		       #(#MenuItem
+			  #label: 'Shell Terminal'
+			  #translateLabel: true
+			  #isVisible: #systemIsUnix
+			  #value: #openTerminal
+			  #enabled: #systemIsUnix
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'Help'
+		#translateLabel: true
+		#startGroup: #right
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'FileBrowser Documentation'
-                          #translateLabel: true
-                          #value: #openHTMLDocument:
-                          #argument: 'tools/fbrowser/TOP.html'
-                      )
-                    ) nil
-                    nil
-                )
-            )
-          ) nil
-          nil
+		     #(
+		       #(#MenuItem
+			  #label: 'FileBrowser Documentation'
+			  #translateLabel: true
+			  #value: #openHTMLDocument:
+			  #argument: 'tools/fbrowser/TOP.html'
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	  ) nil
+	  nil
       )
 
     "Modified: / 26.8.1998 / 16:33:44 / cg"
@@ -859,10 +859,10 @@
 hasZipFileSelected
     ^ [|sel fn|
 
-        sel := fileListView selectionValue.
-        sel size == 1 
-        and:[ ((fn := self getSelectedFileName asFilename) hasSuffix:'zip')
-              or:[fn hasSuffix:'jar']]
+	sel := fileListView selectionValue.
+	sel size == 1 
+	and:[ ((fn := self getSelectedFileName asFilename) hasSuffix:'zip')
+	      or:[fn hasSuffix:'jar']]
       ]
 
     "Created: / 26.8.1998 / 16:15:26 / cg"
@@ -1063,11 +1063,11 @@
     wasVisible := shown.
     super visibilityChange:how.
     (wasVisible not and:[shown]) ifTrue:[
-        "
-         start checking again
-        "
-        Processor removeTimedBlock:checkBlock.
-        Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
+	"
+	 start checking again
+	"
+	Processor removeTimedBlock:checkBlock.
+	Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
     ]
 
     "Modified: / 18.2.1998 / 17:57:44 / cg"
@@ -1202,74 +1202,74 @@
     |aStream path oldPath wasLazy bos prevCurrentFileName|
 
     self selectedFilesDo:[:fileName |
-        path := currentDirectory filenameFor:fileName.
-        path type == #regular ifTrue:[
-            prevCurrentFileName := currentFileInFileName.
-            currentFileInFileName := fileName.
-
-            (ObjectFileLoader notNil
-            and:[ObjectFileLoader hasValidBinaryExtension:fileName]) ifTrue:[
-                Object abortSignal catch:[
-                    |p|
-
-                    "/
-                    "/ look if already loaded ...  then unload first
-                    "/
-                    p := path pathName.
-                    (ObjectFileLoader loadedObjectFiles includes:p) ifTrue:[
-                        (Dialog confirm:(resources 
-                                            string:'%1 is already loaded; load anyway ?'
-                                            with:p)) ifFalse:[
-                            ^ self
-                        ].
-                        Transcript showCR:'unloading old ' , p , ' ...'.
-                        ObjectFileLoader unloadObjectFile:p. 
-                    ].
-
-                    Transcript showCR:'loading ' , p , ' ...'.
-                    ObjectFileLoader loadObjectFile:p.
-                    Class addInfoRecord:('fileIn ' , fileName) 
-                ]
-            ] ifFalse:[
-                (path hasSuffix:'cls') ifTrue:[
-                    aStream := path readStream.
-                    aStream notNil ifTrue:[
-                        bos := BinaryObjectStorage onOld:aStream.
-                        Class nameSpaceQuerySignal 
-                            answer:Smalltalk
-                            do:[
-                                bos next.
-                            ].
-                        bos close
-                    ]
-                ] ifFalse:[
-                    ((path hasSuffix:'class')
-                    or:[(path hasSuffix:'cla')]) ifTrue:[
-                        JavaClassReader notNil ifTrue:[
-                            JavaClassReader loadFile:(path pathName)
-                        ]
-                    ] ifFalse:[
-                        aStream := path readStream.
-                        aStream notNil ifTrue:[
-                            [
-                                Class withoutUpdatingChangesDo:[
-                                    oldPath := Smalltalk systemPath.
-                                    Smalltalk systemPath:(oldPath copy addFirst:currentDirectory pathName; yourself).
-                                    wasLazy := Compiler compileLazy:lazy.
-                                    aStream fileIn.
-                                ].
-                                Class addInfoRecord:('fileIn ' , fileName) 
-                            ] valueNowOrOnUnwindDo:[
-                                Compiler compileLazy:wasLazy.
-                                Smalltalk systemPath:oldPath.
-                                aStream close
-                            ]
-                        ]
-                    ]
-                ]
-            ]
-        ].
-        currentFileInFileName := prevCurrentFileName
+	path := currentDirectory filenameFor:fileName.
+	path type == #regular ifTrue:[
+	    prevCurrentFileName := currentFileInFileName.
+	    currentFileInFileName := fileName.
+
+	    (ObjectFileLoader notNil
+	    and:[ObjectFileLoader hasValidBinaryExtension:fileName]) ifTrue:[
+		Object abortSignal catch:[
+		    |p|
+
+		    "/
+		    "/ look if already loaded ...  then unload first
+		    "/
+		    p := path pathName.
+		    (ObjectFileLoader loadedObjectFiles includes:p) ifTrue:[
+			(Dialog confirm:(resources 
+					    string:'%1 is already loaded; load anyway ?'
+					    with:p)) ifFalse:[
+			    ^ self
+			].
+			Transcript showCR:'unloading old ' , p , ' ...'.
+			ObjectFileLoader unloadObjectFile:p. 
+		    ].
+
+		    Transcript showCR:'loading ' , p , ' ...'.
+		    ObjectFileLoader loadObjectFile:p.
+		    Class addInfoRecord:('fileIn ' , fileName) 
+		]
+	    ] ifFalse:[
+		(path hasSuffix:'cls') ifTrue:[
+		    aStream := path readStream.
+		    aStream notNil ifTrue:[
+			bos := BinaryObjectStorage onOld:aStream.
+			Class nameSpaceQuerySignal 
+			    answer:Smalltalk
+			    do:[
+				bos next.
+			    ].
+			bos close
+		    ]
+		] ifFalse:[
+		    ((path hasSuffix:'class')
+		    or:[(path hasSuffix:'cla')]) ifTrue:[
+			JavaClassReader notNil ifTrue:[
+			    JavaClassReader loadFile:(path pathName)
+			]
+		    ] ifFalse:[
+			aStream := path readStream.
+			aStream notNil ifTrue:[
+			    [
+				Class withoutUpdatingChangesDo:[
+				    oldPath := Smalltalk systemPath.
+				    Smalltalk systemPath:(oldPath copy addFirst:currentDirectory pathName; yourself).
+				    wasLazy := Compiler compileLazy:lazy.
+				    aStream fileIn.
+				].
+				Class addInfoRecord:('fileIn ' , fileName) 
+			    ] valueNowOrOnUnwindDo:[
+				Compiler compileLazy:wasLazy.
+				Smalltalk systemPath:oldPath.
+				aStream close
+			    ]
+			]
+		    ]
+		]
+	    ]
+	].
+	currentFileInFileName := prevCurrentFileName
     ]
 
     "Modified: / 19.9.1997 / 23:42:22 / stefan"
@@ -1330,18 +1330,18 @@
 
     string := self getFileInfoString:longInfo.
     string notNil ifTrue:[
-        box := InfoBox title:string.
-        updater := [
-            [true] whileTrue:[
-                Delay waitForSeconds:2.
-                string := self getFileInfoString:longInfo.
-                box title:string
-            ] 
-        ] fork.
-
-        box showAtPointer.
-        updater terminate.
-        box destroy
+	box := InfoBox title:string.
+	updater := [
+	    [true] whileTrue:[
+		Delay waitForSeconds:2.
+		string := self getFileInfoString:longInfo.
+		box title:string
+	    ] 
+	] fork.
+
+	box showAtPointer.
+	updater terminate.
+	box destroy
     ]
 !
 
@@ -1387,87 +1387,87 @@
     |items m sel ns subMenu subItems|
 
     items := #(
-                 ('spawn'            fileSpawn        )
-                 ('-'                nil              )  
-                 ('get contents'     fileGet          GotoLine)      
-                 ('insert contents'  fileInsert       )            
-                 ('show info'        fileGetInfo      InspectIt)
-                 ('show full info'   fileGetLongInfo  CmdI)
-               ).
+		 ('spawn'            fileSpawn        )
+		 ('-'                nil              )  
+		 ('get contents'     fileGet          GotoLine)      
+		 ('insert contents'  fileInsert       )            
+		 ('show info'        fileGetInfo      InspectIt)
+		 ('show full info'   fileGetLongInfo  CmdI)
+	       ).
 
     ((ns := Project current defaultNameSpace) notNil 
     and:[ns ~~ Smalltalk]) ifTrue:[
-        items := items copyWith:(Array 
-                                    with:(resources string:'fileIn (into ''%1'')' with:(Project current defaultNameSpace name))
-                                    with:#fileFileIn
-                                    with:#Accept)
+	items := items copyWith:(Array 
+				    with:(resources string:'fileIn (into ''%1'')' with:(Project current defaultNameSpace name))
+				    with:#fileFileIn
+				    with:#Accept)
                                 
     ] ifFalse:[
-        items := items copyWith:#( 'fileIn'  #fileFileIn  #Accept)
+	items := items copyWith:#( 'fileIn'  #fileFileIn  #Accept)
     ].
 
     items := items , #(
-                 ('-'                                                   )
-                 ('update'                    updateCurrentDirectory    Cmdu)
-                 ('-'                                                   )
-                 ('execute unix command ...'  fileExecute               DoIt)
-                 ('st/x tools'                stxTools                  )
-                 ('-'                                                   )
-                 ('remove'                    fileRemove                Delete)
-                 ('rename ...'                fileRename                )
-                 ('-'                                                   )
-                 ('display long list'         changeDisplayMode         )
-                 ('show all files'            changeDotFileVisibility   )
-                 ('encoding ...'              fileEncoding              )
-                 ('-'                                                   )
-                 ('create directory ...'      newDirectory              CmdD)
-                 ('create file ...'           newFile                   CmdF)
-               ).             
+		 ('-'                                                   )
+		 ('update'                    updateCurrentDirectory    Cmdu)
+		 ('-'                                                   )
+		 ('execute unix command ...'  fileExecute               DoIt)
+		 ('st/x tools'                stxTools                  )
+		 ('-'                                                   )
+		 ('remove'                    fileRemove                Delete)
+		 ('rename ...'                fileRename                )
+		 ('-'                                                   )
+		 ('display long list'         changeDisplayMode         )
+		 ('show all files'            changeDotFileVisibility   )
+		 ('encoding ...'              fileEncoding              )
+		 ('-'                                                   )
+		 ('create directory ...'      newDirectory              CmdD)
+		 ('create file ...'           newFile                   CmdF)
+	       ).             
 
     m := PopUpMenu 
-            itemList:items
-            resources:resources.
+	    itemList:items
+	    resources:resources.
 
     showingHiddenFiles value "showDotFiles" ifTrue:[
-        m labelAt:#changeDotFileVisibility put:(resources string:'hide hidden files')
+	m labelAt:#changeDotFileVisibility put:(resources string:'hide hidden files')
     ].
     showingDetails value "showLongList" ifTrue:[
-        m labelAt:#changeDisplayMode put:(resources string:'display short list')
+	m labelAt:#changeDisplayMode put:(resources string:'display short list')
     ].
 
     items := #(
-                              ('Changes browser'       openChangesBrowser  )
-                              ('Editor'                openEditor          )
-                              ('HTML reader'           openHTMLReader      )
-                              ('Image inspect'         openImageInspector  )
-                              ('show file differences' openDiffView        )
-                  ).
+			      ('Changes browser'       openChangesBrowser  )
+			      ('Editor'                openEditor          )
+			      ('HTML reader'           openHTMLReader      )
+			      ('Image inspect'         openImageInspector  )
+			      ('show file differences' openDiffView        )
+		  ).
 
     OperatingSystem isUNIXlike ifTrue:[
-        items := items , #( ('terminal'              openTerminal )).
+	items := items , #( ('terminal'              openTerminal )).
     ].
 
     JavaInterpreter notNil ifTrue:[
-        items := items , #( ('Java Applet Viewer' openAppletViewer)).
+	items := items , #( ('Java Applet Viewer' openAppletViewer)).
     ].
 
     m subMenuAt:#stxTools 
-            put:(PopUpMenu
-                    itemList:items
-                    resources:resources).
+	    put:(PopUpMenu
+		    itemList:items
+		    resources:resources).
 
     ((sel := fileListView selection) isNil 
     or:[sel isEmpty]) ifTrue:[
-        m disableAll:#(fileGet fileInsert
-                       fileGetInfo fileGetLongInfo
-                       fileFileIn fileFileInLazy
-                       fileRemove fileRename).
-        (m subMenuAt:#stxTools)
-            disableAll:#(openChangesBrowser openEditor openHTMLReader openImageInspector)
+	m disableAll:#(fileGet fileInsert
+		       fileGetInfo fileGetLongInfo
+		       fileFileIn fileFileInLazy
+		       fileRemove fileRename).
+	(m subMenuAt:#stxTools)
+	    disableAll:#(openChangesBrowser openEditor openHTMLReader openImageInspector)
     ] ifFalse:[
-        fileListView selection size > 1 ifTrue:[
-            m disableAll:#( fileGet fileInsert fileGetInfo fileGetLongInfo fileRename )
-        ]
+	fileListView selection size > 1 ifTrue:[
+	    m disableAll:#( fileGet fileInsert fileGetInfo fileGetLongInfo fileRename )
+	]
     ].
 
     ^m
@@ -1575,15 +1575,15 @@
     |img path|
 
     self selectedFilesDo:[:fileName |
-        path := currentDirectory filenameFor:fileName.
-        path isDirectory ifFalse:[
-            img := Image fromFile:(path pathName).
-            img notNil ifTrue:[
-                img perform:aSelector
-            ] ifFalse:[
-                self warn:'unknown format: ' , fileName
-            ]
-        ]
+	path := currentDirectory filenameFor:fileName.
+	path isDirectory ifFalse:[
+	    img := Image fromFile:(path pathName).
+	    img notNil ifTrue:[
+		img perform:aSelector
+	    ] ifFalse:[
+		self warn:'unknown format: ' , fileName
+	    ]
+	]
     ].
 
     "Modified: / 17.9.1995 / 17:41:24 / claus"
@@ -1633,9 +1633,9 @@
 
     orgName1 := ''.
     (sel size > 0) ifTrue:[
-        (currentDirectory construct:sel) isDirectory ifFalse:[
-            orgName1 := sel
-        ]
+	(currentDirectory construct:sel) isDirectory ifFalse:[
+	    orgName1 := sel
+	]
     ].
 
     name1 := orgName1 asValue.
@@ -1650,45 +1650,45 @@
     box addAbortButton; addOkButton.
 
     orgName1 size > 0 ifTrue:[
-        box focusOnField:if2.
+	box focusOnField:if2.
     ].
     box showAtPointer.
 
     box accepted ifTrue:[
-        name1 := name1 value.
-        (name1 size == 0) ifTrue:[
-            err := 'no name entered'.
-        ] ifFalse:[
-            f1 := name1 asFilename.
-            name2 := name2 value.
-            (name2 size == 0) ifTrue:[
-                err := 'no name entered'.
-            ] ifFalse:[
-                f2 := name2 asFilename.
-                f2 exists ifTrue:[
-                    err := '''%2'' already exists'.
-                ] ifFalse:[
-                    f1 exists ifFalse:[
-                        err := '''%1'' does not exist'.
-                    ] ifTrue:[
-                        f1 isDirectory ifTrue:[
-                            err := '''%1'' is a directory'.
-                        ] ifFalse:[
-                            ErrorSignal handle:[:ex |
-                                err := ex errorString
-                            ] do:[
-                                OperatingSystem createHardLinkFrom:name1 to:name2
-                            ]
-                        ]
-                    ]
-                ]
-            ]
-        ].
-
-        err notNil ifTrue:[
-            self warn:(resources string:err with:(name1 ? '') asText allBold with:(name2 ? '') asText allBold).
-            ^ self
-        ].
+	name1 := name1 value.
+	(name1 size == 0) ifTrue:[
+	    err := 'no name entered'.
+	] ifFalse:[
+	    f1 := name1 asFilename.
+	    name2 := name2 value.
+	    (name2 size == 0) ifTrue:[
+		err := 'no name entered'.
+	    ] ifFalse:[
+		f2 := name2 asFilename.
+		f2 exists ifTrue:[
+		    err := '''%2'' already exists'.
+		] ifFalse:[
+		    f1 exists ifFalse:[
+			err := '''%1'' does not exist'.
+		    ] ifTrue:[
+			f1 isDirectory ifTrue:[
+			    err := '''%1'' is a directory'.
+			] ifFalse:[
+			    ErrorSignal handle:[:ex |
+				err := ex errorString
+			    ] do:[
+				OperatingSystem createHardLinkFrom:name1 to:name2
+			    ]
+			]
+		    ]
+		]
+	    ]
+	].
+
+	err notNil ifTrue:[
+	    self warn:(resources string:err with:(name1 ? '') asText allBold with:(name2 ? '') asText allBold).
+	    ^ self
+	].
     ].
 
     "Modified: / 13.8.1998 / 21:47:01 / cg"
@@ -1703,7 +1703,7 @@
 
     orgName1 := ''.
     (sel size > 0) ifTrue:[
-        orgName1 := sel
+	orgName1 := sel
     ].
 
     name1 := orgName1 asValue.
@@ -1718,40 +1718,40 @@
     box addAbortButton; addOkButton.
 
     orgName1 size > 0 ifTrue:[
-        box focusOnField:if2.
+	box focusOnField:if2.
     ].
     box showAtPointer.
 
     box accepted ifTrue:[
-        name1 := name1 value.
-        (name1 size == 0) ifTrue:[
-            err := 'no name entered'.
-        ] ifFalse:[
-            f1 := name1 asFilename.
-            name2 := name2 value.
-            (name2 size == 0) ifTrue:[
-                err := 'no name entered'.
-            ] ifFalse:[
-                f2 := name2 asFilename.
-                f2 exists ifTrue:[
-                    err := '''%2'' already exists'.
-                ] ifFalse:[
-                    f1 exists ifFalse:[
-                        err := '''%1'' does not exist (link created anyway)'.
-                    ].
-                    ErrorSignal handle:[:ex |
-                        err := ex errorString
-                    ] do:[
-                        OperatingSystem createSymbolicLinkFrom:name1 to:name2
-                    ]
-                ]
-            ]
-        ].
-
-        err notNil ifTrue:[
-            self warn:(resources string:err with:(name1 ? '') asText allBold with:(name2 ? '') asText allBold).
-            ^ self
-        ].
+	name1 := name1 value.
+	(name1 size == 0) ifTrue:[
+	    err := 'no name entered'.
+	] ifFalse:[
+	    f1 := name1 asFilename.
+	    name2 := name2 value.
+	    (name2 size == 0) ifTrue:[
+		err := 'no name entered'.
+	    ] ifFalse:[
+		f2 := name2 asFilename.
+		f2 exists ifTrue:[
+		    err := '''%2'' already exists'.
+		] ifFalse:[
+		    f1 exists ifFalse:[
+			err := '''%1'' does not exist (link created anyway)'.
+		    ].
+		    ErrorSignal handle:[:ex |
+			err := ex errorString
+		    ] do:[
+			OperatingSystem createSymbolicLinkFrom:name1 to:name2
+		    ]
+		]
+	    ]
+	].
+
+	err notNil ifTrue:[
+	    self warn:(resources string:err with:(name1 ? '') asText allBold with:(name2 ? '') asText allBold).
+	    ^ self
+	].
     ].
 
     "Modified: / 13.8.1998 / 21:26:59 / cg"
@@ -1805,11 +1805,11 @@
     (sel size > 0
     and:[lastFileDiffDirectory notNil
     and:[lastFileDiffDirectory asFilename isDirectory]]) ifTrue:[
-        f := lastFileDiffDirectory asFilename construct:sel.
-        (f exists
-        and:[f isReadable]) ifTrue:[
-            orgName1 := f name
-        ]
+	f := lastFileDiffDirectory asFilename construct:sel.
+	(f exists
+	and:[f isReadable]) ifTrue:[
+	    orgName1 := f name
+	]
     ].
 
     name1 := orgName1 asValue.
@@ -1827,57 +1827,57 @@
     box showAtPointer.
 
     box accepted ifTrue:[
-        name1 := name1 value.
-        (name1 isNil or:[name1 isEmpty]) ifTrue:[
-            text1 := subView contents.
-            name1 := nil.
-            l1 := 'browser contents'
-        ] ifFalse:[
-            name1 := currentDirectory filenameFor:name1.
-            name1 isReadable ifFalse:[
-                nm := name1.
-                name1 exists ifFalse:[
-                    err := '%1 does not exist'.
-                ] ifTrue:[
-                    err := '%1 is not readable'
-                ].
-            ].
-            l1 := name1 pathName
-        ].
-
-        name2 := currentDirectory filenameFor:name2 value.
-        err isNil ifTrue:[
-            name2 isReadable ifFalse:[
-                nm := name2.
-                name2 exists ifFalse:[
-                    err := '%1 does not exist'.
-                ] ifTrue:[
-                    err := '%1 is not readable'
-                ].
-            ].
-        ].
-        err notNil ifTrue:[
-            self warn:(resources string:err with:nm pathName).
-            ^ self
-        ].
-
-        self withWaitCursorDo:[
-            (name1 notNil and:[name1 name ~= orgName1]) ifTrue:[
-                lastFileDiffDirectory := name1 directoryName
-            ].
-            name1 notNil ifTrue:[
-                text1 := name1 contents.
-            ].
-            text2 := name2 contents.
-            text1 = text2 ifTrue:[
-                self information:'same contents'
-            ] ifFalse:[
-                d := DiffTextView 
-                        openOn:text1 label:l1
-                        and:text2 label:name2 pathName.
-                d label:'file differences'.
-            ]
-        ]
+	name1 := name1 value.
+	(name1 isNil or:[name1 isEmpty]) ifTrue:[
+	    text1 := subView contents.
+	    name1 := nil.
+	    l1 := 'browser contents'
+	] ifFalse:[
+	    name1 := currentDirectory filenameFor:name1.
+	    name1 isReadable ifFalse:[
+		nm := name1.
+		name1 exists ifFalse:[
+		    err := '%1 does not exist'.
+		] ifTrue:[
+		    err := '%1 is not readable'
+		].
+	    ].
+	    l1 := name1 pathName
+	].
+
+	name2 := currentDirectory filenameFor:name2 value.
+	err isNil ifTrue:[
+	    name2 isReadable ifFalse:[
+		nm := name2.
+		name2 exists ifFalse:[
+		    err := '%1 does not exist'.
+		] ifTrue:[
+		    err := '%1 is not readable'
+		].
+	    ].
+	].
+	err notNil ifTrue:[
+	    self warn:(resources string:err with:nm pathName).
+	    ^ self
+	].
+
+	self withWaitCursorDo:[
+	    (name1 notNil and:[name1 name ~= orgName1]) ifTrue:[
+		lastFileDiffDirectory := name1 directoryName
+	    ].
+	    name1 notNil ifTrue:[
+		text1 := name1 contents.
+	    ].
+	    text2 := name2 contents.
+	    text1 = text2 ifTrue:[
+		self information:'same contents'
+	    ] ifFalse:[
+		d := DiffTextView 
+			openOn:text1 label:l1
+			and:text2 label:name2 pathName.
+		d label:'file differences'.
+	    ]
+	]
     ].
 
     "Created: / 7.12.1995 / 20:33:58 / cg"
@@ -1951,25 +1951,25 @@
     "depending on the showLongList setting, show or hde the tabSpec view"
 
     showingDetails value "showLongList" ifTrue:[
-        tabRulerView isNil ifTrue:[
-            self createTabRulerIn:scrollView superView.
-        ].
-        tabRulerView beVisible.
+	tabRulerView isNil ifTrue:[
+	    self createTabRulerIn:scrollView superView.
+	].
+	tabRulerView beVisible.
         
-        false "self is3D" ifTrue:[
-            scrollView topInset:(tabRulerView superView height).
-            tabRulerView superView leftInset:(fileListView originRelativeTo:scrollView) x.
-        ] ifFalse:[
-            scrollView topInset:(tabRulerView height).
-            tabRulerView leftInset:(fileListView originRelativeTo:scrollView) x.
-        ].
-        tabRulerView hiddenTabs:#(1).
-        tabRulerView fixedTabs:#(1).
+	false "self is3D" ifTrue:[
+	    scrollView topInset:(tabRulerView superView height).
+	    tabRulerView superView leftInset:(fileListView originRelativeTo:scrollView) x.
+	] ifFalse:[
+	    scrollView topInset:(tabRulerView height).
+	    tabRulerView leftInset:(fileListView originRelativeTo:scrollView) x.
+	].
+	tabRulerView hiddenTabs:#(1).
+	tabRulerView fixedTabs:#(1).
     ] ifFalse:[
-        tabRulerView notNil ifTrue:[
-            tabRulerView beInvisible.
-        ].
-        scrollView topInset:0
+	tabRulerView notNil ifTrue:[
+	    tabRulerView beInvisible.
+	].
+	scrollView topInset:0
     ].
     tabSpec := nil.
 
@@ -2009,15 +2009,15 @@
     |v|
 
     false "self is3D" ifTrue:[
-        v := View in:topFrame.
-        v level:-1.
-        tabRulerView := TabSpecRuler in:v.
-        tabRulerView level:1.
-        v origin:(0.0@0.0) corner:(1.0@10).
-        tabRulerView origin:(0.0@0.0) corner:(1.0@1.0).
+	v := View in:topFrame.
+	v level:-1.
+	tabRulerView := TabSpecRuler in:v.
+	tabRulerView level:1.
+	v origin:(0.0@0.0) corner:(1.0@10).
+	tabRulerView origin:(0.0@0.0) corner:(1.0@1.0).
     ] ifFalse:[
-        tabRulerView := TabSpecRuler in:topFrame.
-        tabRulerView origin:(0.0@0.0) corner:(1.0@10).
+	tabRulerView := TabSpecRuler in:topFrame.
+	tabRulerView origin:(0.0@0.0) corner:(1.0@10).
     ].
     tabRulerView borderWidth:0.
     tabRulerView synchronousOperation:true.
@@ -2102,20 +2102,20 @@
     lockUpdate := false.
 
     CommandHistory isNil ifTrue:[
-        CommandHistory := OrderedCollection new.
-        CommandHistorySize := 50
+	CommandHistory := OrderedCollection new.
+	CommandHistorySize := 50
     ].
     DirectoryHistory isNil ifTrue:[
-        DirectoryHistory := OrderedCollection new.
-        DirectoryHistoryWhere := OrderedCollection new.
-        HistorySize := 15.
+	DirectoryHistory := OrderedCollection new.
+	DirectoryHistoryWhere := OrderedCollection new.
+	HistorySize := 15.
     ].
     commandIndex := 0.
 
     icons := Dictionary new.
 
     Icons isNil ifTrue:[
-        self class initializeIcons
+	self class initializeIcons
     ].
 
     myName := (resources string:self class name).
@@ -2130,13 +2130,13 @@
     menuPanel origin:(0.0 @ 0.0) corner:(1.0 @ (mH)).
 
     labelFrame := View 
-                        origin:(0.0 @ mH)
-                        corner:(1.0 @ (font height * 1.8 + mH) rounded)
-                        in:self.
+			origin:(0.0 @ mH)
+			corner:(1.0 @ (font height * 1.8 + mH) rounded)
+			in:self.
 
     (styleSheet name = #st80 or:[styleSheet name == #win95]) ifTrue:[
-        labelFrame level:1.
-        labelFrame rightInset:-1.
+	labelFrame level:1.
+	labelFrame rightInset:-1.
     ].
 
     spacing := ViewSpacing.
@@ -2155,8 +2155,8 @@
     filterModel := '*' asValue.
     filterField := EditField in:labelFrame.
     filterField 
-        origin:[((width // 4 * 3) + halfSpacing) @ (halfSpacing)]
-        corner:(1.0 @ (filterField heightIncludingBorder + halfSpacing) ).
+	origin:[((width // 4 * 3) + halfSpacing) @ (halfSpacing)]
+	corner:(1.0 @ (filterField heightIncludingBorder + halfSpacing) ).
     filterField rightInset:(ViewSpacing - halfSpacing).
     filterField model:filterModel.
 
@@ -2180,14 +2180,14 @@
 
     labelView := FilenameEditField in:labelFrame.
     labelView 
-        origin:(halfSpacing @ (halfSpacing))
-        extent:[((width // 4 * 3) - spacing - borderWidth)
-                @
-                (filterField heightIncludingBorder)
-                "(font height + font descent)"
-               ].
+	origin:(halfSpacing @ (halfSpacing))
+	extent:[((width // 4 * 3) - spacing - borderWidth)
+		@
+		(filterField heightIncludingBorder)
+		"(font height + font descent)"
+	       ].
     labelView menu:#labelMenu; 
-            aspect:#path; changeMessage:#pathChanged:.
+	    aspect:#path; changeMessage:#pathChanged:.
     labelView model:self.
     labelView backgroundColor:(labelFrame viewBackground).
     labelFrame model:self; menu:#labelMenu.
@@ -2223,7 +2223,7 @@
     frame := VariableVerticalPanel origin:0.0@mH corner:1.0@1.0 in:self.
     frame topInset:labelFrame height.
     commandView notNil ifTrue:[
-        frame bottomInset:(commandView height + spacing + spacing)
+	frame bottomInset:(commandView height + spacing + spacing)
     ].
 
     topFrame := View in:frame.
@@ -2245,20 +2245,20 @@
     fileListView menuHolder:self; menuPerformer:self; menuMessage:#fileListMenu.
     fileListView allowDrag:true.
     fileListView dragObjectConverter:[:obj | 
-                                        |dir nm path idx|
-
-                                        nm := obj theObject asString.
-                                        idx := fileListView list indexOf:nm.
-                                        idx == 0 ifTrue:[
-                                            "/ cannot happen ...
-                                            nil
-                                        ] ifFalse:[
-                                            nm := fileList at:idx.
-                                            dir := currentDirectory pathName asFilename.
-                                            path := dir constructString:nm.
-                                            DropObject newFile:path.
-                                        ]
-                                     ].
+					|dir nm path idx|
+
+					nm := obj theObject asString.
+					idx := fileListView list indexOf:nm.
+					idx == 0 ifTrue:[
+					    "/ cannot happen ...
+					    nil
+					] ifFalse:[
+					    nm := fileList at:idx.
+					    dir := currentDirectory pathName asFilename.
+					    path := dir constructString:nm.
+					    DropObject newFile:path.
+					]
+				     ].
 
     "/ sigh - must be delayed - origin is not yet fixe
 "/    tabRulerView leftInset:(fileListView originRelativeTo:scrollView) x.
@@ -2269,7 +2269,7 @@
     v origin:(0.0 @ 0.3) corner:(1.0 @ 1.0).
     subView := v scrolledView.
     (subView respondsTo:#directoryForFileDialog:) ifTrue:[
-        subView directoryForFileDialog:currentDirectory
+	subView directoryForFileDialog:currentDirectory
     ].
 
 "/    buttonPanel := HorizontalPanelView in:self.
@@ -2403,15 +2403,15 @@
     "copy fileList to the clipBoard"
 
     self setTextSelection:(fileListView list 
-                              collect:[:l | |ll|
-                                        ll := l string withoutSeparators.
-                                        (ll endsWith:' ...') ifTrue:[
-                                            ll copyWithoutLast:4
-                                        ] ifFalse:[
-                                            ll
-                                        ]
-                                      ]) 
-                                asStringCollection asString.
+			      collect:[:l | |ll|
+					ll := l string withoutSeparators.
+					(ll endsWith:' ...') ifTrue:[
+					    ll copyWithoutLast:4
+					] ifFalse:[
+					    ll
+					]
+				      ]) 
+				asStringCollection asString.
 
     "Modified: / 17.8.1998 / 10:13:10 / cg"
 !
@@ -2452,17 +2452,17 @@
     msg := '\' withCRs , myClass name asBoldText, rev.
 
     AboutBox isNil ifTrue:[
-        "/ this handles bad installations of ST/X,
-        "/ where the AboutBox is missing.
-        "/ (May vanish in the future)
-        ^ self information:msg
+	"/ this handles bad installations of ST/X,
+	"/ where the AboutBox is missing.
+	"/ (May vanish in the future)
+	^ self information:msg
     ].
 
     box := AboutBox title:msg.
 
     image := self class defaultIcon.
     image notNil ifTrue:[
-        box image:image
+	box image:image
     ].
     box   label:'About This Application'.
     box   autoHideAfter:10 with:[].
@@ -2513,10 +2513,10 @@
     "exit FileBrowser"
 
     (self askIfModified:'contents has not been saved.\\Modifications will be lost when FileBrowser is closed.'
-              yesButton:'close') 
+	      yesButton:'close') 
     ifTrue:[
-        "/ self windowGroup closeDownViews.
-        super closeRequest
+	"/ self windowGroup closeDownViews.
+	super closeRequest
     ]
 
     "Created: / 3.8.1998 / 19:55:06 / cg"
@@ -2618,7 +2618,7 @@
     "sent from label menu to change back to a previous directory"
 
     self discardChangesDialog ifTrue:[
-        self doChangeCurrentDirectoryTo:aDirectoryName updateHistory:true "/false.
+	self doChangeCurrentDirectoryTo:aDirectoryName updateHistory:true "/false.
     ].
 
     "Modified: / 2.10.1997 / 14:09:24 / stefan"
@@ -2687,62 +2687,62 @@
     |items menu currentIndex|
 
     items := #(
-                   ('copy path'                   copyPath                  )
-                   ('-'                                                     )
-                   ('up'                          changeToParentDirectory   )
-                   ('back'                        changeToPreviousDirectory )
-                   ('change to home-directory'    changeToHomeDirectory     )
-                   ('change to default-directory' changeToDefaultDirectory  )
-                   ('change directory ...'        changeCurrentDirectory    )
-               ).             
+		   ('copy path'                   copyPath                  )
+		   ('-'                                                     )
+		   ('up'                          changeToParentDirectory   )
+		   ('back'                        changeToPreviousDirectory )
+		   ('change to home-directory'    changeToHomeDirectory     )
+		   ('change to default-directory' changeToDefaultDirectory  )
+		   ('change directory ...'        changeCurrentDirectory    )
+	       ).             
 
     (JavaClassReader notNil and:[JavaClassReader isLoaded]) ifTrue:[
-        items := items , #(
-                            ( '-')
-                            ( 'add to JavaClassPath'       addDirToJavaClassPath)
-                            ( 'add to JavaSourcePath'      addDirToJavaSourcePath)
-                            ( 'remove from JavaClassPath'  removeDirFromJavaClassPath)
-                            ( 'remove from JavaSourcePath' removeDirFromJavaSourcePath)
-                          ).
+	items := items , #(
+			    ( '-')
+			    ( 'add to JavaClassPath'       addDirToJavaClassPath)
+			    ( 'add to JavaSourcePath'      addDirToJavaSourcePath)
+			    ( 'remove from JavaClassPath'  removeDirFromJavaClassPath)
+			    ( 'remove from JavaSourcePath' removeDirFromJavaSourcePath)
+			  ).
     ].
 
     DirectoryHistory size > 0 ifTrue:[
-        items := items copyWith:#('-').
-        items := items ,
-                 (DirectoryHistory 
-                        collect:[:dirName |
-                                    Array 
-                                        with:dirName 
-                                        with:#changeDirectoryTo:
-                                        with:nil
-                                        with:dirName
-                                ]
-                 ).
-        currentIndex := items findFirst:[:i | (i at:1) = currentDirectory pathName].
-        currentIndex == 0 ifTrue:[currentIndex := nil].
+	items := items copyWith:#('-').
+	items := items ,
+		 (DirectoryHistory 
+			collect:[:dirName |
+				    Array 
+					with:dirName 
+					with:#changeDirectoryTo:
+					with:nil
+					with:dirName
+				]
+		 ).
+	currentIndex := items findFirst:[:i | (i at:1) = currentDirectory pathName].
+	currentIndex == 0 ifTrue:[currentIndex := nil].
     ].
 
     menu := PopUpMenu 
-                itemList:items
-                resources:resources.
+		itemList:items
+		resources:resources.
 
     previousDirectory isNil ifTrue:[
-        menu disable:#changeToPreviousDirectory.
+	menu disable:#changeToPreviousDirectory.
     ].
     currentIndex notNil ifTrue:[
-        menu disable:currentIndex
+	menu disable:currentIndex
     ].
     (JavaClassReader notNil and:[JavaClassReader isLoaded]) ifTrue:[
-        (Java classPath includes:currentDirectory pathName) ifTrue:[
-            menu disable:#addDirToJavaClassPath
-        ] ifFalse:[
-            menu disable:#removeDirFromJavaClassPath
-        ].
-        (Java sourcePath includes:currentDirectory pathName) ifTrue:[
-            menu disable:#addDirToJavaSourcePath
-        ] ifFalse:[
-            menu disable:#removeDirFromJavaSourcePath
-        ].
+	(Java classPath includes:currentDirectory pathName) ifTrue:[
+	    menu disable:#addDirToJavaClassPath
+	] ifFalse:[
+	    menu disable:#removeDirFromJavaClassPath
+	].
+	(Java sourcePath includes:currentDirectory pathName) ifTrue:[
+	    menu disable:#addDirToJavaSourcePath
+	] ifFalse:[
+	    menu disable:#removeDirFromJavaSourcePath
+	].
     ].
     ^menu.
 
@@ -2843,12 +2843,12 @@
     osName := OperatingSystem platformName.
 
     box := FilenameEnterBox 
-                title:(resources string:'execute %1 command:' with:osName)
-               okText:(resources string:'execute')
-               action:aBlock.
+		title:(resources string:'execute %1 command:' with:osName)
+	       okText:(resources string:'execute')
+	       action:aBlock.
 
     fileName notNil ifTrue:[
-        self initialCommandFor:fileName into:box.
+	self initialCommandFor:fileName into:box.
     ].
     box directory:currentDirectory.
     box showAtPointer.
@@ -2907,11 +2907,11 @@
 
     sel := fileListView selection.
     sel notNil ifTrue:[
-        self withWaitCursorDo:[
-            sel do:[:aSelectionIndex |
-                aBlock value:(fileList at:aSelectionIndex )
-            ]
-        ]
+	self withWaitCursorDo:[
+	    sel do:[:aSelectionIndex |
+		aBlock value:(fileList at:aSelectionIndex )
+	    ]
+	]
     ]
 
     "Modified: / 18.6.1998 / 15:29:06 / cg"
@@ -2947,18 +2947,18 @@
 
     newCollection := aCollection species new.
     aCollection do:[:fname |
-        |ignore|
-
-        ignore := false.
-
-        ((fname startsWith:'.') and:[fname ~= '..']) ifTrue:[
-            showingHiddenFiles value "showDotFiles" ifFalse:[
-                ignore := true
-            ]
-        ].
-        ignore ifFalse:[
-            newCollection add:fname
-        ]
+	|ignore|
+
+	ignore := false.
+
+	((fname startsWith:'.') and:[fname ~= '..']) ifTrue:[
+	    showingHiddenFiles value "showDotFiles" ifFalse:[
+		ignore := true
+	    ]
+	].
+	ignore ifFalse:[
+	    newCollection add:fname
+	]
     ].
     ^ newCollection
 
@@ -3021,13 +3021,13 @@
      kill will make me raise the stopSignal when pressed
     "
     killButton 
-        action:[
-            stream notNil ifTrue:[
-                access critical:[
-                    myProcess interruptWith:[stopSignal raiseRequest].
-                ]
-            ]
-        ].
+	action:[
+	    stream notNil ifTrue:[
+		access critical:[
+		    myProcess interruptWith:[stopSignal raiseRequest].
+		]
+	    ]
+	].
 
     "
      pause makes me stop reading the commands output
@@ -3035,11 +3035,11 @@
     pauseHolder := false asValue.
     pauseToggle model:pauseHolder.
     pauseToggle pressAction:[
-        stream notNil ifTrue:[
-            access critical:[
-                myProcess interruptWith:[pauseSignal raiseRequest].
-            ]
-        ]
+	stream notNil ifTrue:[
+	    access critical:[
+		myProcess interruptWith:[pauseSignal raiseRequest].
+	    ]
+	]
     ].
 
 
@@ -3063,177 +3063,177 @@
     self label:(myName , ': executing ' , (command copyTo:(20 min:command size)) , ' ...').
     [
       self withWaitCursorDo:[
-        stopSignal catch:[
-            pauseSignal handle:[:ex|
-                |noPauseSema|
-
-                "/    
-                "/ allow interaction with
-                "/ the codeView via the other windowGroup
-                "/
-                lowerFrameView windowGroup:(killButton windowGroup).
-
-                "/
-                "/ wait for pause to be turned off
-                "/
-                noPauseSema := Semaphore new.
-                pauseHolder onChangeSend:#signal to:noPauseSema.
-                noPauseSema wait.
-
-                "/    
-                "/ no interaction with the codeView ...
-                "/
-                lowerFrameView windowGroup:(self windowGroup).
-                ex proceed.
-            ] do:[
-                startLine := subView cursorLine.
-                startCol := subView cursorCol.
-
-                "
-                 this can be a time consuming operation; therefore lower my priority
-                "
-                myProcess := Processor activeProcess.
-                myPriority := myProcess priority.
-                myProcess priority:(Processor userBackgroundPriority).
-
-                stream := PipeStream 
-                            readingFrom:command
-                            errorDisposition:#inline
-                            inDirectory:currentDirectory.
-                stream notNil ifTrue:[
-                    [
-                        |codeView lines noPauseSema enc|
-
-                        enc := fileEncoding.
-                        enc == #iso8859 ifTrue:[
-                            enc := nil
-                        ].
-
-                        stream buffered:true.
-                        codeView := subView.
-                        codeView unselect.
-
-                        replace ifTrue:[
-                            codeView list:nil.
-                            lnr := 1.
-                        ].
-
-                        stillReplacing := replace.
-
-                        [stream readWait. stream atEnd] whileFalse:[
-                            "
-                             data available; read up to 100 lines
-                             and insert as a single junk. This speeds up
-                             display of long output (less line-scrolling).
-                            "
-                            lines := OrderedCollection new:100.
-
-                            [
-                                line := stream nextLine.
-                                line notNil ifTrue:[
-                                    enc notNil ifTrue:[
-                                        line := line decodeFrom:enc
-                                    ].
-                                    lines add:line
-                                ].
-                            ] doWhile:[
-                                stream canReadWithoutBlocking
-                                and:[stream atEnd not
-                                and:[lines size < 100]]
-                            ]. 
-
-                            "
-                             need this critical section; otherwise,
-                             we could get the signal while waiting for
-                             an expose event ...
-                            "
-                            access critical:[                        
-                                lines size > 0 ifTrue:[
-                                    stillReplacing ifTrue:[
-                                        lines do:[:line |
-                                            codeView at:lnr put:line withTabsExpanded.
-                                            codeView cursorToBottom; cursorDown:1.
-                                            lnr := lnr + 1.
-                                            lnr > codeView list size ifTrue:[
-                                                stillReplacing := false
-                                            ]
-                                        ].
-                                    ] ifFalse:[
-                                        codeView insertLines:lines before:codeView cursorLine.
-                                        codeView cursorDown:lines size.
-                                    ]
-                                ].
-                            ].
-
-                            "
-                             give others running at same prio a chance too
-                             (especially other FileBrowsers doing the same)
-                            "
-                            Processor yield
-                        ].
-                    ] valueNowOrOnUnwindDo:[
-                        stream shutDown "close". stream := nil.
-                    ].
-
-                    "/
-                    "/ the command could have changed the directory
-                    "/
-                    self updateCurrentDirectoryIfChanged
-                ].
-                replace ifTrue:[
-                    subView modified:false.
-                ].
-            ]
-        ]
+	stopSignal catch:[
+	    pauseSignal handle:[:ex|
+		|noPauseSema|
+
+		"/    
+		"/ allow interaction with
+		"/ the codeView via the other windowGroup
+		"/
+		lowerFrameView windowGroup:(killButton windowGroup).
+
+		"/
+		"/ wait for pause to be turned off
+		"/
+		noPauseSema := Semaphore new.
+		pauseHolder onChangeSend:#signal to:noPauseSema.
+		noPauseSema wait.
+
+		"/    
+		"/ no interaction with the codeView ...
+		"/
+		lowerFrameView windowGroup:(self windowGroup).
+		ex proceed.
+	    ] do:[
+		startLine := subView cursorLine.
+		startCol := subView cursorCol.
+
+		"
+		 this can be a time consuming operation; therefore lower my priority
+		"
+		myProcess := Processor activeProcess.
+		myPriority := myProcess priority.
+		myProcess priority:(Processor userBackgroundPriority).
+
+		stream := PipeStream 
+			    readingFrom:command
+			    errorDisposition:#inline
+			    inDirectory:currentDirectory.
+		stream notNil ifTrue:[
+		    [
+			|codeView lines noPauseSema enc|
+
+			enc := fileEncoding.
+			enc == #iso8859 ifTrue:[
+			    enc := nil
+			].
+
+			stream buffered:true.
+			codeView := subView.
+			codeView unselect.
+
+			replace ifTrue:[
+			    codeView list:nil.
+			    lnr := 1.
+			].
+
+			stillReplacing := replace.
+
+			[stream readWait. stream atEnd] whileFalse:[
+			    "
+			     data available; read up to 100 lines
+			     and insert as a single junk. This speeds up
+			     display of long output (less line-scrolling).
+			    "
+			    lines := OrderedCollection new:100.
+
+			    [
+				line := stream nextLine.
+				line notNil ifTrue:[
+				    enc notNil ifTrue:[
+					line := line decodeFrom:enc
+				    ].
+				    lines add:line
+				].
+			    ] doWhile:[
+				stream canReadWithoutBlocking
+				and:[stream atEnd not
+				and:[lines size < 100]]
+			    ]. 
+
+			    "
+			     need this critical section; otherwise,
+			     we could get the signal while waiting for
+			     an expose event ...
+			    "
+			    access critical:[                        
+				lines size > 0 ifTrue:[
+				    stillReplacing ifTrue:[
+					lines do:[:line |
+					    codeView at:lnr put:line withTabsExpanded.
+					    codeView cursorToBottom; cursorDown:1.
+					    lnr := lnr + 1.
+					    lnr > codeView list size ifTrue:[
+						stillReplacing := false
+					    ]
+					].
+				    ] ifFalse:[
+					codeView insertLines:lines before:codeView cursorLine.
+					codeView cursorDown:lines size.
+				    ]
+				].
+			    ].
+
+			    "
+			     give others running at same prio a chance too
+			     (especially other FileBrowsers doing the same)
+			    "
+			    Processor yield
+			].
+		    ] valueNowOrOnUnwindDo:[
+			stream shutDown "close". stream := nil.
+		    ].
+
+		    "/
+		    "/ the command could have changed the directory
+		    "/
+		    self updateCurrentDirectoryIfChanged
+		].
+		replace ifTrue:[
+		    subView modified:false.
+		].
+	    ]
+	]
       ]
     ] valueNowOrOnUnwindDo:[
-        |wg|
-
-        self label:myName; iconLabel:myName.
-        myProcess notNil ifTrue:[myProcess priority:myPriority].
-
-        "
-         hide the button, and make sure it will stay
-         hidden when we are realized again
-        "
-        killButton beInvisible.
-        pauseToggle beInvisible.
-
-        commandView beVisible.
-
-        "
-         remove the killButton from its group
-         (otherwise, it will be destroyed when we shut down the group)
-        "
-        wg := killButton windowGroup.
-        killButton windowGroup:nil.
-        pauseToggle windowGroup:nil.
-
-        "
-         shut down the kill buttons windowgroup
-        "
-        wg notNil ifTrue:[
-            wg process terminate.
-        ].
-        "
-         clear its action (actually not needed, but
-         releases reference to thisContext earlier)
-        "
-        killButton action:nil.
-        pauseToggle pressAction:nil.
-        "/    
-        "/ allow interaction with the codeView
-        "/ (bring it back into my group)
-        "/
-        lowerFrameView windowGroup:(self windowGroup).
+	|wg|
+
+	self label:myName; iconLabel:myName.
+	myProcess notNil ifTrue:[myProcess priority:myPriority].
+
+	"
+	 hide the button, and make sure it will stay
+	 hidden when we are realized again
+	"
+	killButton beInvisible.
+	pauseToggle beInvisible.
+
+	commandView beVisible.
+
+	"
+	 remove the killButton from its group
+	 (otherwise, it will be destroyed when we shut down the group)
+	"
+	wg := killButton windowGroup.
+	killButton windowGroup:nil.
+	pauseToggle windowGroup:nil.
+
+	"
+	 shut down the kill buttons windowgroup
+	"
+	wg notNil ifTrue:[
+	    wg process terminate.
+	].
+	"
+	 clear its action (actually not needed, but
+	 releases reference to thisContext earlier)
+	"
+	killButton action:nil.
+	pauseToggle pressAction:nil.
+	"/    
+	"/ allow interaction with the codeView
+	"/ (bring it back into my group)
+	"/
+	lowerFrameView windowGroup:(self windowGroup).
     ].
 
     currentFileName isNil ifTrue:[
-        subView modified:false.
+	subView modified:false.
     ].
 
     subView size > 10000 ifTrue:[
-        self warn:'text quite large now - please cut off some lines'
+	self warn:'text quite large now - please cut off some lines'
     ]
 
     "Modified: / 21.9.1995 / 11:18:46 / claus"
@@ -3275,116 +3275,116 @@
 
     path := currentDirectory filenameFor:fileName.
     (path type == #regular) ifTrue:[
-        path isExecutableProgram ifTrue:[
-            aBox initialText:(fileName , ' <arguments>').
-            ^ self
-        ].
-
-        select := true.
-
-        "some heuristics - my personal preferences ...
-         (actually this should come from a configfile)"
-
-        (fileName endsWith:'akefile') ifTrue:[
-            aBox initialText:'make target' selectFrom:6 to:11.
-            ^ self
-        ].
-
-        suffix := path suffix.
-        (suffix = 'C') ifTrue:[
-            cmd := 'g++ -c %1'.
-            select := 6.
-        ] ifFalse:[
-            suffix := suffix asLowercase.
-            (suffix = 'taz') ifTrue:[
-                aBox initialText:'zcat %1 | tar tvf -'.
-                select := false.
-            ].
-            (suffix = 'tar') ifTrue:[
-                cmd := 'tar tvf %1'.
-                select := 7.
-            ].
-            (suffix = 'zoo') ifTrue:[
-                cmd := 'zoo -list %1'.
-                select := 9.
-            ].
-            (suffix = 'zip') ifTrue:[
-                cmd := 'unzip -l %1'.
-                select := 8.
-            ].
-            (suffix = 'jar') ifTrue:[
-                cmd := 'unzip -l %1'.
-                select := 8.
-            ].
-            (suffix = 'z') ifTrue:[
-                (fileName endsWith:'tar.z') ifTrue:[
-                    cmd := 'zcat %1 | tar tvf -'.
-                    select := false.
-                ] ifFalse:[
-                    cmd := 'uncompress %1'
-                ].
-            ].
-            (suffix = 'gz') ifTrue:[
-                (fileName endsWith:'tar.gz') ifTrue:[
-                    cmd := ('gunzip < %1 | tar tvf -' ).
-                    select := false.
-                ] ifFalse:[
-                    cmd := 'gunzip %1'.
-                ].
-            ].
-            (suffix = 'tgz') ifTrue:[
-                cmd := ('gunzip < %1 | tar tvf -' ).
-                select := false.
-            ].
-            (suffix = 'html') ifTrue:[
-                cmd := 'netscape %1'
-            ].
-            (suffix = 'htm') ifTrue:[
-                cmd := 'netscape %1'
-            ].
-            (suffix = 'uue') ifTrue:[
-                cmd := 'uudecode %1'
-            ].
-            (suffix = 'c') ifTrue:[
-                cmd := 'cc -c %1'.
-                select := 5.
-            ].
-            (suffix = 'cc') ifTrue:[
-                cmd := 'g++ -c %1'.
-                select := 6.
-            ].
-            (suffix = 'xbm') ifTrue:[
-                cmd := 'bitmap %1'
-            ].
-            (suffix = 'ps') ifTrue:[
-                cmd := 'ghostview %1'
-            ].
-            ((suffix = '1') or:[suffix = 'man']) ifTrue:[
-                cmd := 'nroff -man %1'.
-                select := 10.
-            ].
-        ].
-
-        cmd isNil ifTrue:[
-            DefaultCommandPerSuffix isNil ifTrue:[
-                cmd := '<cmd>'
-            ] ifFalse:[
-                cmd := DefaultCommandPerSuffix 
-                        at:suffix
-                        ifAbsent:'<cmd>'.
-            ].
-            cmd := cmd , ' %1'.
-        ].
-
-        cmd := cmd bindWith:fileName.
-        select == false ifTrue:[
-            aBox initialText:cmd
-        ] ifFalse:[
-            select isInteger ifFalse:[
-                select := (cmd indexOf:Character space ifAbsent:[cmd size + 1]) - 1.
-            ].
-            aBox initialText:cmd selectFrom:1 to:select
-        ]
+	path isExecutableProgram ifTrue:[
+	    aBox initialText:(fileName , ' <arguments>').
+	    ^ self
+	].
+
+	select := true.
+
+	"some heuristics - my personal preferences ...
+	 (actually this should come from a configfile)"
+
+	(fileName endsWith:'akefile') ifTrue:[
+	    aBox initialText:'make target' selectFrom:6 to:11.
+	    ^ self
+	].
+
+	suffix := path suffix.
+	(suffix = 'C') ifTrue:[
+	    cmd := 'g++ -c %1'.
+	    select := 6.
+	] ifFalse:[
+	    suffix := suffix asLowercase.
+	    (suffix = 'taz') ifTrue:[
+		aBox initialText:'zcat %1 | tar tvf -'.
+		select := false.
+	    ].
+	    (suffix = 'tar') ifTrue:[
+		cmd := 'tar tvf %1'.
+		select := 7.
+	    ].
+	    (suffix = 'zoo') ifTrue:[
+		cmd := 'zoo -list %1'.
+		select := 9.
+	    ].
+	    (suffix = 'zip') ifTrue:[
+		cmd := 'unzip -l %1'.
+		select := 8.
+	    ].
+	    (suffix = 'jar') ifTrue:[
+		cmd := 'unzip -l %1'.
+		select := 8.
+	    ].
+	    (suffix = 'z') ifTrue:[
+		(fileName endsWith:'tar.z') ifTrue:[
+		    cmd := 'zcat %1 | tar tvf -'.
+		    select := false.
+		] ifFalse:[
+		    cmd := 'uncompress %1'
+		].
+	    ].
+	    (suffix = 'gz') ifTrue:[
+		(fileName endsWith:'tar.gz') ifTrue:[
+		    cmd := ('gunzip < %1 | tar tvf -' ).
+		    select := false.
+		] ifFalse:[
+		    cmd := 'gunzip %1'.
+		].
+	    ].
+	    (suffix = 'tgz') ifTrue:[
+		cmd := ('gunzip < %1 | tar tvf -' ).
+		select := false.
+	    ].
+	    (suffix = 'html') ifTrue:[
+		cmd := 'netscape %1'
+	    ].
+	    (suffix = 'htm') ifTrue:[
+		cmd := 'netscape %1'
+	    ].
+	    (suffix = 'uue') ifTrue:[
+		cmd := 'uudecode %1'
+	    ].
+	    (suffix = 'c') ifTrue:[
+		cmd := 'cc -c %1'.
+		select := 5.
+	    ].
+	    (suffix = 'cc') ifTrue:[
+		cmd := 'g++ -c %1'.
+		select := 6.
+	    ].
+	    (suffix = 'xbm') ifTrue:[
+		cmd := 'bitmap %1'
+	    ].
+	    (suffix = 'ps') ifTrue:[
+		cmd := 'ghostview %1'
+	    ].
+	    ((suffix = '1') or:[suffix = 'man']) ifTrue:[
+		cmd := 'nroff -man %1'.
+		select := 10.
+	    ].
+	].
+
+	cmd isNil ifTrue:[
+	    DefaultCommandPerSuffix isNil ifTrue:[
+		cmd := '<cmd>'
+	    ] ifFalse:[
+		cmd := DefaultCommandPerSuffix 
+			at:suffix
+			ifAbsent:'<cmd>'.
+	    ].
+	    cmd := cmd , ' %1'.
+	].
+
+	cmd := cmd bindWith:fileName.
+	select == false ifTrue:[
+	    aBox initialText:cmd
+	] ifFalse:[
+	    select isInteger ifFalse:[
+		select := (cmd indexOf:Character space ifAbsent:[cmd size + 1]) - 1.
+	    ].
+	    aBox initialText:cmd selectFrom:1 to:select
+	]
     ]
 
     "Modified: / 24.9.1997 / 16:34:52 / stefan"
@@ -3465,79 +3465,79 @@
     |oldSelection nOld newState msg newLabel t|
 
     shown ifTrue:[
-        currentDirectory notNil ifTrue:[
-            lockUpdate ifTrue:[
-                Processor removeTimedBlock:checkBlock.
-                Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
-                ^ self
-            ].
-
-            subView modified ifTrue:[
-                newState := ' (modified)'
-            ].
-
-            (currentDirectory isReadable) ifTrue:[
-                Processor removeTimedBlock:checkBlock.
-
-                t := currentDirectory modificationTime.
-                (t notNil and:[t > timeOfLastCheck]) ifTrue:[
-                    nOld := fileListView numberOfSelections.
-                    oldSelection := fileListView selectionValue.
-                    self updateCurrentDirectory.
-                    nOld ~~ 0 ifTrue:[
-                        nOld > 1 ifTrue:[
-                            oldSelection do:[:element  |
-                                fileListView addElementToSelection:element
-                            ]
-                        ] ifFalse:[
-                            fileListView selectElementWithoutScroll:oldSelection
-                        ]
-                    ].
-                ] ifFalse:[
-                    Processor addTimedBlock:checkBlock afterSeconds:checkDelta
-                ].
-
-                currentFileName notNil ifTrue:[
-                    |f|
-                    f := currentDirectory construct:currentFileName.
-                    f exists ifFalse:[
-                        newState := ' (removed)'.
-                    ] ifTrue:[
-                        f modificationTime > timeOfFileRead ifTrue:[
-                            newState := ' (outdated)'.
-                            subView modified ifTrue:[
-                                newState := ' (modified & outdated)'
-                            ]
-                        ].
-                    ].
-                ].
-            ] ifFalse:[         
-                "
-                 if the directory has been deleted, or is not readable ...
-                "
-                (currentDirectory exists) ifFalse:[
-                    msg := 'FileBrowser:\\directory %1 is gone ?!!?'
-                ] ifTrue:[
-                    msg := 'FileBrowser:\\directory %1 is no longer readable ?!!?'
-                ].
-                self warn:(resources string:msg with:currentDirectory pathName) withCRs.
-
-                fileListView contents:nil.
-                newLabel := myName , ': directory is gone !!'.
-                "/ Processor addTimedBlock:checkBlock afterSeconds:checkDelta
-            ].
-
-            newState notNil ifTrue:[
-                newLabel := myName.
-                currentFileName notNil ifTrue:[
-                    newLabel := newLabel , ': ' , currentFileName
-                ].
-                newLabel := newLabel , newState.
-            ].
-            newLabel notNil ifTrue:[
-                self label:newLabel.
-            ]
-        ]
+	currentDirectory notNil ifTrue:[
+	    lockUpdate ifTrue:[
+		Processor removeTimedBlock:checkBlock.
+		Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
+		^ self
+	    ].
+
+	    subView modified ifTrue:[
+		newState := ' (modified)'
+	    ].
+
+	    (currentDirectory isReadable) ifTrue:[
+		Processor removeTimedBlock:checkBlock.
+
+		t := currentDirectory modificationTime.
+		(t notNil and:[t > timeOfLastCheck]) ifTrue:[
+		    nOld := fileListView numberOfSelections.
+		    oldSelection := fileListView selectionValue.
+		    self updateCurrentDirectory.
+		    nOld ~~ 0 ifTrue:[
+			nOld > 1 ifTrue:[
+			    oldSelection do:[:element  |
+				fileListView addElementToSelection:element
+			    ]
+			] ifFalse:[
+			    fileListView selectElementWithoutScroll:oldSelection
+			]
+		    ].
+		] ifFalse:[
+		    Processor addTimedBlock:checkBlock afterSeconds:checkDelta
+		].
+
+		currentFileName notNil ifTrue:[
+		    |f|
+		    f := currentDirectory construct:currentFileName.
+		    f exists ifFalse:[
+			newState := ' (removed)'.
+		    ] ifTrue:[
+			f modificationTime > timeOfFileRead ifTrue:[
+			    newState := ' (outdated)'.
+			    subView modified ifTrue:[
+				newState := ' (modified & outdated)'
+			    ]
+			].
+		    ].
+		].
+	    ] ifFalse:[         
+		"
+		 if the directory has been deleted, or is not readable ...
+		"
+		(currentDirectory exists) ifFalse:[
+		    msg := 'FileBrowser:\\directory %1 is gone ?!!?'
+		] ifTrue:[
+		    msg := 'FileBrowser:\\directory %1 is no longer readable ?!!?'
+		].
+		self warn:(resources string:msg with:currentDirectory pathName) withCRs.
+
+		fileListView contents:nil.
+		newLabel := myName , ': directory is gone !!'.
+		"/ Processor addTimedBlock:checkBlock afterSeconds:checkDelta
+	    ].
+
+	    newState notNil ifTrue:[
+		newLabel := myName.
+		currentFileName notNil ifTrue:[
+		    newLabel := newLabel , ': ' , currentFileName
+		].
+		newLabel := newLabel , newState.
+	    ].
+	    newLabel notNil ifTrue:[
+		self label:newLabel.
+	    ]
+	]
     ]
 
     "Modified: / 28.4.1997 / 22:31:02 / dq"
@@ -3687,7 +3687,7 @@
 
     ((t := currentDirectory modificationTime) isNil
     or:[t > timeOfLastCheck]) ifTrue:[
-        self updateCurrentDirectory
+	self updateCurrentDirectory
     ]
 
     "Modified: / 16.9.1997 / 15:35:52 / stefan"
@@ -3962,63 +3962,63 @@
 
     lockUpdate := true.
     [
-        self selectedFilesDo:[:fileName |
-            |contents|
-
-            f := currentDirectory construct:fileName.
-            OperatingSystem accessDeniedErrorSignal handle:[:ex|
-                "was not able to remove it"
-                msg := (resources string:'cannot remove ''%1'' !!' with:fileName).
-                self showAlert:msg with:(OperatingSystem lastErrorString)
-            ] do:[
-                (f isSymbolicLink not and:[f isDirectory]) ifTrue:[
-                    contents := f directoryContents.
-                    contents isEmpty ifTrue:[
-                        f remove
-                    ] ifFalse:[
-                        (self 
-                            ask:(resources string:'directory ''%1'' is not empty\remove anyway ?' with:fileName)
-                            yesButton:'remove')
-                        ifFalse:[
-                            ^ self
-                        ].
-                        f recursiveRemove
-                    ].
-                ] ifFalse:[
-                    f remove.
-                ].
+	self selectedFilesDo:[:fileName |
+	    |contents|
+
+	    f := currentDirectory construct:fileName.
+	    OperatingSystem accessDeniedErrorSignal handle:[:ex|
+		"was not able to remove it"
+		msg := (resources string:'cannot remove ''%1'' !!' with:fileName).
+		self showAlert:msg with:(OperatingSystem lastErrorString)
+	    ] do:[
+		(f isSymbolicLink not and:[f isDirectory]) ifTrue:[
+		    contents := f directoryContents.
+		    contents isEmpty ifTrue:[
+			f remove
+		    ] ifFalse:[
+			(self 
+			    ask:(resources string:'directory ''%1'' is not empty\remove anyway ?' with:fileName)
+			    yesButton:'remove')
+			ifFalse:[
+			    ^ self
+			].
+			f recursiveRemove
+		    ].
+		] ifFalse:[
+		    f remove.
+		].
 "
-                self show:nil
+		self show:nil
 "
-                idx := fileList indexOf:fileName.
-                idx ~~ 0 ifTrue:[
-                    toRemove add:idx.
-                ]
-            ].
-        ].
+		idx := fileList indexOf:fileName.
+		idx ~~ 0 ifTrue:[
+		    toRemove add:idx.
+		]
+	    ].
+	].
     ] valueNowOrOnUnwindDo:[
-        lockUpdate := false.
-        fileListView setSelection:nil.
-
-        "/
-        "/ remove reverse - otherwise indices are wrong
-        "/
-        toRemove sort.
-        toRemove reverseDo:[:idx |
-            fileList removeIndex:idx.
-            fileListView removeIndex:idx.
-        ].
-
-        updateRunning ifTrue:[
-            self updateCurrentDirectory
-        ] ifFalse:[
-            "
-             install a new check after some time
-            "
-            needUpdate ifFalse:[timeOfLastCheck := AbsoluteTime now].
-            Processor removeTimedBlock:checkBlock.
-            Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
-        ]
+	lockUpdate := false.
+	fileListView setSelection:nil.
+
+	"/
+	"/ remove reverse - otherwise indices are wrong
+	"/
+	toRemove sort.
+	toRemove reverseDo:[:idx |
+	    fileList removeIndex:idx.
+	    fileListView removeIndex:idx.
+	].
+
+	updateRunning ifTrue:[
+	    self updateCurrentDirectory
+	] ifFalse:[
+	    "
+	     install a new check after some time
+	    "
+	    needUpdate ifFalse:[timeOfLastCheck := AbsoluteTime now].
+	    Processor removeTimedBlock:checkBlock.
+	    Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
+	]
     ]
 
     "Modified: / 20.11.1997 / 17:39:14 / stefan"
@@ -4612,74 +4612,74 @@
 
     f := currentDirectory construct:aFilenameString.
     f isDirectory ifTrue:[
-        f isSymbolicLink ifTrue:[
-            key := #directoryLink
-        ] ifFalse:[
-            key := #directory.
-            (f isReadable not or:[f isExecutable not]) ifTrue:[
-                key := #directoryLocked
-            ].
-        ]
+	f isSymbolicLink ifTrue:[
+	    key := #directoryLink
+	] ifFalse:[
+	    key := #directory.
+	    (f isReadable not or:[f isExecutable not]) ifTrue:[
+		key := #directoryLocked
+	    ].
+	]
     ] ifFalse:[
-        f isSymbolicLink ifTrue:[
-            f isReadable not ifTrue:[
-                key := #fileLocked
-            ] ifFalse:[
-                key := #fileLink
-            ]
-        ] ifFalse:[
-            key := key2 := #file.
-            f isExecutable ifTrue:[
-                key := key2 := #executableFile
-            ].
-            (f isReadable not) ifTrue:[
-                key := #fileLocked
-            ] ifFalse:[
-                suff := f suffix.
-                mimeType := MIMETypes mimeTypeForSuffix:suff.
-                mimeType notNil ifTrue:[
-                    (mimeType startsWith:'image/') ifTrue:[
-                        key := #imageFile
-                    ] ifFalse:[
-                        (mimeType startsWith:'text/') ifTrue:[
-                            key := #textFile
-                        ]
-                    ]
-                ].
-            ].
-        ].
+	f isSymbolicLink ifTrue:[
+	    f isReadable not ifTrue:[
+		key := #fileLocked
+	    ] ifFalse:[
+		key := #fileLink
+	    ]
+	] ifFalse:[
+	    key := key2 := #file.
+	    f isExecutableProgram ifTrue:[
+		key := key2 := #executableFile
+	    ].
+	    (f isReadable not) ifTrue:[
+		key := #fileLocked
+	    ] ifFalse:[
+		suff := f suffix.
+		mimeType := MIMETypes mimeTypeForSuffix:suff.
+		mimeType notNil ifTrue:[
+		    (mimeType startsWith:'image/') ifTrue:[
+			key := #imageFile
+		    ] ifFalse:[
+			(mimeType startsWith:'text/') ifTrue:[
+			    key := #textFile
+			]
+		    ]
+		].
+	    ].
+	].
     ].
 
     "/ local (device) icons
     icons notNil ifTrue:[
-        mimeType notNil ifTrue:[
-            icn := icons at:mimeType ifAbsent:nil.
-            icn notNil ifTrue:[^ icn].
-        ].
-        icn := icons at:key ifAbsent:nil.
-        icn notNil ifTrue:[^ icn].
+	mimeType notNil ifTrue:[
+	    icn := icons at:mimeType ifAbsent:nil.
+	    icn notNil ifTrue:[^ icn].
+	].
+	icn := icons at:key ifAbsent:nil.
+	icn notNil ifTrue:[^ icn].
     ].
 
     "/ global icons
 
     Icons notNil ifTrue:[
-        mimeType notNil ifTrue:[
-            icn := Icons at:mimeType ifAbsent:nil.
-        ].
-        icn notNil ifTrue:[
-            key := mimeType
-        ] ifFalse:[
-            icn := Icons at:key ifAbsent:nil.
-        ].
+	mimeType notNil ifTrue:[
+	    icn := Icons at:mimeType ifAbsent:nil.
+	].
+	icn notNil ifTrue:[
+	    key := mimeType
+	] ifFalse:[
+	    icn := Icons at:key ifAbsent:nil.
+	].
     ].
 
     icn isNil ifTrue:[
-        (    (key := key2) isNil
-         or:[(icn := icons at:key ifAbsent:nil) notNil
-         or:[(icn := Icons at:key ifAbsent:nil) isNil]]
-        ) ifTrue:[
-            ^ icn
-        ]
+	(    (key := key2) isNil
+	 or:[(icn := icons at:key ifAbsent:nil) notNil
+	 or:[(icn := Icons at:key ifAbsent:nil) isNil]]
+	) ifTrue:[
+	    ^ icn
+	]
     ].
 
     "/ remember device icon
@@ -4720,13 +4720,13 @@
     "
 
     self withReadCursorDo:[
-        |files matchPattern list passDone f|
-
-        self stopUpdateProcess.
-
-        timeOfLastCheck := AbsoluteTime now.
-
-        files := currentDirectory asFilename fullDirectoryContents.
+	|files matchPattern list passDone f|
+
+	self stopUpdateProcess.
+
+	timeOfLastCheck := AbsoluteTime now.
+
+	files := currentDirectory asFilename fullDirectoryContents.
 
 "/        (files includes:(Filename parentDirectoryName)) ifTrue:[
 "/            upButton enable.
@@ -4734,405 +4734,405 @@
 "/            upButton disable.
 "/        ].
 
-        "/ show files which are either directories
-        "/ or match the current pattern
-
-        matchPattern := filterField contents.
-        (matchPattern notNil and:[
-         matchPattern isEmpty not and:[
-         matchPattern ~= '*']]) ifTrue:[
-             files := files select:[:aName | 
-                         ((currentDirectory construct:aName) isDirectory)
-                         or:[matchPattern compoundMatch:aName]
-                      ].
-        ].
-
-        files size == 0 ifTrue:[
-            self information:('directory ', currentDirectory pathName, ' vanished').
-            ^ self
-        ].
-        (sortByWhat value == #name) ifTrue:[
-            sortCaseless value == true ifTrue:[
-                files sort:[:a :b | a asLowercase < b asLowercase]
-            ] ifFalse:[
-                files sort.
-            ]
-        ] ifFalse:[
-            (sortByWhat value == #time) ifTrue:[
-                files sort:[:a :b | |f1 f2 t1 t2|
-                                f1 := (currentDirectory construct:a).
-                                f2 := (currentDirectory construct:b).
-                                t1 := f1 isSymbolicLink 
-                                        ifFalse:[f1 modificationTime]
-                                        ifTrue:[f1 linkInfo modified].
-                                t2 := f2 isSymbolicLink 
-                                        ifFalse:[f2 modificationTime]
-                                        ifTrue:[f2 linkInfo modified].
-                                t1 := t1 ? (AbsoluteTime now).
-                                t2 := t2 ? (AbsoluteTime now).
-                                t1 > t2
-                           ]
-            ] ifFalse:[
-                (sortByWhat value == #type) ifTrue:[
-                    files sort:[:a :b | |f1 f2 t1 t2 suff1 suff2|
-                                    f1 := (currentDirectory construct:a).
-                                    f2 := (currentDirectory construct:b).
-                                    t1 := f1 type ? #xbadLink. 
-                                    t2 := f2 type ? #xbadLink. 
-                                    t1 = t2 ifTrue:[
-                                        suff1 := f1 suffix.
-                                        suff2 := f2 suffix.
-                                        suff1 = suff2 ifTrue:[
-                                            sortCaseless value == true ifTrue:[
-                                                a asLowercase < b asLowercase
-                                            ] ifFalse:[
-                                                a < b
-                                            ]
-                                        ] ifFalse:[
-                                            suff1 asLowercase < suff2 asLowercase
-                                        ]
-                                    ] ifFalse:[
-                                        t1 < t2
-                                    ]
-                               ]
-                ]
-            ]
-        ].
-
-        files := self withoutHiddenFiles:files.
-        fileList := files copy.
-
-        tabSpec isNil ifTrue:[
-            showingDetails value "showLongList" ifTrue:[
-                self defineTabulatorsForLongList
-            ] ifFalse:[
-                self defineTabulatorsForShortList
-            ].
-        ].
-
-        "/
-        "/ first show all the names - this can be done fast ...
-        "/
-        list := files collect:[:fileName |
-                    |entry|
-
-                    entry := MultiColListEntry new.
-                    entry tabulatorSpecification:tabSpec.
-                    entry colAt:1 put:nil.
-                    entry colAt:2 put:fileName.
-                ].
-
-        fileListView setList:list expandTabs:false.
-        passDone := Array new:list size withAll:0.
-
-        "
-         this is a time consuming operation (especially, if reading an
-         NFS-mounted directory); therefore, start a low prio process,
-         which fills in the remaining fields in the fileList ...
-        "
-
-        listUpdateProcess := [
-            |prevUid prevGid fileNameString nameString groupString 
-             modeString info line len
-             anyImages lineIndex aFileName
-             entry typ f p typeString done endIndex 
-             state stopAtEnd nextState img prevFirstLine prevLastLine
-             numVisible dirSuffix|
-
-            dirSuffix := Filename directorySuffix.
-            dirSuffix size > 0 ifTrue:[
-                dirSuffix := '.' , dirSuffix asLowercase.
-            ].
-
-            "/
-            "/ then walk over the files, adding more info
-            "/ (since we have to stat each file, this may take a while longer)
-            "/ Visible items are always filled first.
-
-            "/
-            "/ the state machine
-            "/
-            nextState := IdentityDictionary new.
-            showingDetails value "showLongList" ifTrue:[
-                nextState add:(#visibleIcons -> #visibleAttributes).
-                nextState add:(#visibleAttributes -> #visibleTypes).
-                nextState add:(#visibleTypes -> #visibleImages).
-                nextState add:(#visibleImages -> #nextPageIcons).
-
-                nextState add:(#nextPageIcons -> #nextPageAttributes).
-                nextState add:(#nextPageAttributes -> #nextPageTypes).
-                nextState add:(#nextPageTypes -> #nextPageImages).
-                nextState add:(#nextPageImages -> #previousPageIcons).
-
-                nextState add:(#previousPageIcons -> #previousPageAttributes).
-                nextState add:(#previousPageAttributes -> #previousPageTypes).
-                nextState add:(#previousPageTypes -> #previousPageImages).
-                nextState add:(#previousPageImages -> #remainingIcons).
-
-                nextState add:(#remainingIcons -> #remainingAttributes).
-                nextState add:(#remainingAttributes -> #remainingTypes).
-                nextState add:(#remainingTypes -> #remainingImages).
-                nextState add:(#remainingImages -> nil).
-            ] ifFalse:[
-                nextState add:(#visibleIcons -> #nextPageIcons).
-                nextState add:(#nextPageIcons -> #previousPageIcons).
-                nextState add:(#previousPageIcons -> #remainingIcons).
-                nextState add:(#remainingIcons -> nil).
-            ].
-
-            anyImages := false.
-
-            lineIndex := prevFirstLine := fileListView firstLineShown.
-            endIndex := prevLastLine := fileListView lastLineShown.
-            endIndex := endIndex min:(files size).
-            state := #visibleIcons.
-
-            done := false.
-            [done] whileFalse:[
-                "/
-                "/ if multiple FileBrowsers are reading, let others
-                "/ make some progress too
-                "/
-                Processor yield.
-
-                "/
-                "/ could be destroyed in the meanwhile ...
-                "/
-                realized ifFalse:[
-                    listUpdateProcess := nil.
-                    Processor activeProcess terminate
-                ].
-
-                ((prevFirstLine ~~ fileListView firstLineShown)
-                or:[prevLastLine ~~ fileListView lastLineShown]) ifTrue:[
-                    "/ start all over again
-                    lineIndex := prevFirstLine := fileListView firstLineShown.
-                    endIndex := prevLastLine := fileListView lastLineShown.
-                    endIndex := endIndex min:(files size).
-                    state := #visibleIcons.
-                ].
-
-                (lineIndex between:1 and:(files size)) ifTrue:[
-
-                    "/
-                    "/ expand the next entry ...
-                    "/
-                    aFileName := files at:lineIndex.
-                    entry := fileListView at:lineIndex.
-                    f := currentDirectory construct:aFileName.
-
-                    (state endsWith:'Icons') ifTrue:[
-                        "/
-                        "/ pass 1 - icons
-                        "/
-                        (passDone at:lineIndex) < 1 ifTrue:[
-                            (f isDirectory
-                              and:[(aFileName ~= '..') and:[aFileName ~= '.']]
-                            ) ifTrue:[
-
-                                "/ the following suffix cutOff is not really required, 
-                                "/ but makes the list look better on VMS ...
-                                fileNameString := aFileName.
-                                dirSuffix notNil ifTrue:[
-                                    (aFileName asLowercase endsWith:dirSuffix) ifTrue:[
-                                        fileNameString := aFileName copyWithoutLast:(dirSuffix size).
-                                    ]
-                                ].
-                                fileNameString := fileNameString , ' ...'
-                            ] ifFalse:[
-                                fileNameString := aFileName.
-                                OperatingSystem isVMSlike ifTrue:[
-                                    (aFileName endsWith:'.') ifTrue:[
-                                        aFileName ~= '..' ifTrue:[
-                                            fileNameString := aFileName copyWithoutLast:1
-                                        ]
-                                    ]
-                                ]
-                            ].
-
-                            showingDetails value "showLongList" ifTrue:[
-                                len := fileNameString size.
-                                (len > 20) ifTrue:[
-                                    fileNameString := (fileNameString contractTo:20)
-                                ].
-                            ].
-
-                            entry colAt:1 put:(self iconForFile:aFileName).
-                            entry colAt:2 put:fileNameString.
-
-                            "/fileListView at:lineIndex put:entry.
-                            fileListView withoutRedrawAt:lineIndex put:entry.
-                            fileListView invalidateLine:lineIndex.
-
-                            anyImages ifFalse:[
-                                (Image isImageFileSuffix:(aFileName asFilename suffix))
-                                ifTrue:[
-                                    anyImages := true
-                                ]
-                            ].
-                            passDone at:lineIndex put:1
-                        ]
-                    ].
-
-                    (state endsWith:'Attributes') ifTrue:[
-                        "/
-                        "/ pass 2 - everything except fileType (which takes very long)
-                        "/
-                        (passDone at:lineIndex) < 2 ifTrue:[
-                            info := f info.
-                            info isNil ifTrue:[
-                                "not accessable - usually a symlink,
-                                 to a nonexisting/nonreadable file
-                                "
-                                f isSymbolicLink ifTrue:[
-                                    p := f linkInfo path.    
-                                    typeString := 'broken symbolic link to ' , p
-                                ] ifFalse:[
-                                    typeString := 'unknown'
-                                ].
-                            ] ifFalse:[
-                                typ := (info type).
-
-                                modeString := self getModeString:(info at:#mode)
-                                                            with:#( '' $r $w $x 
-                                                                    '  ' $r $w $x 
-                                                                    '  ' $r $w $x ).
-                                entry colAt:3 put:modeString.
-
-                                ((info uid) ~~ prevUid) ifTrue:[
-                                    prevUid := (info uid).
-                                    nameString := OperatingSystem getUserNameFromID:prevUid.
-                                    nameString := nameString contractTo:10.
-                                    nameString := nameString , (String new:(10 - nameString size))
-                                ].
-                                nameString isNil ifTrue:[nameString := '???'].
-                                entry colAt:4 put:nameString withoutSpaces.
-
-                                ((info gid) ~~ prevGid) ifTrue:[
-                                    prevGid := (info gid).
-                                    groupString := OperatingSystem getGroupNameFromID:prevGid.
-                                    groupString := groupString contractTo:10.
-                                    groupString := groupString , (String new:(10 - groupString size))
-                                ].
-                                groupString isNil ifTrue:[groupString := '???'].
-                                entry colAt:5 put:groupString withoutSpaces.
-
-                                (typ == #regular) ifTrue:[
-                                    entry colAt:6 put:(self sizePrintString:(info size)).
-                                ].
-
-                                f isSymbolicLink ifTrue:[
-                                    p := f linkInfo path.    
-                                    typeString := 'symbolic link to ' , p
-                                ] ifFalse:[
-                                    typeString := typ asString
-                                ].
-                            ].
-                            entry colAt:7 put:typeString.
-
-                            "/ fileListView at:lineIndex put:entry.
-                            fileListView withoutRedrawAt:lineIndex put:entry.
-                            fileListView invalidateLine:lineIndex.
-                            passDone at:lineIndex put:2.
-                        ].
-                    ].
-
-                    (state endsWith:'Types') ifTrue:[
-                        "/
-                        "/ pass 3: add fileType
-                        "/
-                        (passDone at:lineIndex) < 3 ifTrue:[
-                            info := f info.
-                            info notNil ifTrue:[
-                                f isSymbolicLink ifFalse:[
-                                    (Image isImageFileSuffix:(f suffix)) ifFalse:[
-                                        typeString := f fileType.
-
-                                        entry colAt:7 put:typeString.
-                                        "/ fileListView at:lineIndex put:entry
-                                        fileListView withoutRedrawAt:lineIndex put:entry.
-                                        fileListView invalidateLine:lineIndex.
-                                    ].
-                                ].
-                            ].
-
-                            passDone at:lineIndex put:3
-                        ].
-                    ].
-
-                    (state endsWith:'Images') ifTrue:[
-                        "/
-                        "/ pass 4: read images
-                        "/
-                        (passDone at:lineIndex) < 4 ifTrue:[
-                            (Image isImageFileSuffix:(f suffix)) ifTrue:[
-                                f isDirectory ifFalse:[
-                                    img := Image fromFile:(f pathName).
-                                    img notNil ifTrue:[
-                                        img := img magnifiedTo:16@16.
-                                        img := img on:self device.
-                                        entry colAt:7 put:img.
-                                        "/ fileListView at:lineIndex put:entry
-                                        fileListView withoutRedrawAt:lineIndex put:entry.
-                                        fileListView invalidateLine:lineIndex.
-                                    ]
-                                ]
-                            ].
-                            passDone at:lineIndex put:4
-                        ].
-                    ].
-                ].
-
-                "/
-                "/ advance to the next line
-                "/
-                lineIndex := lineIndex + 1.
-                lineIndex > endIndex ifTrue:[
-                    "/ finished this round ...
-                    "/ see what we are going for ...
-                    numVisible := (fileListView lastLineShown - fileListView firstLineShown + 1).
-
-                    state := nextState at:state ifAbsent:nil.
-
-                    state isNil ifTrue:[
-                        done := true
-                    ] ifFalse:[
-                        (state startsWith:'visible') ifTrue:[
-                            lineIndex := fileListView firstLineShown.
-                            endIndex := fileListView lastLineShown.
-                            endIndex := endIndex min:(files size).
-                        ] ifFalse:[
-                            (state startsWith:'nextPage') ifTrue:[
-                                lineIndex := fileListView lastLineShown + 1.
-                                endIndex := lineIndex + numVisible.
-                                endIndex := endIndex min:(files size).
-                                lineIndex := lineIndex min:(files size).
-                            ] ifFalse:[
-                                (state startsWith:'previousPage') ifTrue:[
-                                    endIndex := fileListView firstLineShown - 1.
-                                    lineIndex := endIndex - numVisible.
-                                    lineIndex := lineIndex max:1.
-                                    endIndex := endIndex min:(files size).
-                                    endIndex := endIndex max:1.
-                                ] ifFalse:[ 
-                                    "/ remaining
-                                    lineIndex := 1.
-                                    endIndex := files size.
-                                ]
-                            ]
-                        ]
-                    ]
-                ]
-            ].
-
-            listUpdateProcess := nil.
-
-        ] forkAt:(Processor activePriority - 1).
-
-        "
-         install a new check after some time
-        "
-        Processor addTimedBlock:checkBlock afterSeconds:checkDelta
+	"/ show files which are either directories
+	"/ or match the current pattern
+
+	matchPattern := filterField contents.
+	(matchPattern notNil and:[
+	 matchPattern isEmpty not and:[
+	 matchPattern ~= '*']]) ifTrue:[
+	     files := files select:[:aName | 
+			 ((currentDirectory construct:aName) isDirectory)
+			 or:[matchPattern compoundMatch:aName]
+		      ].
+	].
+
+	files size == 0 ifTrue:[
+	    self information:('directory ', currentDirectory pathName, ' vanished').
+	    ^ self
+	].
+	(sortByWhat value == #name) ifTrue:[
+	    sortCaseless value == true ifTrue:[
+		files sort:[:a :b | a asLowercase < b asLowercase]
+	    ] ifFalse:[
+		files sort.
+	    ]
+	] ifFalse:[
+	    (sortByWhat value == #time) ifTrue:[
+		files sort:[:a :b | |f1 f2 t1 t2|
+				f1 := (currentDirectory construct:a).
+				f2 := (currentDirectory construct:b).
+				t1 := f1 isSymbolicLink 
+					ifFalse:[f1 modificationTime]
+					ifTrue:[f1 linkInfo modified].
+				t2 := f2 isSymbolicLink 
+					ifFalse:[f2 modificationTime]
+					ifTrue:[f2 linkInfo modified].
+				t1 := t1 ? (AbsoluteTime now).
+				t2 := t2 ? (AbsoluteTime now).
+				t1 > t2
+			   ]
+	    ] ifFalse:[
+		(sortByWhat value == #type) ifTrue:[
+		    files sort:[:a :b | |f1 f2 t1 t2 suff1 suff2|
+				    f1 := (currentDirectory construct:a).
+				    f2 := (currentDirectory construct:b).
+				    t1 := f1 type ? #xbadLink. 
+				    t2 := f2 type ? #xbadLink. 
+				    t1 = t2 ifTrue:[
+					suff1 := f1 suffix.
+					suff2 := f2 suffix.
+					suff1 = suff2 ifTrue:[
+					    sortCaseless value == true ifTrue:[
+						a asLowercase < b asLowercase
+					    ] ifFalse:[
+						a < b
+					    ]
+					] ifFalse:[
+					    suff1 asLowercase < suff2 asLowercase
+					]
+				    ] ifFalse:[
+					t1 < t2
+				    ]
+			       ]
+		]
+	    ]
+	].
+
+	files := self withoutHiddenFiles:files.
+	fileList := files copy.
+
+	tabSpec isNil ifTrue:[
+	    showingDetails value "showLongList" ifTrue:[
+		self defineTabulatorsForLongList
+	    ] ifFalse:[
+		self defineTabulatorsForShortList
+	    ].
+	].
+
+	"/
+	"/ first show all the names - this can be done fast ...
+	"/
+	list := files collect:[:fileName |
+		    |entry|
+
+		    entry := MultiColListEntry new.
+		    entry tabulatorSpecification:tabSpec.
+		    entry colAt:1 put:nil.
+		    entry colAt:2 put:fileName.
+		].
+
+	fileListView setList:list expandTabs:false.
+	passDone := Array new:list size withAll:0.
+
+	"
+	 this is a time consuming operation (especially, if reading an
+	 NFS-mounted directory); therefore, start a low prio process,
+	 which fills in the remaining fields in the fileList ...
+	"
+
+	listUpdateProcess := [
+	    |prevUid prevGid fileNameString nameString groupString 
+	     modeString info line len
+	     anyImages lineIndex aFileName
+	     entry typ f p typeString done endIndex 
+	     state stopAtEnd nextState img prevFirstLine prevLastLine
+	     numVisible dirSuffix|
+
+	    dirSuffix := Filename directorySuffix.
+	    dirSuffix size > 0 ifTrue:[
+		dirSuffix := '.' , dirSuffix asLowercase.
+	    ].
+
+	    "/
+	    "/ then walk over the files, adding more info
+	    "/ (since we have to stat each file, this may take a while longer)
+	    "/ Visible items are always filled first.
+
+	    "/
+	    "/ the state machine
+	    "/
+	    nextState := IdentityDictionary new.
+	    showingDetails value "showLongList" ifTrue:[
+		nextState add:(#visibleIcons -> #visibleAttributes).
+		nextState add:(#visibleAttributes -> #visibleTypes).
+		nextState add:(#visibleTypes -> #visibleImages).
+		nextState add:(#visibleImages -> #nextPageIcons).
+
+		nextState add:(#nextPageIcons -> #nextPageAttributes).
+		nextState add:(#nextPageAttributes -> #nextPageTypes).
+		nextState add:(#nextPageTypes -> #nextPageImages).
+		nextState add:(#nextPageImages -> #previousPageIcons).
+
+		nextState add:(#previousPageIcons -> #previousPageAttributes).
+		nextState add:(#previousPageAttributes -> #previousPageTypes).
+		nextState add:(#previousPageTypes -> #previousPageImages).
+		nextState add:(#previousPageImages -> #remainingIcons).
+
+		nextState add:(#remainingIcons -> #remainingAttributes).
+		nextState add:(#remainingAttributes -> #remainingTypes).
+		nextState add:(#remainingTypes -> #remainingImages).
+		nextState add:(#remainingImages -> nil).
+	    ] ifFalse:[
+		nextState add:(#visibleIcons -> #nextPageIcons).
+		nextState add:(#nextPageIcons -> #previousPageIcons).
+		nextState add:(#previousPageIcons -> #remainingIcons).
+		nextState add:(#remainingIcons -> nil).
+	    ].
+
+	    anyImages := false.
+
+	    lineIndex := prevFirstLine := fileListView firstLineShown.
+	    endIndex := prevLastLine := fileListView lastLineShown.
+	    endIndex := endIndex min:(files size).
+	    state := #visibleIcons.
+
+	    done := false.
+	    [done] whileFalse:[
+		"/
+		"/ if multiple FileBrowsers are reading, let others
+		"/ make some progress too
+		"/
+		Processor yield.
+
+		"/
+		"/ could be destroyed in the meanwhile ...
+		"/
+		realized ifFalse:[
+		    listUpdateProcess := nil.
+		    Processor activeProcess terminate
+		].
+
+		((prevFirstLine ~~ fileListView firstLineShown)
+		or:[prevLastLine ~~ fileListView lastLineShown]) ifTrue:[
+		    "/ start all over again
+		    lineIndex := prevFirstLine := fileListView firstLineShown.
+		    endIndex := prevLastLine := fileListView lastLineShown.
+		    endIndex := endIndex min:(files size).
+		    state := #visibleIcons.
+		].
+
+		(lineIndex between:1 and:(files size)) ifTrue:[
+
+		    "/
+		    "/ expand the next entry ...
+		    "/
+		    aFileName := files at:lineIndex.
+		    entry := fileListView at:lineIndex.
+		    f := currentDirectory construct:aFileName.
+
+		    (state endsWith:'Icons') ifTrue:[
+			"/
+			"/ pass 1 - icons
+			"/
+			(passDone at:lineIndex) < 1 ifTrue:[
+			    (f isDirectory
+			      and:[(aFileName ~= '..') and:[aFileName ~= '.']]
+			    ) ifTrue:[
+
+				"/ the following suffix cutOff is not really required, 
+				"/ but makes the list look better on VMS ...
+				fileNameString := aFileName.
+				dirSuffix notNil ifTrue:[
+				    (aFileName asLowercase endsWith:dirSuffix) ifTrue:[
+					fileNameString := aFileName copyWithoutLast:(dirSuffix size).
+				    ]
+				].
+				fileNameString := fileNameString , ' ...'
+			    ] ifFalse:[
+				fileNameString := aFileName.
+				OperatingSystem isVMSlike ifTrue:[
+				    (aFileName endsWith:'.') ifTrue:[
+					aFileName ~= '..' ifTrue:[
+					    fileNameString := aFileName copyWithoutLast:1
+					]
+				    ]
+				]
+			    ].
+
+			    showingDetails value "showLongList" ifTrue:[
+				len := fileNameString size.
+				(len > 20) ifTrue:[
+				    fileNameString := (fileNameString contractTo:20)
+				].
+			    ].
+
+			    entry colAt:1 put:(self iconForFile:aFileName).
+			    entry colAt:2 put:fileNameString.
+
+			    "/fileListView at:lineIndex put:entry.
+			    fileListView withoutRedrawAt:lineIndex put:entry.
+			    fileListView invalidateLine:lineIndex.
+
+			    anyImages ifFalse:[
+				(Image isImageFileSuffix:(aFileName asFilename suffix))
+				ifTrue:[
+				    anyImages := true
+				]
+			    ].
+			    passDone at:lineIndex put:1
+			]
+		    ].
+
+		    (state endsWith:'Attributes') ifTrue:[
+			"/
+			"/ pass 2 - everything except fileType (which takes very long)
+			"/
+			(passDone at:lineIndex) < 2 ifTrue:[
+			    info := f info.
+			    info isNil ifTrue:[
+				"not accessable - usually a symlink,
+				 to a nonexisting/nonreadable file
+				"
+				f isSymbolicLink ifTrue:[
+				    p := f linkInfo path.    
+				    typeString := 'broken symbolic link to ' , p
+				] ifFalse:[
+				    typeString := 'unknown'
+				].
+			    ] ifFalse:[
+				typ := (info type).
+
+				modeString := self getModeString:(info at:#mode)
+							    with:#( '' $r $w $x 
+								    '  ' $r $w $x 
+								    '  ' $r $w $x ).
+				entry colAt:3 put:modeString.
+
+				((info uid) ~~ prevUid) ifTrue:[
+				    prevUid := (info uid).
+				    nameString := OperatingSystem getUserNameFromID:prevUid.
+				    nameString := nameString contractTo:10.
+				    nameString := nameString , (String new:(10 - nameString size))
+				].
+				nameString isNil ifTrue:[nameString := '???'].
+				entry colAt:4 put:nameString withoutSpaces.
+
+				((info gid) ~~ prevGid) ifTrue:[
+				    prevGid := (info gid).
+				    groupString := OperatingSystem getGroupNameFromID:prevGid.
+				    groupString := groupString contractTo:10.
+				    groupString := groupString , (String new:(10 - groupString size))
+				].
+				groupString isNil ifTrue:[groupString := '???'].
+				entry colAt:5 put:groupString withoutSpaces.
+
+				(typ == #regular) ifTrue:[
+				    entry colAt:6 put:(self sizePrintString:(info size)).
+				].
+
+				f isSymbolicLink ifTrue:[
+				    p := f linkInfo path.    
+				    typeString := 'symbolic link to ' , p
+				] ifFalse:[
+				    typeString := typ asString
+				].
+			    ].
+			    entry colAt:7 put:typeString.
+
+			    "/ fileListView at:lineIndex put:entry.
+			    fileListView withoutRedrawAt:lineIndex put:entry.
+			    fileListView invalidateLine:lineIndex.
+			    passDone at:lineIndex put:2.
+			].
+		    ].
+
+		    (state endsWith:'Types') ifTrue:[
+			"/
+			"/ pass 3: add fileType
+			"/
+			(passDone at:lineIndex) < 3 ifTrue:[
+			    info := f info.
+			    info notNil ifTrue:[
+				f isSymbolicLink ifFalse:[
+				    (Image isImageFileSuffix:(f suffix)) ifFalse:[
+					typeString := f fileType.
+
+					entry colAt:7 put:typeString.
+					"/ fileListView at:lineIndex put:entry
+					fileListView withoutRedrawAt:lineIndex put:entry.
+					fileListView invalidateLine:lineIndex.
+				    ].
+				].
+			    ].
+
+			    passDone at:lineIndex put:3
+			].
+		    ].
+
+		    (state endsWith:'Images') ifTrue:[
+			"/
+			"/ pass 4: read images
+			"/
+			(passDone at:lineIndex) < 4 ifTrue:[
+			    (Image isImageFileSuffix:(f suffix)) ifTrue:[
+				f isDirectory ifFalse:[
+				    img := Image fromFile:(f pathName).
+				    img notNil ifTrue:[
+					img := img magnifiedTo:16@16.
+					img := img on:self device.
+					entry colAt:7 put:img.
+					"/ fileListView at:lineIndex put:entry
+					fileListView withoutRedrawAt:lineIndex put:entry.
+					fileListView invalidateLine:lineIndex.
+				    ]
+				]
+			    ].
+			    passDone at:lineIndex put:4
+			].
+		    ].
+		].
+
+		"/
+		"/ advance to the next line
+		"/
+		lineIndex := lineIndex + 1.
+		lineIndex > endIndex ifTrue:[
+		    "/ finished this round ...
+		    "/ see what we are going for ...
+		    numVisible := (fileListView lastLineShown - fileListView firstLineShown + 1).
+
+		    state := nextState at:state ifAbsent:nil.
+
+		    state isNil ifTrue:[
+			done := true
+		    ] ifFalse:[
+			(state startsWith:'visible') ifTrue:[
+			    lineIndex := fileListView firstLineShown.
+			    endIndex := fileListView lastLineShown.
+			    endIndex := endIndex min:(files size).
+			] ifFalse:[
+			    (state startsWith:'nextPage') ifTrue:[
+				lineIndex := fileListView lastLineShown + 1.
+				endIndex := lineIndex + numVisible.
+				endIndex := endIndex min:(files size).
+				lineIndex := lineIndex min:(files size).
+			    ] ifFalse:[
+				(state startsWith:'previousPage') ifTrue:[
+				    endIndex := fileListView firstLineShown - 1.
+				    lineIndex := endIndex - numVisible.
+				    lineIndex := lineIndex max:1.
+				    endIndex := endIndex min:(files size).
+				    endIndex := endIndex max:1.
+				] ifFalse:[ 
+				    "/ remaining
+				    lineIndex := 1.
+				    endIndex := files size.
+				]
+			    ]
+			]
+		    ]
+		]
+	    ].
+
+	    listUpdateProcess := nil.
+
+	] forkAt:(Processor activePriority - 1).
+
+	"
+	 install a new check after some time
+	"
+	Processor addTimedBlock:checkBlock afterSeconds:checkDelta
     ]
 
     "Modified: / 21.9.1995 / 11:40:23 / claus"
@@ -5178,5 +5178,5 @@
 !FileBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Attic/FBrowser.st,v 1.254 1998-09-03 08:19:31 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Attic/FBrowser.st,v 1.255 1998-09-08 10:24:20 cg Exp $'
 ! !
--- a/FileBrowser.st	Tue Sep 08 12:23:56 1998 +0200
+++ b/FileBrowser.st	Tue Sep 08 12:24:20 1998 +0200
@@ -99,7 +99,7 @@
 
     f := aFilename asFilename.
     f isDirectory ifTrue:[
-        ^ self openOn:aFilename
+	^ self openOn:aFilename
     ].
 
     browser := self new.
@@ -128,35 +128,35 @@
     Icons := Dictionary new.
 
     #(
-        "/ internal-type to icon mappings.
-        (#directory       'ICON_DIRECTORY'        'tiny_yellow_dir.xpm'       )
-        (#directoryLocked 'ICON_DIRECTORY_LOCKED' 'tiny_yellow_dir_locked.xpm')
-        (#directoryLink   'ICON_DIRECTORY_LINK'   'tiny_yellow_dir_link.xpm'  )
-        (#file            'ICON_FILE'             'tiny_file_plain.xpm'       )
-        (#fileLink        'ICON_FILE_LINK'        'tiny_file_link.xpm'        )
-        (#fileLocked      'ICON_FILE_LOCKED'      'tiny_file_lock.xpm'        )
-        (#imageFile       'ICON_IMAGE_FILE'       'tiny_file_pix.xpm'         )
-        (#textFile        'ICON_TEXT_FILE'        'tiny_file_text.xpm'        )
-        (#executableFile  'ICON_EXECUTABLEFILE'   'tiny_file_exec.xpm'        )
-
-        "/ mime-type to icon mappings.
-        ('text/plain'                     nil     'tiny_file_text.xpm'        )
-        ('text/html'                      nil     'tiny_file_text.xpm'        )
-        ('application/x-smalltalk-source' nil     'tiny_file_st.xpm'          )
+	"/ internal-type to icon mappings.
+	(#directory       'ICON_DIRECTORY'        'tiny_yellow_dir.xpm'       )
+	(#directoryLocked 'ICON_DIRECTORY_LOCKED' 'tiny_yellow_dir_locked.xpm')
+	(#directoryLink   'ICON_DIRECTORY_LINK'   'tiny_yellow_dir_link.xpm'  )
+	(#file            'ICON_FILE'             'tiny_file_plain.xpm'       )
+	(#fileLink        'ICON_FILE_LINK'        'tiny_file_link.xpm'        )
+	(#fileLocked      'ICON_FILE_LOCKED'      'tiny_file_lock.xpm'        )
+	(#imageFile       'ICON_IMAGE_FILE'       'tiny_file_pix.xpm'         )
+	(#textFile        'ICON_TEXT_FILE'        'tiny_file_text.xpm'        )
+	(#executableFile  'ICON_EXECUTABLEFILE'   'tiny_file_exec.xpm'        )
+
+	"/ mime-type to icon mappings.
+	('text/plain'                     nil     'tiny_file_text.xpm'        )
+	('text/html'                      nil     'tiny_file_text.xpm'        )
+	('application/x-smalltalk-source' nil     'tiny_file_st.xpm'          )
      ) do:[:entry |
-        |key resource defaultName nm|
-
-        key := entry at:1.
-        resource := entry at:2.
-        defaultName := entry at:3.
-
-        resource notNil ifTrue:[
-            nm := resources at:resource default:nil.
-        ].
-        nm isNil ifTrue:[
-            nm := 'bitmaps/xpmBitmaps/document_images/' , defaultName
-        ].
-        Icons at:key put:(Image fromFile:nm).
+	|key resource defaultName nm|
+
+	key := entry at:1.
+	resource := entry at:2.
+	defaultName := entry at:3.
+
+	resource notNil ifTrue:[
+	    nm := resources at:resource default:nil.
+	].
+	nm isNil ifTrue:[
+	    nm := 'bitmaps/xpmBitmaps/document_images/' , defaultName
+	].
+	Icons at:key put:(Image fromFile:nm).
     ]
 
     "
@@ -245,43 +245,43 @@
      
        #(#Menu
           
-           #(
-             #(#MenuItem
-                #label: 'Copy Path'
-                #translateLabel: true
-                #value: #copyPath
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Up'
-                #translateLabel: true
-                #value: #changeToParentDirectory
-                #enabled: #currentDirectoryIsNotTop
-            )
-             #(#MenuItem
-                #label: 'Back'
-                #translateLabel: true
-                #value: #changeToPreviousDirectory
-            )
-             #(#MenuItem
-                #label: 'Home'
-                #translateLabel: true
-                #value: #changeToHomeDirectory
-            )
-             #(#MenuItem
-                #label: 'Default'
-                #translateLabel: true
-                #value: #changeToDefaultDirectory
-            )
-             #(#MenuItem
-                #label: 'Goto...'
-                #translateLabel: true
-                #value: #changeCurrentDirectory
-            )
-          ) nil
-          nil
+	   #(
+	     #(#MenuItem
+		#label: 'Copy Path'
+		#translateLabel: true
+		#value: #copyPath
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Up'
+		#translateLabel: true
+		#value: #changeToParentDirectory
+		#enabled: #currentDirectoryIsNotTop
+	    )
+	     #(#MenuItem
+		#label: 'Back'
+		#translateLabel: true
+		#value: #changeToPreviousDirectory
+	    )
+	     #(#MenuItem
+		#label: 'Home'
+		#translateLabel: true
+		#value: #changeToHomeDirectory
+	    )
+	     #(#MenuItem
+		#label: 'Default'
+		#translateLabel: true
+		#value: #changeToDefaultDirectory
+	    )
+	     #(#MenuItem
+		#label: 'Goto...'
+		#translateLabel: true
+		#value: #changeCurrentDirectory
+	    )
+	  ) nil
+	  nil
       )
 
     "Created: / 4.8.1998 / 17:21:16 / cg"
@@ -310,12 +310,12 @@
     "/ add the history items ...
 
     DirectoryHistory size > 0 ifTrue:[
-        base addItem:(MenuItem labeled:'-').
-        DirectoryHistory do:[:dirName |
-            base addItem:((MenuItem label:dirName value:#changeDirectoryTo:)
-                            argument:dirName;
-                            yourself).
-        ].
+	base addItem:(MenuItem labeled:'-').
+	DirectoryHistory do:[:dirName |
+	    base addItem:((MenuItem label:dirName value:#changeDirectoryTo:)
+			    argument:dirName;
+			    yourself).
+	].
     ].
 
     ^ base
@@ -341,151 +341,151 @@
      
        #(#Menu
           
-           #(
-             #(#MenuItem
-                #label: 'Spawn'
-                #translateLabel: true
-                #value: #fileSpawn
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Get Contents'
-                #translateLabel: true
-                #value: #fileGet
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: 'Insert Contents'
-                #translateLabel: true
-                #value: #fileInsert
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: 'FileIn'
-                #translateLabel: true
-                #value: #fileFileIn
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Unix Command...'
-                #translateLabel: true
-                #isVisible: #systemIsUnix
-                #value: #menuOSCommand
-            )
-             #(#MenuItem
-                #label: 'DOS Command...'
-                #translateLabel: true
-                #isVisible: #systemIsDOS
-                #value: #menuOSCommand
-            )
-             #(#MenuItem
-                #label: 'VMS Command...'
-                #translateLabel: true
-                #isVisible: #systemIsVMS
-                #value: #menuOSCommand
-            )
-             #(#MenuItem
-                #label: 'ST/X Tools'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+	   #(
+	     #(#MenuItem
+		#label: 'Spawn'
+		#translateLabel: true
+		#value: #fileSpawn
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Get Contents'
+		#translateLabel: true
+		#value: #fileGet
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: 'Insert Contents'
+		#translateLabel: true
+		#value: #fileInsert
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: 'FileIn'
+		#translateLabel: true
+		#value: #fileFileIn
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Unix Command...'
+		#translateLabel: true
+		#isVisible: #systemIsUnix
+		#value: #menuOSCommand
+	    )
+	     #(#MenuItem
+		#label: 'DOS Command...'
+		#translateLabel: true
+		#isVisible: #systemIsDOS
+		#value: #menuOSCommand
+	    )
+	     #(#MenuItem
+		#label: 'VMS Command...'
+		#translateLabel: true
+		#isVisible: #systemIsVMS
+		#value: #menuOSCommand
+	    )
+	     #(#MenuItem
+		#label: 'ST/X Tools'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Changes Browser'
-                          #translateLabel: true
-                          #value: #openChangesBrowser
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Editor'
-                          #translateLabel: true
-                          #value: #openEditor
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'HTML Reader'
-                          #translateLabel: true
-                          #value: #openHTMLReader
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Image Inspect'
-                          #translateLabel: true
-                          #value: #openImageInspector
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Image Editor'
-                          #translateLabel: true
-                          #value: #openImageEditor
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'ZipFile Tool'
-                          #translateLabel: true
-                          #value: #openZipTool
-                          #enabled: #hasZipFileSelected
-                      )
-                       #(#MenuItem
-                          #label: 'Show File Differences'
-                          #translateLabel: true
-                          #value: #openDiffView
-                      )
-                       #(#MenuItem
-                          #label: 'Terminal'
-                          #translateLabel: true
-                          #isVisible: #systemIsUnix
-                          #value: #openTerminal
-                          #enabled: #systemIsUnix
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Remove...'
-                #translateLabel: true
-                #value: #fileRemove
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: 'Rename...'
-                #translateLabel: true
-                #value: #fileRename
-                #enabled: #hasSelection
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'New Directory...'
-                #translateLabel: true
-                #value: #newDirectory
-            )
-             #(#MenuItem
-                #label: 'New File...'
-                #translateLabel: true
-                #value: #newFile
-            )
-             #(#MenuItem
-                #label: '-'
-            )
-             #(#MenuItem
-                #label: 'Update'
-                #translateLabel: true
-                #value: #updateCurrentDirectory
-            )
-          ) nil
-          nil
+		     #(
+		       #(#MenuItem
+			  #label: 'Changes Browser'
+			  #translateLabel: true
+			  #value: #openChangesBrowser
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Editor'
+			  #translateLabel: true
+			  #value: #openEditor
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'HTML Reader'
+			  #translateLabel: true
+			  #value: #openHTMLReader
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Image Inspect'
+			  #translateLabel: true
+			  #value: #openImageInspector
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Image Editor'
+			  #translateLabel: true
+			  #value: #openImageEditor
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'ZipFile Tool'
+			  #translateLabel: true
+			  #value: #openZipTool
+			  #enabled: #hasZipFileSelected
+		      )
+		       #(#MenuItem
+			  #label: 'Show File Differences'
+			  #translateLabel: true
+			  #value: #openDiffView
+		      )
+		       #(#MenuItem
+			  #label: 'Terminal'
+			  #translateLabel: true
+			  #isVisible: #systemIsUnix
+			  #value: #openTerminal
+			  #enabled: #systemIsUnix
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Remove...'
+		#translateLabel: true
+		#value: #fileRemove
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: 'Rename...'
+		#translateLabel: true
+		#value: #fileRename
+		#enabled: #hasSelection
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'New Directory...'
+		#translateLabel: true
+		#value: #newDirectory
+	    )
+	     #(#MenuItem
+		#label: 'New File...'
+		#translateLabel: true
+		#value: #newFile
+	    )
+	     #(#MenuItem
+		#label: '-'
+	    )
+	     #(#MenuItem
+		#label: 'Update'
+		#translateLabel: true
+		#value: #updateCurrentDirectory
+	    )
+	  ) nil
+	  nil
       )
 
     "Modified: / 26.8.1998 / 16:34:00 / cg"
@@ -509,325 +509,325 @@
      
        #(#Menu
           
-           #(
-             #(#MenuItem
-                #label: 'About'
-                #translateLabel: true
-                #labelImage: #(#ResourceRetriever #ToolApplicationModel #menuIcon)
-                #submenu: 
-                 #(#Menu
+	   #(
+	     #(#MenuItem
+		#label: 'About'
+		#translateLabel: true
+		#labelImage: #(#ResourceRetriever #ToolApplicationModel #menuIcon)
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'About Smalltalk/X...'
-                          #translateLabel: true
-                          #value: #showAboutSTX
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'About FileBrowser...'
-                          #translateLabel: true
-                          #value: #openAboutThisApplication
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'File'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'About Smalltalk/X...'
+			  #translateLabel: true
+			  #value: #showAboutSTX
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'About FileBrowser...'
+			  #translateLabel: true
+			  #value: #openAboutThisApplication
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'File'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Open'
-                          #translateLabel: true
-                          #value: #menuOpen
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'FileIn'
-                          #translateLabel: true
-                          #value: #fileFileIn
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'New'
-                          #translateLabel: true
-                          #submenu: 
-                           #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'Open'
+			  #translateLabel: true
+			  #value: #menuOpen
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'FileIn'
+			  #translateLabel: true
+			  #value: #fileFileIn
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'New'
+			  #translateLabel: true
+			  #submenu: 
+			   #(#Menu
                               
-                               #(
-                                 #(#MenuItem
-                                    #label: 'Directory...'
-                                    #translateLabel: true
-                                    #value: #newDirectory
-                                )
-                                 #(#MenuItem
-                                    #label: 'File...'
-                                    #translateLabel: true
-                                    #value: #newFile
-                                )
-                                 #(#MenuItem
-                                    #label: 'Hard Link...'
-                                    #translateLabel: true
-                                    #isVisible: #systemIsUnix
-                                    #value: #newHardLink
-                                )
-                                 #(#MenuItem
-                                    #label: 'Symbolic Link...'
-                                    #translateLabel: true
-                                    #isVisible: #systemIsUnix
-                                    #value: #newSoftLink
-                                )
-                              ) nil
-                              nil
-                          )
-                      )
-                       #(#MenuItem
-                          #label: 'Remove'
-                          #translateLabel: true
-                          #value: #fileRemove
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Rename'
-                          #translateLabel: true
-                          #value: #fileRename
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Properties...'
-                          #translateLabel: true
-                          #value: #fileGetLongInfo
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Spawn'
-                          #translateLabel: true
-                          #value: #fileSpawn
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Exit'
-                          #translateLabel: true
-                          #value: #menuExit
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'Directory'
-                #translateLabel: true
-                #submenuChannel: #directoryMenuSpec
-            )
-             #(#MenuItem
-                #label: 'Edit'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+			       #(
+				 #(#MenuItem
+				    #label: 'Directory...'
+				    #translateLabel: true
+				    #value: #newDirectory
+				)
+				 #(#MenuItem
+				    #label: 'File...'
+				    #translateLabel: true
+				    #value: #newFile
+				)
+				 #(#MenuItem
+				    #label: 'Hard Link...'
+				    #translateLabel: true
+				    #isVisible: #systemIsUnix
+				    #value: #newHardLink
+				)
+				 #(#MenuItem
+				    #label: 'Symbolic Link...'
+				    #translateLabel: true
+				    #isVisible: #systemIsUnix
+				    #value: #newSoftLink
+				)
+			      ) nil
+			      nil
+			  )
+		      )
+		       #(#MenuItem
+			  #label: 'Remove'
+			  #translateLabel: true
+			  #value: #fileRemove
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Rename'
+			  #translateLabel: true
+			  #value: #fileRename
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Properties...'
+			  #translateLabel: true
+			  #value: #fileGetLongInfo
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Spawn'
+			  #translateLabel: true
+			  #value: #fileSpawn
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Exit'
+			  #translateLabel: true
+			  #value: #menuExit
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'Directory'
+		#translateLabel: true
+		#submenuChannel: #directoryMenuSpec
+	    )
+	     #(#MenuItem
+		#label: 'Edit'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Get Contents'
-                          #translateLabel: true
-                          #value: #fileGet
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Insert Contents'
-                          #translateLabel: true
-                          #value: #fileInsert
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Copy File List'
-                          #translateLabel: true
-                          #value: #copyFileList
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'View'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'Get Contents'
+			  #translateLabel: true
+			  #value: #fileGet
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Insert Contents'
+			  #translateLabel: true
+			  #value: #fileInsert
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Copy File List'
+			  #translateLabel: true
+			  #value: #copyFileList
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'View'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Details'
-                          #translateLabel: true
-                          #indication: #showingDetails
-                      )
-                       #(#MenuItem
-                          #label: 'Show Hidden Files'
-                          #translateLabel: true
-                          #indication: #showingHiddenFiles
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Sort By Name'
-                          #translateLabel: true
-                          #choice: #sortByWhat
-                          #choiceValue: #name
-                      )
-                       #(#MenuItem
-                          #label: 'Sort By Type'
-                          #translateLabel: true
-                          #choice: #sortByWhat
-                          #choiceValue: #type
-                      )
-                       #(#MenuItem
-                          #label: 'Sort By Time'
-                          #translateLabel: true
-                          #choice: #sortByWhat
-                          #choiceValue: #time
-                      )
-                       #(#MenuItem
-                          #label: 'Ignore Case'
-                          #translateLabel: true
-                          #enabled: #sortByName
-                          #indication: #sortCaseless
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Encoding...'
-                          #translateLabel: true
-                          #value: #fileEncoding
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Update'
-                          #translateLabel: true
-                          #value: #updateCurrentDirectory
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'Tools'
-                #translateLabel: true
-                #submenu: 
-                 #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'Details'
+			  #translateLabel: true
+			  #indication: #showingDetails
+		      )
+		       #(#MenuItem
+			  #label: 'Show Hidden Files'
+			  #translateLabel: true
+			  #indication: #showingHiddenFiles
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Sort By Name'
+			  #translateLabel: true
+			  #choice: #sortByWhat
+			  #choiceValue: #name
+		      )
+		       #(#MenuItem
+			  #label: 'Sort By Type'
+			  #translateLabel: true
+			  #choice: #sortByWhat
+			  #choiceValue: #type
+		      )
+		       #(#MenuItem
+			  #label: 'Sort By Time'
+			  #translateLabel: true
+			  #choice: #sortByWhat
+			  #choiceValue: #time
+		      )
+		       #(#MenuItem
+			  #label: 'Ignore Case'
+			  #translateLabel: true
+			  #enabled: #sortByName
+			  #indication: #sortCaseless
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Encoding...'
+			  #translateLabel: true
+			  #value: #fileEncoding
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Update'
+			  #translateLabel: true
+			  #value: #updateCurrentDirectory
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'Tools'
+		#translateLabel: true
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'Unix Command'
-                          #translateLabel: true
-                          #isVisible: #systemIsUnix
-                          #value: #menuOSCommand
-                      )
-                       #(#MenuItem
-                          #label: 'DOS Command'
-                          #translateLabel: true
-                          #isVisible: #systemIsDOS
-                          #value: #menuOSCommand
-                      )
-                       #(#MenuItem
-                          #label: 'VMS Command'
-                          #translateLabel: true
-                          #isVisible: #systemIsVMS
-                          #value: #menuOSCommand
-                      )
-                       #(#MenuItem
-                          #label: '-'
-                      )
-                       #(#MenuItem
-                          #label: 'Changes Browser'
-                          #translateLabel: true
-                          #value: #openChangesBrowser
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Editor'
-                          #translateLabel: true
-                          #value: #openEditor
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'HTML Reader'
-                          #translateLabel: true
-                          #value: #openHTMLReader
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Image Inspector'
-                          #translateLabel: true
-                          #value: #openImageInspector
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'Image Editor'
-                          #translateLabel: true
-                          #value: #openImageEditor
-                          #enabled: #hasSelection
-                      )
-                       #(#MenuItem
-                          #label: 'ZipFile Tool'
-                          #translateLabel: true
-                          #value: #openZipTool
-                          #enabled: #hasZipFileSelected
-                      )
-                       #(#MenuItem
-                          #label: 'File Differences...'
-                          #translateLabel: true
-                          #value: #openDiffView
-                      )
-                       #(#MenuItem
-                          #label: 'Shell Terminal'
-                          #translateLabel: true
-                          #isVisible: #systemIsUnix
-                          #value: #openTerminal
-                          #enabled: #systemIsUnix
-                      )
-                    ) nil
-                    nil
-                )
-            )
-             #(#MenuItem
-                #label: 'Help'
-                #translateLabel: true
-                #startGroup: #right
-                #submenu: 
-                 #(#Menu
+		     #(
+		       #(#MenuItem
+			  #label: 'Unix Command'
+			  #translateLabel: true
+			  #isVisible: #systemIsUnix
+			  #value: #menuOSCommand
+		      )
+		       #(#MenuItem
+			  #label: 'DOS Command'
+			  #translateLabel: true
+			  #isVisible: #systemIsDOS
+			  #value: #menuOSCommand
+		      )
+		       #(#MenuItem
+			  #label: 'VMS Command'
+			  #translateLabel: true
+			  #isVisible: #systemIsVMS
+			  #value: #menuOSCommand
+		      )
+		       #(#MenuItem
+			  #label: '-'
+		      )
+		       #(#MenuItem
+			  #label: 'Changes Browser'
+			  #translateLabel: true
+			  #value: #openChangesBrowser
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Editor'
+			  #translateLabel: true
+			  #value: #openEditor
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'HTML Reader'
+			  #translateLabel: true
+			  #value: #openHTMLReader
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Image Inspector'
+			  #translateLabel: true
+			  #value: #openImageInspector
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'Image Editor'
+			  #translateLabel: true
+			  #value: #openImageEditor
+			  #enabled: #hasSelection
+		      )
+		       #(#MenuItem
+			  #label: 'ZipFile Tool'
+			  #translateLabel: true
+			  #value: #openZipTool
+			  #enabled: #hasZipFileSelected
+		      )
+		       #(#MenuItem
+			  #label: 'File Differences...'
+			  #translateLabel: true
+			  #value: #openDiffView
+		      )
+		       #(#MenuItem
+			  #label: 'Shell Terminal'
+			  #translateLabel: true
+			  #isVisible: #systemIsUnix
+			  #value: #openTerminal
+			  #enabled: #systemIsUnix
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	     #(#MenuItem
+		#label: 'Help'
+		#translateLabel: true
+		#startGroup: #right
+		#submenu: 
+		 #(#Menu
                     
-                     #(
-                       #(#MenuItem
-                          #label: 'FileBrowser Documentation'
-                          #translateLabel: true
-                          #value: #openHTMLDocument:
-                          #argument: 'tools/fbrowser/TOP.html'
-                      )
-                    ) nil
-                    nil
-                )
-            )
-          ) nil
-          nil
+		     #(
+		       #(#MenuItem
+			  #label: 'FileBrowser Documentation'
+			  #translateLabel: true
+			  #value: #openHTMLDocument:
+			  #argument: 'tools/fbrowser/TOP.html'
+		      )
+		    ) nil
+		    nil
+		)
+	    )
+	  ) nil
+	  nil
       )
 
     "Modified: / 26.8.1998 / 16:33:44 / cg"
@@ -859,10 +859,10 @@
 hasZipFileSelected
     ^ [|sel fn|
 
-        sel := fileListView selectionValue.
-        sel size == 1 
-        and:[ ((fn := self getSelectedFileName asFilename) hasSuffix:'zip')
-              or:[fn hasSuffix:'jar']]
+	sel := fileListView selectionValue.
+	sel size == 1 
+	and:[ ((fn := self getSelectedFileName asFilename) hasSuffix:'zip')
+	      or:[fn hasSuffix:'jar']]
       ]
 
     "Created: / 26.8.1998 / 16:15:26 / cg"
@@ -1063,11 +1063,11 @@
     wasVisible := shown.
     super visibilityChange:how.
     (wasVisible not and:[shown]) ifTrue:[
-        "
-         start checking again
-        "
-        Processor removeTimedBlock:checkBlock.
-        Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
+	"
+	 start checking again
+	"
+	Processor removeTimedBlock:checkBlock.
+	Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
     ]
 
     "Modified: / 18.2.1998 / 17:57:44 / cg"
@@ -1202,74 +1202,74 @@
     |aStream path oldPath wasLazy bos prevCurrentFileName|
 
     self selectedFilesDo:[:fileName |
-        path := currentDirectory filenameFor:fileName.
-        path type == #regular ifTrue:[
-            prevCurrentFileName := currentFileInFileName.
-            currentFileInFileName := fileName.
-
-            (ObjectFileLoader notNil
-            and:[ObjectFileLoader hasValidBinaryExtension:fileName]) ifTrue:[
-                Object abortSignal catch:[
-                    |p|
-
-                    "/
-                    "/ look if already loaded ...  then unload first
-                    "/
-                    p := path pathName.
-                    (ObjectFileLoader loadedObjectFiles includes:p) ifTrue:[
-                        (Dialog confirm:(resources 
-                                            string:'%1 is already loaded; load anyway ?'
-                                            with:p)) ifFalse:[
-                            ^ self
-                        ].
-                        Transcript showCR:'unloading old ' , p , ' ...'.
-                        ObjectFileLoader unloadObjectFile:p. 
-                    ].
-
-                    Transcript showCR:'loading ' , p , ' ...'.
-                    ObjectFileLoader loadObjectFile:p.
-                    Class addInfoRecord:('fileIn ' , fileName) 
-                ]
-            ] ifFalse:[
-                (path hasSuffix:'cls') ifTrue:[
-                    aStream := path readStream.
-                    aStream notNil ifTrue:[
-                        bos := BinaryObjectStorage onOld:aStream.
-                        Class nameSpaceQuerySignal 
-                            answer:Smalltalk
-                            do:[
-                                bos next.
-                            ].
-                        bos close
-                    ]
-                ] ifFalse:[
-                    ((path hasSuffix:'class')
-                    or:[(path hasSuffix:'cla')]) ifTrue:[
-                        JavaClassReader notNil ifTrue:[
-                            JavaClassReader loadFile:(path pathName)
-                        ]
-                    ] ifFalse:[
-                        aStream := path readStream.
-                        aStream notNil ifTrue:[
-                            [
-                                Class withoutUpdatingChangesDo:[
-                                    oldPath := Smalltalk systemPath.
-                                    Smalltalk systemPath:(oldPath copy addFirst:currentDirectory pathName; yourself).
-                                    wasLazy := Compiler compileLazy:lazy.
-                                    aStream fileIn.
-                                ].
-                                Class addInfoRecord:('fileIn ' , fileName) 
-                            ] valueNowOrOnUnwindDo:[
-                                Compiler compileLazy:wasLazy.
-                                Smalltalk systemPath:oldPath.
-                                aStream close
-                            ]
-                        ]
-                    ]
-                ]
-            ]
-        ].
-        currentFileInFileName := prevCurrentFileName
+	path := currentDirectory filenameFor:fileName.
+	path type == #regular ifTrue:[
+	    prevCurrentFileName := currentFileInFileName.
+	    currentFileInFileName := fileName.
+
+	    (ObjectFileLoader notNil
+	    and:[ObjectFileLoader hasValidBinaryExtension:fileName]) ifTrue:[
+		Object abortSignal catch:[
+		    |p|
+
+		    "/
+		    "/ look if already loaded ...  then unload first
+		    "/
+		    p := path pathName.
+		    (ObjectFileLoader loadedObjectFiles includes:p) ifTrue:[
+			(Dialog confirm:(resources 
+					    string:'%1 is already loaded; load anyway ?'
+					    with:p)) ifFalse:[
+			    ^ self
+			].
+			Transcript showCR:'unloading old ' , p , ' ...'.
+			ObjectFileLoader unloadObjectFile:p. 
+		    ].
+
+		    Transcript showCR:'loading ' , p , ' ...'.
+		    ObjectFileLoader loadObjectFile:p.
+		    Class addInfoRecord:('fileIn ' , fileName) 
+		]
+	    ] ifFalse:[
+		(path hasSuffix:'cls') ifTrue:[
+		    aStream := path readStream.
+		    aStream notNil ifTrue:[
+			bos := BinaryObjectStorage onOld:aStream.
+			Class nameSpaceQuerySignal 
+			    answer:Smalltalk
+			    do:[
+				bos next.
+			    ].
+			bos close
+		    ]
+		] ifFalse:[
+		    ((path hasSuffix:'class')
+		    or:[(path hasSuffix:'cla')]) ifTrue:[
+			JavaClassReader notNil ifTrue:[
+			    JavaClassReader loadFile:(path pathName)
+			]
+		    ] ifFalse:[
+			aStream := path readStream.
+			aStream notNil ifTrue:[
+			    [
+				Class withoutUpdatingChangesDo:[
+				    oldPath := Smalltalk systemPath.
+				    Smalltalk systemPath:(oldPath copy addFirst:currentDirectory pathName; yourself).
+				    wasLazy := Compiler compileLazy:lazy.
+				    aStream fileIn.
+				].
+				Class addInfoRecord:('fileIn ' , fileName) 
+			    ] valueNowOrOnUnwindDo:[
+				Compiler compileLazy:wasLazy.
+				Smalltalk systemPath:oldPath.
+				aStream close
+			    ]
+			]
+		    ]
+		]
+	    ]
+	].
+	currentFileInFileName := prevCurrentFileName
     ]
 
     "Modified: / 19.9.1997 / 23:42:22 / stefan"
@@ -1330,18 +1330,18 @@
 
     string := self getFileInfoString:longInfo.
     string notNil ifTrue:[
-        box := InfoBox title:string.
-        updater := [
-            [true] whileTrue:[
-                Delay waitForSeconds:2.
-                string := self getFileInfoString:longInfo.
-                box title:string
-            ] 
-        ] fork.
-
-        box showAtPointer.
-        updater terminate.
-        box destroy
+	box := InfoBox title:string.
+	updater := [
+	    [true] whileTrue:[
+		Delay waitForSeconds:2.
+		string := self getFileInfoString:longInfo.
+		box title:string
+	    ] 
+	] fork.
+
+	box showAtPointer.
+	updater terminate.
+	box destroy
     ]
 !
 
@@ -1387,87 +1387,87 @@
     |items m sel ns subMenu subItems|
 
     items := #(
-                 ('spawn'            fileSpawn        )
-                 ('-'                nil              )  
-                 ('get contents'     fileGet          GotoLine)      
-                 ('insert contents'  fileInsert       )            
-                 ('show info'        fileGetInfo      InspectIt)
-                 ('show full info'   fileGetLongInfo  CmdI)
-               ).
+		 ('spawn'            fileSpawn        )
+		 ('-'                nil              )  
+		 ('get contents'     fileGet          GotoLine)      
+		 ('insert contents'  fileInsert       )            
+		 ('show info'        fileGetInfo      InspectIt)
+		 ('show full info'   fileGetLongInfo  CmdI)
+	       ).
 
     ((ns := Project current defaultNameSpace) notNil 
     and:[ns ~~ Smalltalk]) ifTrue:[
-        items := items copyWith:(Array 
-                                    with:(resources string:'fileIn (into ''%1'')' with:(Project current defaultNameSpace name))
-                                    with:#fileFileIn
-                                    with:#Accept)
+	items := items copyWith:(Array 
+				    with:(resources string:'fileIn (into ''%1'')' with:(Project current defaultNameSpace name))
+				    with:#fileFileIn
+				    with:#Accept)
                                 
     ] ifFalse:[
-        items := items copyWith:#( 'fileIn'  #fileFileIn  #Accept)
+	items := items copyWith:#( 'fileIn'  #fileFileIn  #Accept)
     ].
 
     items := items , #(
-                 ('-'                                                   )
-                 ('update'                    updateCurrentDirectory    Cmdu)
-                 ('-'                                                   )
-                 ('execute unix command ...'  fileExecute               DoIt)
-                 ('st/x tools'                stxTools                  )
-                 ('-'                                                   )
-                 ('remove'                    fileRemove                Delete)
-                 ('rename ...'                fileRename                )
-                 ('-'                                                   )
-                 ('display long list'         changeDisplayMode         )
-                 ('show all files'            changeDotFileVisibility   )
-                 ('encoding ...'              fileEncoding              )
-                 ('-'                                                   )
-                 ('create directory ...'      newDirectory              CmdD)
-                 ('create file ...'           newFile                   CmdF)
-               ).             
+		 ('-'                                                   )
+		 ('update'                    updateCurrentDirectory    Cmdu)
+		 ('-'                                                   )
+		 ('execute unix command ...'  fileExecute               DoIt)
+		 ('st/x tools'                stxTools                  )
+		 ('-'                                                   )
+		 ('remove'                    fileRemove                Delete)
+		 ('rename ...'                fileRename                )
+		 ('-'                                                   )
+		 ('display long list'         changeDisplayMode         )
+		 ('show all files'            changeDotFileVisibility   )
+		 ('encoding ...'              fileEncoding              )
+		 ('-'                                                   )
+		 ('create directory ...'      newDirectory              CmdD)
+		 ('create file ...'           newFile                   CmdF)
+	       ).             
 
     m := PopUpMenu 
-            itemList:items
-            resources:resources.
+	    itemList:items
+	    resources:resources.
 
     showingHiddenFiles value "showDotFiles" ifTrue:[
-        m labelAt:#changeDotFileVisibility put:(resources string:'hide hidden files')
+	m labelAt:#changeDotFileVisibility put:(resources string:'hide hidden files')
     ].
     showingDetails value "showLongList" ifTrue:[
-        m labelAt:#changeDisplayMode put:(resources string:'display short list')
+	m labelAt:#changeDisplayMode put:(resources string:'display short list')
     ].
 
     items := #(
-                              ('Changes browser'       openChangesBrowser  )
-                              ('Editor'                openEditor          )
-                              ('HTML reader'           openHTMLReader      )
-                              ('Image inspect'         openImageInspector  )
-                              ('show file differences' openDiffView        )
-                  ).
+			      ('Changes browser'       openChangesBrowser  )
+			      ('Editor'                openEditor          )
+			      ('HTML reader'           openHTMLReader      )
+			      ('Image inspect'         openImageInspector  )
+			      ('show file differences' openDiffView        )
+		  ).
 
     OperatingSystem isUNIXlike ifTrue:[
-        items := items , #( ('terminal'              openTerminal )).
+	items := items , #( ('terminal'              openTerminal )).
     ].
 
     JavaInterpreter notNil ifTrue:[
-        items := items , #( ('Java Applet Viewer' openAppletViewer)).
+	items := items , #( ('Java Applet Viewer' openAppletViewer)).
     ].
 
     m subMenuAt:#stxTools 
-            put:(PopUpMenu
-                    itemList:items
-                    resources:resources).
+	    put:(PopUpMenu
+		    itemList:items
+		    resources:resources).
 
     ((sel := fileListView selection) isNil 
     or:[sel isEmpty]) ifTrue:[
-        m disableAll:#(fileGet fileInsert
-                       fileGetInfo fileGetLongInfo
-                       fileFileIn fileFileInLazy
-                       fileRemove fileRename).
-        (m subMenuAt:#stxTools)
-            disableAll:#(openChangesBrowser openEditor openHTMLReader openImageInspector)
+	m disableAll:#(fileGet fileInsert
+		       fileGetInfo fileGetLongInfo
+		       fileFileIn fileFileInLazy
+		       fileRemove fileRename).
+	(m subMenuAt:#stxTools)
+	    disableAll:#(openChangesBrowser openEditor openHTMLReader openImageInspector)
     ] ifFalse:[
-        fileListView selection size > 1 ifTrue:[
-            m disableAll:#( fileGet fileInsert fileGetInfo fileGetLongInfo fileRename )
-        ]
+	fileListView selection size > 1 ifTrue:[
+	    m disableAll:#( fileGet fileInsert fileGetInfo fileGetLongInfo fileRename )
+	]
     ].
 
     ^m
@@ -1575,15 +1575,15 @@
     |img path|
 
     self selectedFilesDo:[:fileName |
-        path := currentDirectory filenameFor:fileName.
-        path isDirectory ifFalse:[
-            img := Image fromFile:(path pathName).
-            img notNil ifTrue:[
-                img perform:aSelector
-            ] ifFalse:[
-                self warn:'unknown format: ' , fileName
-            ]
-        ]
+	path := currentDirectory filenameFor:fileName.
+	path isDirectory ifFalse:[
+	    img := Image fromFile:(path pathName).
+	    img notNil ifTrue:[
+		img perform:aSelector
+	    ] ifFalse:[
+		self warn:'unknown format: ' , fileName
+	    ]
+	]
     ].
 
     "Modified: / 17.9.1995 / 17:41:24 / claus"
@@ -1633,9 +1633,9 @@
 
     orgName1 := ''.
     (sel size > 0) ifTrue:[
-        (currentDirectory construct:sel) isDirectory ifFalse:[
-            orgName1 := sel
-        ]
+	(currentDirectory construct:sel) isDirectory ifFalse:[
+	    orgName1 := sel
+	]
     ].
 
     name1 := orgName1 asValue.
@@ -1650,45 +1650,45 @@
     box addAbortButton; addOkButton.
 
     orgName1 size > 0 ifTrue:[
-        box focusOnField:if2.
+	box focusOnField:if2.
     ].
     box showAtPointer.
 
     box accepted ifTrue:[
-        name1 := name1 value.
-        (name1 size == 0) ifTrue:[
-            err := 'no name entered'.
-        ] ifFalse:[
-            f1 := name1 asFilename.
-            name2 := name2 value.
-            (name2 size == 0) ifTrue:[
-                err := 'no name entered'.
-            ] ifFalse:[
-                f2 := name2 asFilename.
-                f2 exists ifTrue:[
-                    err := '''%2'' already exists'.
-                ] ifFalse:[
-                    f1 exists ifFalse:[
-                        err := '''%1'' does not exist'.
-                    ] ifTrue:[
-                        f1 isDirectory ifTrue:[
-                            err := '''%1'' is a directory'.
-                        ] ifFalse:[
-                            ErrorSignal handle:[:ex |
-                                err := ex errorString
-                            ] do:[
-                                OperatingSystem createHardLinkFrom:name1 to:name2
-                            ]
-                        ]
-                    ]
-                ]
-            ]
-        ].
-
-        err notNil ifTrue:[
-            self warn:(resources string:err with:(name1 ? '') asText allBold with:(name2 ? '') asText allBold).
-            ^ self
-        ].
+	name1 := name1 value.
+	(name1 size == 0) ifTrue:[
+	    err := 'no name entered'.
+	] ifFalse:[
+	    f1 := name1 asFilename.
+	    name2 := name2 value.
+	    (name2 size == 0) ifTrue:[
+		err := 'no name entered'.
+	    ] ifFalse:[
+		f2 := name2 asFilename.
+		f2 exists ifTrue:[
+		    err := '''%2'' already exists'.
+		] ifFalse:[
+		    f1 exists ifFalse:[
+			err := '''%1'' does not exist'.
+		    ] ifTrue:[
+			f1 isDirectory ifTrue:[
+			    err := '''%1'' is a directory'.
+			] ifFalse:[
+			    ErrorSignal handle:[:ex |
+				err := ex errorString
+			    ] do:[
+				OperatingSystem createHardLinkFrom:name1 to:name2
+			    ]
+			]
+		    ]
+		]
+	    ]
+	].
+
+	err notNil ifTrue:[
+	    self warn:(resources string:err with:(name1 ? '') asText allBold with:(name2 ? '') asText allBold).
+	    ^ self
+	].
     ].
 
     "Modified: / 13.8.1998 / 21:47:01 / cg"
@@ -1703,7 +1703,7 @@
 
     orgName1 := ''.
     (sel size > 0) ifTrue:[
-        orgName1 := sel
+	orgName1 := sel
     ].
 
     name1 := orgName1 asValue.
@@ -1718,40 +1718,40 @@
     box addAbortButton; addOkButton.
 
     orgName1 size > 0 ifTrue:[
-        box focusOnField:if2.
+	box focusOnField:if2.
     ].
     box showAtPointer.
 
     box accepted ifTrue:[
-        name1 := name1 value.
-        (name1 size == 0) ifTrue:[
-            err := 'no name entered'.
-        ] ifFalse:[
-            f1 := name1 asFilename.
-            name2 := name2 value.
-            (name2 size == 0) ifTrue:[
-                err := 'no name entered'.
-            ] ifFalse:[
-                f2 := name2 asFilename.
-                f2 exists ifTrue:[
-                    err := '''%2'' already exists'.
-                ] ifFalse:[
-                    f1 exists ifFalse:[
-                        err := '''%1'' does not exist (link created anyway)'.
-                    ].
-                    ErrorSignal handle:[:ex |
-                        err := ex errorString
-                    ] do:[
-                        OperatingSystem createSymbolicLinkFrom:name1 to:name2
-                    ]
-                ]
-            ]
-        ].
-
-        err notNil ifTrue:[
-            self warn:(resources string:err with:(name1 ? '') asText allBold with:(name2 ? '') asText allBold).
-            ^ self
-        ].
+	name1 := name1 value.
+	(name1 size == 0) ifTrue:[
+	    err := 'no name entered'.
+	] ifFalse:[
+	    f1 := name1 asFilename.
+	    name2 := name2 value.
+	    (name2 size == 0) ifTrue:[
+		err := 'no name entered'.
+	    ] ifFalse:[
+		f2 := name2 asFilename.
+		f2 exists ifTrue:[
+		    err := '''%2'' already exists'.
+		] ifFalse:[
+		    f1 exists ifFalse:[
+			err := '''%1'' does not exist (link created anyway)'.
+		    ].
+		    ErrorSignal handle:[:ex |
+			err := ex errorString
+		    ] do:[
+			OperatingSystem createSymbolicLinkFrom:name1 to:name2
+		    ]
+		]
+	    ]
+	].
+
+	err notNil ifTrue:[
+	    self warn:(resources string:err with:(name1 ? '') asText allBold with:(name2 ? '') asText allBold).
+	    ^ self
+	].
     ].
 
     "Modified: / 13.8.1998 / 21:26:59 / cg"
@@ -1805,11 +1805,11 @@
     (sel size > 0
     and:[lastFileDiffDirectory notNil
     and:[lastFileDiffDirectory asFilename isDirectory]]) ifTrue:[
-        f := lastFileDiffDirectory asFilename construct:sel.
-        (f exists
-        and:[f isReadable]) ifTrue:[
-            orgName1 := f name
-        ]
+	f := lastFileDiffDirectory asFilename construct:sel.
+	(f exists
+	and:[f isReadable]) ifTrue:[
+	    orgName1 := f name
+	]
     ].
 
     name1 := orgName1 asValue.
@@ -1827,57 +1827,57 @@
     box showAtPointer.
 
     box accepted ifTrue:[
-        name1 := name1 value.
-        (name1 isNil or:[name1 isEmpty]) ifTrue:[
-            text1 := subView contents.
-            name1 := nil.
-            l1 := 'browser contents'
-        ] ifFalse:[
-            name1 := currentDirectory filenameFor:name1.
-            name1 isReadable ifFalse:[
-                nm := name1.
-                name1 exists ifFalse:[
-                    err := '%1 does not exist'.
-                ] ifTrue:[
-                    err := '%1 is not readable'
-                ].
-            ].
-            l1 := name1 pathName
-        ].
-
-        name2 := currentDirectory filenameFor:name2 value.
-        err isNil ifTrue:[
-            name2 isReadable ifFalse:[
-                nm := name2.
-                name2 exists ifFalse:[
-                    err := '%1 does not exist'.
-                ] ifTrue:[
-                    err := '%1 is not readable'
-                ].
-            ].
-        ].
-        err notNil ifTrue:[
-            self warn:(resources string:err with:nm pathName).
-            ^ self
-        ].
-
-        self withWaitCursorDo:[
-            (name1 notNil and:[name1 name ~= orgName1]) ifTrue:[
-                lastFileDiffDirectory := name1 directoryName
-            ].
-            name1 notNil ifTrue:[
-                text1 := name1 contents.
-            ].
-            text2 := name2 contents.
-            text1 = text2 ifTrue:[
-                self information:'same contents'
-            ] ifFalse:[
-                d := DiffTextView 
-                        openOn:text1 label:l1
-                        and:text2 label:name2 pathName.
-                d label:'file differences'.
-            ]
-        ]
+	name1 := name1 value.
+	(name1 isNil or:[name1 isEmpty]) ifTrue:[
+	    text1 := subView contents.
+	    name1 := nil.
+	    l1 := 'browser contents'
+	] ifFalse:[
+	    name1 := currentDirectory filenameFor:name1.
+	    name1 isReadable ifFalse:[
+		nm := name1.
+		name1 exists ifFalse:[
+		    err := '%1 does not exist'.
+		] ifTrue:[
+		    err := '%1 is not readable'
+		].
+	    ].
+	    l1 := name1 pathName
+	].
+
+	name2 := currentDirectory filenameFor:name2 value.
+	err isNil ifTrue:[
+	    name2 isReadable ifFalse:[
+		nm := name2.
+		name2 exists ifFalse:[
+		    err := '%1 does not exist'.
+		] ifTrue:[
+		    err := '%1 is not readable'
+		].
+	    ].
+	].
+	err notNil ifTrue:[
+	    self warn:(resources string:err with:nm pathName).
+	    ^ self
+	].
+
+	self withWaitCursorDo:[
+	    (name1 notNil and:[name1 name ~= orgName1]) ifTrue:[
+		lastFileDiffDirectory := name1 directoryName
+	    ].
+	    name1 notNil ifTrue:[
+		text1 := name1 contents.
+	    ].
+	    text2 := name2 contents.
+	    text1 = text2 ifTrue:[
+		self information:'same contents'
+	    ] ifFalse:[
+		d := DiffTextView 
+			openOn:text1 label:l1
+			and:text2 label:name2 pathName.
+		d label:'file differences'.
+	    ]
+	]
     ].
 
     "Created: / 7.12.1995 / 20:33:58 / cg"
@@ -1951,25 +1951,25 @@
     "depending on the showLongList setting, show or hde the tabSpec view"
 
     showingDetails value "showLongList" ifTrue:[
-        tabRulerView isNil ifTrue:[
-            self createTabRulerIn:scrollView superView.
-        ].
-        tabRulerView beVisible.
+	tabRulerView isNil ifTrue:[
+	    self createTabRulerIn:scrollView superView.
+	].
+	tabRulerView beVisible.
         
-        false "self is3D" ifTrue:[
-            scrollView topInset:(tabRulerView superView height).
-            tabRulerView superView leftInset:(fileListView originRelativeTo:scrollView) x.
-        ] ifFalse:[
-            scrollView topInset:(tabRulerView height).
-            tabRulerView leftInset:(fileListView originRelativeTo:scrollView) x.
-        ].
-        tabRulerView hiddenTabs:#(1).
-        tabRulerView fixedTabs:#(1).
+	false "self is3D" ifTrue:[
+	    scrollView topInset:(tabRulerView superView height).
+	    tabRulerView superView leftInset:(fileListView originRelativeTo:scrollView) x.
+	] ifFalse:[
+	    scrollView topInset:(tabRulerView height).
+	    tabRulerView leftInset:(fileListView originRelativeTo:scrollView) x.
+	].
+	tabRulerView hiddenTabs:#(1).
+	tabRulerView fixedTabs:#(1).
     ] ifFalse:[
-        tabRulerView notNil ifTrue:[
-            tabRulerView beInvisible.
-        ].
-        scrollView topInset:0
+	tabRulerView notNil ifTrue:[
+	    tabRulerView beInvisible.
+	].
+	scrollView topInset:0
     ].
     tabSpec := nil.
 
@@ -2009,15 +2009,15 @@
     |v|
 
     false "self is3D" ifTrue:[
-        v := View in:topFrame.
-        v level:-1.
-        tabRulerView := TabSpecRuler in:v.
-        tabRulerView level:1.
-        v origin:(0.0@0.0) corner:(1.0@10).
-        tabRulerView origin:(0.0@0.0) corner:(1.0@1.0).
+	v := View in:topFrame.
+	v level:-1.
+	tabRulerView := TabSpecRuler in:v.
+	tabRulerView level:1.
+	v origin:(0.0@0.0) corner:(1.0@10).
+	tabRulerView origin:(0.0@0.0) corner:(1.0@1.0).
     ] ifFalse:[
-        tabRulerView := TabSpecRuler in:topFrame.
-        tabRulerView origin:(0.0@0.0) corner:(1.0@10).
+	tabRulerView := TabSpecRuler in:topFrame.
+	tabRulerView origin:(0.0@0.0) corner:(1.0@10).
     ].
     tabRulerView borderWidth:0.
     tabRulerView synchronousOperation:true.
@@ -2102,20 +2102,20 @@
     lockUpdate := false.
 
     CommandHistory isNil ifTrue:[
-        CommandHistory := OrderedCollection new.
-        CommandHistorySize := 50
+	CommandHistory := OrderedCollection new.
+	CommandHistorySize := 50
     ].
     DirectoryHistory isNil ifTrue:[
-        DirectoryHistory := OrderedCollection new.
-        DirectoryHistoryWhere := OrderedCollection new.
-        HistorySize := 15.
+	DirectoryHistory := OrderedCollection new.
+	DirectoryHistoryWhere := OrderedCollection new.
+	HistorySize := 15.
     ].
     commandIndex := 0.
 
     icons := Dictionary new.
 
     Icons isNil ifTrue:[
-        self class initializeIcons
+	self class initializeIcons
     ].
 
     myName := (resources string:self class name).
@@ -2130,13 +2130,13 @@
     menuPanel origin:(0.0 @ 0.0) corner:(1.0 @ (mH)).
 
     labelFrame := View 
-                        origin:(0.0 @ mH)
-                        corner:(1.0 @ (font height * 1.8 + mH) rounded)
-                        in:self.
+			origin:(0.0 @ mH)
+			corner:(1.0 @ (font height * 1.8 + mH) rounded)
+			in:self.
 
     (styleSheet name = #st80 or:[styleSheet name == #win95]) ifTrue:[
-        labelFrame level:1.
-        labelFrame rightInset:-1.
+	labelFrame level:1.
+	labelFrame rightInset:-1.
     ].
 
     spacing := ViewSpacing.
@@ -2155,8 +2155,8 @@
     filterModel := '*' asValue.
     filterField := EditField in:labelFrame.
     filterField 
-        origin:[((width // 4 * 3) + halfSpacing) @ (halfSpacing)]
-        corner:(1.0 @ (filterField heightIncludingBorder + halfSpacing) ).
+	origin:[((width // 4 * 3) + halfSpacing) @ (halfSpacing)]
+	corner:(1.0 @ (filterField heightIncludingBorder + halfSpacing) ).
     filterField rightInset:(ViewSpacing - halfSpacing).
     filterField model:filterModel.
 
@@ -2180,14 +2180,14 @@
 
     labelView := FilenameEditField in:labelFrame.
     labelView 
-        origin:(halfSpacing @ (halfSpacing))
-        extent:[((width // 4 * 3) - spacing - borderWidth)
-                @
-                (filterField heightIncludingBorder)
-                "(font height + font descent)"
-               ].
+	origin:(halfSpacing @ (halfSpacing))
+	extent:[((width // 4 * 3) - spacing - borderWidth)
+		@
+		(filterField heightIncludingBorder)
+		"(font height + font descent)"
+	       ].
     labelView menu:#labelMenu; 
-            aspect:#path; changeMessage:#pathChanged:.
+	    aspect:#path; changeMessage:#pathChanged:.
     labelView model:self.
     labelView backgroundColor:(labelFrame viewBackground).
     labelFrame model:self; menu:#labelMenu.
@@ -2223,7 +2223,7 @@
     frame := VariableVerticalPanel origin:0.0@mH corner:1.0@1.0 in:self.
     frame topInset:labelFrame height.
     commandView notNil ifTrue:[
-        frame bottomInset:(commandView height + spacing + spacing)
+	frame bottomInset:(commandView height + spacing + spacing)
     ].
 
     topFrame := View in:frame.
@@ -2245,20 +2245,20 @@
     fileListView menuHolder:self; menuPerformer:self; menuMessage:#fileListMenu.
     fileListView allowDrag:true.
     fileListView dragObjectConverter:[:obj | 
-                                        |dir nm path idx|
-
-                                        nm := obj theObject asString.
-                                        idx := fileListView list indexOf:nm.
-                                        idx == 0 ifTrue:[
-                                            "/ cannot happen ...
-                                            nil
-                                        ] ifFalse:[
-                                            nm := fileList at:idx.
-                                            dir := currentDirectory pathName asFilename.
-                                            path := dir constructString:nm.
-                                            DropObject newFile:path.
-                                        ]
-                                     ].
+					|dir nm path idx|
+
+					nm := obj theObject asString.
+					idx := fileListView list indexOf:nm.
+					idx == 0 ifTrue:[
+					    "/ cannot happen ...
+					    nil
+					] ifFalse:[
+					    nm := fileList at:idx.
+					    dir := currentDirectory pathName asFilename.
+					    path := dir constructString:nm.
+					    DropObject newFile:path.
+					]
+				     ].
 
     "/ sigh - must be delayed - origin is not yet fixe
 "/    tabRulerView leftInset:(fileListView originRelativeTo:scrollView) x.
@@ -2269,7 +2269,7 @@
     v origin:(0.0 @ 0.3) corner:(1.0 @ 1.0).
     subView := v scrolledView.
     (subView respondsTo:#directoryForFileDialog:) ifTrue:[
-        subView directoryForFileDialog:currentDirectory
+	subView directoryForFileDialog:currentDirectory
     ].
 
 "/    buttonPanel := HorizontalPanelView in:self.
@@ -2403,15 +2403,15 @@
     "copy fileList to the clipBoard"
 
     self setTextSelection:(fileListView list 
-                              collect:[:l | |ll|
-                                        ll := l string withoutSeparators.
-                                        (ll endsWith:' ...') ifTrue:[
-                                            ll copyWithoutLast:4
-                                        ] ifFalse:[
-                                            ll
-                                        ]
-                                      ]) 
-                                asStringCollection asString.
+			      collect:[:l | |ll|
+					ll := l string withoutSeparators.
+					(ll endsWith:' ...') ifTrue:[
+					    ll copyWithoutLast:4
+					] ifFalse:[
+					    ll
+					]
+				      ]) 
+				asStringCollection asString.
 
     "Modified: / 17.8.1998 / 10:13:10 / cg"
 !
@@ -2452,17 +2452,17 @@
     msg := '\' withCRs , myClass name asBoldText, rev.
 
     AboutBox isNil ifTrue:[
-        "/ this handles bad installations of ST/X,
-        "/ where the AboutBox is missing.
-        "/ (May vanish in the future)
-        ^ self information:msg
+	"/ this handles bad installations of ST/X,
+	"/ where the AboutBox is missing.
+	"/ (May vanish in the future)
+	^ self information:msg
     ].
 
     box := AboutBox title:msg.
 
     image := self class defaultIcon.
     image notNil ifTrue:[
-        box image:image
+	box image:image
     ].
     box   label:'About This Application'.
     box   autoHideAfter:10 with:[].
@@ -2513,10 +2513,10 @@
     "exit FileBrowser"
 
     (self askIfModified:'contents has not been saved.\\Modifications will be lost when FileBrowser is closed.'
-              yesButton:'close') 
+	      yesButton:'close') 
     ifTrue:[
-        "/ self windowGroup closeDownViews.
-        super closeRequest
+	"/ self windowGroup closeDownViews.
+	super closeRequest
     ]
 
     "Created: / 3.8.1998 / 19:55:06 / cg"
@@ -2618,7 +2618,7 @@
     "sent from label menu to change back to a previous directory"
 
     self discardChangesDialog ifTrue:[
-        self doChangeCurrentDirectoryTo:aDirectoryName updateHistory:true "/false.
+	self doChangeCurrentDirectoryTo:aDirectoryName updateHistory:true "/false.
     ].
 
     "Modified: / 2.10.1997 / 14:09:24 / stefan"
@@ -2687,62 +2687,62 @@
     |items menu currentIndex|
 
     items := #(
-                   ('copy path'                   copyPath                  )
-                   ('-'                                                     )
-                   ('up'                          changeToParentDirectory   )
-                   ('back'                        changeToPreviousDirectory )
-                   ('change to home-directory'    changeToHomeDirectory     )
-                   ('change to default-directory' changeToDefaultDirectory  )
-                   ('change directory ...'        changeCurrentDirectory    )
-               ).             
+		   ('copy path'                   copyPath                  )
+		   ('-'                                                     )
+		   ('up'                          changeToParentDirectory   )
+		   ('back'                        changeToPreviousDirectory )
+		   ('change to home-directory'    changeToHomeDirectory     )
+		   ('change to default-directory' changeToDefaultDirectory  )
+		   ('change directory ...'        changeCurrentDirectory    )
+	       ).             
 
     (JavaClassReader notNil and:[JavaClassReader isLoaded]) ifTrue:[
-        items := items , #(
-                            ( '-')
-                            ( 'add to JavaClassPath'       addDirToJavaClassPath)
-                            ( 'add to JavaSourcePath'      addDirToJavaSourcePath)
-                            ( 'remove from JavaClassPath'  removeDirFromJavaClassPath)
-                            ( 'remove from JavaSourcePath' removeDirFromJavaSourcePath)
-                          ).
+	items := items , #(
+			    ( '-')
+			    ( 'add to JavaClassPath'       addDirToJavaClassPath)
+			    ( 'add to JavaSourcePath'      addDirToJavaSourcePath)
+			    ( 'remove from JavaClassPath'  removeDirFromJavaClassPath)
+			    ( 'remove from JavaSourcePath' removeDirFromJavaSourcePath)
+			  ).
     ].
 
     DirectoryHistory size > 0 ifTrue:[
-        items := items copyWith:#('-').
-        items := items ,
-                 (DirectoryHistory 
-                        collect:[:dirName |
-                                    Array 
-                                        with:dirName 
-                                        with:#changeDirectoryTo:
-                                        with:nil
-                                        with:dirName
-                                ]
-                 ).
-        currentIndex := items findFirst:[:i | (i at:1) = currentDirectory pathName].
-        currentIndex == 0 ifTrue:[currentIndex := nil].
+	items := items copyWith:#('-').
+	items := items ,
+		 (DirectoryHistory 
+			collect:[:dirName |
+				    Array 
+					with:dirName 
+					with:#changeDirectoryTo:
+					with:nil
+					with:dirName
+				]
+		 ).
+	currentIndex := items findFirst:[:i | (i at:1) = currentDirectory pathName].
+	currentIndex == 0 ifTrue:[currentIndex := nil].
     ].
 
     menu := PopUpMenu 
-                itemList:items
-                resources:resources.
+		itemList:items
+		resources:resources.
 
     previousDirectory isNil ifTrue:[
-        menu disable:#changeToPreviousDirectory.
+	menu disable:#changeToPreviousDirectory.
     ].
     currentIndex notNil ifTrue:[
-        menu disable:currentIndex
+	menu disable:currentIndex
     ].
     (JavaClassReader notNil and:[JavaClassReader isLoaded]) ifTrue:[
-        (Java classPath includes:currentDirectory pathName) ifTrue:[
-            menu disable:#addDirToJavaClassPath
-        ] ifFalse:[
-            menu disable:#removeDirFromJavaClassPath
-        ].
-        (Java sourcePath includes:currentDirectory pathName) ifTrue:[
-            menu disable:#addDirToJavaSourcePath
-        ] ifFalse:[
-            menu disable:#removeDirFromJavaSourcePath
-        ].
+	(Java classPath includes:currentDirectory pathName) ifTrue:[
+	    menu disable:#addDirToJavaClassPath
+	] ifFalse:[
+	    menu disable:#removeDirFromJavaClassPath
+	].
+	(Java sourcePath includes:currentDirectory pathName) ifTrue:[
+	    menu disable:#addDirToJavaSourcePath
+	] ifFalse:[
+	    menu disable:#removeDirFromJavaSourcePath
+	].
     ].
     ^menu.
 
@@ -2843,12 +2843,12 @@
     osName := OperatingSystem platformName.
 
     box := FilenameEnterBox 
-                title:(resources string:'execute %1 command:' with:osName)
-               okText:(resources string:'execute')
-               action:aBlock.
+		title:(resources string:'execute %1 command:' with:osName)
+	       okText:(resources string:'execute')
+	       action:aBlock.
 
     fileName notNil ifTrue:[
-        self initialCommandFor:fileName into:box.
+	self initialCommandFor:fileName into:box.
     ].
     box directory:currentDirectory.
     box showAtPointer.
@@ -2907,11 +2907,11 @@
 
     sel := fileListView selection.
     sel notNil ifTrue:[
-        self withWaitCursorDo:[
-            sel do:[:aSelectionIndex |
-                aBlock value:(fileList at:aSelectionIndex )
-            ]
-        ]
+	self withWaitCursorDo:[
+	    sel do:[:aSelectionIndex |
+		aBlock value:(fileList at:aSelectionIndex )
+	    ]
+	]
     ]
 
     "Modified: / 18.6.1998 / 15:29:06 / cg"
@@ -2947,18 +2947,18 @@
 
     newCollection := aCollection species new.
     aCollection do:[:fname |
-        |ignore|
-
-        ignore := false.
-
-        ((fname startsWith:'.') and:[fname ~= '..']) ifTrue:[
-            showingHiddenFiles value "showDotFiles" ifFalse:[
-                ignore := true
-            ]
-        ].
-        ignore ifFalse:[
-            newCollection add:fname
-        ]
+	|ignore|
+
+	ignore := false.
+
+	((fname startsWith:'.') and:[fname ~= '..']) ifTrue:[
+	    showingHiddenFiles value "showDotFiles" ifFalse:[
+		ignore := true
+	    ]
+	].
+	ignore ifFalse:[
+	    newCollection add:fname
+	]
     ].
     ^ newCollection
 
@@ -3021,13 +3021,13 @@
      kill will make me raise the stopSignal when pressed
     "
     killButton 
-        action:[
-            stream notNil ifTrue:[
-                access critical:[
-                    myProcess interruptWith:[stopSignal raiseRequest].
-                ]
-            ]
-        ].
+	action:[
+	    stream notNil ifTrue:[
+		access critical:[
+		    myProcess interruptWith:[stopSignal raiseRequest].
+		]
+	    ]
+	].
 
     "
      pause makes me stop reading the commands output
@@ -3035,11 +3035,11 @@
     pauseHolder := false asValue.
     pauseToggle model:pauseHolder.
     pauseToggle pressAction:[
-        stream notNil ifTrue:[
-            access critical:[
-                myProcess interruptWith:[pauseSignal raiseRequest].
-            ]
-        ]
+	stream notNil ifTrue:[
+	    access critical:[
+		myProcess interruptWith:[pauseSignal raiseRequest].
+	    ]
+	]
     ].
 
 
@@ -3063,177 +3063,177 @@
     self label:(myName , ': executing ' , (command copyTo:(20 min:command size)) , ' ...').
     [
       self withWaitCursorDo:[
-        stopSignal catch:[
-            pauseSignal handle:[:ex|
-                |noPauseSema|
-
-                "/    
-                "/ allow interaction with
-                "/ the codeView via the other windowGroup
-                "/
-                lowerFrameView windowGroup:(killButton windowGroup).
-
-                "/
-                "/ wait for pause to be turned off
-                "/
-                noPauseSema := Semaphore new.
-                pauseHolder onChangeSend:#signal to:noPauseSema.
-                noPauseSema wait.
-
-                "/    
-                "/ no interaction with the codeView ...
-                "/
-                lowerFrameView windowGroup:(self windowGroup).
-                ex proceed.
-            ] do:[
-                startLine := subView cursorLine.
-                startCol := subView cursorCol.
-
-                "
-                 this can be a time consuming operation; therefore lower my priority
-                "
-                myProcess := Processor activeProcess.
-                myPriority := myProcess priority.
-                myProcess priority:(Processor userBackgroundPriority).
-
-                stream := PipeStream 
-                            readingFrom:command
-                            errorDisposition:#inline
-                            inDirectory:currentDirectory.
-                stream notNil ifTrue:[
-                    [
-                        |codeView lines noPauseSema enc|
-
-                        enc := fileEncoding.
-                        enc == #iso8859 ifTrue:[
-                            enc := nil
-                        ].
-
-                        stream buffered:true.
-                        codeView := subView.
-                        codeView unselect.
-
-                        replace ifTrue:[
-                            codeView list:nil.
-                            lnr := 1.
-                        ].
-
-                        stillReplacing := replace.
-
-                        [stream readWait. stream atEnd] whileFalse:[
-                            "
-                             data available; read up to 100 lines
-                             and insert as a single junk. This speeds up
-                             display of long output (less line-scrolling).
-                            "
-                            lines := OrderedCollection new:100.
-
-                            [
-                                line := stream nextLine.
-                                line notNil ifTrue:[
-                                    enc notNil ifTrue:[
-                                        line := line decodeFrom:enc
-                                    ].
-                                    lines add:line
-                                ].
-                            ] doWhile:[
-                                stream canReadWithoutBlocking
-                                and:[stream atEnd not
-                                and:[lines size < 100]]
-                            ]. 
-
-                            "
-                             need this critical section; otherwise,
-                             we could get the signal while waiting for
-                             an expose event ...
-                            "
-                            access critical:[                        
-                                lines size > 0 ifTrue:[
-                                    stillReplacing ifTrue:[
-                                        lines do:[:line |
-                                            codeView at:lnr put:line withTabsExpanded.
-                                            codeView cursorToBottom; cursorDown:1.
-                                            lnr := lnr + 1.
-                                            lnr > codeView list size ifTrue:[
-                                                stillReplacing := false
-                                            ]
-                                        ].
-                                    ] ifFalse:[
-                                        codeView insertLines:lines before:codeView cursorLine.
-                                        codeView cursorDown:lines size.
-                                    ]
-                                ].
-                            ].
-
-                            "
-                             give others running at same prio a chance too
-                             (especially other FileBrowsers doing the same)
-                            "
-                            Processor yield
-                        ].
-                    ] valueNowOrOnUnwindDo:[
-                        stream shutDown "close". stream := nil.
-                    ].
-
-                    "/
-                    "/ the command could have changed the directory
-                    "/
-                    self updateCurrentDirectoryIfChanged
-                ].
-                replace ifTrue:[
-                    subView modified:false.
-                ].
-            ]
-        ]
+	stopSignal catch:[
+	    pauseSignal handle:[:ex|
+		|noPauseSema|
+
+		"/    
+		"/ allow interaction with
+		"/ the codeView via the other windowGroup
+		"/
+		lowerFrameView windowGroup:(killButton windowGroup).
+
+		"/
+		"/ wait for pause to be turned off
+		"/
+		noPauseSema := Semaphore new.
+		pauseHolder onChangeSend:#signal to:noPauseSema.
+		noPauseSema wait.
+
+		"/    
+		"/ no interaction with the codeView ...
+		"/
+		lowerFrameView windowGroup:(self windowGroup).
+		ex proceed.
+	    ] do:[
+		startLine := subView cursorLine.
+		startCol := subView cursorCol.
+
+		"
+		 this can be a time consuming operation; therefore lower my priority
+		"
+		myProcess := Processor activeProcess.
+		myPriority := myProcess priority.
+		myProcess priority:(Processor userBackgroundPriority).
+
+		stream := PipeStream 
+			    readingFrom:command
+			    errorDisposition:#inline
+			    inDirectory:currentDirectory.
+		stream notNil ifTrue:[
+		    [
+			|codeView lines noPauseSema enc|
+
+			enc := fileEncoding.
+			enc == #iso8859 ifTrue:[
+			    enc := nil
+			].
+
+			stream buffered:true.
+			codeView := subView.
+			codeView unselect.
+
+			replace ifTrue:[
+			    codeView list:nil.
+			    lnr := 1.
+			].
+
+			stillReplacing := replace.
+
+			[stream readWait. stream atEnd] whileFalse:[
+			    "
+			     data available; read up to 100 lines
+			     and insert as a single junk. This speeds up
+			     display of long output (less line-scrolling).
+			    "
+			    lines := OrderedCollection new:100.
+
+			    [
+				line := stream nextLine.
+				line notNil ifTrue:[
+				    enc notNil ifTrue:[
+					line := line decodeFrom:enc
+				    ].
+				    lines add:line
+				].
+			    ] doWhile:[
+				stream canReadWithoutBlocking
+				and:[stream atEnd not
+				and:[lines size < 100]]
+			    ]. 
+
+			    "
+			     need this critical section; otherwise,
+			     we could get the signal while waiting for
+			     an expose event ...
+			    "
+			    access critical:[                        
+				lines size > 0 ifTrue:[
+				    stillReplacing ifTrue:[
+					lines do:[:line |
+					    codeView at:lnr put:line withTabsExpanded.
+					    codeView cursorToBottom; cursorDown:1.
+					    lnr := lnr + 1.
+					    lnr > codeView list size ifTrue:[
+						stillReplacing := false
+					    ]
+					].
+				    ] ifFalse:[
+					codeView insertLines:lines before:codeView cursorLine.
+					codeView cursorDown:lines size.
+				    ]
+				].
+			    ].
+
+			    "
+			     give others running at same prio a chance too
+			     (especially other FileBrowsers doing the same)
+			    "
+			    Processor yield
+			].
+		    ] valueNowOrOnUnwindDo:[
+			stream shutDown "close". stream := nil.
+		    ].
+
+		    "/
+		    "/ the command could have changed the directory
+		    "/
+		    self updateCurrentDirectoryIfChanged
+		].
+		replace ifTrue:[
+		    subView modified:false.
+		].
+	    ]
+	]
       ]
     ] valueNowOrOnUnwindDo:[
-        |wg|
-
-        self label:myName; iconLabel:myName.
-        myProcess notNil ifTrue:[myProcess priority:myPriority].
-
-        "
-         hide the button, and make sure it will stay
-         hidden when we are realized again
-        "
-        killButton beInvisible.
-        pauseToggle beInvisible.
-
-        commandView beVisible.
-
-        "
-         remove the killButton from its group
-         (otherwise, it will be destroyed when we shut down the group)
-        "
-        wg := killButton windowGroup.
-        killButton windowGroup:nil.
-        pauseToggle windowGroup:nil.
-
-        "
-         shut down the kill buttons windowgroup
-        "
-        wg notNil ifTrue:[
-            wg process terminate.
-        ].
-        "
-         clear its action (actually not needed, but
-         releases reference to thisContext earlier)
-        "
-        killButton action:nil.
-        pauseToggle pressAction:nil.
-        "/    
-        "/ allow interaction with the codeView
-        "/ (bring it back into my group)
-        "/
-        lowerFrameView windowGroup:(self windowGroup).
+	|wg|
+
+	self label:myName; iconLabel:myName.
+	myProcess notNil ifTrue:[myProcess priority:myPriority].
+
+	"
+	 hide the button, and make sure it will stay
+	 hidden when we are realized again
+	"
+	killButton beInvisible.
+	pauseToggle beInvisible.
+
+	commandView beVisible.
+
+	"
+	 remove the killButton from its group
+	 (otherwise, it will be destroyed when we shut down the group)
+	"
+	wg := killButton windowGroup.
+	killButton windowGroup:nil.
+	pauseToggle windowGroup:nil.
+
+	"
+	 shut down the kill buttons windowgroup
+	"
+	wg notNil ifTrue:[
+	    wg process terminate.
+	].
+	"
+	 clear its action (actually not needed, but
+	 releases reference to thisContext earlier)
+	"
+	killButton action:nil.
+	pauseToggle pressAction:nil.
+	"/    
+	"/ allow interaction with the codeView
+	"/ (bring it back into my group)
+	"/
+	lowerFrameView windowGroup:(self windowGroup).
     ].
 
     currentFileName isNil ifTrue:[
-        subView modified:false.
+	subView modified:false.
     ].
 
     subView size > 10000 ifTrue:[
-        self warn:'text quite large now - please cut off some lines'
+	self warn:'text quite large now - please cut off some lines'
     ]
 
     "Modified: / 21.9.1995 / 11:18:46 / claus"
@@ -3275,116 +3275,116 @@
 
     path := currentDirectory filenameFor:fileName.
     (path type == #regular) ifTrue:[
-        path isExecutableProgram ifTrue:[
-            aBox initialText:(fileName , ' <arguments>').
-            ^ self
-        ].
-
-        select := true.
-
-        "some heuristics - my personal preferences ...
-         (actually this should come from a configfile)"
-
-        (fileName endsWith:'akefile') ifTrue:[
-            aBox initialText:'make target' selectFrom:6 to:11.
-            ^ self
-        ].
-
-        suffix := path suffix.
-        (suffix = 'C') ifTrue:[
-            cmd := 'g++ -c %1'.
-            select := 6.
-        ] ifFalse:[
-            suffix := suffix asLowercase.
-            (suffix = 'taz') ifTrue:[
-                aBox initialText:'zcat %1 | tar tvf -'.
-                select := false.
-            ].
-            (suffix = 'tar') ifTrue:[
-                cmd := 'tar tvf %1'.
-                select := 7.
-            ].
-            (suffix = 'zoo') ifTrue:[
-                cmd := 'zoo -list %1'.
-                select := 9.
-            ].
-            (suffix = 'zip') ifTrue:[
-                cmd := 'unzip -l %1'.
-                select := 8.
-            ].
-            (suffix = 'jar') ifTrue:[
-                cmd := 'unzip -l %1'.
-                select := 8.
-            ].
-            (suffix = 'z') ifTrue:[
-                (fileName endsWith:'tar.z') ifTrue:[
-                    cmd := 'zcat %1 | tar tvf -'.
-                    select := false.
-                ] ifFalse:[
-                    cmd := 'uncompress %1'
-                ].
-            ].
-            (suffix = 'gz') ifTrue:[
-                (fileName endsWith:'tar.gz') ifTrue:[
-                    cmd := ('gunzip < %1 | tar tvf -' ).
-                    select := false.
-                ] ifFalse:[
-                    cmd := 'gunzip %1'.
-                ].
-            ].
-            (suffix = 'tgz') ifTrue:[
-                cmd := ('gunzip < %1 | tar tvf -' ).
-                select := false.
-            ].
-            (suffix = 'html') ifTrue:[
-                cmd := 'netscape %1'
-            ].
-            (suffix = 'htm') ifTrue:[
-                cmd := 'netscape %1'
-            ].
-            (suffix = 'uue') ifTrue:[
-                cmd := 'uudecode %1'
-            ].
-            (suffix = 'c') ifTrue:[
-                cmd := 'cc -c %1'.
-                select := 5.
-            ].
-            (suffix = 'cc') ifTrue:[
-                cmd := 'g++ -c %1'.
-                select := 6.
-            ].
-            (suffix = 'xbm') ifTrue:[
-                cmd := 'bitmap %1'
-            ].
-            (suffix = 'ps') ifTrue:[
-                cmd := 'ghostview %1'
-            ].
-            ((suffix = '1') or:[suffix = 'man']) ifTrue:[
-                cmd := 'nroff -man %1'.
-                select := 10.
-            ].
-        ].
-
-        cmd isNil ifTrue:[
-            DefaultCommandPerSuffix isNil ifTrue:[
-                cmd := '<cmd>'
-            ] ifFalse:[
-                cmd := DefaultCommandPerSuffix 
-                        at:suffix
-                        ifAbsent:'<cmd>'.
-            ].
-            cmd := cmd , ' %1'.
-        ].
-
-        cmd := cmd bindWith:fileName.
-        select == false ifTrue:[
-            aBox initialText:cmd
-        ] ifFalse:[
-            select isInteger ifFalse:[
-                select := (cmd indexOf:Character space ifAbsent:[cmd size + 1]) - 1.
-            ].
-            aBox initialText:cmd selectFrom:1 to:select
-        ]
+	path isExecutableProgram ifTrue:[
+	    aBox initialText:(fileName , ' <arguments>').
+	    ^ self
+	].
+
+	select := true.
+
+	"some heuristics - my personal preferences ...
+	 (actually this should come from a configfile)"
+
+	(fileName endsWith:'akefile') ifTrue:[
+	    aBox initialText:'make target' selectFrom:6 to:11.
+	    ^ self
+	].
+
+	suffix := path suffix.
+	(suffix = 'C') ifTrue:[
+	    cmd := 'g++ -c %1'.
+	    select := 6.
+	] ifFalse:[
+	    suffix := suffix asLowercase.
+	    (suffix = 'taz') ifTrue:[
+		aBox initialText:'zcat %1 | tar tvf -'.
+		select := false.
+	    ].
+	    (suffix = 'tar') ifTrue:[
+		cmd := 'tar tvf %1'.
+		select := 7.
+	    ].
+	    (suffix = 'zoo') ifTrue:[
+		cmd := 'zoo -list %1'.
+		select := 9.
+	    ].
+	    (suffix = 'zip') ifTrue:[
+		cmd := 'unzip -l %1'.
+		select := 8.
+	    ].
+	    (suffix = 'jar') ifTrue:[
+		cmd := 'unzip -l %1'.
+		select := 8.
+	    ].
+	    (suffix = 'z') ifTrue:[
+		(fileName endsWith:'tar.z') ifTrue:[
+		    cmd := 'zcat %1 | tar tvf -'.
+		    select := false.
+		] ifFalse:[
+		    cmd := 'uncompress %1'
+		].
+	    ].
+	    (suffix = 'gz') ifTrue:[
+		(fileName endsWith:'tar.gz') ifTrue:[
+		    cmd := ('gunzip < %1 | tar tvf -' ).
+		    select := false.
+		] ifFalse:[
+		    cmd := 'gunzip %1'.
+		].
+	    ].
+	    (suffix = 'tgz') ifTrue:[
+		cmd := ('gunzip < %1 | tar tvf -' ).
+		select := false.
+	    ].
+	    (suffix = 'html') ifTrue:[
+		cmd := 'netscape %1'
+	    ].
+	    (suffix = 'htm') ifTrue:[
+		cmd := 'netscape %1'
+	    ].
+	    (suffix = 'uue') ifTrue:[
+		cmd := 'uudecode %1'
+	    ].
+	    (suffix = 'c') ifTrue:[
+		cmd := 'cc -c %1'.
+		select := 5.
+	    ].
+	    (suffix = 'cc') ifTrue:[
+		cmd := 'g++ -c %1'.
+		select := 6.
+	    ].
+	    (suffix = 'xbm') ifTrue:[
+		cmd := 'bitmap %1'
+	    ].
+	    (suffix = 'ps') ifTrue:[
+		cmd := 'ghostview %1'
+	    ].
+	    ((suffix = '1') or:[suffix = 'man']) ifTrue:[
+		cmd := 'nroff -man %1'.
+		select := 10.
+	    ].
+	].
+
+	cmd isNil ifTrue:[
+	    DefaultCommandPerSuffix isNil ifTrue:[
+		cmd := '<cmd>'
+	    ] ifFalse:[
+		cmd := DefaultCommandPerSuffix 
+			at:suffix
+			ifAbsent:'<cmd>'.
+	    ].
+	    cmd := cmd , ' %1'.
+	].
+
+	cmd := cmd bindWith:fileName.
+	select == false ifTrue:[
+	    aBox initialText:cmd
+	] ifFalse:[
+	    select isInteger ifFalse:[
+		select := (cmd indexOf:Character space ifAbsent:[cmd size + 1]) - 1.
+	    ].
+	    aBox initialText:cmd selectFrom:1 to:select
+	]
     ]
 
     "Modified: / 24.9.1997 / 16:34:52 / stefan"
@@ -3465,79 +3465,79 @@
     |oldSelection nOld newState msg newLabel t|
 
     shown ifTrue:[
-        currentDirectory notNil ifTrue:[
-            lockUpdate ifTrue:[
-                Processor removeTimedBlock:checkBlock.
-                Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
-                ^ self
-            ].
-
-            subView modified ifTrue:[
-                newState := ' (modified)'
-            ].
-
-            (currentDirectory isReadable) ifTrue:[
-                Processor removeTimedBlock:checkBlock.
-
-                t := currentDirectory modificationTime.
-                (t notNil and:[t > timeOfLastCheck]) ifTrue:[
-                    nOld := fileListView numberOfSelections.
-                    oldSelection := fileListView selectionValue.
-                    self updateCurrentDirectory.
-                    nOld ~~ 0 ifTrue:[
-                        nOld > 1 ifTrue:[
-                            oldSelection do:[:element  |
-                                fileListView addElementToSelection:element
-                            ]
-                        ] ifFalse:[
-                            fileListView selectElementWithoutScroll:oldSelection
-                        ]
-                    ].
-                ] ifFalse:[
-                    Processor addTimedBlock:checkBlock afterSeconds:checkDelta
-                ].
-
-                currentFileName notNil ifTrue:[
-                    |f|
-                    f := currentDirectory construct:currentFileName.
-                    f exists ifFalse:[
-                        newState := ' (removed)'.
-                    ] ifTrue:[
-                        f modificationTime > timeOfFileRead ifTrue:[
-                            newState := ' (outdated)'.
-                            subView modified ifTrue:[
-                                newState := ' (modified & outdated)'
-                            ]
-                        ].
-                    ].
-                ].
-            ] ifFalse:[         
-                "
-                 if the directory has been deleted, or is not readable ...
-                "
-                (currentDirectory exists) ifFalse:[
-                    msg := 'FileBrowser:\\directory %1 is gone ?!!?'
-                ] ifTrue:[
-                    msg := 'FileBrowser:\\directory %1 is no longer readable ?!!?'
-                ].
-                self warn:(resources string:msg with:currentDirectory pathName) withCRs.
-
-                fileListView contents:nil.
-                newLabel := myName , ': directory is gone !!'.
-                "/ Processor addTimedBlock:checkBlock afterSeconds:checkDelta
-            ].
-
-            newState notNil ifTrue:[
-                newLabel := myName.
-                currentFileName notNil ifTrue:[
-                    newLabel := newLabel , ': ' , currentFileName
-                ].
-                newLabel := newLabel , newState.
-            ].
-            newLabel notNil ifTrue:[
-                self label:newLabel.
-            ]
-        ]
+	currentDirectory notNil ifTrue:[
+	    lockUpdate ifTrue:[
+		Processor removeTimedBlock:checkBlock.
+		Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
+		^ self
+	    ].
+
+	    subView modified ifTrue:[
+		newState := ' (modified)'
+	    ].
+
+	    (currentDirectory isReadable) ifTrue:[
+		Processor removeTimedBlock:checkBlock.
+
+		t := currentDirectory modificationTime.
+		(t notNil and:[t > timeOfLastCheck]) ifTrue:[
+		    nOld := fileListView numberOfSelections.
+		    oldSelection := fileListView selectionValue.
+		    self updateCurrentDirectory.
+		    nOld ~~ 0 ifTrue:[
+			nOld > 1 ifTrue:[
+			    oldSelection do:[:element  |
+				fileListView addElementToSelection:element
+			    ]
+			] ifFalse:[
+			    fileListView selectElementWithoutScroll:oldSelection
+			]
+		    ].
+		] ifFalse:[
+		    Processor addTimedBlock:checkBlock afterSeconds:checkDelta
+		].
+
+		currentFileName notNil ifTrue:[
+		    |f|
+		    f := currentDirectory construct:currentFileName.
+		    f exists ifFalse:[
+			newState := ' (removed)'.
+		    ] ifTrue:[
+			f modificationTime > timeOfFileRead ifTrue:[
+			    newState := ' (outdated)'.
+			    subView modified ifTrue:[
+				newState := ' (modified & outdated)'
+			    ]
+			].
+		    ].
+		].
+	    ] ifFalse:[         
+		"
+		 if the directory has been deleted, or is not readable ...
+		"
+		(currentDirectory exists) ifFalse:[
+		    msg := 'FileBrowser:\\directory %1 is gone ?!!?'
+		] ifTrue:[
+		    msg := 'FileBrowser:\\directory %1 is no longer readable ?!!?'
+		].
+		self warn:(resources string:msg with:currentDirectory pathName) withCRs.
+
+		fileListView contents:nil.
+		newLabel := myName , ': directory is gone !!'.
+		"/ Processor addTimedBlock:checkBlock afterSeconds:checkDelta
+	    ].
+
+	    newState notNil ifTrue:[
+		newLabel := myName.
+		currentFileName notNil ifTrue:[
+		    newLabel := newLabel , ': ' , currentFileName
+		].
+		newLabel := newLabel , newState.
+	    ].
+	    newLabel notNil ifTrue:[
+		self label:newLabel.
+	    ]
+	]
     ]
 
     "Modified: / 28.4.1997 / 22:31:02 / dq"
@@ -3687,7 +3687,7 @@
 
     ((t := currentDirectory modificationTime) isNil
     or:[t > timeOfLastCheck]) ifTrue:[
-        self updateCurrentDirectory
+	self updateCurrentDirectory
     ]
 
     "Modified: / 16.9.1997 / 15:35:52 / stefan"
@@ -3962,63 +3962,63 @@
 
     lockUpdate := true.
     [
-        self selectedFilesDo:[:fileName |
-            |contents|
-
-            f := currentDirectory construct:fileName.
-            OperatingSystem accessDeniedErrorSignal handle:[:ex|
-                "was not able to remove it"
-                msg := (resources string:'cannot remove ''%1'' !!' with:fileName).
-                self showAlert:msg with:(OperatingSystem lastErrorString)
-            ] do:[
-                (f isSymbolicLink not and:[f isDirectory]) ifTrue:[
-                    contents := f directoryContents.
-                    contents isEmpty ifTrue:[
-                        f remove
-                    ] ifFalse:[
-                        (self 
-                            ask:(resources string:'directory ''%1'' is not empty\remove anyway ?' with:fileName)
-                            yesButton:'remove')
-                        ifFalse:[
-                            ^ self
-                        ].
-                        f recursiveRemove
-                    ].
-                ] ifFalse:[
-                    f remove.
-                ].
+	self selectedFilesDo:[:fileName |
+	    |contents|
+
+	    f := currentDirectory construct:fileName.
+	    OperatingSystem accessDeniedErrorSignal handle:[:ex|
+		"was not able to remove it"
+		msg := (resources string:'cannot remove ''%1'' !!' with:fileName).
+		self showAlert:msg with:(OperatingSystem lastErrorString)
+	    ] do:[
+		(f isSymbolicLink not and:[f isDirectory]) ifTrue:[
+		    contents := f directoryContents.
+		    contents isEmpty ifTrue:[
+			f remove
+		    ] ifFalse:[
+			(self 
+			    ask:(resources string:'directory ''%1'' is not empty\remove anyway ?' with:fileName)
+			    yesButton:'remove')
+			ifFalse:[
+			    ^ self
+			].
+			f recursiveRemove
+		    ].
+		] ifFalse:[
+		    f remove.
+		].
 "
-                self show:nil
+		self show:nil
 "
-                idx := fileList indexOf:fileName.
-                idx ~~ 0 ifTrue:[
-                    toRemove add:idx.
-                ]
-            ].
-        ].
+		idx := fileList indexOf:fileName.
+		idx ~~ 0 ifTrue:[
+		    toRemove add:idx.
+		]
+	    ].
+	].
     ] valueNowOrOnUnwindDo:[
-        lockUpdate := false.
-        fileListView setSelection:nil.
-
-        "/
-        "/ remove reverse - otherwise indices are wrong
-        "/
-        toRemove sort.
-        toRemove reverseDo:[:idx |
-            fileList removeIndex:idx.
-            fileListView removeIndex:idx.
-        ].
-
-        updateRunning ifTrue:[
-            self updateCurrentDirectory
-        ] ifFalse:[
-            "
-             install a new check after some time
-            "
-            needUpdate ifFalse:[timeOfLastCheck := AbsoluteTime now].
-            Processor removeTimedBlock:checkBlock.
-            Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
-        ]
+	lockUpdate := false.
+	fileListView setSelection:nil.
+
+	"/
+	"/ remove reverse - otherwise indices are wrong
+	"/
+	toRemove sort.
+	toRemove reverseDo:[:idx |
+	    fileList removeIndex:idx.
+	    fileListView removeIndex:idx.
+	].
+
+	updateRunning ifTrue:[
+	    self updateCurrentDirectory
+	] ifFalse:[
+	    "
+	     install a new check after some time
+	    "
+	    needUpdate ifFalse:[timeOfLastCheck := AbsoluteTime now].
+	    Processor removeTimedBlock:checkBlock.
+	    Processor addTimedBlock:checkBlock afterSeconds:checkDelta.
+	]
     ]
 
     "Modified: / 20.11.1997 / 17:39:14 / stefan"
@@ -4612,74 +4612,74 @@
 
     f := currentDirectory construct:aFilenameString.
     f isDirectory ifTrue:[
-        f isSymbolicLink ifTrue:[
-            key := #directoryLink
-        ] ifFalse:[
-            key := #directory.
-            (f isReadable not or:[f isExecutable not]) ifTrue:[
-                key := #directoryLocked
-            ].
-        ]
+	f isSymbolicLink ifTrue:[
+	    key := #directoryLink
+	] ifFalse:[
+	    key := #directory.
+	    (f isReadable not or:[f isExecutable not]) ifTrue:[
+		key := #directoryLocked
+	    ].
+	]
     ] ifFalse:[
-        f isSymbolicLink ifTrue:[
-            f isReadable not ifTrue:[
-                key := #fileLocked
-            ] ifFalse:[
-                key := #fileLink
-            ]
-        ] ifFalse:[
-            key := key2 := #file.
-            f isExecutable ifTrue:[
-                key := key2 := #executableFile
-            ].
-            (f isReadable not) ifTrue:[
-                key := #fileLocked
-            ] ifFalse:[
-                suff := f suffix.
-                mimeType := MIMETypes mimeTypeForSuffix:suff.
-                mimeType notNil ifTrue:[
-                    (mimeType startsWith:'image/') ifTrue:[
-                        key := #imageFile
-                    ] ifFalse:[
-                        (mimeType startsWith:'text/') ifTrue:[
-                            key := #textFile
-                        ]
-                    ]
-                ].
-            ].
-        ].
+	f isSymbolicLink ifTrue:[
+	    f isReadable not ifTrue:[
+		key := #fileLocked
+	    ] ifFalse:[
+		key := #fileLink
+	    ]
+	] ifFalse:[
+	    key := key2 := #file.
+	    f isExecutableProgram ifTrue:[
+		key := key2 := #executableFile
+	    ].
+	    (f isReadable not) ifTrue:[
+		key := #fileLocked
+	    ] ifFalse:[
+		suff := f suffix.
+		mimeType := MIMETypes mimeTypeForSuffix:suff.
+		mimeType notNil ifTrue:[
+		    (mimeType startsWith:'image/') ifTrue:[
+			key := #imageFile
+		    ] ifFalse:[
+			(mimeType startsWith:'text/') ifTrue:[
+			    key := #textFile
+			]
+		    ]
+		].
+	    ].
+	].
     ].
 
     "/ local (device) icons
     icons notNil ifTrue:[
-        mimeType notNil ifTrue:[
-            icn := icons at:mimeType ifAbsent:nil.
-            icn notNil ifTrue:[^ icn].
-        ].
-        icn := icons at:key ifAbsent:nil.
-        icn notNil ifTrue:[^ icn].
+	mimeType notNil ifTrue:[
+	    icn := icons at:mimeType ifAbsent:nil.
+	    icn notNil ifTrue:[^ icn].
+	].
+	icn := icons at:key ifAbsent:nil.
+	icn notNil ifTrue:[^ icn].
     ].
 
     "/ global icons
 
     Icons notNil ifTrue:[
-        mimeType notNil ifTrue:[
-            icn := Icons at:mimeType ifAbsent:nil.
-        ].
-        icn notNil ifTrue:[
-            key := mimeType
-        ] ifFalse:[
-            icn := Icons at:key ifAbsent:nil.
-        ].
+	mimeType notNil ifTrue:[
+	    icn := Icons at:mimeType ifAbsent:nil.
+	].
+	icn notNil ifTrue:[
+	    key := mimeType
+	] ifFalse:[
+	    icn := Icons at:key ifAbsent:nil.
+	].
     ].
 
     icn isNil ifTrue:[
-        (    (key := key2) isNil
-         or:[(icn := icons at:key ifAbsent:nil) notNil
-         or:[(icn := Icons at:key ifAbsent:nil) isNil]]
-        ) ifTrue:[
-            ^ icn
-        ]
+	(    (key := key2) isNil
+	 or:[(icn := icons at:key ifAbsent:nil) notNil
+	 or:[(icn := Icons at:key ifAbsent:nil) isNil]]
+	) ifTrue:[
+	    ^ icn
+	]
     ].
 
     "/ remember device icon
@@ -4720,13 +4720,13 @@
     "
 
     self withReadCursorDo:[
-        |files matchPattern list passDone f|
-
-        self stopUpdateProcess.
-
-        timeOfLastCheck := AbsoluteTime now.
-
-        files := currentDirectory asFilename fullDirectoryContents.
+	|files matchPattern list passDone f|
+
+	self stopUpdateProcess.
+
+	timeOfLastCheck := AbsoluteTime now.
+
+	files := currentDirectory asFilename fullDirectoryContents.
 
 "/        (files includes:(Filename parentDirectoryName)) ifTrue:[
 "/            upButton enable.
@@ -4734,405 +4734,405 @@
 "/            upButton disable.
 "/        ].
 
-        "/ show files which are either directories
-        "/ or match the current pattern
-
-        matchPattern := filterField contents.
-        (matchPattern notNil and:[
-         matchPattern isEmpty not and:[
-         matchPattern ~= '*']]) ifTrue:[
-             files := files select:[:aName | 
-                         ((currentDirectory construct:aName) isDirectory)
-                         or:[matchPattern compoundMatch:aName]
-                      ].
-        ].
-
-        files size == 0 ifTrue:[
-            self information:('directory ', currentDirectory pathName, ' vanished').
-            ^ self
-        ].
-        (sortByWhat value == #name) ifTrue:[
-            sortCaseless value == true ifTrue:[
-                files sort:[:a :b | a asLowercase < b asLowercase]
-            ] ifFalse:[
-                files sort.
-            ]
-        ] ifFalse:[
-            (sortByWhat value == #time) ifTrue:[
-                files sort:[:a :b | |f1 f2 t1 t2|
-                                f1 := (currentDirectory construct:a).
-                                f2 := (currentDirectory construct:b).
-                                t1 := f1 isSymbolicLink 
-                                        ifFalse:[f1 modificationTime]
-                                        ifTrue:[f1 linkInfo modified].
-                                t2 := f2 isSymbolicLink 
-                                        ifFalse:[f2 modificationTime]
-                                        ifTrue:[f2 linkInfo modified].
-                                t1 := t1 ? (AbsoluteTime now).
-                                t2 := t2 ? (AbsoluteTime now).
-                                t1 > t2
-                           ]
-            ] ifFalse:[
-                (sortByWhat value == #type) ifTrue:[
-                    files sort:[:a :b | |f1 f2 t1 t2 suff1 suff2|
-                                    f1 := (currentDirectory construct:a).
-                                    f2 := (currentDirectory construct:b).
-                                    t1 := f1 type ? #xbadLink. 
-                                    t2 := f2 type ? #xbadLink. 
-                                    t1 = t2 ifTrue:[
-                                        suff1 := f1 suffix.
-                                        suff2 := f2 suffix.
-                                        suff1 = suff2 ifTrue:[
-                                            sortCaseless value == true ifTrue:[
-                                                a asLowercase < b asLowercase
-                                            ] ifFalse:[
-                                                a < b
-                                            ]
-                                        ] ifFalse:[
-                                            suff1 asLowercase < suff2 asLowercase
-                                        ]
-                                    ] ifFalse:[
-                                        t1 < t2
-                                    ]
-                               ]
-                ]
-            ]
-        ].
-
-        files := self withoutHiddenFiles:files.
-        fileList := files copy.
-
-        tabSpec isNil ifTrue:[
-            showingDetails value "showLongList" ifTrue:[
-                self defineTabulatorsForLongList
-            ] ifFalse:[
-                self defineTabulatorsForShortList
-            ].
-        ].
-
-        "/
-        "/ first show all the names - this can be done fast ...
-        "/
-        list := files collect:[:fileName |
-                    |entry|
-
-                    entry := MultiColListEntry new.
-                    entry tabulatorSpecification:tabSpec.
-                    entry colAt:1 put:nil.
-                    entry colAt:2 put:fileName.
-                ].
-
-        fileListView setList:list expandTabs:false.
-        passDone := Array new:list size withAll:0.
-
-        "
-         this is a time consuming operation (especially, if reading an
-         NFS-mounted directory); therefore, start a low prio process,
-         which fills in the remaining fields in the fileList ...
-        "
-
-        listUpdateProcess := [
-            |prevUid prevGid fileNameString nameString groupString 
-             modeString info line len
-             anyImages lineIndex aFileName
-             entry typ f p typeString done endIndex 
-             state stopAtEnd nextState img prevFirstLine prevLastLine
-             numVisible dirSuffix|
-
-            dirSuffix := Filename directorySuffix.
-            dirSuffix size > 0 ifTrue:[
-                dirSuffix := '.' , dirSuffix asLowercase.
-            ].
-
-            "/
-            "/ then walk over the files, adding more info
-            "/ (since we have to stat each file, this may take a while longer)
-            "/ Visible items are always filled first.
-
-            "/
-            "/ the state machine
-            "/
-            nextState := IdentityDictionary new.
-            showingDetails value "showLongList" ifTrue:[
-                nextState add:(#visibleIcons -> #visibleAttributes).
-                nextState add:(#visibleAttributes -> #visibleTypes).
-                nextState add:(#visibleTypes -> #visibleImages).
-                nextState add:(#visibleImages -> #nextPageIcons).
-
-                nextState add:(#nextPageIcons -> #nextPageAttributes).
-                nextState add:(#nextPageAttributes -> #nextPageTypes).
-                nextState add:(#nextPageTypes -> #nextPageImages).
-                nextState add:(#nextPageImages -> #previousPageIcons).
-
-                nextState add:(#previousPageIcons -> #previousPageAttributes).
-                nextState add:(#previousPageAttributes -> #previousPageTypes).
-                nextState add:(#previousPageTypes -> #previousPageImages).
-                nextState add:(#previousPageImages -> #remainingIcons).
-
-                nextState add:(#remainingIcons -> #remainingAttributes).
-                nextState add:(#remainingAttributes -> #remainingTypes).
-                nextState add:(#remainingTypes -> #remainingImages).
-                nextState add:(#remainingImages -> nil).
-            ] ifFalse:[
-                nextState add:(#visibleIcons -> #nextPageIcons).
-                nextState add:(#nextPageIcons -> #previousPageIcons).
-                nextState add:(#previousPageIcons -> #remainingIcons).
-                nextState add:(#remainingIcons -> nil).
-            ].
-
-            anyImages := false.
-
-            lineIndex := prevFirstLine := fileListView firstLineShown.
-            endIndex := prevLastLine := fileListView lastLineShown.
-            endIndex := endIndex min:(files size).
-            state := #visibleIcons.
-
-            done := false.
-            [done] whileFalse:[
-                "/
-                "/ if multiple FileBrowsers are reading, let others
-                "/ make some progress too
-                "/
-                Processor yield.
-
-                "/
-                "/ could be destroyed in the meanwhile ...
-                "/
-                realized ifFalse:[
-                    listUpdateProcess := nil.
-                    Processor activeProcess terminate
-                ].
-
-                ((prevFirstLine ~~ fileListView firstLineShown)
-                or:[prevLastLine ~~ fileListView lastLineShown]) ifTrue:[
-                    "/ start all over again
-                    lineIndex := prevFirstLine := fileListView firstLineShown.
-                    endIndex := prevLastLine := fileListView lastLineShown.
-                    endIndex := endIndex min:(files size).
-                    state := #visibleIcons.
-                ].
-
-                (lineIndex between:1 and:(files size)) ifTrue:[
-
-                    "/
-                    "/ expand the next entry ...
-                    "/
-                    aFileName := files at:lineIndex.
-                    entry := fileListView at:lineIndex.
-                    f := currentDirectory construct:aFileName.
-
-                    (state endsWith:'Icons') ifTrue:[
-                        "/
-                        "/ pass 1 - icons
-                        "/
-                        (passDone at:lineIndex) < 1 ifTrue:[
-                            (f isDirectory
-                              and:[(aFileName ~= '..') and:[aFileName ~= '.']]
-                            ) ifTrue:[
-
-                                "/ the following suffix cutOff is not really required, 
-                                "/ but makes the list look better on VMS ...
-                                fileNameString := aFileName.
-                                dirSuffix notNil ifTrue:[
-                                    (aFileName asLowercase endsWith:dirSuffix) ifTrue:[
-                                        fileNameString := aFileName copyWithoutLast:(dirSuffix size).
-                                    ]
-                                ].
-                                fileNameString := fileNameString , ' ...'
-                            ] ifFalse:[
-                                fileNameString := aFileName.
-                                OperatingSystem isVMSlike ifTrue:[
-                                    (aFileName endsWith:'.') ifTrue:[
-                                        aFileName ~= '..' ifTrue:[
-                                            fileNameString := aFileName copyWithoutLast:1
-                                        ]
-                                    ]
-                                ]
-                            ].
-
-                            showingDetails value "showLongList" ifTrue:[
-                                len := fileNameString size.
-                                (len > 20) ifTrue:[
-                                    fileNameString := (fileNameString contractTo:20)
-                                ].
-                            ].
-
-                            entry colAt:1 put:(self iconForFile:aFileName).
-                            entry colAt:2 put:fileNameString.
-
-                            "/fileListView at:lineIndex put:entry.
-                            fileListView withoutRedrawAt:lineIndex put:entry.
-                            fileListView invalidateLine:lineIndex.
-
-                            anyImages ifFalse:[
-                                (Image isImageFileSuffix:(aFileName asFilename suffix))
-                                ifTrue:[
-                                    anyImages := true
-                                ]
-                            ].
-                            passDone at:lineIndex put:1
-                        ]
-                    ].
-
-                    (state endsWith:'Attributes') ifTrue:[
-                        "/
-                        "/ pass 2 - everything except fileType (which takes very long)
-                        "/
-                        (passDone at:lineIndex) < 2 ifTrue:[
-                            info := f info.
-                            info isNil ifTrue:[
-                                "not accessable - usually a symlink,
-                                 to a nonexisting/nonreadable file
-                                "
-                                f isSymbolicLink ifTrue:[
-                                    p := f linkInfo path.    
-                                    typeString := 'broken symbolic link to ' , p
-                                ] ifFalse:[
-                                    typeString := 'unknown'
-                                ].
-                            ] ifFalse:[
-                                typ := (info type).
-
-                                modeString := self getModeString:(info at:#mode)
-                                                            with:#( '' $r $w $x 
-                                                                    '  ' $r $w $x 
-                                                                    '  ' $r $w $x ).
-                                entry colAt:3 put:modeString.
-
-                                ((info uid) ~~ prevUid) ifTrue:[
-                                    prevUid := (info uid).
-                                    nameString := OperatingSystem getUserNameFromID:prevUid.
-                                    nameString := nameString contractTo:10.
-                                    nameString := nameString , (String new:(10 - nameString size))
-                                ].
-                                nameString isNil ifTrue:[nameString := '???'].
-                                entry colAt:4 put:nameString withoutSpaces.
-
-                                ((info gid) ~~ prevGid) ifTrue:[
-                                    prevGid := (info gid).
-                                    groupString := OperatingSystem getGroupNameFromID:prevGid.
-                                    groupString := groupString contractTo:10.
-                                    groupString := groupString , (String new:(10 - groupString size))
-                                ].
-                                groupString isNil ifTrue:[groupString := '???'].
-                                entry colAt:5 put:groupString withoutSpaces.
-
-                                (typ == #regular) ifTrue:[
-                                    entry colAt:6 put:(self sizePrintString:(info size)).
-                                ].
-
-                                f isSymbolicLink ifTrue:[
-                                    p := f linkInfo path.    
-                                    typeString := 'symbolic link to ' , p
-                                ] ifFalse:[
-                                    typeString := typ asString
-                                ].
-                            ].
-                            entry colAt:7 put:typeString.
-
-                            "/ fileListView at:lineIndex put:entry.
-                            fileListView withoutRedrawAt:lineIndex put:entry.
-                            fileListView invalidateLine:lineIndex.
-                            passDone at:lineIndex put:2.
-                        ].
-                    ].
-
-                    (state endsWith:'Types') ifTrue:[
-                        "/
-                        "/ pass 3: add fileType
-                        "/
-                        (passDone at:lineIndex) < 3 ifTrue:[
-                            info := f info.
-                            info notNil ifTrue:[
-                                f isSymbolicLink ifFalse:[
-                                    (Image isImageFileSuffix:(f suffix)) ifFalse:[
-                                        typeString := f fileType.
-
-                                        entry colAt:7 put:typeString.
-                                        "/ fileListView at:lineIndex put:entry
-                                        fileListView withoutRedrawAt:lineIndex put:entry.
-                                        fileListView invalidateLine:lineIndex.
-                                    ].
-                                ].
-                            ].
-
-                            passDone at:lineIndex put:3
-                        ].
-                    ].
-
-                    (state endsWith:'Images') ifTrue:[
-                        "/
-                        "/ pass 4: read images
-                        "/
-                        (passDone at:lineIndex) < 4 ifTrue:[
-                            (Image isImageFileSuffix:(f suffix)) ifTrue:[
-                                f isDirectory ifFalse:[
-                                    img := Image fromFile:(f pathName).
-                                    img notNil ifTrue:[
-                                        img := img magnifiedTo:16@16.
-                                        img := img on:self device.
-                                        entry colAt:7 put:img.
-                                        "/ fileListView at:lineIndex put:entry
-                                        fileListView withoutRedrawAt:lineIndex put:entry.
-                                        fileListView invalidateLine:lineIndex.
-                                    ]
-                                ]
-                            ].
-                            passDone at:lineIndex put:4
-                        ].
-                    ].
-                ].
-
-                "/
-                "/ advance to the next line
-                "/
-                lineIndex := lineIndex + 1.
-                lineIndex > endIndex ifTrue:[
-                    "/ finished this round ...
-                    "/ see what we are going for ...
-                    numVisible := (fileListView lastLineShown - fileListView firstLineShown + 1).
-
-                    state := nextState at:state ifAbsent:nil.
-
-                    state isNil ifTrue:[
-                        done := true
-                    ] ifFalse:[
-                        (state startsWith:'visible') ifTrue:[
-                            lineIndex := fileListView firstLineShown.
-                            endIndex := fileListView lastLineShown.
-                            endIndex := endIndex min:(files size).
-                        ] ifFalse:[
-                            (state startsWith:'nextPage') ifTrue:[
-                                lineIndex := fileListView lastLineShown + 1.
-                                endIndex := lineIndex + numVisible.
-                                endIndex := endIndex min:(files size).
-                                lineIndex := lineIndex min:(files size).
-                            ] ifFalse:[
-                                (state startsWith:'previousPage') ifTrue:[
-                                    endIndex := fileListView firstLineShown - 1.
-                                    lineIndex := endIndex - numVisible.
-                                    lineIndex := lineIndex max:1.
-                                    endIndex := endIndex min:(files size).
-                                    endIndex := endIndex max:1.
-                                ] ifFalse:[ 
-                                    "/ remaining
-                                    lineIndex := 1.
-                                    endIndex := files size.
-                                ]
-                            ]
-                        ]
-                    ]
-                ]
-            ].
-
-            listUpdateProcess := nil.
-
-        ] forkAt:(Processor activePriority - 1).
-
-        "
-         install a new check after some time
-        "
-        Processor addTimedBlock:checkBlock afterSeconds:checkDelta
+	"/ show files which are either directories
+	"/ or match the current pattern
+
+	matchPattern := filterField contents.
+	(matchPattern notNil and:[
+	 matchPattern isEmpty not and:[
+	 matchPattern ~= '*']]) ifTrue:[
+	     files := files select:[:aName | 
+			 ((currentDirectory construct:aName) isDirectory)
+			 or:[matchPattern compoundMatch:aName]
+		      ].
+	].
+
+	files size == 0 ifTrue:[
+	    self information:('directory ', currentDirectory pathName, ' vanished').
+	    ^ self
+	].
+	(sortByWhat value == #name) ifTrue:[
+	    sortCaseless value == true ifTrue:[
+		files sort:[:a :b | a asLowercase < b asLowercase]
+	    ] ifFalse:[
+		files sort.
+	    ]
+	] ifFalse:[
+	    (sortByWhat value == #time) ifTrue:[
+		files sort:[:a :b | |f1 f2 t1 t2|
+				f1 := (currentDirectory construct:a).
+				f2 := (currentDirectory construct:b).
+				t1 := f1 isSymbolicLink 
+					ifFalse:[f1 modificationTime]
+					ifTrue:[f1 linkInfo modified].
+				t2 := f2 isSymbolicLink 
+					ifFalse:[f2 modificationTime]
+					ifTrue:[f2 linkInfo modified].
+				t1 := t1 ? (AbsoluteTime now).
+				t2 := t2 ? (AbsoluteTime now).
+				t1 > t2
+			   ]
+	    ] ifFalse:[
+		(sortByWhat value == #type) ifTrue:[
+		    files sort:[:a :b | |f1 f2 t1 t2 suff1 suff2|
+				    f1 := (currentDirectory construct:a).
+				    f2 := (currentDirectory construct:b).
+				    t1 := f1 type ? #xbadLink. 
+				    t2 := f2 type ? #xbadLink. 
+				    t1 = t2 ifTrue:[
+					suff1 := f1 suffix.
+					suff2 := f2 suffix.
+					suff1 = suff2 ifTrue:[
+					    sortCaseless value == true ifTrue:[
+						a asLowercase < b asLowercase
+					    ] ifFalse:[
+						a < b
+					    ]
+					] ifFalse:[
+					    suff1 asLowercase < suff2 asLowercase
+					]
+				    ] ifFalse:[
+					t1 < t2
+				    ]
+			       ]
+		]
+	    ]
+	].
+
+	files := self withoutHiddenFiles:files.
+	fileList := files copy.
+
+	tabSpec isNil ifTrue:[
+	    showingDetails value "showLongList" ifTrue:[
+		self defineTabulatorsForLongList
+	    ] ifFalse:[
+		self defineTabulatorsForShortList
+	    ].
+	].
+
+	"/
+	"/ first show all the names - this can be done fast ...
+	"/
+	list := files collect:[:fileName |
+		    |entry|
+
+		    entry := MultiColListEntry new.
+		    entry tabulatorSpecification:tabSpec.
+		    entry colAt:1 put:nil.
+		    entry colAt:2 put:fileName.
+		].
+
+	fileListView setList:list expandTabs:false.
+	passDone := Array new:list size withAll:0.
+
+	"
+	 this is a time consuming operation (especially, if reading an
+	 NFS-mounted directory); therefore, start a low prio process,
+	 which fills in the remaining fields in the fileList ...
+	"
+
+	listUpdateProcess := [
+	    |prevUid prevGid fileNameString nameString groupString 
+	     modeString info line len
+	     anyImages lineIndex aFileName
+	     entry typ f p typeString done endIndex 
+	     state stopAtEnd nextState img prevFirstLine prevLastLine
+	     numVisible dirSuffix|
+
+	    dirSuffix := Filename directorySuffix.
+	    dirSuffix size > 0 ifTrue:[
+		dirSuffix := '.' , dirSuffix asLowercase.
+	    ].
+
+	    "/
+	    "/ then walk over the files, adding more info
+	    "/ (since we have to stat each file, this may take a while longer)
+	    "/ Visible items are always filled first.
+
+	    "/
+	    "/ the state machine
+	    "/
+	    nextState := IdentityDictionary new.
+	    showingDetails value "showLongList" ifTrue:[
+		nextState add:(#visibleIcons -> #visibleAttributes).
+		nextState add:(#visibleAttributes -> #visibleTypes).
+		nextState add:(#visibleTypes -> #visibleImages).
+		nextState add:(#visibleImages -> #nextPageIcons).
+
+		nextState add:(#nextPageIcons -> #nextPageAttributes).
+		nextState add:(#nextPageAttributes -> #nextPageTypes).
+		nextState add:(#nextPageTypes -> #nextPageImages).
+		nextState add:(#nextPageImages -> #previousPageIcons).
+
+		nextState add:(#previousPageIcons -> #previousPageAttributes).
+		nextState add:(#previousPageAttributes -> #previousPageTypes).
+		nextState add:(#previousPageTypes -> #previousPageImages).
+		nextState add:(#previousPageImages -> #remainingIcons).
+
+		nextState add:(#remainingIcons -> #remainingAttributes).
+		nextState add:(#remainingAttributes -> #remainingTypes).
+		nextState add:(#remainingTypes -> #remainingImages).
+		nextState add:(#remainingImages -> nil).
+	    ] ifFalse:[
+		nextState add:(#visibleIcons -> #nextPageIcons).
+		nextState add:(#nextPageIcons -> #previousPageIcons).
+		nextState add:(#previousPageIcons -> #remainingIcons).
+		nextState add:(#remainingIcons -> nil).
+	    ].
+
+	    anyImages := false.
+
+	    lineIndex := prevFirstLine := fileListView firstLineShown.
+	    endIndex := prevLastLine := fileListView lastLineShown.
+	    endIndex := endIndex min:(files size).
+	    state := #visibleIcons.
+
+	    done := false.
+	    [done] whileFalse:[
+		"/
+		"/ if multiple FileBrowsers are reading, let others
+		"/ make some progress too
+		"/
+		Processor yield.
+
+		"/
+		"/ could be destroyed in the meanwhile ...
+		"/
+		realized ifFalse:[
+		    listUpdateProcess := nil.
+		    Processor activeProcess terminate
+		].
+
+		((prevFirstLine ~~ fileListView firstLineShown)
+		or:[prevLastLine ~~ fileListView lastLineShown]) ifTrue:[
+		    "/ start all over again
+		    lineIndex := prevFirstLine := fileListView firstLineShown.
+		    endIndex := prevLastLine := fileListView lastLineShown.
+		    endIndex := endIndex min:(files size).
+		    state := #visibleIcons.
+		].
+
+		(lineIndex between:1 and:(files size)) ifTrue:[
+
+		    "/
+		    "/ expand the next entry ...
+		    "/
+		    aFileName := files at:lineIndex.
+		    entry := fileListView at:lineIndex.
+		    f := currentDirectory construct:aFileName.
+
+		    (state endsWith:'Icons') ifTrue:[
+			"/
+			"/ pass 1 - icons
+			"/
+			(passDone at:lineIndex) < 1 ifTrue:[
+			    (f isDirectory
+			      and:[(aFileName ~= '..') and:[aFileName ~= '.']]
+			    ) ifTrue:[
+
+				"/ the following suffix cutOff is not really required, 
+				"/ but makes the list look better on VMS ...
+				fileNameString := aFileName.
+				dirSuffix notNil ifTrue:[
+				    (aFileName asLowercase endsWith:dirSuffix) ifTrue:[
+					fileNameString := aFileName copyWithoutLast:(dirSuffix size).
+				    ]
+				].
+				fileNameString := fileNameString , ' ...'
+			    ] ifFalse:[
+				fileNameString := aFileName.
+				OperatingSystem isVMSlike ifTrue:[
+				    (aFileName endsWith:'.') ifTrue:[
+					aFileName ~= '..' ifTrue:[
+					    fileNameString := aFileName copyWithoutLast:1
+					]
+				    ]
+				]
+			    ].
+
+			    showingDetails value "showLongList" ifTrue:[
+				len := fileNameString size.
+				(len > 20) ifTrue:[
+				    fileNameString := (fileNameString contractTo:20)
+				].
+			    ].
+
+			    entry colAt:1 put:(self iconForFile:aFileName).
+			    entry colAt:2 put:fileNameString.
+
+			    "/fileListView at:lineIndex put:entry.
+			    fileListView withoutRedrawAt:lineIndex put:entry.
+			    fileListView invalidateLine:lineIndex.
+
+			    anyImages ifFalse:[
+				(Image isImageFileSuffix:(aFileName asFilename suffix))
+				ifTrue:[
+				    anyImages := true
+				]
+			    ].
+			    passDone at:lineIndex put:1
+			]
+		    ].
+
+		    (state endsWith:'Attributes') ifTrue:[
+			"/
+			"/ pass 2 - everything except fileType (which takes very long)
+			"/
+			(passDone at:lineIndex) < 2 ifTrue:[
+			    info := f info.
+			    info isNil ifTrue:[
+				"not accessable - usually a symlink,
+				 to a nonexisting/nonreadable file
+				"
+				f isSymbolicLink ifTrue:[
+				    p := f linkInfo path.    
+				    typeString := 'broken symbolic link to ' , p
+				] ifFalse:[
+				    typeString := 'unknown'
+				].
+			    ] ifFalse:[
+				typ := (info type).
+
+				modeString := self getModeString:(info at:#mode)
+							    with:#( '' $r $w $x 
+								    '  ' $r $w $x 
+								    '  ' $r $w $x ).
+				entry colAt:3 put:modeString.
+
+				((info uid) ~~ prevUid) ifTrue:[
+				    prevUid := (info uid).
+				    nameString := OperatingSystem getUserNameFromID:prevUid.
+				    nameString := nameString contractTo:10.
+				    nameString := nameString , (String new:(10 - nameString size))
+				].
+				nameString isNil ifTrue:[nameString := '???'].
+				entry colAt:4 put:nameString withoutSpaces.
+
+				((info gid) ~~ prevGid) ifTrue:[
+				    prevGid := (info gid).
+				    groupString := OperatingSystem getGroupNameFromID:prevGid.
+				    groupString := groupString contractTo:10.
+				    groupString := groupString , (String new:(10 - groupString size))
+				].
+				groupString isNil ifTrue:[groupString := '???'].
+				entry colAt:5 put:groupString withoutSpaces.
+
+				(typ == #regular) ifTrue:[
+				    entry colAt:6 put:(self sizePrintString:(info size)).
+				].
+
+				f isSymbolicLink ifTrue:[
+				    p := f linkInfo path.    
+				    typeString := 'symbolic link to ' , p
+				] ifFalse:[
+				    typeString := typ asString
+				].
+			    ].
+			    entry colAt:7 put:typeString.
+
+			    "/ fileListView at:lineIndex put:entry.
+			    fileListView withoutRedrawAt:lineIndex put:entry.
+			    fileListView invalidateLine:lineIndex.
+			    passDone at:lineIndex put:2.
+			].
+		    ].
+
+		    (state endsWith:'Types') ifTrue:[
+			"/
+			"/ pass 3: add fileType
+			"/
+			(passDone at:lineIndex) < 3 ifTrue:[
+			    info := f info.
+			    info notNil ifTrue:[
+				f isSymbolicLink ifFalse:[
+				    (Image isImageFileSuffix:(f suffix)) ifFalse:[
+					typeString := f fileType.
+
+					entry colAt:7 put:typeString.
+					"/ fileListView at:lineIndex put:entry
+					fileListView withoutRedrawAt:lineIndex put:entry.
+					fileListView invalidateLine:lineIndex.
+				    ].
+				].
+			    ].
+
+			    passDone at:lineIndex put:3
+			].
+		    ].
+
+		    (state endsWith:'Images') ifTrue:[
+			"/
+			"/ pass 4: read images
+			"/
+			(passDone at:lineIndex) < 4 ifTrue:[
+			    (Image isImageFileSuffix:(f suffix)) ifTrue:[
+				f isDirectory ifFalse:[
+				    img := Image fromFile:(f pathName).
+				    img notNil ifTrue:[
+					img := img magnifiedTo:16@16.
+					img := img on:self device.
+					entry colAt:7 put:img.
+					"/ fileListView at:lineIndex put:entry
+					fileListView withoutRedrawAt:lineIndex put:entry.
+					fileListView invalidateLine:lineIndex.
+				    ]
+				]
+			    ].
+			    passDone at:lineIndex put:4
+			].
+		    ].
+		].
+
+		"/
+		"/ advance to the next line
+		"/
+		lineIndex := lineIndex + 1.
+		lineIndex > endIndex ifTrue:[
+		    "/ finished this round ...
+		    "/ see what we are going for ...
+		    numVisible := (fileListView lastLineShown - fileListView firstLineShown + 1).
+
+		    state := nextState at:state ifAbsent:nil.
+
+		    state isNil ifTrue:[
+			done := true
+		    ] ifFalse:[
+			(state startsWith:'visible') ifTrue:[
+			    lineIndex := fileListView firstLineShown.
+			    endIndex := fileListView lastLineShown.
+			    endIndex := endIndex min:(files size).
+			] ifFalse:[
+			    (state startsWith:'nextPage') ifTrue:[
+				lineIndex := fileListView lastLineShown + 1.
+				endIndex := lineIndex + numVisible.
+				endIndex := endIndex min:(files size).
+				lineIndex := lineIndex min:(files size).
+			    ] ifFalse:[
+				(state startsWith:'previousPage') ifTrue:[
+				    endIndex := fileListView firstLineShown - 1.
+				    lineIndex := endIndex - numVisible.
+				    lineIndex := lineIndex max:1.
+				    endIndex := endIndex min:(files size).
+				    endIndex := endIndex max:1.
+				] ifFalse:[ 
+				    "/ remaining
+				    lineIndex := 1.
+				    endIndex := files size.
+				]
+			    ]
+			]
+		    ]
+		]
+	    ].
+
+	    listUpdateProcess := nil.
+
+	] forkAt:(Processor activePriority - 1).
+
+	"
+	 install a new check after some time
+	"
+	Processor addTimedBlock:checkBlock afterSeconds:checkDelta
     ]
 
     "Modified: / 21.9.1995 / 11:40:23 / claus"
@@ -5178,5 +5178,5 @@
 !FileBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/FileBrowser.st,v 1.254 1998-09-03 08:19:31 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/FileBrowser.st,v 1.255 1998-09-08 10:24:20 cg Exp $'
 ! !