PositionableStream.st
author claus
Sun, 09 Jan 1994 22:25:58 +0100
changeset 41 a14247b04d03
parent 27 d98f9dd437f7
child 42 e33491f6f260
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) 1989 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
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
Stream subclass:#PositionableStream
10
claus
parents: 5
diff changeset
    14
       instanceVariableNames:'collection position readLimit'
claus
parents: 5
diff changeset
    15
       classVariableNames:'ErrorDuringFileInSignal'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
       category:'Streams'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
PositionableStream comment:'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    21
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    22
COPYRIGHT (c) 1989 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
              All Rights Reserved
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
10
claus
parents: 5
diff changeset
    25
Instances of PositionableStream allow positioning the read pointer.
claus
parents: 5
diff changeset
    26
PositionableStream also adds methods for source-chunk reading and writing
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    27
and for filing-in/out of source code.
10
claus
parents: 5
diff changeset
    28
This is an abstract class.
claus
parents: 5
diff changeset
    29
41
a14247b04d03 *** empty log message ***
claus
parents: 27
diff changeset
    30
$Header: /cvs/stx/stx/libbasic/PositionableStream.st,v 1.8 1994-01-09 21:23:11 claus Exp $
10
claus
parents: 5
diff changeset
    31
'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    32
10
claus
parents: 5
diff changeset
    33
!PositionableStream class methodsFor:'initialization'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    34
10
claus
parents: 5
diff changeset
    35
initialize
claus
parents: 5
diff changeset
    36
    ErrorDuringFileInSignal isNil ifTrue:[
claus
parents: 5
diff changeset
    37
        ErrorDuringFileInSignal := (Signal new) mayProceed:true.
claus
parents: 5
diff changeset
    38
        ErrorDuringFileInSignal notifierString:'error during fileIn'.
claus
parents: 5
diff changeset
    39
    ]
claus
parents: 5
diff changeset
    40
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    41
a27a279701f8 Initial revision
claus
parents:
diff changeset
    42
!PositionableStream class methodsFor:'constants'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    43
a27a279701f8 Initial revision
claus
parents:
diff changeset
    44
chunkSeparator
a27a279701f8 Initial revision
claus
parents:
diff changeset
    45
    "return the chunk-separation character"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    46
a27a279701f8 Initial revision
claus
parents:
diff changeset
    47
    ^ $!!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    48
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    49
a27a279701f8 Initial revision
claus
parents:
diff changeset
    50
!PositionableStream class methodsFor:'instance creation'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    51
a27a279701f8 Initial revision
claus
parents:
diff changeset
    52
on:aCollection
a27a279701f8 Initial revision
claus
parents:
diff changeset
    53
    "return a new PositionableStream streaming on aCollection"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    54
a27a279701f8 Initial revision
claus
parents:
diff changeset
    55
    ^ (self basicNew) on:aCollection
a27a279701f8 Initial revision
claus
parents:
diff changeset
    56
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    57
a27a279701f8 Initial revision
claus
parents:
diff changeset
    58
on:aCollection from:first to:last
a27a279701f8 Initial revision
claus
parents:
diff changeset
    59
    "return a new PositionableStream streaming on aCollection
a27a279701f8 Initial revision
claus
parents:
diff changeset
    60
     from first to last"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    61
a27a279701f8 Initial revision
claus
parents:
diff changeset
    62
    |newStream|
a27a279701f8 Initial revision
claus
parents:
diff changeset
    63
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
    newStream := (self basicNew) on:aCollection.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    65
    newStream position:first.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    66
    newStream readLimit:last.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    67
    ^ newStream
a27a279701f8 Initial revision
claus
parents:
diff changeset
    68
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    69
a27a279701f8 Initial revision
claus
parents:
diff changeset
    70
!PositionableStream methodsFor:'private'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    71
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
on:aCollection
a27a279701f8 Initial revision
claus
parents:
diff changeset
    73
    "setup for streaming on aCollection"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    74
