Filename.st
author claus
Thu, 09 Mar 1995 00:40:27 +0100
changeset 302 1f76060d58a4
parent 276 3b6d97620494
child 308 f04744ef7b5d
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1992 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
     3
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
Object subclass:#Filename
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
    14
	 instanceVariableNames:'nameString'
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    15
	 classVariableNames:'NextTempFilenameIndex'
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
    16
	 poolDictionaries:''
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
    17
	 category:'System-Support'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
Filename comment:'
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    20
COPYRIGHT (c) 1992 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
    21
	     All Rights Reserved
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    22
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    23
$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.21 1995-02-22 01:13:28 claus Exp $
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    24
'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    26
!Filename class methodsFor:'documentation'!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    27
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    28
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    29
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    30
 COPYRIGHT (c) 1992 by Claus Gittinger
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
    31
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    32
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    33
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    34
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    35
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    36
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    37
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    38
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    39
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    40
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    41
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    42
version
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    43
"
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    44
$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.21 1995-02-22 01:13:28 claus Exp $
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    45
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    46
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    47
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    48
documentation
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    49
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    50
    Filenames; originally added for ST-80 compatibility, is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    51
    taking over functionality from other classes (FileDirectory).
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    52
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    53
    Instances of Filename do not nescessarily represent valid or existing
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    54
    files - i.e. it is possible (and useful) to have instances for non-existing
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    55
    files around. In other words: the name-string is not checked automatically
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    56
    for being correct or existing.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    57
    Thus, it is possible to do queries such as:
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    58
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
    59
	'/fee/foo/foe' asFilename exists     
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
    60
	'/not_existing' asFilename isDirectory 
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
    61
	'/foo/bar' asFilename isReadable 
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    62
195
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
    63
    (all of the above examples will probably return false on your machine ;-).
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    64
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    65
    examples:
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    66
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    67
	'Makefile' asFilename readStream
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    68
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    69
	'newFile' asFilename writeStream
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    70
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    71
	Filename newTemporary writeStream
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    72
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    73
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    74
a27a279701f8 Initial revision
claus
parents:
diff changeset
    75
!Filename class methodsFor:'instance creation'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    76
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
named:aString
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
    78
    "return a filename for a directory named aString."
38
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
    79
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
    80
    ^ (self basicNew) setName:aString
38
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
    81
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    82
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    83
     Filename named:'/tmp/fooBar'
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    84
    "
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    85
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    86
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    87
currentDirectory
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    88
    "return a filename for the current directory"
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    89
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    90
    ^ self named:(FileDirectory currentDirectory pathName)
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    91
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    92
    "
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    93
     Filename currentDirectory 
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    94
    "
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    95
!
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    96
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    97
newTemporary
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    98
    "return a new unique filename - use this for temporary files"
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
    99
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   100
    |pid nm|
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   101
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   102
    NextTempFilenameIndex isNil ifTrue:[
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   103
	NextTempFilenameIndex := 1.
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   104
    ].
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   105
    "
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   106
     the following has to be made OS independent ...
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   107
    "
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   108
    pid := OperatingSystem getProcessId printString.
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   109
    nm := '/tmp/stxtmp_' , pid , '_' , NextTempFilenameIndex printString.
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   110
    NextTempFilenameIndex := NextTempFilenameIndex + 1.
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   111
    ^ self named:nm
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   112
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   113
    "
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   114
     Filename newTemporary
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   115
     Filename newTemporary
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   116
    "
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   117
!
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   118
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   119
fromUser
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   120
    "show a box to enter a filename. Return a filename instance or
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   121
     nil (if cancel was pressed)."
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   122
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   123
    |name|
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   124
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   125
    name := FileSelectionBox requestFilename.
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   126
    name notNil ifTrue:[^ self named:name].
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   127
    ^ nil
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   128
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   129
    "
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   130
     Filename fromUser
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   131
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   132
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   133
2
claus
parents: 1
diff changeset
   134
!Filename class methodsFor:'queries'!
claus
parents: 1
diff changeset
   135
claus
parents: 1
diff changeset
   136
separator
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   137
    "return the file/directory separator.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   138
     Usually, this is $/ for unix-like systems 
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   139
     and $\ for dos-like ones (there may be more in the future)."
2
claus
parents: 1
diff changeset
   140
claus
parents: 1
diff changeset
   141
     ^ OperatingSystem fileSeparator
