Infinity.st
author Claus Gittinger <cg@exept.de>
Thu, 02 Mar 2000 15:14:57 +0100
changeset 5287 b3b0d0e3ce98
parent 1944 9fb0b642d2ca
child 6501 51344e42c38c
permissions -rw-r--r--
package-definitions fixed/updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5287
b3b0d0e3ce98 package-definitions fixed/updated
Claus Gittinger <cg@exept.de>
parents: 1944
diff changeset
     1
"{ Package: 'stx:goodies' }"
1894
b22296ae189f Fixed is now in libbasic
Claus Gittinger <cg@exept.de>
parents: 303
diff changeset
     2
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
     3
"       NAME            infinity
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
     4
	AUTHOR          manchester
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
     5
	FUNCTION        Provides a class of infinities
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
     6
	ST-VERSION      2.2
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
     7
	PREREQUISITES   
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
     8
	CONFLICTS
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
     9
	DISTRIBUTION    world
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    10
	VERSION         1
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    11
	DATE    22 Jan 1989
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    12
SUMMARY
f014922e3b71 Initial revision
claus
parents:
diff changeset
    13
This is a set of changes that implements infinity in the Number hierarchy.  
f014922e3b71 Initial revision
claus
parents:
diff changeset
    14
I obtained the original changes from the author of an article in comp.lang.smalltalk.
f014922e3b71 Initial revision
claus
parents:
diff changeset
    15
I have just installed it in my image and I have found two small omissions
f014922e3b71 Initial revision
claus
parents:
diff changeset
    16
which are corrected in what is below; there might be others.  Arithmetic
f014922e3b71 Initial revision
claus
parents:
diff changeset
    17
between infinities is not defined but magnitude comparisons are implemented.
f014922e3b71 Initial revision
claus
parents:
diff changeset
    18
f014922e3b71 Initial revision
claus
parents:
diff changeset
    19
Claus: fixed some minor bugs (args to errorUndefinedResult:) and some
f014922e3b71 Initial revision
claus
parents:
diff changeset
    20
       wrong comments.
f014922e3b71 Initial revision
claus
parents:
diff changeset
    21
       Changed retry:coercing: to match ST/X
f014922e3b71 Initial revision
claus
parents:
diff changeset
    22
"!
f014922e3b71 Initial revision
claus
parents:
diff changeset
    23
f014922e3b71 Initial revision
claus
parents:
diff changeset
    24
!Point methodsFor: 'testing'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
    25
f014922e3b71 Initial revision
claus
parents:
diff changeset
    26
isFinite
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    27
	^x isFinite and: [y isFinite]!
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    28
f014922e3b71 Initial revision
claus
parents:
diff changeset
    29
isInfinite
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    30
	^x isInfinite or: [y isInfinite]! !
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    31
f014922e3b71 Initial revision
claus
parents:
diff changeset
    32
!Number methodsFor: 'testing'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
    33
f014922e3b71 Initial revision
claus
parents:
diff changeset
    34
isFinite
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    35
	^true!
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    36
f014922e3b71 Initial revision
claus
parents:
diff changeset
    37
isInfinite
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    38
	^false! !
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    39
f014922e3b71 Initial revision
claus
parents:
diff changeset
    40
!Number methodsFor: 'coercing'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
    41
f014922e3b71 Initial revision
claus
parents:
diff changeset
    42
retry: aSymbol coercing: aNumber
f014922e3b71 Initial revision
claus
parents:
diff changeset
    43
    "Arithmetic represented by the symbol, aSymbol,
f014922e3b71 Initial revision
claus
parents:
diff changeset
    44
    could not be performed with the receiver and the argument,
f014922e3b71 Initial revision
claus
parents:
diff changeset
    45
    aNumber, because of the differences in representation.  Coerce either
f014922e3b71 Initial revision
claus
parents:
diff changeset
    46
    the receiver or the argument, depending on which has higher generality, and
f014922e3b71 Initial revision
claus
parents:
diff changeset
    47
    try again.  If the symbol is the equals sign, answer false if the argument
f014922e3b71 Initial revision
claus
parents:
diff changeset
    48
    is not a Number.  If the generalities are the same, create an error message."
f014922e3b71 Initial revision
claus
parents:
diff changeset
    49
f014922e3b71 Initial revision
claus
parents:
diff changeset
    50
    |myGenerality otherGenerality|
f014922e3b71 Initial revision
claus
parents:
diff changeset
    51