a27a279701f8 Initial revision
claus
parents:
diff changeset
    75
    collection := aCollection.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    76
    readLimit := aCollection size.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
    position := 1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    78
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    79
a27a279701f8 Initial revision
claus
parents:
diff changeset
    80
positionError
a27a279701f8 Initial revision
claus
parents:
diff changeset
    81
    "report an error when positioning past the end"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    82
a27a279701f8 Initial revision
claus
parents:
diff changeset
    83
    ^ self error:'cannot position past end of collection'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    84
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
!PositionableStream methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
contents
a27a279701f8 Initial revision
claus
parents:
diff changeset
    89
    "return the entire contents of the stream"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
a27a279701f8 Initial revision
claus
parents:
diff changeset
    91
    ^ collection
a27a279701f8 Initial revision
claus
parents:
diff changeset
    92
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    93
a27a279701f8 Initial revision
claus
parents:
diff changeset
    94
peek
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
    "look ahead for and return the next element"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    96
a27a279701f8 Initial revision
claus
parents:
diff changeset
    97
    |peekObject|
a27a279701f8 Initial revision
claus
parents:
diff changeset
    98
a27a279701f8 Initial revision
claus
parents:
diff changeset
    99
    peekObject := self next.
10
claus
parents: 5
diff changeset
   100
    self backStep.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   101
    ^ peekObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   102
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   103
a27a279701f8 Initial revision
claus
parents:
diff changeset
   104
peekFor:something
10
claus
parents: 5
diff changeset
   105
    "return true and move past if next == something; 
claus
parents: 5
diff changeset
   106
     otherwise stay and let position unchanged"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   107
a27a279701f8 Initial revision
claus
parents:
diff changeset
   108
    self next == something ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   109
        ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   110
    ].
10
claus
parents: 5
diff changeset
   111
    self backStep.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   112
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   113
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   114
a27a279701f8 Initial revision
claus
parents:
diff changeset
   115
readLimit:aNumber
a27a279701f8 Initial revision
claus
parents:
diff changeset
   116
    "set the read-limit"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   117
a27a279701f8 Initial revision
claus
parents:
diff changeset
   118
    readLimit := aNumber
a27a279701f8 Initial revision
claus
parents:
diff changeset
   119
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   120
a27a279701f8 Initial revision
claus
parents:
diff changeset
   121
upTo:element
a27a279701f8 Initial revision
claus
parents:
diff changeset
   122
    "return a collection of the elements up-to
a27a279701f8 Initial revision
claus
parents:
diff changeset
   123
     (but excluding) the argument, element.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   124
     Return nil if the stream-end is reached before."
a27a279701f8 Initial revision
claus
parents:
diff changeset
   125
a27a279701f8 Initial revision
claus
parents:
diff changeset
   126
    |newColl e|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   127
a27a279701f8 Initial revision
claus
parents:
diff changeset
   128
    newColl := collection species new.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   129
    e := self next.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   130
    [e = element] whileFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   131
        newColl := newColl copyWith:e.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   132
        e := self next.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   133
        self atEnd ifTrue:[^ nil]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   134
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   135
    ^ newColl
a27a279701f8 Initial revision
claus
parents:
diff changeset
   136
a27a279701f8 Initial revision
claus
parents:
diff changeset
   137
    "(ReadStream on:'1234567890') upTo:$5"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   138
    "(ReadStream on:'123456') upTo:$7"
2
claus
parents: 1
diff changeset
   139
!
claus
parents: 1
diff changeset
   140
claus
parents: 1
diff changeset
   141
upToEnd
claus
parents: 1
diff changeset
   142
    "return a collection of the elements up-to the end
claus
parents: 1
diff changeset
   143
     Return nil if the stream-end is reached before."
claus
parents: 1
diff changeset
   144