38
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   142
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   143
     "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   144
      Filename separator  
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   145
     "
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   146
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   147
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   148
parentDirectoryName 
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   149
    "return the name used for the parent directory.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   150
     This is '..' for unix and dos-like systems. 
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   151
     (there may be more in the future."
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   152
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   153
     ^ OperatingSystem parentDirectoryName
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   154
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   155
     "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   156
      Filename parentDirectoryName  
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   157
     "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   158
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   159
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   160
isCaseSensitive
9e273c60e785 more functions
claus
parents: 159
diff changeset
   161
    "return true, if filenames are case sensitive.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   162
     We ask the OS about this, to be independent here."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   163
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   164
    ^ OperatingSystem caseSensitiveFilenames
2
claus
parents: 1
diff changeset
   165
! !
claus
parents: 1
diff changeset
   166
claus
parents: 1
diff changeset
   167
!Filename methodsFor:'instance creation'!
claus
parents: 1
diff changeset
   168
249
claus
parents: 216
diff changeset
   169
constructString:subname
38
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   170
    "taking the receiver as a directory name, construct a new
249
claus
parents: 216
diff changeset
   171
     filenames string for an entry within this directory (i.e. for a file
38
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   172
     or a subdirectory in that directory)."
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   173
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   174
    |sepString|
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
   175
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
   176
    sepString := self class separator asString.
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
   177
    nameString = sepString ifTrue:[
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   178
	"I am the root"
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   179
	^ sepString  , subname
85
claus
parents: 77
diff changeset
   180
    ].
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   181
    ^ nameString , sepString , subname
38
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   182
85
claus
parents: 77
diff changeset
   183
    "
249
claus
parents: 216
diff changeset
   184
     '/tmp' asFilename constructString:'foo'   
claus
parents: 216
diff changeset
   185
     '/' asFilename constructString:'foo'         
claus
parents: 216
diff changeset
   186
     '/usr/tmp' asFilename constructString:'foo'
claus
parents: 216
diff changeset
   187
    "
claus
parents: 216
diff changeset
   188
!
claus
parents: 216
diff changeset
   189
claus
parents: 216
diff changeset
   190
construct:subname
claus
parents: 216
diff changeset
   191
    "taking the receiver as a directory name, construct a new
claus
parents: 216
diff changeset
   192
     filename for an entry within this directory (i.e. for a file
claus
parents: 216
diff changeset
   193
     or a subdirectory in that directory)."
claus
parents: 216
diff changeset
   194
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   195
    ^ (self constructString:subname) asFilename
249
claus
parents: 216
diff changeset
   196
claus
parents: 216
diff changeset
   197
    "
claus
parents: 216
diff changeset
   198
     '/tmp' asFilename construct:'foo'    
claus
parents: 216
diff changeset
   199
     '/' asFilename construct:'foo'         
claus
parents: 216
diff changeset
   200
     '/usr/tmp' asFilename construct:'foo'
85
claus
parents: 77
diff changeset
   201
    "
2
claus
parents: 1
diff changeset
   202
! !
claus
parents: 1
diff changeset
   203
195
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   204
!Filename methodsFor:'misc'!
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   205
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   206
, aString
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   207
    "this allows filenames to understand how names are concatenated.
213
3b56a17534fd *** empty log message ***
claus
parents: 202
diff changeset
   208
     Returns a new filename consisting of the receivers name, concatenated
195
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   209
     by aString. Notice this is NOT the same as construct:, which inserts
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   210
     a directory delimiter."
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   211
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   212
    ^ (nameString , aString asString) asFilename
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   213
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   214
    "
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   215
     'Makefile' asFilename , '.bak' 
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   216
     'Makefile' asFilename construct:'.bak' 
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   217
    "
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   218
! !
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   219
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   220
!Filename methodsFor:'comparing'!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   221
9e273c60e785 more functions
claus
parents: 159
diff changeset
   222
hash
9e273c60e785 more functions
claus
parents: 159
diff changeset
   223
    "return an integer useful as a hash-key"
9e273c60e785 more functions
claus
parents: 159
diff changeset
   224
9e273c60e785 more functions
claus
parents: 159
diff changeset
   225
    ^ nameString hash
9e273c60e785 more functions
claus
parents: 159
diff changeset
   226
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   227
9e273c60e785 more functions
claus
parents: 159
diff changeset
   228
= aFilename
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   229
    "return true, if the argument represents the same filename"
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   230
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   231
    |str|
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   232
9e273c60e785 more functions
claus
parents: 159
diff changeset
   233
    self species == aFilename species ifTrue:[
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   234
	str := aFilename asString.
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   235
	self class isCaseSensitive ifTrue:[
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   236
	    ^ nameString = str
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   237
	].
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   238
	^ nameString sameAs:str
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   239
    ].
9e273c60e785 more functions
claus
parents: 159
diff changeset
   240
    ^ false
9e273c60e785 more functions
claus
parents: 159
diff changeset
   241
! !
9e273c60e785 more functions
claus
parents: 159
diff changeset
   242
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
!Filename methodsFor:'converting'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   244
a27a279701f8 Initial revision
claus
parents:
diff changeset
   245
asString
38
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   246
    "return the receiver converted to a string"
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   247
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   248
    ^ nameString
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   249
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   250
a27a279701f8 Initial revision
claus
parents:
diff changeset
   251
asFilename
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   252
    "return the receiver converted to a filename."
38
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   253
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   254
    "Thats pretty easy here :-)"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   255
    ^ self
195
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   256
!
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   257
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   258
makeLegalFilename 
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   259
    "convert the receveivers name to be a legal filename.
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   260
     The implementation may change in the future to be more
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   261
     OS specific."
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   262
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   263
    "
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   264
     actually, in Unix spaces are allowed - but it makes life
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   265
     so hard; therefore, replace them by underscores ...
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   266
    "
195
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   267
    nameString replaceAll:(Character space) by:$_.
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   268
    "
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   269
     need more - especially on SYS5.3 type systems, 
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   270
     we may want to contract the fileName to 14 characters.
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   271
    "
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   272
    ^ self
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   273
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   274
    "
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   275
     'hello world' asFilename makeLegalFilename 
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   276
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   277
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   278
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 195
diff changeset
   279
!Filename methodsFor:'private accessing'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   280
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   281
setName:aString
38
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   282
    "set the filename"
454b1b94a48e *** empty log message ***
claus
parents: 5
diff changeset
   283
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   284
    nameString := aString
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   285
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   286
2
claus
parents: 1
diff changeset
   287
!Filename methodsFor:'queries'!
claus
parents: 1
diff changeset
   288
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   289
separator
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   290
    "return the directory-separator character (or string)"
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   291
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   292
    ^ self class separator
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   293
!
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   294
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   295
directory
9e273c60e785 more functions
claus
parents: 159
diff changeset
   296
    "return the directory name part of the file/directory.
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   297
     - thats the name of the directory where the file/dir represented by
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   298
       the receiver is contained in.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   299
     This method used to be called 'directoryName' but has been renamed
9e273c60e785 more functions
claus
parents: 159
diff changeset
   300
     for ST-80 compatibility."
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   301
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   302
    ^ OperatingSystem directoryNameOf:(self pathName)
2
claus
parents: 1
diff changeset
   303
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   304
    "
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   305
     '/foo/bar' asFilename directory
9e273c60e785 more functions
claus
parents: 159
diff changeset
   306
     '.' asFilename directory        
9e273c60e785 more functions
claus
parents: 159
diff changeset
   307
     '..' asFilename directory       
9e273c60e785 more functions
claus
parents: 159
diff changeset
   308
     '../..' asFilename directory     
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   309
    "
2
claus
parents: 1
diff changeset
   310
!
claus
parents: 1
diff changeset
   311
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   312
tail
9e273c60e785 more functions
claus
parents: 159
diff changeset
   313
    "the files name without directory prefix. For ST-80 compatiblity."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   314
9e273c60e785 more functions
claus
parents: 159
diff changeset
   315
    ^ self baseName
9e273c60e785 more functions
claus
parents: 159
diff changeset
   316
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   317
2
claus
parents: 1
diff changeset
   318
baseName
claus
parents: 1
diff changeset
   319
    "return my baseName
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   320
     - thats the file/directory name without leading parent-dirs."
2
claus
parents: 1
diff changeset
   321
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   322
    ^ OperatingSystem baseNameOf:(self pathName) 
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   323
85
claus
parents: 77
diff changeset
   324
    "
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   325
     '/foo/bar' asFilename baseName  
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   326
     '.' asFilename baseName          
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   327
     '..' asFilename baseName         
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   328
     '../..' asFilename baseName       
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   329
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   330
!
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   331
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   332
pathName
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   333
    "return the full pathname of the file represented by the receiver."
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   334
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   335
    |parentName sep|
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   336
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   337
    sep := self class separator.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   338
    (nameString startsWith:sep) ifTrue:[
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   339
	parentName := self class parentDirectoryName.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   340
	(nameString endsWith:parentName) ifFalse:[
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   341
	    (nameString endsWith:parentName , sep asString) ifFalse:[
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   342
		^ nameString
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   343
	    ]
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   344
	]
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   345
    ].
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   346
    ^ (FileDirectory directoryNamed:nameString) pathName
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   347
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   348
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   349
     '/foo/bar' asFilename pathName
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   350
     '.' asFilename pathName 
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   351
     '../..' asFilename pathName 
85
claus
parents: 77
diff changeset
   352
    "
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   353
!
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   354
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   355
isAbsolute
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   356
    "return true, if the receiver represents an absolute pathname
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   357
     (in contrast to one relative to the current directory)."
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   358
85
claus
parents: 77
diff changeset
   359
    ^ (nameString startsWith:self class separator)
claus
parents: 77
diff changeset
   360
claus
parents: 77
diff changeset
   361
    "
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   362
     '/foo/bar' asFilename isAbsolute   
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   363
     '..' asFilename isAbsolute         
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   364
     'source/SBrowser.st' asFilename isAbsolute  
85
claus
parents: 77
diff changeset
   365
    "
claus
parents: 77
diff changeset
   366
!
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   367
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   368
isRelative
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   369
    "return true, if this name is interpreted relative to some
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   370
     directory (opposite of absolute)"
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   371
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   372
    ^ self isAbsolute not
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   373
!
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   374
85
claus
parents: 77
diff changeset
   375
isDirectory
claus
parents: 77
diff changeset
   376
    "return true, if the receiver represents an existing,
claus
parents: 77
diff changeset
   377
     readable directories pathname."
claus
parents: 77
diff changeset
   378
claus
parents: 77
diff changeset
   379
    ^ OperatingSystem isDirectory:nameString
claus
parents: 77
diff changeset
   380
claus
parents: 77
diff changeset
   381
    "
claus
parents: 77
diff changeset
   382
     '/foo/bar' asFilename isDirectory
claus
parents: 77
diff changeset
   383
     '/tmp' asFilename isDirectory
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   384
     'Makefile' asFilename isDirectory   
85
claus
parents: 77
diff changeset
   385
    "
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   386
!
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   387
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   388
exists
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   389
    "return true, if such a file exists."
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   390
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   391
    ^ OperatingSystem isValidPath:nameString
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   392
85
claus
parents: 77
diff changeset
   393
    "
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   394
     '/foo/bar' asFilename exists 
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   395
     '/tmp' asFilename exists  
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   396
     'Makefile' asFilename exists   
85
claus
parents: 77
diff changeset
   397
    "
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   398
!
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   399
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   400
isReadable
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   401
    "return true, if such a file exists and is readable."
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   402
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   403
    ^ OperatingSystem isReadable:nameString
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   404
85
claus
parents: 77
diff changeset
   405
    "
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   406
     '/foo/bar' asFilename isReadable   
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   407
     '/tmp' asFilename isReadable      
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   408
     'Makefile' asFilename isReadable   
85
claus
parents: 77
diff changeset
   409
    "
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   410
!
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   411
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   412
canBeWritten
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   413
    "same as isWritable - for ST-80 compatibility"
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   414
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   415
    ^ self isWritable
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   416
!
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   417
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   418
isWritable
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   419
    "return true, if such a file exists and is writable."
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   420
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   421
    ^ OperatingSystem isWritable:nameString
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   422
85
claus
parents: 77
diff changeset
   423
    "
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   424
     '/foo/bar' asFilename isWritable 
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   425
     '/tmp' asFilename isWritable   
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   426
     'Makefile' asFilename isWritable   
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   427
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   428
!
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   429
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   430
isExecutable
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   431
    "return true, if such a file exists and is executable (by Unix's definition).
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   432
     For directories, true is returned if the directory can be entered.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   433
     See isExecutableProgram for a related check."
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   434
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   435
    ^ OperatingSystem isExecutable:nameString
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   436
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   437
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   438
     '/foo/bar' asFilename isExecutable 
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   439
     '/tmp' asFilename isExecutable   
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   440
     'Makefile' asFilename isExecutable   
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   441
     '/bin/ls' asFilename isExecutable   
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   442
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   443
!
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   444
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   445
isExecutableProgram
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   446
    "return true, if such a file exists and is an executable program.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   447
     (i.e. for directories, false is returned.)"
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   448
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   449
    ^ (OperatingSystem isExecutable:nameString)
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   450
      and:[(OperatingSystem isDirectory:nameString) not]
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   451
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   452
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   453
     '/tmp' asFilename isExecutable         
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   454
     '/bin/ls' asFilename isExecutable       
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   455
     '/tmp' asFilename isExecutableProgram   
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   456
     '/bin/ls' asFilename isExecutableProgram    
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   457
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   458
!
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   459
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   460
filenameCompletion
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   461
    "try to complete the filename. This method has both a side effect,
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   462
     and a return value:
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   463
	 it returns a collection of matching filename strings,
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   464
	 and sets (as side effect) the receivers filename to the longest common
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   465
	 match. 
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   466
     (i.e. if the size of the returned collection is exactly 1,
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   467
      the completion has succeeded and the receivers name has been changed to
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   468
      that. 
132
ab2cfccd218c *** empty log message ***
claus
parents: 92
diff changeset
   469
      If the returned collection is empty, nothing matched.
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   470
      If the size of the returned collection is greater than one, the receivers
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   471
      filename-string has been set to the longest common filename-prefix)"
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   472
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   473
    |dir name matching matchLen try allMatching sep parent|
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   474
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   475
    sep := self class separator asString.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   476
    parent := self class parentDirectoryName.
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   477
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   478
    dir := self directory.
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   479
    (nameString endsWith:sep) ifTrue:[
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   480
	name := ''
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   481
    ] ifFalse:[
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   482
	name := self baseName.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   483
    ].
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   484
    name = parent ifTrue:[^ dir asFilename filenameCompletion].
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   485
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   486
    matching := OrderedCollection new.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   487
    (FileDirectory directoryNamed:dir) do:[:fileName |
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   488
	((fileName ~= '.') and:[fileName ~= parent]) ifTrue:[
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   489
	    (fileName startsWith:name) ifTrue:[
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   490
		matching add:fileName
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   491
	    ]
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   492
	]
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   493
    ].
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   494
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   495
     if there is only one, change my name ...
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   496
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   497
    matching size == 1 ifTrue:[
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   498
	dir = sep ifTrue:[
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   499
	   dir := ''
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   500
	].
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   501
	nameString := dir , sep , matching first.
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   502
	matching first = name ifTrue:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   503
	    self isDirectory ifTrue:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   504
		nameString := nameString , self class separator asString
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   505
	    ]
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   506
	]
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   507
    ] ifFalse:[
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   508
	matching size > 1 ifTrue:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   509
	    "
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   510
	     find the longest common prefix
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   511
	    "
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   512
	    matchLen := name size.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   513
	    matchLen > matching first size ifTrue:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   514
		try := name.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   515
		allMatching := false
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   516
	    ] ifFalse:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   517
		try := matching first copyTo:matchLen.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   518
		allMatching := true.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   519
	    ].
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   520
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   521
	    [allMatching] whileTrue:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   522
		matching do:[:aName |
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   523
		    (aName startsWith:try) ifFalse:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   524
			allMatching := false
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   525
		    ]
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   526
		].
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   527
		allMatching ifTrue:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   528
		    matchLen <  matching first size ifTrue:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   529
			matchLen := matchLen + 1.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   530
			try := matching first copyTo:matchLen.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   531
		    ] ifFalse:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   532
			allMatching := false
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   533
		    ]
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   534
		] ifFalse:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   535
		    try := matching first copyTo:matchLen - 1.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   536
		]
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   537
	    ].
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   538
	    "
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   539
	     and set my name to the last full match
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   540
	    "
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   541
	    dir = sep ifTrue:[
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   542
	       dir := ''
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   543
	    ].
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   544
	    nameString := dir , sep , try
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   545
	]
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   546
    ].
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   547
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   548
     return the match-set, so caller can decide what to do
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   549
     (i.e. show the matches, output a warning etc ...)
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   550
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   551
    ^ matching
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   552
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   553
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   554
     'Make' asFilename filenameCompletion;yourself 
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   555
     'Makef' asFilename filenameCompletion;yourself 
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   556
     '/u' asFilename filenameCompletion 
