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