10
claus
parents: 5
diff changeset
   145
    |newColl|
claus
parents: 5
diff changeset
   146
claus
parents: 5
diff changeset
   147
    "this implementation has stupid (o-square) runtime behavior -
claus
parents: 5
diff changeset
   148
     should I add a query for resizability if collections and use
claus
parents: 5
diff changeset
   149
     add: instead ?"
2
claus
parents: 1
diff changeset
   150
claus
parents: 1
diff changeset
   151
    newColl := collection species new.
claus
parents: 1
diff changeset
   152
    [self atEnd] whileFalse:[
claus
parents: 1
diff changeset
   153
        newColl := newColl copyWith:(self next).
claus
parents: 1
diff changeset
   154
    ].
claus
parents: 1
diff changeset
   155
    ^ newColl
claus
parents: 1
diff changeset
   156
claus
parents: 1
diff changeset
   157
    "(ReadStream on:'1234567890') upToEnd"
claus
parents: 1
diff changeset
   158
    "((ReadStream on:'123456') next; next) upToEnd"
claus
parents: 1
diff changeset
   159
!
claus
parents: 1
diff changeset
   160
claus
parents: 1
diff changeset
   161
upToSeparator
claus
parents: 1
diff changeset
   162
    "Return the next elements up to but not including the next separator."
claus
parents: 1
diff changeset
   163
claus
parents: 1
diff changeset
   164
    |stream ch|
claus
parents: 1
diff changeset
   165
claus
parents: 1
diff changeset
   166
    stream := WriteStream on: (collection species new).
claus
parents: 1
diff changeset
   167
    [(ch := self peek) == nil] whileFalse:[
claus
parents: 1
diff changeset
   168
        ch isSeparator ifTrue: [
claus
parents: 1
diff changeset
   169
            ^ stream contents
claus
parents: 1
diff changeset
   170
        ] ifFalse: [
claus
parents: 1
diff changeset
   171
            self skip: 1.
claus
parents: 1
diff changeset
   172
            stream nextPut: ch
claus
parents: 1
diff changeset
   173
        ]
claus
parents: 1
diff changeset
   174
    ].
claus
parents: 1
diff changeset
   175
    ^ stream contents
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   176
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   177
a27a279701f8 Initial revision
claus
parents:
diff changeset
   178
!PositionableStream methodsFor:'testing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   179
a27a279701f8 Initial revision
claus
parents:
diff changeset
   180
atEnd
a27a279701f8 Initial revision
claus
parents:
diff changeset
   181
    "return true, if the read-position is at the end"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   182
a27a279701f8 Initial revision
claus
parents:
diff changeset
   183
    ^ position > readLimit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   184
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   185
a27a279701f8 Initial revision
claus
parents:
diff changeset
   186
isEmpty
a27a279701f8 Initial revision
claus
parents:
diff changeset
   187
    "return true, if the contents of the stream is empty"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   188
a27a279701f8 Initial revision
claus
parents:
diff changeset
   189
    ^ readLimit == 0
a27a279701f8 Initial revision
claus
parents:
diff changeset
   190
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   191
a27a279701f8 Initial revision
claus
parents:
diff changeset
   192
!PositionableStream methodsFor:'positioning'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   193
a27a279701f8 Initial revision
claus
parents:
diff changeset
   194
position
a27a279701f8 Initial revision
claus
parents:
diff changeset
   195
    "return the read position"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   196
a27a279701f8 Initial revision
claus
parents:
diff changeset
   197
    ^ position
a27a279701f8 Initial revision
claus
parents:
diff changeset
   198
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   199
a27a279701f8 Initial revision
claus
parents:
diff changeset
   200
position:index
a27a279701f8 Initial revision
claus
parents:
diff changeset
   201
    "set the read position"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   202
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   203
    ((index > (readLimit + 1)) or:[index < 1]) ifTrue: [^ self positionError].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   204
    position := index