85
claus
parents: 77
diff changeset
   557
    "
2
claus
parents: 1
diff changeset
   558
! !
claus
parents: 1
diff changeset
   559
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   560
!Filename methodsFor:'file queries'!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   561
9e273c60e785 more functions
claus
parents: 159
diff changeset
   562
info
9e273c60e785 more functions
claus
parents: 159
diff changeset
   563
    "return the files info; that is a collection of file attributes,
9e273c60e785 more functions
claus
parents: 159
diff changeset
   564
     (actually a dictionary) where the keys are #type, #uid, #gid, #size etc.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   565
    The actual amount and detail returned may depend on the OS used."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   566
9e273c60e785 more functions
claus
parents: 159
diff changeset
   567
    ^ OperatingSystem infoOf:nameString
9e273c60e785 more functions
claus
parents: 159
diff changeset
   568
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   569
9e273c60e785 more functions
claus
parents: 159
diff changeset
   570
fileSize
9e273c60e785 more functions
claus
parents: 159
diff changeset
   571
    "return the size of the file in bytes"
9e273c60e785 more functions
claus
parents: 159
diff changeset
   572
9e273c60e785 more functions
claus
parents: 159
diff changeset
   573
    |info|
9e273c60e785 more functions
claus
parents: 159
diff changeset
   574