f014922e3b71 Initial revision
claus
parents:
diff changeset
    52
    (aSymbol == #=) ifTrue:[
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    53
	(aNumber respondsTo:#generality) ifFalse:[^ false]
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    54
    ] ifFalse:[
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    55
	(aNumber respondsTo:#generality) ifFalse:[
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    56
	    self error:'retry:coercing: argument is not a number'.
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    57
	    ^ self
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    58
	]
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    59
    ].
f014922e3b71 Initial revision
claus
parents:
diff changeset
    60
    myGenerality := self generality.
f014922e3b71 Initial revision
claus
parents:
diff changeset
    61
    otherGenerality := aNumber generality.
f014922e3b71 Initial revision
claus
parents:
diff changeset
    62
    (myGenerality > otherGenerality) ifTrue:[
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    63
	^ self perform:aSymbol with:(self coerce:aNumber)
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    64
    ].
f014922e3b71 Initial revision
claus
parents:
diff changeset
    65
    (myGenerality < otherGenerality) ifTrue:[
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    66
	aNumber isInfinite ifTrue: [
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    67
	    ^ aNumber retryReverseOf:aSymbol with:self
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    68
	].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    69
	^ (aNumber coerce:self) perform:aSymbol with:aNumber
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    70
    ].
f014922e3b71 Initial revision
claus
parents:
diff changeset
    71
    self error:'retry:coercing: oops - same generality'
f014922e3b71 Initial revision
claus
parents:
diff changeset
    72
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
    73
f014922e3b71 Initial revision
claus
parents:
diff changeset
    74
Number subclass: #Infinity
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    75
	instanceVariableNames: 'positive '
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    76
	classVariableNames: 'NegativeInfinity PositiveInfinity '
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    77
	poolDictionaries: ''
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    78
	category: 'Magnitude-Numbers'!
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    79
f014922e3b71 Initial revision
claus
parents:
diff changeset
    80
Infinity comment:
f014922e3b71 Initial revision
claus
parents:
diff changeset
    81
'I have two instances representing positive and negative infinity.
f014922e3b71 Initial revision
claus
parents:
diff changeset
    82
f014922e3b71 Initial revision
claus
parents:
diff changeset
    83
Instance Variables :-
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    84
	positive <Boolean>      :       if true the instance represents positive
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    85
					infinity. if false, negative infinity'
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    86
!
f014922e3b71 Initial revision
claus
parents:
diff changeset
    87
f014922e3b71 Initial revision
claus
parents:
diff changeset
    88
!Infinity methodsFor: 'arithmetic'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
    89
f014922e3b71 Initial revision
claus
parents:
diff changeset
    90
* aNumber
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    91
	"Multiply the receiver by the argument and answer with the result."
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    92
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    93
	aNumber isInfinite ifTrue: [
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    94
	    self errorUndefinedResult: #*
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    95
	].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
    96
	^self
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
    97
!
f014922e3b71 Initial revision
claus
parents:
diff changeset
    98
f014922e3b71 Initial revision
claus
parents:
diff changeset
    99
+ aNumber
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   100
	"Add the receiver by the argument and answer with the result."
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   101
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   102
	(aNumber isInfinite and: [aNumber ~~ self]) ifTrue: [
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   103
	    self errorUndefinedResult: #+
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   104
	].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   105
	^self
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   106
!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   107
f014922e3b71 Initial revision
claus
parents:
diff changeset
   108
- aNumber
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   109
	"subtracet aNumber from the receiver answer with the result."
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   110
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   111
	(aNumber isInfinite) ifTrue: [
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   112
	    self errorUndefinedResult: #-
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   113
	].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   114
	^self
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   115
!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   116
f014922e3b71 Initial revision
claus
parents:
diff changeset
   117
/ aNumber
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   118
	"Divide the receiver by the argument and answer with the result."
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   119
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   120
	(aNumber isInfinite or: [aNumber = 0]) ifTrue: [
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   121
	    self errorUndefinedResult: #/
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   122
	].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   123
	^self
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   124
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
   125
f014922e3b71 Initial revision
claus
parents:
diff changeset
   126
!Infinity methodsFor: 'comparing'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   127
f014922e3b71 Initial revision
claus
parents:
diff changeset
   128
< aNumber
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   129
	"Positive infinity is greater than any number than positive infinity.
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   130
	 Analogously, negative infinity is less than any other number other
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   131
	 than negative infinity"
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   132
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   133
	aNumber == self ifTrue: [^false].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   134
	^ positive not!
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   135
f014922e3b71 Initial revision
claus
parents:
diff changeset
   136
= aNumber
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   137
	^aNumber == self
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   138
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
   139
f014922e3b71 Initial revision
claus
parents:
diff changeset
   140
!Infinity methodsFor: 'testing'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   141
f014922e3b71 Initial revision
claus
parents:
diff changeset
   142
isFinite
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   143
	^false
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   144
!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   145
f014922e3b71 Initial revision
claus
parents:
diff changeset
   146
isInfinite
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   147
	^true
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   148
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
   149
f014922e3b71 Initial revision
claus
parents:
diff changeset
   150
!Infinity methodsFor: 'coercing'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   151
f014922e3b71 Initial revision
claus
parents:
diff changeset
   152
generality
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   153
	"Infinities are more general than scalars, but not more general than
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   154
	 vectors (e.g. Points)"
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   155
	^85
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   156
!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   157
f014922e3b71 Initial revision
claus
parents:
diff changeset
   158
retryReverseOf: aSymbol with: aNumber
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   159
	(aSymbol == #* or: [aSymbol == #+]) ifTrue: [
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   160
	    ^self perform: aSymbol with: aNumber
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   161
	].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   162
	(aSymbol == #/ and: [aNumber isFinite]) ifTrue: [^0].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   163
	(aSymbol == #< and: [aNumber isFinite]) ifTrue: [^positive].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   164
	(aSymbol == #> and: [ aNumber isFinite ]) ifTrue: [^positive not].
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   165
	(aSymbol == #= and: [ aNumber isFinite ])ifTrue: [ ^false ]. 
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   166
	self errorUndefinedResult: aSymbol
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   167
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
   168
f014922e3b71 Initial revision
claus
parents:
diff changeset
   169
!Infinity methodsFor: 'printing'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   170
f014922e3b71 Initial revision
claus
parents:
diff changeset
   171
printOn: aStream
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   172
	aStream nextPutAll: self class name.
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   173
	aStream nextPutAll:(positive
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   174
				ifTrue: [' positive']
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   175
				ifFalse: [' negative'])
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   176
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
   177
f014922e3b71 Initial revision
claus
parents:
diff changeset
   178
!Infinity methodsFor: 'errors'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   179
f014922e3b71 Initial revision
claus
parents:
diff changeset
   180
errorUndefinedResult: messageName
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   181
	self error: 'Undefined result in an Infinity ', messageName
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   182
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
   183
f014922e3b71 Initial revision
claus
parents:
diff changeset
   184
!Infinity methodsFor: 'private'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   185
f014922e3b71 Initial revision
claus
parents:
diff changeset
   186
setPositive: aBoolean
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   187
	positive := aBoolean
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   188
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
   189
f014922e3b71 Initial revision
claus
parents:
diff changeset
   190
!Infinity class methodsFor: 'class initialization'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   191
f014922e3b71 Initial revision
claus
parents:
diff changeset
   192
initialize
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   193
	"Infinity initialize"
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   194
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   195
	PositiveInfinity := self basicNew setPositive: true.
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   196
	NegativeInfinity := self basicNew setPositive: false
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   197
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
   198
f014922e3b71 Initial revision
claus
parents:
diff changeset
   199
!Infinity class methodsFor: 'instance creation'!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   200
f014922e3b71 Initial revision
claus
parents:
diff changeset
   201
negative
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   202
	"Return the unique instance of negative infinity"
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   203
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   204
	^NegativeInfinity
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   205
!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   206
f014922e3b71 Initial revision
claus
parents:
diff changeset
   207
new
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   208
	self shouldNotImplement
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   209
!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   210
f014922e3b71 Initial revision
claus
parents:
diff changeset
   211
positive
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   212
	"Return the unique instance of positive infinity"
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   213
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   214
	^PositiveInfinity
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   215
! !
f014922e3b71 Initial revision
claus
parents:
diff changeset
   216
f014922e3b71 Initial revision
claus
parents:
diff changeset
   217
Infinity initialize!
f014922e3b71 Initial revision
claus
parents:
diff changeset
   218
f014922e3b71 Initial revision
claus
parents:
diff changeset
   219
f014922e3b71 Initial revision
claus
parents:
diff changeset
   220
"COPYRIGHT.
f014922e3b71 Initial revision
claus
parents:
diff changeset
   221
 The above file is a Manchester Goodie protected by copyright.
f014922e3b71 Initial revision
claus
parents:
diff changeset
   222
 These conditions are imposed on the whole Goodie, and on any significant
f014922e3b71 Initial revision
claus
parents:
diff changeset
   223
 part of it which is separately transmitted or stored:
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   224
	* You must ensure that every copy includes this notice, and that
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   225
	  source and author(s) of the material are acknowledged.
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   226
	* These conditions must be imposed on anyone who receives a copy.
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   227
	* The material shall not be used for commercial gain without the prior
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   228
	  written consent of the author(s).
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   229
 Further information on the copyright conditions may be obtained by
f014922e3b71 Initial revision
claus
parents:
diff changeset
   230
 sending electronic mail:
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   231
	To: goodies-lib@cs.man.ac.uk
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   232
	Subject: copyright
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   233
 or by writing to The Smalltalk Goodies Library Manager, Dept of
f014922e3b71 Initial revision
claus
parents:
diff changeset
   234
 Computer Science, The University, Manchester M13 9PL, UK
f014922e3b71 Initial revision
claus
parents:
diff changeset
   235
f014922e3b71 Initial revision
claus
parents:
diff changeset
   236
 (C) Copyright 1992 University of Manchester
f014922e3b71 Initial revision
claus
parents:
diff changeset
   237
 For more information about the Manchester Goodies Library (from which 
f014922e3b71 Initial revision
claus
parents:
diff changeset
   238
 this file was distributed) send e-mail:
303
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   239
	To: goodies-lib@cs.man.ac.uk
3b550c73b036 *** empty log message ***
claus
parents: 265
diff changeset
   240
	Subject: help 
265
f014922e3b71 Initial revision
claus
parents:
diff changeset
   241
"!