a27a279701f8 Initial revision
claus
parents:
diff changeset
   205
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   206
10
claus
parents: 5
diff changeset
   207
backStep
claus
parents: 5
diff changeset
   208
    "move backward read position by one"
claus
parents: 5
diff changeset
   209
claus
parents: 5
diff changeset
   210
    position <= 1 ifTrue: [^ self positionError].
claus
parents: 5
diff changeset
   211
    position := position - 1
claus
parents: 5
diff changeset
   212
!
claus
parents: 5
diff changeset
   213
    
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   214
reset
a27a279701f8 Initial revision
claus
parents:
diff changeset
   215
    "set the read position to the beginning of the collection"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   216
a27a279701f8 Initial revision
claus
parents:
diff changeset
   217
    position := 1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   218
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   219
a27a279701f8 Initial revision
claus
parents:
diff changeset
   220
setToEnd
a27a279701f8 Initial revision
claus
parents:
diff changeset
   221
    "set the read position to the end of the collection"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   222
a27a279701f8 Initial revision
claus
parents:
diff changeset
   223
    position := readLimit
a27a279701f8 Initial revision
claus
parents:
diff changeset
   224
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   225
a27a279701f8 Initial revision
claus
parents:
diff changeset
   226
skip:numberToSkip
a27a279701f8 Initial revision
claus
parents:
diff changeset
   227
    "skip the next numberToSkip elements"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   228
a27a279701f8 Initial revision
claus
parents:
diff changeset
   229
    self position:(position + numberToSkip)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   230
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   231
a27a279701f8 Initial revision
claus
parents:
diff changeset
   232
!PositionableStream methodsFor:'fileIn-Out'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   233
a27a279701f8 Initial revision
claus
parents:
diff changeset
   234
skipSeparators
a27a279701f8 Initial revision
claus
parents:
diff changeset
   235
    "skip all whitespace; so that next will return next non-white-space
a27a279701f8 Initial revision
claus
parents:
diff changeset
   236
     element"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   237
a27a279701f8 Initial revision
claus
parents:
diff changeset
   238
    |nextOne|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   239
a27a279701f8 Initial revision
claus
parents:
diff changeset
   240
    nextOne := self peek.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   241
    [(nextOne notNil) and:[nextOne isSeparator]] whileTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   242
        self next.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
        nextOne := self peek
a27a279701f8 Initial revision
claus
parents:
diff changeset
   244
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   245
    ^ nextOne
a27a279701f8 Initial revision
claus
parents:
diff changeset
   246
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   247
a27a279701f8 Initial revision
claus
parents:
diff changeset
   248
skipSeparatorsExceptCR
a27a279701f8 Initial revision
claus
parents:
diff changeset
   249
    "skip all whitespace except newlines;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   250
     next will return next non-white-space element"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   251
a27a279701f8 Initial revision
claus
parents:
diff changeset
   252
    |nextOne|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   253
a27a279701f8 Initial revision
claus
parents:
diff changeset
   254
    nextOne := self peek.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   255
    [(nextOne notNil) and:[nextOne isSeparator]] whileTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   256
        nextOne isEndOfLineCharacter ifTrue:[^ nextOne].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   257
        self next.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   258
        nextOne := self peek
a27a279701f8 Initial revision
claus
parents:
diff changeset
   259
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   260
    ^ nextOne
a27a279701f8 Initial revision
claus
parents:
diff changeset
   261
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   262
a27a279701f8 Initial revision
claus
parents:
diff changeset
   263
skipFor:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   264
    "skip all objects up-to and including anObject; return the element
a27a279701f8 Initial revision
claus
parents:
diff changeset
   265
     after"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   266
a27a279701f8 Initial revision
claus
parents:
diff changeset
   267
    |nextOne|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   268