9e273c60e785 more functions
claus
parents: 159
diff changeset
   575
    info := self info.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   576
    info isNil ifTrue:[^ nil].
9e273c60e785 more functions
claus
parents: 159
diff changeset
   577
    ^ info at:#size
9e273c60e785 more functions
claus
parents: 159
diff changeset
   578
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   579
9e273c60e785 more functions
claus
parents: 159
diff changeset
   580
fileType
9e273c60e785 more functions
claus
parents: 159
diff changeset
   581
    "this returns a string describing the type of contents of
9e273c60e785 more functions
claus
parents: 159
diff changeset
   582
     the file. This is done using the unix 'file' command,
9e273c60e785 more functions
claus
parents: 159
diff changeset
   583
     (which usually is configurable by /etc/magic).
9e273c60e785 more functions
claus
parents: 159
diff changeset
   584
     On non-unix systems, this may return an empty string, not knowning
9e273c60e785 more functions
claus
parents: 159
diff changeset
   585
     about the contents."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   586
9e273c60e785 more functions
claus
parents: 159
diff changeset
   587
    |stream typeString|
9e273c60e785 more functions
claus
parents: 159
diff changeset
   588
9e273c60e785 more functions
claus
parents: 159
diff changeset
   589
    typeString := ''.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   590
    stream := PipeStream readingFrom:('file ' , self pathName).
9e273c60e785 more functions
claus
parents: 159
diff changeset
   591
    stream notNil ifTrue:[
9e273c60e785 more functions
claus
parents: 159
diff changeset
   592
	typeString := stream contents asString.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   593
	stream close.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   594
	typeString := typeString copyFrom:(typeString indexOf:$:) + 1.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   595
	typeString := typeString withoutSeparators
9e273c60e785 more functions
claus
parents: 159
diff changeset
   596
    ] ifFalse:[
9e273c60e785 more functions
claus
parents: 159
diff changeset
   597
	"
9e273c60e785 more functions
claus
parents: 159
diff changeset
   598
	 could add some fallback code here, for systems, where no
9e273c60e785 more functions
claus
parents: 159
diff changeset
   599
	 file command is avaliable ...
9e273c60e785 more functions
claus
parents: 159
diff changeset
   600
	 ... or at least analyze directory info.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   601
	"
9e273c60e785 more functions
claus
parents: 159
diff changeset
   602
    ].
9e273c60e785 more functions
claus
parents: 159
diff changeset
   603
    ^ typeString
9e273c60e785 more functions
claus
parents: 159
diff changeset
   604
9e273c60e785 more functions
claus
parents: 159
diff changeset
   605
    "
9e273c60e785 more functions
claus
parents: 159
diff changeset
   606
     'Makefile' asFilename fileType 