a27a279701f8 Initial revision
claus
parents:
diff changeset
   269
    nextOne := self next.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   270
    [nextOne ~~ anObject] whileTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   271
        self atEnd ifTrue:[^ nil].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   272
        self next.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   273
        nextOne := self peek 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   274
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   275
    ^ self next
a27a279701f8 Initial revision
claus
parents:
diff changeset
   276
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   277
a27a279701f8 Initial revision
claus
parents:
diff changeset
   278
nextChunk
a27a279701f8 Initial revision
claus
parents:
diff changeset
   279
    "return the next chunk, i.e. all characters up to the next
a27a279701f8 Initial revision
claus
parents:
diff changeset
   280
     non-doubled exclamation mark; undouble doubled exclamation marks"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   281
a27a279701f8 Initial revision
claus
parents:
diff changeset
   282
    |theString sep newString done thisChar nextChar inPrimitive
a27a279701f8 Initial revision
claus
parents:
diff changeset
   283
     index    "{ Class:SmallInteger }"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   284
     currSize "{ Class:SmallInteger }" |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   285
a27a279701f8 Initial revision
claus
parents:
diff changeset
   286
    sep := self class chunkSeparator.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   287
    theString := String new:500.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   288
    currSize := 500.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   289
    thisChar := self skipSeparators.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   290
    thisChar := self next.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   291
    index := 0.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   292
    done := false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   293
    inPrimitive := false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   294
a27a279701f8 Initial revision
claus
parents:
diff changeset
   295
    [done] whileFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   296
        ((index + 2) <= currSize) ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   297
            newString := String new:(currSize * 2).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   298
            newString replaceFrom:1 to:currSize with:theString.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   299
            currSize := currSize * 2.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   300
            theString := newString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   301
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   302
        thisChar isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   303
            done := true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   304
        ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   305
            (thisChar == $% ) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   306
                nextChar := self peek.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   307
                (nextChar == ${ ) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   308
                    inPrimitive := true.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   309
                    index := index + 1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   310
                    theString at:index put:thisChar.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   311
                    thisChar := self next
a27a279701f8 Initial revision
claus
parents:
diff changeset
   312
                ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   313
                    (nextChar == $} ) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   314
                        inPrimitive := false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   315
                        index := index + 1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   316
                        theString at:index put:thisChar.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   317
                        thisChar := self next
a27a279701f8 Initial revision
claus
parents:
diff changeset
   318
                    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   319
                ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   320
            ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   321
                inPrimitive ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   322
                    (thisChar == sep) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   323
                        (self peek == sep) ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   324
                            done := true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   325
                        ] ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   326
                            self next
a27a279701f8 Initial revision
claus
parents:
diff changeset
   327
                        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   328
                    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   329
                ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   330
            ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   331
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   332
        done ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   333
            index := index + 1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   334
            theString at:index put:thisChar.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   335
            thisChar := self next
a27a279701f8 Initial revision
claus
parents:
diff changeset
   336
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   337
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   338
    (index == 0) ifTrue:[^ ''].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   339
    ^ theString copyFrom:1 to:index
a27a279701f8 Initial revision
claus
parents:
diff changeset
   340
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   341
a27a279701f8 Initial revision
claus
parents:
diff changeset
   342
nextChunkPut:aString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   343
    "put aString as a chunk onto the receiver;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   344
     double all exclamation marks and append an exclamation mark"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   345
a27a279701f8 Initial revision
claus
parents:
diff changeset
   346
    |sep gotPercent inPrimitive character
a27a279701f8 Initial revision
claus
parents:
diff changeset
   347
     index    "{ Class:SmallInteger }"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   348
     endIndex "{ Class:SmallInteger }"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   349
     next     "{ Class:SmallInteger }" |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   350
a27a279701f8 Initial revision
claus
parents:
diff changeset
   351
    sep := self class chunkSeparator.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   352
    inPrimitive := false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   353
    gotPercent := false.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   354
    index := 1.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   355
    endIndex := aString size.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   356