9e273c60e785 more functions
claus
parents: 159
diff changeset
   607
     '.' asFilename fileType    
9e273c60e785 more functions
claus
parents: 159
diff changeset
   608
     '/dev/null' asFilename fileType        
9e273c60e785 more functions
claus
parents: 159
diff changeset
   609
     'smalltalk.rc' asFilename fileType    
9e273c60e785 more functions
claus
parents: 159
diff changeset
   610
    "
9e273c60e785 more functions
claus
parents: 159
diff changeset
   611
! !
9e273c60e785 more functions
claus
parents: 159
diff changeset
   612
9e273c60e785 more functions
claus
parents: 159
diff changeset
   613
!Filename methodsFor:'file operations'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   614
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   615
delete
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   616
    "remove the file - same as remove, for ST-80 compatibility"
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   617
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   618
    ^ self remove
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   619
!
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   620
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   621
remove
192
3b0eb8864842 *** empty log message ***
claus
parents: 174
diff changeset
   622
    "remove the file - the argument must be convertable to a String.
3b0eb8864842 *** empty log message ***
claus
parents: 174
diff changeset
   623
     Return true if sucessfull, false if not."
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   624
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   625
    ^ OperatingSystem removeFile:nameString
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   626
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   627
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   628
     (FileStream newFileNamed:'foo') close.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   629
     'foo' asFilename remove
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   630
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   631
!
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   632
2
claus
parents: 1
diff changeset
   633
renameTo:newName
192
3b0eb8864842 *** empty log message ***
claus
parents: 174
diff changeset
   634
    "rename the file - the argument must be convertable to a String.
3b0eb8864842 *** empty log message ***
claus
parents: 174
diff changeset
   635
     Return true if sucessfull, false if not."
2
claus
parents: 1
diff changeset
   636
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   637
    ^ OperatingSystem renameFile:nameString to:(newName asString)
2
claus
parents: 1
diff changeset
   638
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   639
    "
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   640
     '/tmp/foo' asFilename renameTo:'/tmp/bar'
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   641
    "
2
claus
parents: 1
diff changeset
   642
!
claus
parents: 1
diff changeset
   643
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   644
copyTo:newName
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   645
    "copy the file - the argument must be convertable to a filename"
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   646
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   647
    |inStream outStream buffer bufferSize count|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   648
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   649
    bufferSize := 8 * 1024.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   650
    buffer := ByteArray new:bufferSize.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   651
    inStream := self readStream.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   652
    outStream := newName asFilename writeStream.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   653
    (inStream isNil or:[outStream isNil]) ifTrue:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   654
	^ self error:'file copy failed'
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   655
    ].
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   656
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   657
    [inStream atEnd] whileFalse:[
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   658
	count := inStream nextBytes:bufferSize into:buffer.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   659
	outStream nextPutBytes:count from:buffer.
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   660
    ].
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   661
    outStream close.
195
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   662
    inStream close.
159
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   663
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   664
    "
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   665
     'Makefile' asFilename copyTo:'Makefile.foo'
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   666
     'smalltalk' asFilename copyTo:'/dev/null'
514c749165c3 *** empty log message ***
claus
parents: 132
diff changeset
   667
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   668
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   669
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   670
moveTo:newName
9e273c60e785 more functions
claus
parents: 159
diff changeset
   671
    "copy the file represented by the receiver, then delete it.
195
515af3696a5c *** empty log message ***
claus
parents: 192
diff changeset
   672
     This is different to renaming in case of cross device moves."
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   673
9e273c60e785 more functions
claus
parents: 159
diff changeset
   674
    self copyTo:newName.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   675
    self remove
9e273c60e785 more functions
claus
parents: 159
diff changeset
   676
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   677
9e273c60e785 more functions
claus
parents: 159
diff changeset
   678
makeDirectory
9e273c60e785 more functions
claus
parents: 159
diff changeset
   679
    "create a directory with the receivers name"
9e273c60e785 more functions
claus
parents: 159
diff changeset
   680
9e273c60e785 more functions
claus
parents: 159
diff changeset
   681
    OperatingSystem createDirectory:nameString
9e273c60e785 more functions
claus
parents: 159
diff changeset
   682
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   683
9e273c60e785 more functions
claus
parents: 159
diff changeset
   684
addAccessRights:aCollection
9e273c60e785 more functions
claus
parents: 159
diff changeset
   685
    "add the access rights as specified in aCollection for the file represented
9e273c60e785 more functions
claus
parents: 159
diff changeset
   686
     by the receiver. The argument must be a collection of symbols,
9e273c60e785 more functions
claus
parents: 159
diff changeset
   687
     such as #readUser, #writeGroup etc."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   688
9e273c60e785 more functions
claus
parents: 159
diff changeset
   689
    |access|