a27a279701f8 Initial revision
claus
parents:
diff changeset
   357
    [index <= endIndex] whileTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   358
        next := aString indexOf:$% startingAt:index ifAbsent:[endIndex + 1].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   359
        next := next min:
a27a279701f8 Initial revision
claus
parents:
diff changeset
   360
                (aString indexOf:${ startingAt:index ifAbsent:[endIndex + 1]).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   361
        next := next min:
a27a279701f8 Initial revision
claus
parents:
diff changeset
   362
                (aString indexOf:$} startingAt:index ifAbsent:[endIndex + 1]).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   363
        next := next min:
a27a279701f8 Initial revision
claus
parents:
diff changeset
   364
                (aString indexOf:sep startingAt:index ifAbsent:[endIndex + 1]).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   365
a27a279701f8 Initial revision
claus
parents:
diff changeset
   366
        ((index == 1) and:[next == (endIndex + 1)]) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   367
            self nextPutAll:aString
a27a279701f8 Initial revision
claus
parents:
diff changeset
   368
        ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   369
            self nextPutAll:(aString copyFrom:index to:(next - 1))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   370
        ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   371
a27a279701f8 Initial revision
claus
parents:
diff changeset
   372
        index := next.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   373
        (index <= endIndex) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   374
            character := aString at:index.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   375
            (character == $% ) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   376
                gotPercent := true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   377
            ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   378
                (character == ${ ) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   379
                    gotPercent ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   380
                        inPrimitive := true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   381
                    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   382
                ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   383
                    (character == $} ) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   384
                        gotPercent ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   385
                            inPrimitive := false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   386
                        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   387
                    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   388
                        inPrimitive ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   389
                            (character == sep) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   390
                                self nextPut:sep
a27a279701f8 Initial revision
claus
parents:
diff changeset
   391
                            ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   392
                        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   393
                    ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   394
                ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   395
                gotPercent := false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   396
            ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   397
            self nextPut:character.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   398
            index := index + 1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   399
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   400
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   401
    self nextPut:sep
a27a279701f8 Initial revision
claus
parents:
diff changeset
   402
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   403
a27a279701f8 Initial revision
claus
parents:
diff changeset
   404
fileInNextChunkNotifying:someone
a27a279701f8 Initial revision
claus
parents:
diff changeset
   405
    "read next chunk, evaluate it and return the result;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   406
     someone is notified of errors"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   407
a27a279701f8 Initial revision
claus
parents:
diff changeset
   408
    |aString sawExcla sep|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   409
a27a279701f8 Initial revision
claus
parents:
diff changeset
   410
    sep := self class chunkSeparator.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   411
    self skipSeparators.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   412
    self atEnd ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   413
        sawExcla := self peekFor:sep.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   414
        aString := self nextChunk.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   415
        aString size ~~ 0 ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   416
            sawExcla ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   417
                ^ Compiler evaluate:aString notifying:someone
a27a279701f8 Initial revision
claus
parents:
diff changeset
   418
            ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   419
            ^ (Compiler evaluate:aString notifying:someone) 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   420
                       fileInFrom:self notifying:someone
a27a279701f8 Initial revision
claus
parents:
diff changeset
   421
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   422
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   423
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   424
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   425
a27a279701f8 Initial revision
claus
parents:
diff changeset
   426
fileInNextChunk
a27a279701f8 Initial revision
claus
parents:
diff changeset
   427
    "read next chunk, evaluate it and return the result"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   428
a27a279701f8 Initial revision
claus
parents:
diff changeset
   429
    ^ self fileInNextChunkNotifying:nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   430
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   431
a27a279701f8 Initial revision
claus
parents:
diff changeset
   432
fileInNotifying:someone
a27a279701f8 Initial revision
claus
parents:
diff changeset
   433
    "file in from the receiver, i.e. read chunks and evaluate them -
a27a279701f8 Initial revision
claus
parents:
diff changeset
   434
     return the value of the last chunk; someone is notified of errors"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   435
a27a279701f8 Initial revision
claus
parents:
diff changeset
   436
    |lastValue|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   437
a27a279701f8 Initial revision
claus
parents:
diff changeset
   438
    self position:1.
27
d98f9dd437f7 *** empty log message ***
claus
parents: 13
diff changeset
   439
"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   440
    Smalltalk at:#ErrorHandler put:self.
27
d98f9dd437f7 *** empty log message ***
claus
parents: 13
diff changeset
   441
"
10
claus
parents: 5
diff changeset
   442
    [
27
d98f9dd437f7 *** empty log message ***
claus
parents: 13
diff changeset
   443
        "ErrorDuringFileInSignal" SignalSet anySignal handle:[:ex |
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   444
            |action|
10
claus
parents: 5
diff changeset
   445
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   446
            "handle the case where no GUI has been built in,
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   447
             just abort with a notification"
10
claus
parents: 5
diff changeset
   448
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   449
            Display isNil ifTrue:[
27
d98f9dd437f7 *** empty log message ***
claus
parents: 13
diff changeset
   450
                self notify:(ex signal notifierString).
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   451
                ex return
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   452
            ].
10
claus
parents: 5
diff changeset
   453
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   454
            "otherwise ask what should be done now and either
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   455
             continue or abort the fileIn"
10
claus
parents: 5
diff changeset
   456
27
d98f9dd437f7 *** empty log message ***
claus
parents: 13
diff changeset
   457
            action := self askForDebug:(ex signal notifierString).
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   458
            action == #continue ifTrue:[
41
a14247b04d03 *** empty log message ***
claus
parents: 27
diff changeset
   459
"
10
claus
parents: 5
diff changeset
   460
                Smalltalk at:#ErrorHandler put:self.
41
a14247b04d03 *** empty log message ***
claus
parents: 27
diff changeset
   461
"
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   462
                ex proceed
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   463
            ].
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   464
            action == #abort ifTrue:[
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   465
                ex return
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
   466
            ].
10
claus
parents: 5
diff changeset
   467
            ex reject
claus
parents: 5
diff changeset
   468
        ] do:[
claus
parents: 5
diff changeset
   469
            [self atEnd] whileFalse:[
claus
parents: 5
diff changeset
   470
                lastValue := self fileInNextChunkNotifying:someone
claus
parents: 5
diff changeset
   471
            ].
claus
parents: 5
diff changeset
   472
        ].
41
a14247b04d03 *** empty log message ***
claus
parents: 27
diff changeset
   473
    ] valueNowOrOnUnwindDo:["Smalltalk at:#ErrorHandler put:nil"].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   474
    ^ lastValue
a27a279701f8 Initial revision
claus
parents:
diff changeset
   475
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   476
a27a279701f8 Initial revision
claus
parents:
diff changeset
   477
fileIn
a27a279701f8 Initial revision
claus
parents:
diff changeset
   478
    "file in from the receiver, i.e. read chunks and evaluate them -
a27a279701f8 Initial revision
claus
parents:
diff changeset
   479
     return the value of the last chunk"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   480
a27a279701f8 Initial revision
claus
parents:
diff changeset
   481
    ^ self fileInNotifying:self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   482
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   483
a27a279701f8 Initial revision
claus
parents:
diff changeset
   484
askForDebug:message
41
a14247b04d03 *** empty log message ***
claus
parents: 27
diff changeset
   485
    "launch a box asking if a debugger is wanted - used when an error
a14247b04d03 *** empty log message ***
claus
parents: 27
diff changeset
   486
     occurs while filing in"
a14247b04d03 *** empty log message ***
claus
parents: 27
diff changeset
   487
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   488
    |box|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   489