9e273c60e785 more functions
claus
parents: 159
diff changeset
   690
9e273c60e785 more functions
claus
parents: 159
diff changeset
   691
    access := OperatingSystem accessModeOf:nameString.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   692
    aCollection do:[:accessSymbol |
9e273c60e785 more functions
claus
parents: 159
diff changeset
   693
	access := access bitOr:(OperatingSystem accessMaskFor:accessSymbol).
9e273c60e785 more functions
claus
parents: 159
diff changeset
   694
    ].
9e273c60e785 more functions
claus
parents: 159
diff changeset
   695
    OperatingSystem changeAccessModeOf:nameString to:access
9e273c60e785 more functions
claus
parents: 159
diff changeset
   696
9e273c60e785 more functions
claus
parents: 159
diff changeset
   697
    "
9e273c60e785 more functions
claus
parents: 159
diff changeset
   698
     'foo' asFilename writeStream close.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   699
     'foo' asFilename addAccessRights:#(readUser readGroup readOthers).
9e273c60e785 more functions
claus
parents: 159
diff changeset
   700
     'foo' asFilename addAccessRights:#(writeUser writeGroup writeOthers).
9e273c60e785 more functions
claus
parents: 159
diff changeset
   701
     'foo' asFilename addAccessRights:#(executeUser executeGroup executeOthers).
9e273c60e785 more functions
claus
parents: 159
diff changeset
   702
    "
9e273c60e785 more functions
claus
parents: 159
diff changeset
   703
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   704
9e273c60e785 more functions
claus
parents: 159
diff changeset
   705
removeAccessRights:aCollection
9e273c60e785 more functions
claus
parents: 159
diff changeset
   706
    "remove the access rights as specified in aCollection for the file represented
9e273c60e785 more functions
claus
parents: 159
diff changeset
   707
     by the receiver. The argument must be a collection of symbols,
9e273c60e785 more functions
claus
parents: 159
diff changeset
   708
     such as #readUser, #writeGroup etc."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   709
9e273c60e785 more functions
claus
parents: 159
diff changeset
   710
    |access|
9e273c60e785 more functions
claus
parents: 159
diff changeset
   711
9e273c60e785 more functions
claus
parents: 159
diff changeset
   712
    access := OperatingSystem accessModeOf:nameString.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   713
    aCollection do:[:accessSymbol |
9e273c60e785 more functions
claus
parents: 159
diff changeset
   714
	access := access bitAnd:(OperatingSystem accessMaskFor:accessSymbol) bitInvert.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   715
    ].
9e273c60e785 more functions
claus
parents: 159
diff changeset
   716
    OperatingSystem changeAccessModeOf:nameString to:access
9e273c60e785 more functions
claus
parents: 159
diff changeset
   717
9e273c60e785 more functions
claus
parents: 159
diff changeset
   718
    "
9e273c60e785 more functions
claus
parents: 159
diff changeset
   719
     'foo' asFilename writeStream close.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   720
     'foo' asFilename removeAccessRights:#(readUser readGroup readOthers).
9e273c60e785 more functions
claus
parents: 159
diff changeset
   721
     'foo' asFilename removeAccessRights:#(writeUser writeGroup writeOthers).
9e273c60e785 more functions
claus
parents: 159
diff changeset
   722
     'foo' asFilename removeAccessRights:#(executeUser executeGroup executeOthers).
9e273c60e785 more functions
claus
parents: 159
diff changeset
   723
    "
9e273c60e785 more functions
claus
parents: 159
diff changeset
   724
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   725
9e273c60e785 more functions
claus
parents: 159
diff changeset
   726
makeReadableForAll
9e273c60e785 more functions
claus
parents: 159
diff changeset
   727
    "make the file readable for all - you must have permission to do so."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   728
9e273c60e785 more functions
claus
parents: 159
diff changeset
   729
    self addAccessRights:#(readUser readGroup readOthers)
9e273c60e785 more functions
claus
parents: 159
diff changeset
   730
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   731
9e273c60e785 more functions
claus
parents: 159
diff changeset
   732
makeReadable
9e273c60e785 more functions
claus
parents: 159
diff changeset
   733
    "make the file readable for  the owner - you must have permission to do so."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   734
9e273c60e785 more functions
claus
parents: 159
diff changeset
   735
    self addAccessRights:#(readUser)
9e273c60e785 more functions
claus
parents: 159
diff changeset
   736
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   737
9e273c60e785 more functions
claus
parents: 159
diff changeset
   738
makeWritable
9e273c60e785 more functions
claus
parents: 159
diff changeset
   739
    "make the file writableable for all - you must have permission to do so."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   740
9e273c60e785 more functions
claus
parents: 159
diff changeset
   741
    self addAccessRights:#(writeUser)
9e273c60e785 more functions
claus
parents: 159
diff changeset
   742
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   743
9e273c60e785 more functions
claus
parents: 159
diff changeset
   744
makeWritableForAll
9e273c60e785 more functions
claus
parents: 159
diff changeset
   745
    "make the file writable for all - you must have permission to do so."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   746
9e273c60e785 more functions
claus
parents: 159
diff changeset
   747
    self addAccessRights:#(writeUser writeGroup writeOthers)
9e273c60e785 more functions
claus
parents: 159
diff changeset
   748
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   749
9e273c60e785 more functions
claus
parents: 159
diff changeset
   750
makeUnwritable
9e273c60e785 more functions
claus
parents: 159
diff changeset
   751
    "make the file unwritable for all - you must have permission to do so."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   752
9e273c60e785 more functions
claus
parents: 159
diff changeset
   753
    self removeAccessRights:#(writeUser writeGroup writeOthers)
9e273c60e785 more functions
claus
parents: 159
diff changeset
   754
! !
9e273c60e785 more functions
claus
parents: 159
diff changeset
   755
9e273c60e785 more functions
claus
parents: 159
diff changeset
   756
!Filename methodsFor:'file utilities'!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   757
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   758
fileIn
2
claus
parents: 1
diff changeset
   759
    "load smalltalk code from the file"
claus
parents: 1
diff changeset
   760
claus
parents: 1
diff changeset
   761
    ^ self readStream fileIn
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   762
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   763
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   764
edit
9e273c60e785 more functions
claus
parents: 159
diff changeset
   765
    "start an editView on the file represented by the receiver"
9e273c60e785 more functions
claus
parents: 159
diff changeset
   766
9e273c60e785 more functions
claus
parents: 159
diff changeset
   767
    EditTextView openOn:self asString
276
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   768
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   769
    "
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   770
     'smalltalk.rc' asFilename edit
3b6d97620494 *** empty log message ***
claus
parents: 249
diff changeset
   771
    "
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   772
!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   773
9e273c60e785 more functions
claus
parents: 159
diff changeset
   774
contentsOfEntireFile
9e273c60e785 more functions
claus
parents: 159
diff changeset
   775
    "return the contents of the file as a string"
9e273c60e785 more functions
claus
parents: 159
diff changeset
   776
9e273c60e785 more functions
claus
parents: 159
diff changeset
   777
    |s contents|
9e273c60e785 more functions
claus
parents: 159
diff changeset
   778
9e273c60e785 more functions
claus
parents: 159
diff changeset
   779
    s := self readStream.
9e273c60e785 more functions
claus
parents: 159
diff changeset
   780
    [
9e273c60e785 more functions
claus
parents: 159
diff changeset
   781
	contents := s contents
9e273c60e785 more functions
claus
parents: 159
diff changeset
   782
    ] valueNowOrOnUnwindDo:[s close].
9e273c60e785 more functions
claus
parents: 159
diff changeset
   783
    ^ contents
9e273c60e785 more functions
claus
parents: 159
diff changeset
   784
! !
9e273c60e785 more functions
claus
parents: 159
diff changeset
   785
9e273c60e785 more functions
claus
parents: 159
diff changeset
   786
!Filename methodsFor:'file access'!
9e273c60e785 more functions
claus
parents: 159
diff changeset
   787
77
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   788
newReadWriteStream
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   789
    "return a stream for read/write"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   790
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   791
    ^ FileStream newFileNamed:nameString
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   792
!
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   793
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   794
readWriteStream
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   795
    "return a stream for read/write"
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   796
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   797
    ^ FileStream oldFileNamed:nameString
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   798
!
6c38ca59927f *** empty log message ***
claus
parents: 68
diff changeset
   799
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   800
readStream
2
claus
parents: 1
diff changeset
   801
    "return a stream for reading"
claus
parents: 1
diff changeset
   802
68
59faa75185ba *** empty log message ***
claus
parents: 54
diff changeset
   803
    ^ FileStream readonlyFileNamed:nameString
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   804
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   805
a27a279701f8 Initial revision
claus
parents:
diff changeset
   806
writeStream
2
claus
parents: 1
diff changeset
   807
    "return a stream for writing"
claus
parents: 1
diff changeset
   808
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   809
    ^ FileStream newFileForWritingNamed:nameString
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   810
!
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   811
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   812
appendingWriteStream
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   813
    "return a stream for appending"
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   814
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   815
    ^ FileStream appendingOldFileNamed:nameString 
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   816
! !
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   817
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   818
!Filename methodsFor:'printing & storing'!
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   819
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   820
storeOn:aStream
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   821
    "append a printed representation of the receiver to aStream,
9e273c60e785 more functions
claus
parents: 159
diff changeset
   822
     which allows reconstructing it via readFrom:"
9e273c60e785 more functions
claus
parents: 159
diff changeset
   823
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   824
    aStream nextPut:$(.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   825
    nameString storeOn:aStream.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   826
    aStream nextPutAll:' asFilename)'
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   827
!
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   828
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   829
printOn:aStream
174
9e273c60e785 more functions
claus
parents: 159
diff changeset
   830
    "append a printed representation of the receiver to aStream."
9e273c60e785 more functions
claus
parents: 159
diff changeset
   831
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   832
    aStream nextPutAll:'FileName('''.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   833
    nameString printOn:aStream.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   834
    aStream nextPutAll:''')'
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   835
! !
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   836