a27a279701f8 Initial revision
claus
parents:
diff changeset
   490
    box := OptionBox title:message numberOfOptions:3.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   491
    box actions:(Array with:[^ #abort]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   492
                       with:[^ #debug]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   493
                       with:[^ #continue]).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   494
    box buttonTitles:#('abort' 'debug' 'continue').
a27a279701f8 Initial revision
claus
parents:
diff changeset
   495
    box showAtPointer.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   496
    ^ #abort
a27a279701f8 Initial revision
claus
parents:
diff changeset
   497
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   498
a27a279701f8 Initial revision
claus
parents:
diff changeset
   499
catch:aSymbol with:aMessage for:anObject
a27a279701f8 Initial revision
claus
parents:
diff changeset
   500
    "this one is sent when an error occurs while filing in -
a27a279701f8 Initial revision
claus
parents:
diff changeset
   501
     we dont want a debugger to come up but simply notify
a27a279701f8 Initial revision
claus
parents:
diff changeset
   502
     the error (also on the Transcript so you have a trace of it)"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   503
10
claus
parents: 5
diff changeset
   504
    |message|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   505
10
claus
parents: 5
diff changeset
   506
    "switch back to regular error handling"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   507
    Smalltalk at:#ErrorHandler put:nil.
10
claus
parents: 5
diff changeset
   508
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   509
    (aSymbol == #doesNotUnderstand:) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   510
        anObject isNil ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   511
            "try to give a bit more detail on what went wrong"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   512
            (Metaclass respondsTo:(aMessage selector)) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   513
                ('subclass:*' match:(aMessage selector)) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   514
                    message := 'no superclass for ' , (aMessage arguments at:1)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   515
                ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   516
                    message := 'definitions for nonexisting class'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   517
                ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   518
            ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   519
                message := 'bad message: ' , aMessage selector, ' to UndefinedObject'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   520
            ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   521
        ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   522
            message := 'bad message: ' , aMessage selector ,
a27a279701f8 Initial revision
claus
parents:
diff changeset
   523
                      ' to ' , anObject classNameWithArticle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   524
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   525
    ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   526
        (aSymbol == #error:) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   527
            message := aMessage
a27a279701f8 Initial revision
claus
parents:
diff changeset
   528
        ] ifFalse:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   529
            message := 'during fileIn'
a27a279701f8 Initial revision
claus
parents:
diff changeset
   530
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   531
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   532
    message := 'Error: ' , message.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   533
    Transcript showCr:message.
10
claus
parents: 5
diff changeset
   534
    ErrorDuringFileInSignal raiseRequestWith:message.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   535
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   536
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   537
a27a279701f8 Initial revision
claus
parents:
diff changeset
   538
error:aMessage position:position to:endPos
a27a279701f8 Initial revision
claus
parents:
diff changeset
   539
    "error notification during fileIn with no requestor"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   540
a27a279701f8 Initial revision
claus
parents:
diff changeset
   541
    position printOn:Transcript.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   542
    Transcript show:' '.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   543
    Transcript showCr:aMessage.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   544
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   545
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   546
a27a279701f8 Initial revision
claus
parents:
diff changeset
   547
correctableError:aMessage position:position to:endPos
a27a279701f8 Initial revision
claus
parents:
diff changeset
   548
    "error notification during fileIn with no requestor"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   549
a27a279701f8 Initial revision
claus
parents:
diff changeset
   550
    ^ self error:aMessage position:position to:endPos
a27a279701f8 Initial revision
claus
parents:
diff changeset
   551
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   552
a27a279701f8 Initial revision
claus
parents:
diff changeset
   553
warning:aMessage position:position to:endPos
a27a279701f8 Initial revision
claus
parents:
diff changeset
   554
    "warning notification during fileIn with no requestor - ignore it"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   555
a27a279701f8 Initial revision
claus
parents:
diff changeset
   556
    ^ self
a27a279701f8 Initial revision
claus
parents:
diff changeset
   557
! !