ALIGNMENT code clean up
authorClaus Gittinger <cg@exept.de>
Fri, 26 Aug 2016 12:15:15 +0200
changeset 20308 9110f117d260
parent 20307 678da26adf03
child 20309 98a12d386c4a
ALIGNMENT code clean up
Array.st
Behavior.st
Fraction.st
Number.st
Point.st
Rectangle.st
--- a/Array.st	Fri Aug 26 01:12:20 2016 +0200
+++ b/Array.st	Fri Aug 26 12:15:15 2016 +0200
@@ -135,11 +135,11 @@
 
 	    nInstVars += nindexedinstvars;
 	    instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
-	    if (__CanDoQuickAlignedNew(instsize)) {     /* OBJECT ALLOCATION */
+	    if (__CanDoQuickNew(instsize)) {     /* OBJECT ALLOCATION */
 		/*
 		 * the most common case
 		 */
-		__qCheckedAlignedNew(newobj, instsize);
+		__qCheckedNew(newobj, instsize);
 	ok: ;
 		__InstPtr(newobj)->o_class = self;
 		__qSTORE(newobj, self);
@@ -567,59 +567,59 @@
     REGISTER int spc;
 
     if (__qClass(self) == Array) {
-        sz = __qSize(self) + sizeof(OBJ);
-        __PROTECT2__(something, self);
-        __qAlignedNew(nObj, sz);        /* OBJECT ALLOCATION */
-        __UNPROTECT2__(self, something);
+	sz = __qSize(self) + sizeof(OBJ);
+	__PROTECT2__(something, self);
+	__qNew(nObj, sz);        /* OBJECT ALLOCATION */
+	__UNPROTECT2__(self, something);
 
-        if (nObj) {
-            __InstPtr(nObj)->o_class = Array;
-            __qSTORE(nObj, Array);
+	if (nObj) {
+	    __InstPtr(nObj)->o_class = Array;
+	    __qSTORE(nObj, Array);
 
-            nIndex = __BYTES2OBJS__(sz - OHDR_SIZE - sizeof(OBJ));
-            /*
-             * sorry:
-             *   cannot use bcopy, since we must take care of stores ...
-             *   could check for: notRemembered + inOld + notLifoRem
-             *                  + not incrGCRunning
-             * but: copyWith is not heavily used by real programmers ...
-             */
-            spc = __qSpace(nObj);
-            srcP = __arrayVal(self);
-            dstP = __arrayVal(nObj);
+	    nIndex = __BYTES2OBJS__(sz - OHDR_SIZE - sizeof(OBJ));
+	    /*
+	     * sorry:
+	     *   cannot use bcopy, since we must take care of stores ...
+	     *   could check for: notRemembered + inOld + notLifoRem
+	     *                  + not incrGCRunning
+	     * but: copyWith is not heavily used by real programmers ...
+	     */
+	    spc = __qSpace(nObj);
+	    srcP = __arrayVal(self);
+	    dstP = __arrayVal(nObj);
 
 #ifdef __UNROLL_LOOPS__
-            while (nIndex >= 4) {
-                OBJ element;
+	    while (nIndex >= 4) {
+		OBJ element;
 
-                element = srcP[0];
-                dstP[0] = element;
-                __STORE_SPC(nObj, element, spc);
-                element = srcP[1];
-                dstP[1] = element;
-                __STORE_SPC(nObj, element, spc);
-                element = srcP[2];
-                dstP[2] = element;
-                __STORE_SPC(nObj, element, spc);
-                element = srcP[3];
-                dstP[3] = element;
-                __STORE_SPC(nObj, element, spc);
-                srcP += 4;
-                dstP += 4;
-                nIndex -= 4;
-            }
+		element = srcP[0];
+		dstP[0] = element;
+		__STORE_SPC(nObj, element, spc);
+		element = srcP[1];
+		dstP[1] = element;
+		__STORE_SPC(nObj, element, spc);
+		element = srcP[2];
+		dstP[2] = element;
+		__STORE_SPC(nObj, element, spc);
+		element = srcP[3];
+		dstP[3] = element;
+		__STORE_SPC(nObj, element, spc);
+		srcP += 4;
+		dstP += 4;
+		nIndex -= 4;
+	    }
 #endif
-            while (nIndex--) {
-                OBJ element;
+	    while (nIndex--) {
+		OBJ element;
 
-                element = *srcP++;
-                *dstP++ = element;
-                __STORE_SPC(nObj, element, spc);
-            }
-            *dstP = something;
-            __STORE_SPC(nObj, something, spc);
-            RETURN ( nObj );
-        }
+		element = *srcP++;
+		*dstP++ = element;
+		__STORE_SPC(nObj, element, spc);
+	    }
+	    *dstP = something;
+	    __STORE_SPC(nObj, something, spc);
+	    RETURN ( nObj );
+	}
     }
 %}.
     ^ super copyWith:something
@@ -636,10 +636,10 @@
 
     stop := self size.
     1 to:stop do:[:idx |
-        each := self at:idx.
-        each notNil ifTrue:[
-            aCollection add:each.
-        ].
+	each := self at:idx.
+	each notNil ifTrue:[
+	    aCollection add:each.
+	].
     ].
     ^ aCollection
 
@@ -1628,138 +1628,138 @@
     OBJ myClass;
 
     if (
-        (__ClassInstPtr((myClass = __qClass(self)))->c_ninstvars == __mkSmallInteger(0))
+	(__ClassInstPtr((myClass = __qClass(self)))->c_ninstvars == __mkSmallInteger(0))
      && __isNonNilObject(aCollection)
      && (((t = __qClass(aCollection)) == Array) || t == ImmutableArray || (t == myClass))
      && __bothSmallInteger(start, stop)
      && __isSmallInteger(repStart)
     ) {
-        startIndex = __intVal(start) - 1;
-        if (startIndex >= 0) {
-            nIndex = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
-            stopIndex = __intVal(stop) - 1;
-            count = stopIndex - startIndex + 1;
+	startIndex = __intVal(start) - 1;
+	if (startIndex >= 0) {
+	    nIndex = __BYTES2OBJS__(__qSize(self) - OHDR_SIZE);
+	    stopIndex = __intVal(stop) - 1;
+	    count = stopIndex - startIndex + 1;
 
-            if ((count > 0) && (stopIndex < nIndex)) {
-                repStartIndex = __intVal(repStart) - 1;
-                if (repStartIndex >= 0) {
-                    repNIndex = __BYTES2OBJS__(__qSize(aCollection)-OHDR_SIZE);
-                    repStopIndex = repStartIndex + (stopIndex - startIndex);
-                    if (repStopIndex < repNIndex) {
-                        src = &(__InstPtr(aCollection)->i_instvars[repStartIndex]);
-                        dst = &(__InstPtr(self)->i_instvars[startIndex]);
-                        if (aCollection == self) {
-                            /*
-                             * no need to check stores if copying
-                             * from myself
-                             */
+	    if ((count > 0) && (stopIndex < nIndex)) {
+		repStartIndex = __intVal(repStart) - 1;
+		if (repStartIndex >= 0) {
+		    repNIndex = __BYTES2OBJS__(__qSize(aCollection)-OHDR_SIZE);
+		    repStopIndex = repStartIndex + (stopIndex - startIndex);
+		    if (repStopIndex < repNIndex) {
+			src = &(__InstPtr(aCollection)->i_instvars[repStartIndex]);
+			dst = &(__InstPtr(self)->i_instvars[startIndex]);
+			if (aCollection == self) {
+			    /*
+			     * no need to check stores if copying
+			     * from myself
+			     */
 
-                            if (src < dst) {
-                                /*
-                                 * take care of overlapping copy
-                                 * memcpy() is not smart enough by definition for overlkapping copies
-                                 * memmove() is!
-                                 */
+			    if (src < dst) {
+				/*
+				 * take care of overlapping copy
+				 * memcpy() is not smart enough by definition for overlkapping copies
+				 * memmove() is!
+				 */
 #if defined(FAST_MEMCPY)
-                                memmove(dst, src, __OBJS2BYTES__(count));
+				memmove(dst, src, __OBJS2BYTES__(count));
 #else
-                                /* must do a reverse copy */
-                                src += count;
-                                dst += count;
+				/* must do a reverse copy */
+				src += count;
+				dst += count;
 # ifdef __UNROLL_LOOPS__
-                                while (count > 8) {
-                                    dst[-1] = src[-1];
-                                    dst[-2] = src[-2];
-                                    dst[-3] = src[-3];
-                                    dst[-4] = src[-4];
-                                    dst[-5] = src[-5];
-                                    dst[-6] = src[-6];
-                                    dst[-7] = src[-7];
-                                    dst[-8] = src[-8];
-                                    dst -= 8; src -= 8;
-                                    count -= 8;
-                                }
+				while (count > 8) {
+				    dst[-1] = src[-1];
+				    dst[-2] = src[-2];
+				    dst[-3] = src[-3];
+				    dst[-4] = src[-4];
+				    dst[-5] = src[-5];
+				    dst[-6] = src[-6];
+				    dst[-7] = src[-7];
+				    dst[-8] = src[-8];
+				    dst -= 8; src -= 8;
+				    count -= 8;
+				}
 # endif // __UNROLL_LOOPS__
-                                while (count-- > 0) {
-                                    *--dst = *--src;
-                                }
+				while (count-- > 0) {
+				    *--dst = *--src;
+				}
 #endif // ! FAST_MEMCPY
-                                RETURN ( self );
-                            }
+				RETURN ( self );
+			    }
 #ifdef SOFTWARE_PIPELINE
-                            {
-                                /*
-                                 * the loop below fetches one longWord behind
-                                 * this should not be a problem
-                                 */
-                                OBJ t1 = src[0];
-                                count--;
-                                if (count) {
-                                    dst++; src++;
-                                    do {
-                                        dst[-1] = t1;
-                                        t1 = src[0];
-                                        src++;
-                                        dst++;
-                                    } while (count--);
-                                } else {
-                                    dst[0] = t1;
-                                }
-                            }
+			    {
+				/*
+				 * the loop below fetches one longWord behind
+				 * this should not be a problem
+				 */
+				OBJ t1 = src[0];
+				count--;
+				if (count) {
+				    dst++; src++;
+				    do {
+					dst[-1] = t1;
+					t1 = src[0];
+					src++;
+					dst++;
+				    } while (count--);
+				} else {
+				    dst[0] = t1;
+				}
+			    }
 #elif defined(bcopy4)
-                            count = __OBJS2BYTES__(count) / 4;
-                            bcopy4(src, dst, count);
+			    count = __OBJS2BYTES__(count) / 4;
+			    bcopy4(src, dst, count);
 #elif defined(FAST_MEMCPY)
-                            memmove(dst, src, __OBJS2BYTES__(count));
+			    memmove(dst, src, __OBJS2BYTES__(count));
 #else
 # if defined(__UNROLL_LOOPS__)
-                            while (count >= 8) {
-                                dst[0] = src[0];
-                                dst[1] = src[1];
-                                dst[2] = src[2];
-                                dst[3] = src[3];
-                                dst[4] = src[4];
-                                dst[5] = src[5];
-                                dst[6] = src[6];
-                                dst[7] = src[7];
-                                dst += 8; src += 8;
-                                count -= 8;
-                            }
+			    while (count >= 8) {
+				dst[0] = src[0];
+				dst[1] = src[1];
+				dst[2] = src[2];
+				dst[3] = src[3];
+				dst[4] = src[4];
+				dst[5] = src[5];
+				dst[6] = src[6];
+				dst[7] = src[7];
+				dst += 8; src += 8;
+				count -= 8;
+			    }
 # endif // __UNROLL_LOOPS__
-                            while (count--) {
-                                *dst++ = *src++;
-                            }
+			    while (count--) {
+				*dst++ = *src++;
+			    }
 #endif
-                        } else {
-                            // not copying into the same object
-                            REGISTER int spc = __qSpace(self);
+			} else {
+			    // not copying into the same object
+			    REGISTER int spc = __qSpace(self);
 #ifdef __UNROLL_LOOPS__
-                            while (count >= 8) {
-                                t = src[0]; dst[0] = t; __STORE_SPC(self, t, spc);
-                                t = src[1]; dst[1] = t; __STORE_SPC(self, t, spc);
-                                t = src[2]; dst[2] = t; __STORE_SPC(self, t, spc);
-                                t = src[3]; dst[3] = t; __STORE_SPC(self, t, spc);
-                                t = src[4]; dst[4] = t; __STORE_SPC(self, t, spc);
-                                t = src[5]; dst[5] = t; __STORE_SPC(self, t, spc);
-                                t = src[6]; dst[6] = t; __STORE_SPC(self, t, spc);
-                                t = src[7]; dst[7] = t; __STORE_SPC(self, t, spc);
-                                count -= 8; src += 8; dst += 8;
-                            }
+			    while (count >= 8) {
+				t = src[0]; dst[0] = t; __STORE_SPC(self, t, spc);
+				t = src[1]; dst[1] = t; __STORE_SPC(self, t, spc);
+				t = src[2]; dst[2] = t; __STORE_SPC(self, t, spc);
+				t = src[3]; dst[3] = t; __STORE_SPC(self, t, spc);
+				t = src[4]; dst[4] = t; __STORE_SPC(self, t, spc);
+				t = src[5]; dst[5] = t; __STORE_SPC(self, t, spc);
+				t = src[6]; dst[6] = t; __STORE_SPC(self, t, spc);
+				t = src[7]; dst[7] = t; __STORE_SPC(self, t, spc);
+				count -= 8; src += 8; dst += 8;
+			    }
 #endif
-                            while (count-- > 0) {
-                                *dst++ = t = *src++;
-                                __STORE_SPC(self, t, spc);
-                            }
-                        }
-                        RETURN ( self );
-                    }
-                }
-            }
+			    while (count-- > 0) {
+				*dst++ = t = *src++;
+				__STORE_SPC(self, t, spc);
+			    }
+			}
+			RETURN ( self );
+		    }
+		}
+	    }
 
-            if (count == 0) {
-                RETURN ( self );
-            }
-        }
+	    if (count == 0) {
+		RETURN ( self );
+	    }
+	}
     }
 %}.
     ^ super replaceFrom:start to:stop with:aCollection startingAt:repStart
@@ -1775,7 +1775,7 @@
     |cls|
 
     ((cls := self class) == Array or:[cls == ImmutableArray]) ifTrue:[
-        ^ '#'
+	^ '#'
     ].
     ^ super displayStringName.
 !
--- a/Behavior.st	Fri Aug 26 01:12:20 2016 +0200
+++ b/Behavior.st	Fri Aug 26 12:15:15 2016 +0200
@@ -2382,6 +2382,8 @@
 
     newobj = (OBJ) __newNextPtr;
     nextPtr = ((char *)newobj) + instsize;
+    // 26-AUG-2016
+    nextPtr = (char *)(__ALIGNED__(nextPtr));
 
     /*
      * don't argue about the goto and the arrangement below - it saves
@@ -2393,19 +2395,21 @@
 	/* o_allFlags(newobj) = 0;              */
 	/* __objPtr(newobj)->o_space = __newSpace; */
 	o_setAllFlags(newobj, __newSpace);
-# ifdef __HAS_ALIGN4__
-	/*
-	 * if the alignment is 4, we are already sat,
-	 * since a non-indexed object always has a word-aligned size.
-	 */
+	// 26-AUG-2016
 	__newNextPtr = nextPtr;
-# else
-	if (instsize & (__ALIGN__-1)) {
-	    __newNextPtr = (char *)newobj + (instsize & ~(__ALIGN__-1)) + __ALIGN__;
-	} else {
-	    __newNextPtr = nextPtr;
-	}
-# endif
+//# ifdef __HAS_ALIGN4__
+//        /*
+//         * if the alignment is 4, we are already sat,
+//         * since a non-indexed object always has a word-aligned size.
+//         */
+//        __newNextPtr = nextPtr;
+//# else
+//        if (instsize & (__ALIGN__-1)) {
+//            __newNextPtr = (char *)newobj + (instsize & ~(__ALIGN__-1)) + __ALIGN__;
+//        } else {
+//            __newNextPtr = nextPtr;
+//        }
+//# endif
 
 ok:
 	__InstPtr(newobj)->o_class = self;
@@ -2622,7 +2626,7 @@
 		    nBytes = __OBJS2BYTES__(nInstVars) + nindexedinstvars * 4;
 		    instsize = OHDR_SIZE + nBytes;
 		    __PROTECT_CONTEXT__
-		    __qAlignedNew(newobj, instsize);    /* OBJECT ALLOCATION */
+		    __qNew(newobj, instsize);    /* OBJECT ALLOCATION */
 		    __UNPROTECT_CONTEXT__
 		    if (newobj == nil) {
 			break;
@@ -2641,7 +2645,7 @@
 		    nBytes = instsize - OHDR_SIZE;
 
 		    __PROTECT_CONTEXT__
-		    __qAlignedNew(newobj, instsize);    /* OBJECT ALLOCATION */
+		    __qNew(newobj, instsize);    /* OBJECT ALLOCATION */
 		    __UNPROTECT_CONTEXT__
 		    if (newobj == nil) {
 			break;
@@ -2690,7 +2694,7 @@
 		    nBytes = instsize - OHDR_SIZE;
 
 		    __PROTECT_CONTEXT__
-		    __qAlignedNew(newobj, instsize);    /* OBJECT ALLOCATION */
+		    __qNew(newobj, instsize);    /* OBJECT ALLOCATION */
 		    __UNPROTECT_CONTEXT__
 		    if (newobj == nil) {
 			break;
@@ -2726,7 +2730,7 @@
 		    nInstVars += nindexedinstvars;
 		    instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
 		    __PROTECT_CONTEXT__
-		    __qAlignedNew(newobj, instsize);    /* OBJECT ALLOCATION */
+		    __qNew(newobj, instsize);    /* OBJECT ALLOCATION */
 		    __UNPROTECT_CONTEXT__
 		    if (newobj == nil) {
 			break;
@@ -2811,7 +2815,7 @@
 		    if (nindexedinstvars == 0) {
 			instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars);
 			__PROTECT_CONTEXT__
-			__qAlignedNew(newobj, instsize);        /* OBJECT ALLOCATION */
+			__qNew(newobj, instsize);        /* OBJECT ALLOCATION */
 			__UNPROTECT_CONTEXT__
 			if (newobj == nil) {
 			    break;
--- a/Fraction.st	Fri Aug 26 01:12:20 2016 +0200
+++ b/Fraction.st	Fri Aug 26 12:15:15 2016 +0200
@@ -90,73 +90,73 @@
 %{  /* NOCONTEXT */
 #ifdef __SCHTEAM__
     if (self == Fraction.Class) {
-        return context._RETURN(new STFraction(num, den));
+	return context._RETURN(new STFraction(num, den));
     }
 #else
     /* this check allows subclassing .. */
     if (self == Fraction) {
-        if (__bothSmallInteger(num, den)) {
-            if (den != __mkSmallInteger(0)) {
-                if (__CanDoQuickAlignedNew(sizeof(struct __Fraction))) {    /* OBJECT ALLOCATION */
-                    OBJ newFraction;
-                    INT iDen;
-                    INT iNum;
+	if (__bothSmallInteger(num, den)) {
+	    if (den != __mkSmallInteger(0)) {
+		if (__CanDoQuickNew(sizeof(struct __Fraction))) {    /* OBJECT ALLOCATION */
+		    OBJ newFraction;
+		    INT iDen;
+		    INT iNum;
 
-                    __qCheckedAlignedNew(newFraction, sizeof(struct __Fraction));
-                    __InstPtr(newFraction)->o_class = self;
-                    __qSTORE(newFraction, self);
+		    __qCheckedNew(newFraction, sizeof(struct __Fraction));
+		    __InstPtr(newFraction)->o_class = self;
+		    __qSTORE(newFraction, self);
 
-                    iDen = __intVal(den);
-                    iNum = __intVal(num);
+		    iDen = __intVal(den);
+		    iNum = __intVal(num);
 
-                    if (iDen < 0) {
-                        iNum = -iNum;
-                        iDen = -iDen;
-                    }
-                    while ( (((iNum | iDen) & 1) == 0) && ( iNum != 0) && ( iDen != 0)) {
-                        /* both even and non-zero */
-                        iNum = iNum >> 1;
-                        iDen = iDen >> 1;
-                    }
-                    if (iNum >= _MAX_INT) {
-                        __FractionInstPtr(newFraction)->f_numerator = __MKINT(iNum);
-                    } else {
-                        __FractionInstPtr(newFraction)->f_numerator = __MKSMALLINT(iNum);
-                    }
-                    if (iDen >= _MAX_INT) {
-                        __FractionInstPtr(newFraction)->f_denominator = __MKINT(iDen);
-                    } else {
-                        __FractionInstPtr(newFraction)->f_denominator = __MKSMALLINT(iDen);
-                    }
-                    if (iNum == 1) {
-                        /* no need to reduce */
-                        RETURN ( newFraction );
-                    }
-                }
-            }
-        }
+		    if (iDen < 0) {
+			iNum = -iNum;
+			iDen = -iDen;
+		    }
+		    while ( (((iNum | iDen) & 1) == 0) && ( iNum != 0) && ( iDen != 0)) {
+			/* both even and non-zero */
+			iNum = iNum >> 1;
+			iDen = iDen >> 1;
+		    }
+		    if (iNum >= _MAX_INT) {
+			__FractionInstPtr(newFraction)->f_numerator = __MKINT(iNum);
+		    } else {
+			__FractionInstPtr(newFraction)->f_numerator = __MKSMALLINT(iNum);
+		    }
+		    if (iDen >= _MAX_INT) {
+			__FractionInstPtr(newFraction)->f_denominator = __MKINT(iDen);
+		    } else {
+			__FractionInstPtr(newFraction)->f_denominator = __MKSMALLINT(iDen);
+		    }
+		    if (iNum == 1) {
+			/* no need to reduce */
+			RETURN ( newFraction );
+		    }
+		}
+	    }
+	}
     }
 #endif /* not __SCHTEAM__ */
 %}.
     den = 0 ifTrue:[
-        ^ ZeroDivide raiseRequestWith:thisContext.
+	^ ZeroDivide raiseRequestWith:thisContext.
     ].
     newFraction isNil ifTrue:[
-        newFraction := self basicNew setNumerator:num denominator:den.
+	newFraction := self basicNew setNumerator:num denominator:den.
     ].
     ^ newFraction reduced
 
     "
-     Fraction numerator:1 denominator:3 
-     Fraction numerator:2 denominator:3   
-     Fraction numerator:2 denominator:6 
+     Fraction numerator:1 denominator:3
+     Fraction numerator:2 denominator:3
+     Fraction numerator:2 denominator:6
 
      Fraction numerator:1 denominator:0  -> error
      Fraction numerator:2 denominator:0  -> error
 
-     Fraction numerator:5 denominator:10    
-     Fraction numerator:50 denominator:100  
-     Fraction numerator:8 denominator:16  
+     Fraction numerator:5 denominator:10
+     Fraction numerator:50 denominator:100
+     Fraction numerator:8 denominator:16
     "
 
     "Modified: / 27-02-2016 / 00:25:47 / cg"
@@ -201,24 +201,24 @@
 
     "/ sigh - care for subclasses...
     self == Fraction ifFalse:[
-        ^ super readFrom:aStringOrStream onError:exceptionBlock
+	^ super readFrom:aStringOrStream onError:exceptionBlock
     ].
 
     s := aStringOrStream readStream.
     s skipSeparators.
     s peekOrNil == $( ifTrue:[
-        s next.
+	s next.
     ].
 
     numerator := super readFrom:s onError:[^ exceptionBlock value].
     numerator isInteger ifTrue:[
-        s skipSeparators.
-        (s peekOrNil == $/) ifTrue:[
-            s next.
-            denominator := Integer readFrom:s onError:[^ exceptionBlock value].
-            ^ self numerator:numerator denominator:denominator
-        ].
-        ^ numerator
+	s skipSeparators.
+	(s peekOrNil == $/) ifTrue:[
+	    s next.
+	    denominator := Integer readFrom:s onError:[^ exceptionBlock value].
+	    ^ self numerator:numerator denominator:denominator
+	].
+	^ numerator
     ].
     ^ numerator asFraction
 
@@ -246,13 +246,13 @@
      The approx. returned here has an error smaller than representable by float instances"
 
     ^ self
-        numerator:314159265358979323846264343
-        denominator:100000000000000000000000000
+	numerator:314159265358979323846264343
+	denominator:100000000000000000000000000
 
 "
     ^ self
-        numerator:  314159265358979323846264338327950288419716939937510582097494459
-        denominator:100000000000000000000000000000000000000000000000000000000000000
+	numerator:  314159265358979323846264338327950288419716939937510582097494459
+	denominator:100000000000000000000000000000000000000000000000000000000000000
 "
 
     "
@@ -269,16 +269,16 @@
     "return an approximation of the constant pi as Fraction (1024 decimal digits)."
 
     PI_1000 isNil ifTrue:[
-        PI_1000 := self
-                        numerator:31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788
-                        denominator:(10 raisedTo:1024).
+	PI_1000 := self
+			numerator:31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788
+			denominator:(10 raisedTo:1024).
     ].
     ^ PI_1000
 
 "
     ^ self
-        numerator:  314159265358979323846264338327950288419716939937510582097494459
-        denominator:100000000000000000000000000000000000000000000000000000000000000
+	numerator:  314159265358979323846264338327950288419716939937510582097494459
+	denominator:100000000000000000000000000000000000000000000000000000000000000
 "
 
     "
@@ -489,8 +489,8 @@
 
     "/ no need to reduce - I am already
     ^ self class basicNew
-        setNumerator:(numerator negated)
-        denominator:denominator
+	setNumerator:(numerator negated)
+	denominator:denominator
 
     "Modified: 5.11.1996 / 10:29:11 / cg"
 !
@@ -501,8 +501,8 @@
     numerator == 1 ifTrue:[^ denominator].
     "/ no need to reduce - I am already
     ^ self class basicNew
-        setNumerator:denominator
-        denominator:numerator
+	setNumerator:denominator
+	denominator:numerator
 
     "Modified: 5.11.1996 / 10:29:22 / cg"
 ! !
@@ -757,11 +757,11 @@
      0.5 hash
      0.25 hash
      0.4 hash
-     
-     0.25 hash 
-     -0.25 hash 
-     (1/4) hash 
-     (-1/4) hash 
+
+     0.25 hash
+     -0.25 hash
+     (1/4) hash
+     (-1/4) hash
     "
 !
 
@@ -889,7 +889,7 @@
 
     "/ save a multiplication if possible
     d == denominator ifTrue:[
-        ^ n < numerator
+	^ n < numerator
     ].
     ^ (denominator * n) < (numerator * d)
 !
@@ -1148,7 +1148,7 @@
     "return true if the receiver is less than zero"
 
     (numerator < 0) ifTrue:[
-        ^ (denominator < 0) not
+	^ (denominator < 0) not
     ].
     ^ (denominator < 0)
 ! !
--- a/Number.st	Fri Aug 26 01:12:20 2016 +0200
+++ b/Number.st	Fri Aug 26 12:15:15 2016 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1988 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -26,7 +26,7 @@
 copyright
 "
  COPYRIGHT (c) 1988 by Claus Gittinger
-              All Rights Reserved
+	      All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -42,23 +42,23 @@
     abstract superclass for all kinds of numbers
 
     [class variables:]
-        DecimalPointCharacterForPrinting          <Character>                     used when printing
-        DecimalPointCharactersForReading          <Collection of Character>       accepted as decimalPointChars when reading
-
-        DefaultDisplayRadix     the radix in which integers present their
-                                displayString (which is used in inspectors)
-                                If you are to look at many hex numbers, bitmasks
-                                etc. you may set this to 2 or 16.
-                                (avoids typing printStringRadix:.. all the time
-                                 - I know - I am lazy ;-). Default is 10.
-        
+	DecimalPointCharacterForPrinting          <Character>                     used when printing
+	DecimalPointCharactersForReading          <Collection of Character>       accepted as decimalPointChars when reading
+
+	DefaultDisplayRadix     the radix in which integers present their
+				displayString (which is used in inspectors)
+				If you are to look at many hex numbers, bitmasks
+				etc. you may set this to 2 or 16.
+				(avoids typing printStringRadix:.. all the time
+				 - I know - I am lazy ;-). Default is 10.
+
     [author:]
-        Claus Gittinger
+	Claus Gittinger
 
     [see also:]
-        Integer LargeInteger SmallInteger
-        LimitedPrecisionReal Float ShortFloat
-        Fraction FixedPoint
+	Integer LargeInteger SmallInteger
+	LimitedPrecisionReal Float ShortFloat
+	Fraction FixedPoint
 "
 ! !
 
@@ -85,18 +85,18 @@
      should be roughly 10times faster than the general method:
 
      Time millisecondsToRun:[
-        100000 timesRepeat:[ Float fromString:'12345.0' ]
-     ].   
+	100000 timesRepeat:[ Float fromString:'12345.0' ]
+     ].
      Time millisecondsToRun:[
-        100000 timesRepeat:[ Float fastFromString:'12345.0' ]
-     ].   
+	100000 timesRepeat:[ Float fastFromString:'12345.0' ]
+     ].
 
      Time millisecondsToRun:[
-        100000 timesRepeat:[ Integer fromString:'12345' ]
-     ].  
+	100000 timesRepeat:[ Integer fromString:'12345' ]
+     ].
      Time millisecondsToRun:[
-        100000 timesRepeat:[ Integer fastFromString:'12345' ]
-     ]. 
+	100000 timesRepeat:[ Integer fastFromString:'12345' ]
+     ].
     "
 !
 
@@ -106,19 +106,19 @@
      I.e. the string must contain exactly one valid number (with optional separators around)"
 
     ^ self
-        fromString:aString
-        decimalPointCharacters:(self decimalPointCharactersForReading) 
+	fromString:aString
+	decimalPointCharacters:(self decimalPointCharactersForReading)
 
     "
      Number fromString:'12345'
      Number fromString:'abc'
      Number fromString:'1abc'   -> raises an error
-     Number readFrom:'1abc'     -> reads a 1    
-     Number readFrom:'10/2'     -> reads a 10   
-     Number fromString:'10/2'   -> raises an error   
-     Number fromString:'(1/2)'  -> reads a fraction   
-     Number readFrom:'(1/2)'    -> reads a fraction   
-     Number readFrom:'(10/2)'   -> reads a 5   
+     Number readFrom:'1abc'     -> reads a 1
+     Number readFrom:'10/2'     -> reads a 10
+     Number fromString:'10/2'   -> raises an error
+     Number fromString:'(1/2)'  -> reads a fraction
+     Number readFrom:'(1/2)'    -> reads a fraction
+     Number readFrom:'(10/2)'   -> reads a 5
      '12345' asNumber
     "
 
@@ -135,10 +135,10 @@
     s := aString readStream.
     num := self readFrom:s decimalPointCharacters:decimalPointCharacters onError:[^ ConversionError raiseRequestErrorString:' - invalid number'].
     s atEnd ifFalse:[
-        s skipSeparators.
-        s atEnd ifFalse:[
-            ^ ConversionError raiseRequestErrorString:' - garbage at end of number'
-        ].
+	s skipSeparators.
+	s atEnd ifFalse:[
+	    ^ ConversionError raiseRequestErrorString:' - garbage at end of number'
+	].
     ].
     ^ num.
 
@@ -182,7 +182,7 @@
     "Modified: / 3.8.1998 / 20:05:34 / cg"
 !
 
-readFrom:aStringOrStream decimalPointCharacters:decimalPointCharacters 
+readFrom:aStringOrStream decimalPointCharacters:decimalPointCharacters
     "return the next Number from the (character-)stream aStream;
      skipping all whitespace first.
      Return the value of exceptionBlock, if no number can be read.
@@ -192,14 +192,14 @@
      See #fromString: , which is more strict and does not allow garbage at the end."
 
     ^ self
-        readFrom:aStringOrStream 
-        decimalPointCharacters:decimalPointCharacters 
-        onError:[self error:'conversion error for: ' , self name]
+	readFrom:aStringOrStream
+	decimalPointCharacters:decimalPointCharacters
+	onError:[self error:'conversion error for: ' , self name]
 
     "
-     Number readFrom:'123.456' decimalPointCharacters:'.'      
-     Number readFrom:'123,456' decimalPointCharacters:'.,'     
-     Number readFrom:'123,456' decimalPointCharacters:'.'     
+     Number readFrom:'123.456' decimalPointCharacters:'.'
+     Number readFrom:'123,456' decimalPointCharacters:'.,'
+     Number readFrom:'123,456' decimalPointCharacters:'.'
     "
 !
 
@@ -213,177 +213,177 @@
      See #fromString: , which is more strict and does not allow garbage at the end."
 
     ^ [
-        |value intValue mantissaAndScale scale decimalMantissa str 
-         nextChar radix sign signExp exp numerator denom|
-
-        str := aStringOrStream readStream.
-
-        nextChar := str skipSeparators.
-        nextChar isNil ifTrue:[^ exceptionBlock value].
-
-        (nextChar == $-) ifTrue:[
-            sign := -1.
-            str next.
-            nextChar := str peekOrNil
-        ] ifFalse:[
-            sign := 1.
-            (nextChar == $+) ifTrue:[
-                str next.
-                nextChar := str peekOrNil
-            ]
-        ].
-        nextChar == $( ifTrue:[
-            "maybe a Fraction e.g. (1/3)"
-            str next.
-            numerator := Integer readFrom:str onError:[^ exceptionBlock value].
-            str skipSeparators.
-            nextChar := str peekOrNil.
-            nextChar == $/ ifTrue:[
-                str next.
-                denom := Integer readFrom:str onError:[^ exceptionBlock value].
-                str skipSeparators.
-                nextChar := str peekOrNil.
-            ].
-            nextChar == $) ifFalse:[^ exceptionBlock value].
-            str next.
-            value := Fraction numerator:numerator denominator:denom.
-            ^ value * sign
-        ].
-        nextChar isNil ifTrue:[^ exceptionBlock value].    
-        (nextChar isDigit or:[(decimalPointCharacters includes:nextChar)]) ifFalse:[
-            ^ exceptionBlock value.
+	|value intValue mantissaAndScale scale decimalMantissa str
+	 nextChar radix sign signExp exp numerator denom|
+
+	str := aStringOrStream readStream.
+
+	nextChar := str skipSeparators.
+	nextChar isNil ifTrue:[^ exceptionBlock value].
+
+	(nextChar == $-) ifTrue:[
+	    sign := -1.
+	    str next.
+	    nextChar := str peekOrNil
+	] ifFalse:[
+	    sign := 1.
+	    (nextChar == $+) ifTrue:[
+		str next.
+		nextChar := str peekOrNil
+	    ]
+	].
+	nextChar == $( ifTrue:[
+	    "maybe a Fraction e.g. (1/3)"
+	    str next.
+	    numerator := Integer readFrom:str onError:[^ exceptionBlock value].
+	    str skipSeparators.
+	    nextChar := str peekOrNil.
+	    nextChar == $/ ifTrue:[
+		str next.
+		denom := Integer readFrom:str onError:[^ exceptionBlock value].
+		str skipSeparators.
+		nextChar := str peekOrNil.
+	    ].
+	    nextChar == $) ifFalse:[^ exceptionBlock value].
+	    str next.
+	    value := Fraction numerator:numerator denominator:denom.
+	    ^ value * sign
+	].
+	nextChar isNil ifTrue:[^ exceptionBlock value].
+	(nextChar isDigit or:[(decimalPointCharacters includes:nextChar)]) ifFalse:[
+	    ^ exceptionBlock value.
 "/          value := super readFrom:str.
 "/          sign == -1 ifTrue:[value := value negated].
 "/          ^ value
-        ].
-        (decimalPointCharacters includes:nextChar) ifTrue:[
-            radix := 10.
-            value := 0.0.
-            intValue := 0.
-        ] ifFalse:[
-            value := Integer readFrom:str radix:10.
-            nextChar := str peekOrNil.
-            ((nextChar == $r) or:[ nextChar == $R]) ifTrue:[
-                str next.
-                radix := value.
-                value := Integer readFrom:str radix:radix.
-            ] ifFalse:[
-                radix := 10
-            ].
-            intValue := value.
-        ].
-
-        (self == Integer or:[self inheritsFrom:Integer]) ifFalse:[
-            (decimalPointCharacters includes:nextChar) ifTrue:[
-                str next.
-                nextChar := str peekOrNil.
-                decimalMantissa := 0.
-                (nextChar notNil and:[nextChar isDigitRadix:radix]) ifTrue:[
-                    |mantissa|
-                    mantissaAndScale := self readMantissaAndScaleFrom:str radix:radix.
-                    mantissa := mantissaAndScale first.
-                    value := (mantissa coerce:value) + mantissa.
-                    nextChar := str peekOrNil.
-                ]
-            ].
-            ('eEdDqQ' includes:nextChar) ifTrue:[
-                str next.
-                nextChar := str peekOrNil.
-                signExp := 1.
-                (nextChar == $+) ifTrue:[
-                    str next.
-                    nextChar := str peekOrNil.
-                ] ifFalse:[
-                    (nextChar == $-) ifTrue:[
-                        str next.
-                        nextChar := str peekOrNil.
-                        signExp := -1
-                    ]
-                ].
-                ('qQ' includes:nextChar) ifTrue:[
-                    value := value asLongFloat.
-                ] ifFalse:[
-                    value := value asFloat.
+	].
+	(decimalPointCharacters includes:nextChar) ifTrue:[
+	    radix := 10.
+	    value := 0.0.
+	    intValue := 0.
+	] ifFalse:[
+	    value := Integer readFrom:str radix:10.
+	    nextChar := str peekOrNil.
+	    ((nextChar == $r) or:[ nextChar == $R]) ifTrue:[
+		str next.
+		radix := value.
+		value := Integer readFrom:str radix:radix.
+	    ] ifFalse:[
+		radix := 10
+	    ].
+	    intValue := value.
+	].
+
+	(self == Integer or:[self inheritsFrom:Integer]) ifFalse:[
+	    (decimalPointCharacters includes:nextChar) ifTrue:[
+		str next.
+		nextChar := str peekOrNil.
+		decimalMantissa := 0.
+		(nextChar notNil and:[nextChar isDigitRadix:radix]) ifTrue:[
+		    |mantissa|
+		    mantissaAndScale := self readMantissaAndScaleFrom:str radix:radix.
+		    mantissa := mantissaAndScale first.
+		    value := (mantissa coerce:value) + mantissa.
+		    nextChar := str peekOrNil.
+		]
+	    ].
+	    ('eEdDqQ' includes:nextChar) ifTrue:[
+		str next.
+		nextChar := str peekOrNil.
+		signExp := 1.
+		(nextChar == $+) ifTrue:[
+		    str next.
+		    nextChar := str peekOrNil.
+		] ifFalse:[
+		    (nextChar == $-) ifTrue:[
+			str next.
+			nextChar := str peekOrNil.
+			signExp := -1
+		    ]
+		].
+		('qQ' includes:nextChar) ifTrue:[
+		    value := value asLongFloat.
+		] ifFalse:[
+		    value := value asFloat.
 "/ future: (for now, always create Doubles for Dolphin,Squeak etc. compatibility)
 "/                ('eE' includes:nextChar) ifTrue:[
 "/                    value := value asShortFloat
 "/                ]
-                ].
-                (nextChar notNil and:[(nextChar isDigitRadix:radix)]) ifTrue:[
-                    exp := (Integer readFrom:str radix:radix) * signExp.
-                    value := value * ((value class unity * 10.0) raisedToInteger:exp)
-                ]
-            ] ifFalse:[
-                ('sS' includes:nextChar) ifTrue:[
-                    str next.
-
-                    nextChar := str peekOrNil.
-                    (nextChar notNil and:[ nextChar isDigit]) ifTrue:[
-                        scale := (Integer readFrom:str).
-                    ].
-
-                    mantissaAndScale isNil ifTrue:[
-                        value := intValue asFixedPoint:(scale ? 0).
-                    ] ifFalse:[
-                        denom := 10 raisedTo:mantissaAndScale last.
-                        value := FixedPoint 
-                                    numerator:(intValue * denom) + (mantissaAndScale second)
-                                    denominator:denom
-                                    scale:(scale ? mantissaAndScale third).
-                    ].
-                ] ifFalse:[
-                    (self inheritsFrom:LimitedPrecisionReal) ifTrue:[
-                        "when requesting a specific Float instance, coerce it.
-                         otherwise return a value without loosing precision"
-                        value := self coerce:value.
-                    ].
-                ].
-            ].
-        ].
-        sign == -1 ifTrue:[
-            value := value negated
-        ].
-        value.
+		].
+		(nextChar notNil and:[(nextChar isDigitRadix:radix)]) ifTrue:[
+		    exp := (Integer readFrom:str radix:radix) * signExp.
+		    value := value * ((value class unity * 10.0) raisedToInteger:exp)
+		]
+	    ] ifFalse:[
+		('sS' includes:nextChar) ifTrue:[
+		    str next.
+
+		    nextChar := str peekOrNil.
+		    (nextChar notNil and:[ nextChar isDigit]) ifTrue:[
+			scale := (Integer readFrom:str).
+		    ].
+
+		    mantissaAndScale isNil ifTrue:[
+			value := intValue asFixedPoint:(scale ? 0).
+		    ] ifFalse:[
+			denom := 10 raisedTo:mantissaAndScale last.
+			value := FixedPoint
+				    numerator:(intValue * denom) + (mantissaAndScale second)
+				    denominator:denom
+				    scale:(scale ? mantissaAndScale third).
+		    ].
+		] ifFalse:[
+		    (self inheritsFrom:LimitedPrecisionReal) ifTrue:[
+			"when requesting a specific Float instance, coerce it.
+			 otherwise return a value without loosing precision"
+			value := self coerce:value.
+		    ].
+		].
+	    ].
+	].
+	sign == -1 ifTrue:[
+	    value := value negated
+	].
+	value.
     ] on:Error do:exceptionBlock
 
     "
-     Number readFrom:(ReadStream on:'54.32e-01')      
-     Number readFrom:(ReadStream on:'12345678901234567890') 
-     Number readFrom:(ReadStream on:'12345678901234567890.0') 
-     Number readFrom:(ReadStream on:'12345678901234567890.012345678901234567890') 
-     Number readFrom:(ReadStream on:'16rAAAAFFFFAAAAFFFF') 
-     Number readFrom:'16rAAAAFFFFAAAAFFFF' 
-     Number readFrom:'0.000001'  
-     '+00000123.45' asNumber  
-     Number readFrom:'(1/3)'      
-     Number readFrom:'(-1/3)'      
-     Number readFrom:'(1/-3)'      
-     Number readFrom:'-(1/3)'      
-     Number readFrom:'-(-1/3)'      
-     Number readFrom:'(-1/3'      
-     Number readFrom:'99s'      
-     Number readFrom:'99.00s'      
-     Number readFrom:'99.0000000s'      
-     Number readFrom:'.0000000s'      
-     Number readFrom:'.0000000q'      
-     Number readFrom:'.0000000f'      
-     Number readFrom:'.0000000e'      
-     Number readFrom:'.0000000s1'      
-     Number readFrom:'.0000000q1'      
-     Number readFrom:'.0000000f1'      
-     Number readFrom:'.0000000e1'      
-     LongFloat readFrom:'.00000001'      
-     Number readFrom:'.00000000000001'      
-     Number readFrom:'.001'      
-     ShortFloat readFrom:'.001'      
+     Number readFrom:(ReadStream on:'54.32e-01')
+     Number readFrom:(ReadStream on:'12345678901234567890')
+     Number readFrom:(ReadStream on:'12345678901234567890.0')
+     Number readFrom:(ReadStream on:'12345678901234567890.012345678901234567890')
+     Number readFrom:(ReadStream on:'16rAAAAFFFFAAAAFFFF')
+     Number readFrom:'16rAAAAFFFFAAAAFFFF'
+     Number readFrom:'0.000001'
+     '+00000123.45' asNumber
+     Number readFrom:'(1/3)'
+     Number readFrom:'(-1/3)'
+     Number readFrom:'(1/-3)'
+     Number readFrom:'-(1/3)'
+     Number readFrom:'-(-1/3)'
+     Number readFrom:'(-1/3'
+     Number readFrom:'99s'
+     Number readFrom:'99.00s'
+     Number readFrom:'99.0000000s'
+     Number readFrom:'.0000000s'
+     Number readFrom:'.0000000q'
+     Number readFrom:'.0000000f'
+     Number readFrom:'.0000000e'
+     Number readFrom:'.0000000s1'
+     Number readFrom:'.0000000q1'
+     Number readFrom:'.0000000f1'
+     Number readFrom:'.0000000e1'
+     LongFloat readFrom:'.00000001'
+     Number readFrom:'.00000000000001'
+     Number readFrom:'.001'
+     ShortFloat readFrom:'.001'
      Number readFrom:'123garbage'      -> returns 123
-     Number fromString:'123garbage'    -> raises an error  
-
-     DecimalPointCharactersForReading := #( $. $, ).   
-     Number readFrom:'99,00'      
-
-     DecimalPointCharactersForReading := #( $. ).   
-     Number readFrom:'99,00'      
+     Number fromString:'123garbage'    -> raises an error
+
+     DecimalPointCharactersForReading := #( $. $, ).
+     Number readFrom:'99,00'
+
+     DecimalPointCharactersForReading := #( $. ).
+     Number readFrom:'99,00'
     "
 
     "Modified: / 14.4.1998 / 19:22:50 / cg"
@@ -398,77 +398,77 @@
      It also allows garbage after the number - i.e. it reads what it can.
      See #fromString: , which is more strict and does not allow garbage at the end."
 
-    ^ self 
-        readFrom:aStringOrStream 
-        decimalPointCharacters:(self decimalPointCharactersForReading) 
-        onError:exceptionBlock
+    ^ self
+	readFrom:aStringOrStream
+	decimalPointCharacters:(self decimalPointCharactersForReading)
+	onError:exceptionBlock
 
     "
-     Number readFrom:(ReadStream on:'54.32e-01')      
-     Number readFrom:(ReadStream on:'12345678901234567890') 
-     Number readFrom:(ReadStream on:'12345678901234567890.0') 
-     Number readFrom:(ReadStream on:'12345678901234567890.012345678901234567890') 
-     Number readFrom:(ReadStream on:'16rAAAAFFFFAAAAFFFF') 
-     Number readFrom:'16rAAAAFFFFAAAAFFFF' 
-     Number readFrom:'0.000001'  
-     '+00000123.45' asNumber  
-     Number readFrom:'99s'      
-     Number readFrom:'99.00s'      
-     Number readFrom:'99.0000000s'      
-     Number readFrom:'.0000000s'      
-     Number readFrom:'.0000000q'      
-     Number readFrom:'.0000000f'      
-     Number readFrom:'.0000000e'      
-     Number readFrom:'.0000000s1'      
-     Number readFrom:'.0000000q1'      
-     Number readFrom:'.0000000f1'      
-     Number readFrom:'.0000000e1'      
-
-     DecimalPointCharactersForReading := #( $. $, ).   
-     Number readFrom:'99,00'      
-
-     DecimalPointCharactersForReading := #( $. ).   
-     Number readFrom:'99,00'      
+     Number readFrom:(ReadStream on:'54.32e-01')
+     Number readFrom:(ReadStream on:'12345678901234567890')
+     Number readFrom:(ReadStream on:'12345678901234567890.0')
+     Number readFrom:(ReadStream on:'12345678901234567890.012345678901234567890')
+     Number readFrom:(ReadStream on:'16rAAAAFFFFAAAAFFFF')
+     Number readFrom:'16rAAAAFFFFAAAAFFFF'
+     Number readFrom:'0.000001'
+     '+00000123.45' asNumber
+     Number readFrom:'99s'
+     Number readFrom:'99.00s'
+     Number readFrom:'99.0000000s'
+     Number readFrom:'.0000000s'
+     Number readFrom:'.0000000q'
+     Number readFrom:'.0000000f'
+     Number readFrom:'.0000000e'
+     Number readFrom:'.0000000s1'
+     Number readFrom:'.0000000q1'
+     Number readFrom:'.0000000f1'
+     Number readFrom:'.0000000e1'
+
+     DecimalPointCharactersForReading := #( $. $, ).
+     Number readFrom:'99,00'
+
+     DecimalPointCharactersForReading := #( $. ).
+     Number readFrom:'99,00'
     "
 !
 
 readSmalltalkSyntaxFrom:aStream
     "ST-80 compatibility (thanks to a note from alpha testers)
-     read and return the next Number in smalltalk syntax from the 
+     read and return the next Number in smalltalk syntax from the
      (character-) aStream.
      Returns nil if aStream contains no valid number."
 
     ^ self readSmalltalkSyntaxFrom:aStream onError:nil.
 
     "
-     Number readSmalltalkSyntaxFrom:'99d'    
-     Number readSmalltalkSyntaxFrom:'99.00d'    
-     Number readSmalltalkSyntaxFrom:'54.32e-01'    
+     Number readSmalltalkSyntaxFrom:'99d'
+     Number readSmalltalkSyntaxFrom:'99.00d'
+     Number readSmalltalkSyntaxFrom:'54.32e-01'
      Number readSmalltalkSyntaxFrom:'12345678901234567890'
-     Number readSmalltalkSyntaxFrom:'16rAAAAFFFFAAAAFFFF'   
-     Number readSmalltalkSyntaxFrom:'foobar'     
-     Number readSmalltalkSyntaxFrom:'(1/10)' 
-
-     Number readSmalltalkSyntaxFrom:'(1/0)' 
-
-     Number readFrom:'(1/3)' 
+     Number readSmalltalkSyntaxFrom:'16rAAAAFFFFAAAAFFFF'
+     Number readSmalltalkSyntaxFrom:'foobar'
+     Number readSmalltalkSyntaxFrom:'(1/10)'
+
+     Number readSmalltalkSyntaxFrom:'(1/0)'
+
+     Number readFrom:'(1/3)'
      Number readFrom:'(-1/3)'
-     Number readFrom:'-(1/3)' 
-     Number readFrom:'(1/-3)' 
-     Number readFrom:'(-1/-3)' 
-     Number readFrom:'-(-1/-3)'   
-     Number readSmalltalkSyntaxFrom:'+00000123.45'  
-     Number readFrom:'+00000123.45'  
+     Number readFrom:'-(1/3)'
+     Number readFrom:'(1/-3)'
+     Number readFrom:'(-1/-3)'
+     Number readFrom:'-(-1/-3)'
+     Number readSmalltalkSyntaxFrom:'+00000123.45'
+     Number readFrom:'+00000123.45'
 
      |s|
      s := ReadStream on:'2.'.
      Number readSmalltalkSyntaxFrom:s.
-     s next    
+     s next
 
      |s|
      s := ReadStream on:'2.0.'.
      Number readSmalltalkSyntaxFrom:s.
-     s next    
+     s next
     "
 
     "Modified: / 19.11.1999 / 18:26:47 / cg"
@@ -476,22 +476,22 @@
 
 readSmalltalkSyntaxFrom:aStream onError:errorValue
     "ST-80 compatibility (thanks to a note from alpha testers)
-     read and return the next Number in smalltalk syntax from the 
+     read and return the next Number in smalltalk syntax from the
      (character-) aStream.
      Returns nil if aStream contains no valid number."
 
     |n|
 
     [
-        n := Scanner scanNumberFrom:aStream.
+	n := Scanner scanNumberFrom:aStream.
     ] on:Error do:[:ex|
-        n := nil
+	n := nil
     ].
     n isNil ifTrue:[^ errorValue value].
     ^ n
 
     "
-     Number readSmalltalkSyntaxFrom:'foo' onError:123   
+     Number readSmalltalkSyntaxFrom:'foo' onError:123
     "
 ! !
 
@@ -506,7 +506,7 @@
 
 !Number class methodsFor:'constants'!
 
-decimalPointCharacter 
+decimalPointCharacter
     "printed"
 
     <resource: #obsolete>
@@ -514,7 +514,7 @@
     ^ self decimalPointCharacterForPrinting
 !
 
-decimalPointCharacter:aCharacter 
+decimalPointCharacter:aCharacter
     "printed"
 
     <resource: #obsolete>
@@ -525,18 +525,18 @@
      1.5 printString
 
      Number decimalPointCharacter:$,.
-     1.5 printString       
+     1.5 printString
      Number decimalPointCharacter:$..
     "
 !
 
-decimalPointCharacterForPrinting 
+decimalPointCharacterForPrinting
     "printed"
 
     ^ DecimalPointCharacterForPrinting ? $.
 !
 
-decimalPointCharacterForPrinting:aCharacter 
+decimalPointCharacterForPrinting:aCharacter
     "printed"
 
     DecimalPointCharacterForPrinting := aCharacter
@@ -545,12 +545,12 @@
      1.5 printString
 
      Number decimalPointCharacterForPrinting:$,.
-     1.5 printString       
+     1.5 printString
      Number decimalPointCharacterForPrinting:$..
     "
 !
 
-decimalPointCharacters 
+decimalPointCharacters
     "accepted when converting from a string"
 
     <resource: #obsolete>
@@ -561,28 +561,28 @@
      1.5 printString
 
      Number decimalPointCharacters:#( $. $,) .
-     Number fromString:'1.5'.     
-     Number fromString:'1,5'.     
+     Number fromString:'1.5'.
+     Number fromString:'1,5'.
      Number decimalPointCharacters:#( $. ).
     "
 !
 
-decimalPointCharacters:aCollectionOfCharacters 
+decimalPointCharacters:aCollectionOfCharacters
     "accepted when converting from a string"
 
     <resource: #obsolete>
 
-    self decimalPointCharactersForReading:aCollectionOfCharacters 
+    self decimalPointCharactersForReading:aCollectionOfCharacters
 
     "
      Number decimalPointCharacters:#( $. $,) .
-     Number fromString:'1.5'.     
-     Number fromString:'1,5'.     
+     Number fromString:'1.5'.
+     Number fromString:'1,5'.
      Number decimalPointCharacters:#( $. ).
     "
 !
 
-decimalPointCharactersForReading 
+decimalPointCharactersForReading
     "default when converting from a string"
 
     "/ cg: changing the default leads to trouble in some
@@ -590,7 +590,7 @@
     "/ PLEASE DO ONLY CHANGE THE DEFAULT BELOW FOR END-USER APPLICATIONS (if at all).
     "/ BETTER: pass the DecimalPointCharacterSet explicitly
     DecimalPointCharactersForReading isNil ifTrue:[
-        ^ #( $. )
+	^ #( $. )
     ].
     ^ DecimalPointCharactersForReading
 
@@ -598,27 +598,27 @@
      1.5 printString
 
      Number decimalPointCharactersForReading:#( $. $,) .
-     Number fromString:'1.5'.     
-     Number fromString:'1,5'.     
+     Number fromString:'1.5'.
+     Number fromString:'1,5'.
      Number decimalPointCharactersForReading:#( $. ).
     "
 !
 
-decimalPointCharactersForReading:aCollectionOfCharacters 
+decimalPointCharactersForReading:aCollectionOfCharacters
     "accepted when converting from a string"
 
     DecimalPointCharactersForReading := aCollectionOfCharacters
 
     "
      Number decimalPointCharactersForReading:#( $. $,) .
-     Number fromString:'1.5'.     
-     Number fromString:'1,5'.     
+     Number fromString:'1.5'.
+     Number fromString:'1,5'.
      Number decimalPointCharactersForReading:#( $. ).
     "
 !
 
 epsilon
-    "return the maximum relative spacing of instances of mySelf 
+    "return the maximum relative spacing of instances of mySelf
      (i.e. the value-delta of the least significant bit)"
 
      ^ self subclassResponsibility
@@ -632,9 +632,9 @@
     ^ 0.0001
 
     "
-     Float epsilon     
-     ShortFloat epsilon 
-     Float epsilon10    
+     Float epsilon
+     ShortFloat epsilon
+     Float epsilon10
      ShortFloat epsilon10
     "
 !
@@ -647,31 +647,31 @@
 
 !Number class methodsFor:'error reporting'!
 
-raise:aSignalSymbolOrErrorClass receiver:someNumber selector:sel arg:arg errorString:text 
+raise:aSignalSymbolOrErrorClass receiver:someNumber selector:sel arg:arg errorString:text
     "ST-80 compatible signal raising. Provided for PD numeric classes"
 
     <context: #return>
 
     ^ self
-        raise:aSignalSymbolOrErrorClass 
-        receiver:someNumber 
-        selector:sel 
-        arguments:(Array with:arg)
-        errorString:text 
+	raise:aSignalSymbolOrErrorClass
+	receiver:someNumber
+	selector:sel
+	arguments:(Array with:arg)
+	errorString:text
 
     "
-     Number 
-        raise:#domainErrorSignal
-        receiver:1.0
-        selector:#sin
-        arg:nil
-        errorString:'foo bar test'
+     Number
+	raise:#domainErrorSignal
+	receiver:1.0
+	selector:#sin
+	arg:nil
+	errorString:'foo bar test'
     "
 
     "Modified: / 16.11.2001 / 14:12:50 / cg"
 !
 
-raise:aSignalSymbolOrErrorClass receiver:someNumber selector:sel errorString:text 
+raise:aSignalSymbolOrErrorClass receiver:someNumber selector:sel errorString:text
     "ST-80 compatible signal raising. Provided for PD numeric classes.
      aSignalSymbolOrErrorClass is either an Error-subclass, or
      the selector which is sent to myself, to retrieve the Exception class / Signal."
@@ -679,18 +679,18 @@
     <context: #return>
 
     ^ self
-        raise:aSignalSymbolOrErrorClass 
-        receiver:someNumber 
-        selector:sel 
-        arguments:#()
-        errorString:text 
+	raise:aSignalSymbolOrErrorClass
+	receiver:someNumber
+	selector:sel
+	arguments:#()
+	errorString:text
 
     "
-     Number 
-        raise:#domainErrorSignal
-        receiver:1.0
-        selector:#foo 
-        errorString:'foo bar test'
+     Number
+	raise:#domainErrorSignal
+	receiver:1.0
+	selector:#foo
+	errorString:'foo bar test'
     "
 
     "Modified: / 16.11.2001 / 14:13:16 / cg"
@@ -717,7 +717,7 @@
 readMantissaAndScaleFrom:aStream radix:radix
     "helper for readFrom: -
      return the mantissa (post-decimal-point digits) from the (character-)stream aStream;
-     In addition, the scale (number of postDecimalPoint digits) is returned 
+     In addition, the scale (number of postDecimalPoint digits) is returned
      (to support reading fixedPoint numbers).
      No whitespace is skipped.
      Errs if no number is available on aStream."
@@ -730,29 +730,29 @@
     intMantissa := 0.
     nextChar := aStream peekOrNil.
     [nextChar notNil and:[nextChar isDigitRadix:radix]] whileTrue:[
-        digit := nextChar digitValue.
-        value := value + (digit * factor).
-        intMantissa := (intMantissa * radix) + digit.
-        factor := factor / radix.
-        scale := scale + 1.
-        scale > 6 ifTrue:[
-            factor := factor asLongFloat.
-            value := value asLongFloat.
-        ].
-        aStream next.
-        nextChar := aStream peekOrNil
+	digit := nextChar digitValue.
+	value := value + (digit * factor).
+	intMantissa := (intMantissa * radix) + digit.
+	factor := factor / radix.
+	scale := scale + 1.
+	scale > 6 ifTrue:[
+	    factor := factor asLongFloat.
+	    value := value asLongFloat.
+	].
+	aStream next.
+	nextChar := aStream peekOrNil
     ].
 
     ^ (Array with:value with:intMantissa with:scale).
 
     "
-     Number readMantissaAndScaleFrom:'234'    readStream radix:10. 
-     Number readMantissaAndScaleFrom:'2'      readStream radix:10. 
-     Number readMantissaAndScaleFrom:'234567' readStream radix:10. 
-     Number readMantissaAndScaleFrom:'234000' readStream radix:10. 
-     Number readMantissaAndScaleFrom:'234'    readStream radix:10. 
-
-     Number readMantissaAndScaleFrom:'12345678901234567890' readStream radix:10. 
+     Number readMantissaAndScaleFrom:'234'    readStream radix:10.
+     Number readMantissaAndScaleFrom:'2'      readStream radix:10.
+     Number readMantissaAndScaleFrom:'234567' readStream radix:10.
+     Number readMantissaAndScaleFrom:'234000' readStream radix:10.
+     Number readMantissaAndScaleFrom:'234'    readStream radix:10.
+
+     Number readMantissaAndScaleFrom:'12345678901234567890' readStream radix:10.
     "
 
     "Modified: / 14.4.1998 / 18:47:47 / cg"
@@ -799,8 +799,8 @@
     ^ pos
 
     "
-     #(-500 -300 -150 -5 0 5 150 300 500 1200) 
-        collect: [:n | n asSmallAngleDegrees]
+     #(-500 -300 -150 -5 0 5 150 300 500 1200)
+	collect: [:n | n asSmallAngleDegrees]
     "
 !
 
@@ -810,17 +810,17 @@
     ^ self closeFrom:aNumber withEpsilon:(self class epsilonForCloseTo)
 
     "
-     9.0 closeTo: 8.9999     
-     9.9 closeTo: 9          
-     (9/3) closeTo: 2.9999      
-     1 closeTo: 0.9999      
-     1 closeTo: 1.0001      
-     1 closeTo: 1.001       
-     1 closeTo: 0.999       
-
-     0.9999 closeTo: 1      
-     1.0001 closeTo: 1      
-     1.001 closeTo: 1     
+     9.0 closeTo: 8.9999
+     9.9 closeTo: 9
+     (9/3) closeTo: 2.9999
+     1 closeTo: 0.9999
+     1 closeTo: 1.0001
+     1 closeTo: 1.001
+     1 closeTo: 0.999
+
+     0.9999 closeTo: 1
+     1.0001 closeTo: 1
+     1.001 closeTo: 1
      0.999 closeTo: 1
      Float NaN closeTo:Float NaN
      Float infinity closeTo:Float infinity
@@ -832,24 +832,24 @@
 
     | fuzz |
 
-    self isNaN == aNumber isNaN ifFalse: [^ false]. 
+    self isNaN == aNumber isNaN ifFalse: [^ false].
     self isInfinite == aNumber isInfinite ifFalse: [^ false].
 
-    fuzz := (self abs max:aNumber abs) * eps. 
+    fuzz := (self abs max:aNumber abs) * eps.
     ^ (self - aNumber) abs <= fuzz
 
     "
-     9.0 closeTo: 8.9999     
-     9.9 closeTo: 9          
-     (9/3) closeTo: 2.9999      
-     1 closeTo: 0.9999      
-     1 closeTo: 1.0001      
-     1 closeTo: 1.001       
-     1 closeTo: 0.999       
-
-     0.9999 closeTo: 1      
-     1.0001 closeTo: 1      
-     1.001 closeTo: 1     
+     9.0 closeTo: 8.9999
+     9.9 closeTo: 9
+     (9/3) closeTo: 2.9999
+     1 closeTo: 0.9999
+     1 closeTo: 1.0001
+     1 closeTo: 1.001
+     1 closeTo: 0.999
+
+     0.9999 closeTo: 1
+     1.0001 closeTo: 1
+     1.001 closeTo: 1
      0.999 closeTo: 1
      Float NaN closeTo:Float NaN
      Float infinity closeTo:Float infinity
@@ -862,7 +862,7 @@
     ^ self closeTo:num withEpsilon:(self class epsilonForCloseTo)
 
     "
-     1 closeTo:1.0000000001 
+     1 closeTo:1.0000000001
      1 closeTo:1.001
      1 closeTo:1.001 withEpsilon:0.001
     "
@@ -877,11 +877,11 @@
     ^ num closeFrom:self withEpsilon:eps
 
     "
-     1 closeTo:1.0000000001        
-     1 closeTo:1.001               
-
-     1 closeTo:1.001 withEpsilon:0.1 
-     1 closeTo:1.201 withEpsilon:0.1 
+     1 closeTo:1.0000000001
+     1 closeTo:1.001
+
+     1 closeTo:1.001 withEpsilon:0.1
+     1 closeTo:1.201 withEpsilon:0.1
 
      3.14 closeTo:(3.14 asFixedPoint:2)
      (3.14 asFixedPoint:2) closeTo:3.14
@@ -893,24 +893,24 @@
 
 degreeCos
     "Return the cosine of the receiver taken as an angle in degrees."
-    
+
     ^ self degreesToRadians cos
 !
 
 degreeSin
     "Return the sine of the receiver taken as an angle in degrees."
-    
+
     ^ self degreesToRadians sin
 !
 
 degreeTan
     "Return the cosine of the receiver taken as an angle in degrees."
-    
+
     ^ self degreesToRadians tan
 !
 
-isEqual: aNumber within: accuracy 
-        ^(self - aNumber) abs < accuracy
+isEqual: aNumber within: accuracy
+	^(self - aNumber) abs < accuracy
 !
 
 rounded:n
@@ -922,13 +922,13 @@
     ^ (((self * mult) rounded) asFloat / mult).
 
     "
-     7 rounded:2   
-     7.1 rounded:2    
-     7.2345 rounded:2 
-     7.2385 rounded:2 
-     7.2341 rounded:3   
-     7.2345 rounded:3   
-     7.2348 rounded:3   
+     7 rounded:2
+     7.1 rounded:2
+     7.2345 rounded:2
+     7.2385 rounded:2
+     7.2341 rounded:3
+     7.2345 rounded:3
+     7.2348 rounded:3
     "
 !
 
@@ -944,25 +944,25 @@
     "return a complex number, with the receiver as imaginary part, 0 as real part"
 
     ^ Complex
-        real:0
-        imaginary:self
+	real:0
+	imaginary:self
 
     "
-     3i          
-     (1+1i)      
+     3i
+     (1+1i)
     "
 ! !
 
 !Number methodsFor:'comparing'!
 
-isAlmostEqualTo:aNumber nEpsilon:nE 
+isAlmostEqualTo:aNumber nEpsilon:nE
     "return true, if the argument, aNumber represents almost the same numeric value
      as the receiver, false otherwise.
 
      nE is the number of minimal float distances, that the numbers may differ and
      still be considered equal. See documentation in LimitedPrecisionReal for more detail.
 
-     For background information why floats need this 
+     For background information why floats need this
      read: http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
     "
 
@@ -973,21 +973,21 @@
     scaledEpsilon := nE * diff class epsilon.
 
     diff <= scaledEpsilon ifTrue:[
-        "compare for really close values near 0"
-        ^ true.
+	"compare for really close values near 0"
+	^ true.
     ] ifFalse:[
-        "scaled comparison for larger values"
-        f1 := self abs.
-        f2 := aNumber abs.
-        largest := f1 > f2 ifTrue:[f1] ifFalse:[f2].
-        ^ (diff <= (scaledEpsilon * largest)).
+	"scaled comparison for larger values"
+	f1 := self abs.
+	f2 := aNumber abs.
+	largest := f1 > f2 ifTrue:[f1] ifFalse:[f2].
+	^ (diff <= (scaledEpsilon * largest)).
     ].
 ! !
 
 !Number methodsFor:'converting'!
 
-% aNumber 
-    "Return a complex number with the receiver as the real part and 
+% aNumber
+    "Return a complex number with the receiver as the real part and
      aNumber as the imaginary part"
 
     ^ Complex real:self imaginary:aNumber
@@ -1001,10 +1001,10 @@
     ^ MeasurementValue value:self minValue:(self-anError) maxValue:(self+anError)
 
     "
-     (100 +/- 5) * 2            
-     (100 +/- 5) * (100 +/- 10)  
-     (100 +/- 5) + (100 +/- 10)  
-     (100 +/- 5) - (100 +/- 10)  
+     (100 +/- 5) * 2
+     (100 +/- 5) * (100 +/- 10)
+     (100 +/- 5) + (100 +/- 10)
+     (100 +/- 5) - (100 +/- 10)
     "
 
     "Modified (comment): / 14-02-2012 / 14:17:36 / cg"
@@ -1020,20 +1020,20 @@
      * I cannot tell if this special code is worth anything
      */
     if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
-        OBJ newPoint;
-        int spc;
-
-        __qCheckedAlignedNew(newPoint, sizeof(struct __Point));
-        __InstPtr(newPoint)->o_class = @global(Point);
-        __qSTORE(newPoint, @global(Point));
-        __PointInstPtr(newPoint)->p_x = self;
-        __PointInstPtr(newPoint)->p_y = aNumber;
-        if (! __bothSmallInteger(self, aNumber)) {
-            spc = __qSpace(newPoint);
-            __STORE_SPC(newPoint, aNumber, spc);
-            __STORE_SPC(newPoint, self, spc);
-        }
-        RETURN ( newPoint );
+	OBJ newPoint;
+	int spc;
+
+	__qCheckedNew(newPoint, sizeof(struct __Point));
+	__InstPtr(newPoint)->o_class = @global(Point);
+	__qSTORE(newPoint, @global(Point));
+	__PointInstPtr(newPoint)->p_x = self;
+	__PointInstPtr(newPoint)->p_y = aNumber;
+	if (! __bothSmallInteger(self, aNumber)) {
+	    spc = __qSpace(newPoint);
+	    __STORE_SPC(newPoint, aNumber, spc);
+	    __STORE_SPC(newPoint, self, spc);
+	}
+	RETURN ( newPoint );
     }
 %}
 .
@@ -1041,7 +1041,7 @@
 !
 
 asComplex
-    "Return a complex number with the receiver as the real part and 
+    "Return a complex number with the receiver as the real part and
      zero as the imaginary part"
 
     ^ Complex real:self
@@ -1062,7 +1062,7 @@
 asPercentFrom:fullAmount
     "what is the percentage
      taking the receiver's value from the argument"
-    
+
     ^ (self / fullAmount) * 100.
 
     "
@@ -1073,22 +1073,22 @@
 !
 
 asPoint
-    "return a new Point with the receiver as all coordinates;  
-     often used to supply the same value in two dimensions, as with 
+    "return a new Point with the receiver as all coordinates;
+     often used to supply the same value in two dimensions, as with
      symmetrical gridding or scaling."
 
 %{  /* NOCONTEXT */
 
     if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
-        OBJ newPoint;
-
-        __qCheckedAlignedNew(newPoint, sizeof(struct __Point));
-        __InstPtr(newPoint)->o_class = @global(Point);
-        __qSTORE(newPoint, @global(Point));
-        __PointInstPtr(newPoint)->p_x = self;
-        __PointInstPtr(newPoint)->p_y = self;
-        __STORE(newPoint, self);
-        RETURN ( newPoint );
+	OBJ newPoint;
+
+	__qCheckedNew(newPoint, sizeof(struct __Point));
+	__InstPtr(newPoint)->o_class = @global(Point);
+	__qSTORE(newPoint, @global(Point));
+	__PointInstPtr(newPoint)->p_x = self;
+	__PointInstPtr(newPoint)->p_y = self;
+	__STORE(newPoint, self);
+	RETURN ( newPoint );
     }
 %}.
     ^ Point x:self y:self
@@ -1098,12 +1098,12 @@
     "return an TimeDuration object from the receiver, taking the receiver
      as number of seconds"
 
-    ^ TimeDuration seconds:self 
+    ^ TimeDuration seconds:self
 
     "
-     5 asTimeDuration   
-     50.25 asTimeDuration 
-     3600 asTimeDuration 
+     5 asTimeDuration
+     50.25 asTimeDuration
+     3600 asTimeDuration
     "
 
     "Created: / 08-01-2012 / 19:04:04 / cg"
@@ -1132,7 +1132,7 @@
 
 percentOf:hundredPercent
     "how many is self-percent from the argument"
-    
+
     ^ (hundredPercent / 100 * self)
 
     "
@@ -1148,22 +1148,22 @@
     ^ self * (180.0 / Float pi)
 
     "
-     180 degreesToRadians     
+     180 degreesToRadians
      Float pi radiansToDegrees
     "
 !
 
 withScale:newScale
-    "return a fixedPoint number representing the same value as the receiver, 
+    "return a fixedPoint number representing the same value as the receiver,
      with newScale number of post-decimal digits"
 
     ^ self asFixedPoint:newScale
 
     "
-     1234 withScale:2 
-     1234.1 withScale:2 
-     1234.12 withScale:2 
-     1234.123 withScale:2 
+     1234 withScale:2
+     1234.1 withScale:2
+     1234.12 withScale:2
+     1234.123 withScale:2
      (1/7) withScale:2
     "
 ! !
@@ -1176,10 +1176,10 @@
     ^ TimeDuration days:self
 
     "
-     1000 milliseconds 
-     10 seconds 
-     10 minutes 
-     1 days 
+     1000 milliseconds
+     10 seconds
+     10 minutes
+     1 days
     "
 !
 
@@ -1189,9 +1189,9 @@
     ^ TimeDuration hours:self
 
     "
-     1000 milliseconds 
-     10 seconds 
-     10 minutes 
+     1000 milliseconds
+     10 seconds
+     10 minutes
     "
 !
 
@@ -1201,7 +1201,7 @@
     ^ TimeDuration fromMilliseconds:self
 
     "
-     1000 milliseconds 
+     1000 milliseconds
     "
 !
 
@@ -1211,9 +1211,9 @@
     ^ TimeDuration minutes:self
 
     "
-     1000 milliseconds 
-     10 seconds 
-     10 minutes 
+     1000 milliseconds
+     10 seconds
+     10 minutes
     "
 !
 
@@ -1223,9 +1223,9 @@
     ^ TimeDuration seconds:self
 
     "
-     1000 milliseconds 
-     10 seconds      
-     10 minutes      
+     1000 milliseconds
+     10 seconds
+     10 minutes
     "
 !
 
@@ -1235,11 +1235,11 @@
     ^ TimeDuration weeks:self
 
     "
-     1000 milliseconds 
-     10 seconds 
-     10 minutes 
-     1 days 
-     1 weeks 
+     1000 milliseconds
+     10 seconds
+     10 minutes
+     1 days
+     1 weeks
     "
 
     "Created: / 05-09-2011 / 11:17:59 / cg"
@@ -1254,10 +1254,10 @@
     ^ aTimestamp subtractMilliseconds:(self * 1000) truncated.
 
     "
-     100.0 differenceFromTimestamp:Timestamp now 
+     100.0 differenceFromTimestamp:Timestamp now
 
      |t1 t2|
-     t1 := Timestamp now. 
+     t1 := Timestamp now.
      t2 := 1.5 differenceFromTimestamp:t1.
      t1 inspect. t2 inspect.
     "
@@ -1307,7 +1307,7 @@
 
     "
      (1 to:256 byFactor:2)
-     (256 to:1 byFactor:1/2)     
+     (256 to:1 byFactor:1/2)
     "
 ! !
 
@@ -1320,8 +1320,8 @@
 
     count := self.
     [count > 0] whileTrue:[
-        aBlock value.
-        count := count - 1
+	aBlock value.
+	count := count - 1
     ]
 ! !
 
@@ -1334,7 +1334,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat cbrt.
+	^ self asFloat cbrt.
     ].
     "/ very slow fallback
     ^ self cbrt_withAccuracy:self epsilon
@@ -1355,7 +1355,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat exp.
+	^ self asFloat exp.
     ].
     "/ very slow fallback
     ^ self exp_withAccuracy:self epsilon
@@ -1383,13 +1383,13 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asLongFloat ln.
+	^ self asLongFloat ln.
     ].
     "/ very slow fallback
     ^ self ln_withAccuracy:self epsilon
 
     "
-        (10 raisedTo:1000) ln
+	(10 raisedTo:1000) ln
     "
 !
 
@@ -1405,12 +1405,12 @@
 
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asLongFloat log10.
+	^ self asLongFloat log10.
     ].
     ^ self log:10
 
     "
-        (10 raisedTo:1000) log10
+	(10 raisedTo:1000) log10
     "
 !
 
@@ -1434,11 +1434,11 @@
     aNumber = 0 ifTrue:[^ 1].
     aNumber = 1 ifTrue:[^ self].
     aNumber isInteger ifTrue:[
-        ^ self raisedToInteger:aNumber
+	^ self raisedToInteger:aNumber
     ].
     aNumber isNumber ifFalse:[
-        ^ aNumber raisedFromNumber:self.
-    ].    
+	^ aNumber raisedFromNumber:self.
+    ].
     ^ self asFloat raisedTo:aNumber
 
     "
@@ -1448,8 +1448,8 @@
      -4 raisedTo: 1/2
      8 raisedTo: 1/3
      -8 raisedTo: 1/3
-     10 raisedTo: 4    
-     10 raisedTo: -4    
+     10 raisedTo: 4
+     10 raisedTo: -4
     "
 !
 
@@ -1468,7 +1468,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat sqrt.
+	^ self asFloat sqrt.
     ].
     "/ very slow fallback
     ^ self sqrt_withAccuracy:self epsilon
@@ -1488,7 +1488,7 @@
     ^ yN.
 
     "
-     (2 asFixedPoint:4) sqrtWithErrorLessThan:0.001   
+     (2 asFixedPoint:4) sqrtWithErrorLessThan:0.001
     "
 !
 
@@ -1497,7 +1497,7 @@
      For protocol completeness wrt. Squeak and ST80."
 
     anInteger >= 0 ifTrue:[
-        ^ self * (1 bitShift:anInteger)
+	^ self * (1 bitShift:anInteger)
     ].
     ^ self / (1 bitShift:anInteger negated)
 
@@ -1514,14 +1514,14 @@
 !Number methodsFor:'measurement values'!
 
 maxValue
-    "the maximum possible value taking me as a measurement with possible error; 
+    "the maximum possible value taking me as a measurement with possible error;
      as I am exact, thats myself"
 
     ^ self
 !
 
 minValue
-    "the minimum possible value taking me as a measurement with possible error; 
+    "the minimum possible value taking me as a measurement with possible error;
      as I am exact, thats myself"
 
     ^ self
@@ -1537,13 +1537,13 @@
     "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
     "/ ST/X (and some old ST80's) mean: draw-yourself on a GC.
     (aGCOrStream isStream) ifFalse:[
-        ^ super displayOn:aGCOrStream
+	^ super displayOn:aGCOrStream
     ].
 
     (DefaultDisplayRadix isNil or:[DefaultDisplayRadix == 10]) ifTrue:[
-        self printOn:aGCOrStream
+	self printOn:aGCOrStream
     ] ifFalse:[
-        self printOn:aGCOrStream base:DefaultDisplayRadix showRadix:true.
+	self printOn:aGCOrStream base:DefaultDisplayRadix showRadix:true.
     ].
 
     "
@@ -1590,9 +1590,9 @@
     |s|
 
     radix == 10 ifTrue:[
-        s := self printString.
+	s := self printString.
     ] ifFalse:[
-        s := self printStringRadix:radix.
+	s := self printStringRadix:radix.
     ].
     s printOn: aStream leftPaddedTo:size with: padCharacter
 
@@ -1611,24 +1611,24 @@
     |rest|
 
     self >= 1000 ifTrue:[
-        (self // 1000) printOn:aStream thousandsSeparator:thousandsSeparator.
-        thousandsSeparator printOn:aStream.
-        rest := self \\ 1000.
-        rest < 100 ifTrue:[
-            aStream nextPut:$0.
-            rest < 10 ifTrue:[
-                aStream nextPut:$0.
-            ].
-        ].
-        rest printOn:aStream.
-        ^ self.
+	(self // 1000) printOn:aStream thousandsSeparator:thousandsSeparator.
+	thousandsSeparator printOn:aStream.
+	rest := self \\ 1000.
+	rest < 100 ifTrue:[
+	    aStream nextPut:$0.
+	    rest < 10 ifTrue:[
+		aStream nextPut:$0.
+	    ].
+	].
+	rest printOn:aStream.
+	^ self.
     ].
     self printOn:aStream.
 
     "
      swiss style:
      1000000 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
-     12345678 printOn:Transcript thousandsSeparator:$'.     Transcript cr.  
+     12345678 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
      1234567 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
      123456 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
      123056 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
@@ -1636,7 +1636,7 @@
      1234 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
      123 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
 
-     (12345678.12 asFixedPoint:2) printOn:Transcript thousandsSeparator:$'.     Transcript cr.  
+     (12345678.12 asFixedPoint:2) printOn:Transcript thousandsSeparator:$'.     Transcript cr.
      1234567.12 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
      123456.12 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
      123056.12 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
@@ -1646,7 +1646,7 @@
 
      us style:
      1000000 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
-     12345678 printOn:Transcript thousandsSeparator:$,.     Transcript cr.  
+     12345678 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
      1234567 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
      123456 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
      12345 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
@@ -1655,7 +1655,7 @@
 
      german (european ?) style
      1000000 printOn:Transcript thousandsSeparator:$..     Transcript cr.
-     12345678 printOn:Transcript thousandsSeparator:$..     Transcript cr.  
+     12345678 printOn:Transcript thousandsSeparator:$..     Transcript cr.
      1234567 printOn:Transcript thousandsSeparator:$..     Transcript cr.
      123456 printOn:Transcript thousandsSeparator:$..     Transcript cr.
      12345 printOn:Transcript thousandsSeparator:$..     Transcript cr.
@@ -1672,7 +1672,7 @@
     "return a string representation of the receiver in the specified
      base; does NOT prepend XXr to the string.
      See also: radixPrintStringRadix:
-               printOn:base:showRadix:"
+	       printOn:base:showRadix:"
 
     ^ self printStringRadix:base showRadix:false
 
@@ -1685,7 +1685,7 @@
     "return a string representation of the receiver in the specified
      base; does NOT prepend XXr to the string.
      See also: radixPrintStringRadix:
-               printOn:base:showRadix:"
+	       printOn:base:showRadix:"
 
     |s|
 
@@ -1719,21 +1719,21 @@
 
      1000000 asFixedPoint printStringWithThousandsSeparator
      12345678 asFixedPoint printStringWithThousandsSeparator
-     1234567 asFixedPoint printStringWithThousandsSeparator  
+     1234567 asFixedPoint printStringWithThousandsSeparator
      123456 asFixedPoint printStringWithThousandsSeparator
-     12345 asFixedPoint printStringWithThousandsSeparator 
-     1234 asFixedPoint printStringWithThousandsSeparator 
+     12345 asFixedPoint printStringWithThousandsSeparator
+     1234 asFixedPoint printStringWithThousandsSeparator
      123 asFixedPoint printStringWithThousandsSeparator
-     ((9999999//10000) asFixedPoint:9) printStringWithThousandsSeparator 
+     ((9999999//10000) asFixedPoint:9) printStringWithThousandsSeparator
     "
 !
 
 printStringWithThousandsSeparator:thousandsSeparator
     "print the receiver as business number with a thousands separator to aStream.
      Notice:
-        americans use comma
-        germans (europeans ?) use a dot
-        swiss people (business people ?) use a single quote
+	americans use comma
+	germans (europeans ?) use a dot
+	swiss people (business people ?) use a single quote
 
      Caveat: Should use the separator from the locale here"
 
@@ -1758,10 +1758,10 @@
 
      Transcript showCR:((1000000 asFixedPoint:2) printStringWithThousandsSeparator:$,).
      Transcript showCR:((12345678 asFixedPoint:2) printStringWithThousandsSeparator:$,).
-     Transcript showCR:((1234567 asFixedPoint:2) printStringWithThousandsSeparator:$,).  
+     Transcript showCR:((1234567 asFixedPoint:2) printStringWithThousandsSeparator:$,).
      Transcript showCR:((123456 asFixedPoint:2) printStringWithThousandsSeparator:$,).
-     Transcript showCR:((12345 asFixedPoint:2) printStringWithThousandsSeparator:$,). 
-     Transcript showCR:((1234 asFixedPoint:2) printStringWithThousandsSeparator:$,). 
+     Transcript showCR:((12345 asFixedPoint:2) printStringWithThousandsSeparator:$,).
+     Transcript showCR:((1234 asFixedPoint:2) printStringWithThousandsSeparator:$,).
      Transcript showCR:((123 asFixedPoint:2) printStringWithThousandsSeparator:$,).
     "
 !
@@ -1793,7 +1793,7 @@
 !
 
 storeString
-    "return a string for storing 
+    "return a string for storing
      - since numbers are literals, they store as they print."
 
     ^ self printString
@@ -1805,19 +1805,19 @@
     "compute the arcSine of the receiver using a taylor series approx."
 
     "/ uses taylor series:
-    "/                 1*x^3   1*3 * x^5   
+    "/                 1*x^3   1*3 * x^5
     "/    arcSin = x + ----- + ---------- + ...
-    "/                 2* 3    2*4 *  5    
+    "/                 2* 3    2*4 *  5
 
     |x2 num numf den denf approx delta|
 
-    ((self < -1) or:[self > 1]) ifTrue:[ 
-        ^ self class
-            raise:#domainErrorSignal
-            receiver:self
-            selector:#arcSin
-            arguments:#()
-            errorString:'bad receiver in arcSin'
+    ((self < -1) or:[self > 1]) ifTrue:[
+	^ self class
+	    raise:#domainErrorSignal
+	    receiver:self
+	    selector:#arcSin
+	    arguments:#()
+	    errorString:'bad receiver in arcSin'
     ].
 
     x2 := self * self.
@@ -1829,11 +1829,11 @@
     den := 2.
 
     [
-        num := (num * x2) * numf.   numf := numf + 2.
-        den := den * denf.          denf := denf + 2.
-
-        delta := num / (den * numf).
-        approx := approx + delta.
+	num := (num * x2) * numf.   numf := numf + 2.
+	den := den * denf.          denf := denf + 2.
+
+	delta := num / (den * numf).
+	approx := approx + delta.
     ] doUntil:[delta abs <= epsilon].
     ^ approx
 
@@ -1848,7 +1848,7 @@
 
      0.5q arcSin_withAccuracy:1e-20     0.523598776
 
-     0.5 asLargeFloat arcSin_withAccuracy:1e-30    -- not yet 
+     0.5 asLargeFloat arcSin_withAccuracy:1e-30    -- not yet
 
 
      0.1 arcSin                                    0.100167
@@ -1861,7 +1861,7 @@
 
      0.1q arcSin_withAccuracy:1e-20     0.100167421
 
-     0.1 asLargeFloat arcSin_withAccuracy:1e-30    -- not yet 
+     0.1 asLargeFloat arcSin_withAccuracy:1e-30    -- not yet
     "
 !
 
@@ -1882,11 +1882,11 @@
     approx := self + (num / den).
 
     [
-        den := den + 2.
-        num := (num * x2) negated.
-
-        delta := num / den.
-        approx := approx + delta.
+	den := den + 2.
+	num := (num * x2) negated.
+
+	delta := num / den.
+	approx := approx + delta.
     ] doUntil:[delta abs <= epsilon].
     ^ approx
 
@@ -1899,8 +1899,8 @@
      1q arcTan_withAccuracy:0.01      0.790299653
      1q arcTan_withAccuracy:0.001     0.785897165
 
-     1q arcTan_withAccuracy:1e-8      0.785398168     
-     1q arcTan_withAccuracy:1e-20     -- not yet, converges very slow 
+     1q arcTan_withAccuracy:1e-8      0.785398168
+     1q arcTan_withAccuracy:1e-20     -- not yet, converges very slow
 
 
      0.5 arcTan                         0.463648
@@ -1912,36 +1912,36 @@
      0.5q arcTan_withAccuracy:0.001     0.463684276
 
      0.5q arcTan_withAccuracy:1e-20     0.463647609
-     0.5 asLargeFloat arcTan_withAccuracy:1e-30    -- not yet  
+     0.5 asLargeFloat arcTan_withAccuracy:1e-30    -- not yet
     "
 !
 
-cbrt_withAccuracy:epsilon 
+cbrt_withAccuracy:epsilon
     "compute cubic root of the receiver using a newton approx."
 
     "
       Use Newton's method:
 
-                 2*x_n + (a / x_n^2)
-        x_n+1 =  ---------------
-                      3
-
-        cbrt(a) = x_n
+		 2*x_n + (a / x_n^2)
+	x_n+1 =  ---------------
+		      3
+
+	cbrt(a) = x_n
     "
-    
+
     |approx|
 
     self = 0 ifTrue:[
-        ^ self
+	^ self
     ].
 
     approx := 1.
     [
-        |lastApprox|
-
-        lastApprox := approx.
-        approx := ((approx * 2) + (self / approx / approx)) / 3.
-        (approx - lastApprox) abs > epsilon
+	|lastApprox|
+
+	lastApprox := approx.
+	approx := ((approx * 2) + (self / approx / approx)) / 3.
+	(approx - lastApprox) abs > epsilon
     ] whileTrue.
     ^ approx
 
@@ -1949,7 +1949,7 @@
      8q cbrt                                 2.0
      8q cbrt_withAccuracy:0.01               2.000004911675504018
      8q cbrt_withAccuracy:0.0001             2.000000000012062239
-     8q cbrt_withAccuracy:0.0000001          2.0 
+     8q cbrt_withAccuracy:0.0000001          2.0
      8q cbrt_withAccuracy:0.0000000001       2.0
      8q cbrt_withAccuracy:0.000000000001     2.0
      8q cbrt_withAccuracy:LongFloat epsilon  2.0
@@ -1959,16 +1959,16 @@
      -27q cbrt_withAccuracy:LongFloat epsilon -3.0
 
      MessageTally spyOn:[ |arg|
-        arg := 2 asLongFloat.
-        1000000 timesRepeat:[
-             arg cbrt_withAccuracy:0.000000000001
-        ]
+	arg := 2 asLongFloat.
+	1000000 timesRepeat:[
+	     arg cbrt_withAccuracy:0.000000000001
+	]
      ]
      Time millisecondsToRun:[ |arg|
-        arg := 2 asLongFloat.
-        1000000 timesRepeat:[
-             arg cbrt_withAccuracy:0.000000000001
-        ]
+	arg := 2 asLongFloat.
+	1000000 timesRepeat:[
+	     arg cbrt_withAccuracy:0.000000000001
+	]
      ]
     "
 !
@@ -1992,22 +1992,22 @@
     lastApprox := 1.
 
     [ (lastApprox - approx) abs > epsilon ] whileTrue:[
-        facN := facN + 2.
-        den := den * (facN - 1) * facN.
-        num := (num * x2) negated.
-        lastApprox := approx.
-        approx := approx + (num / den).
+	facN := facN + 2.
+	den := den * (facN - 1) * facN.
+	num := (num * x2) negated.
+	lastApprox := approx.
+	approx := approx + (num / den).
     ].
     ^ approx
 
     "
      1.0 cos                                    0.540302
      1.0 asLongFloat cos_withAccuracy:1         0.5
-     1.0 asLongFloat cos_withAccuracy:0.1       0.541666667 
+     1.0 asLongFloat cos_withAccuracy:0.1       0.541666667
      1.0 asLongFloat cos_withAccuracy:0.01      0.540277778
      1.0 asLongFloat cos_withAccuracy:0.001     0.540302579
 
-     1.0 asLongFloat cos_withAccuracy:1e-40     0.540302306    
+     1.0 asLongFloat cos_withAccuracy:1e-40     0.540302306
     "
 !
 
@@ -2029,28 +2029,28 @@
     approx := self + (num / den).
 
     [
-        facN := facN + 2.
-        den := den * (facN - 1) * facN.
-        num := num * x2.
-
-        delta := num / den.
-        approx := approx + delta.
+	facN := facN + 2.
+	den := den * (facN - 1) * facN.
+	num := num * x2.
+
+	delta := num / den.
+	approx := approx + delta.
     ] doUntil:[delta <= epsilon].
     ^ approx
 
     "
      1.0 cosh                                    1.54308
-     1.0q cosh_withAccuracy:1         1.5 
-     1.0q cosh_withAccuracy:0.1       1.54308 
-     1.0q cosh_withAccuracy:0.01      1.54308 
-     1.0q cosh_withAccuracy:0.001     1.54308 
-
-     1.0q cosh_withAccuracy:1e-40   -> 1.543080    
+     1.0q cosh_withAccuracy:1         1.5
+     1.0q cosh_withAccuracy:0.1       1.54308
+     1.0q cosh_withAccuracy:0.01      1.54308
+     1.0q cosh_withAccuracy:0.001     1.54308
+
+     1.0q cosh_withAccuracy:1e-40   -> 1.543080
     "
 !
 
 epsilon
-    "return the maximum relative spacing of instances of mySelf 
+    "return the maximum relative spacing of instances of mySelf
      (i.e. the value-delta of the least significant bit)"
 
     ^ self class epsilon
@@ -2074,12 +2074,12 @@
     approx := self + 1 + (num / den).
 
     [
-        facN := facN + 1.
-        den := den * facN.
-        num := num * self.
-
-        delta := num / den.
-        approx := approx + delta.
+	facN := facN + 1.
+	den := den * facN.
+	num := num * self.
+
+	delta := num / den.
+	approx := approx + delta.
     ] doUntil:[delta abs <= epsilon].
 
     ^ approx
@@ -2088,7 +2088,7 @@
      -1 exp
      1.0 exp                                    2.71828
      1q exp                                     2.71828183
-     2q exp                                     7.3890561                        
+     2q exp                                     7.3890561
 
      1q exp_withAccuracy:1                      2.66666667
      1q exp_withAccuracy:0.1                    2.70833333
@@ -2097,9 +2097,9 @@
 
      2q exp_withAccuracy:LongFloat epsilon      7.3890561
 
-     1.0 asLongFloat exp_withAccuracy:1e-40     2.71828183 
-
-     5 exp_withAccuracy:1e-40      
+     1.0 asLongFloat exp_withAccuracy:1e-40     2.71828183
+
+     5 exp_withAccuracy:1e-40
      (1 exp_withAccuracy:1e-100) asFixedPoint:100
     "
 !
@@ -2108,32 +2108,32 @@
     "compute ln of the receiver using a taylor series approx."
 
     "uses taylor series:
-                 u^2   u^3
-        ln = u - --- + --- ...
-                  2    3
+		 u^2   u^3
+	ln = u - --- + --- ...
+		  2    3
       where:
-             u = x - 1    and: x < 1
+	     u = x - 1    and: x < 1
 
      Now we use modified taylor, which converges faster:
 
-                   1+y        1   1       1
-        ln(x) = ln --- = 2y ( - + - y^2 + - y^4 + ....)
-                   1-y        1   3       5
-
-        where y = (x-1) / (x+1)  and x > 0
+		   1+y        1   1       1
+	ln(x) = ln --- = 2y ( - + - y^2 + - y^4 + ....)
+		   1-y        1   3       5
+
+	where y = (x-1) / (x+1)  and x > 0
     "
 
     |denominator approx y y2 exp delta|
 
     self <= 0 ifTrue:[
-        ^ self class
-            raise:#domainErrorSignal
-            receiver:self
-            selector:#ln
-            arguments:#()
-            errorString:'bad receiver in ln'
+	^ self class
+	    raise:#domainErrorSignal
+	    receiver:self
+	    selector:#ln
+	    arguments:#()
+	    errorString:'bad receiver in ln'
     ].
-        
+
 
     y := (self - 1)/(self + 1).
     exp := y2 := y * y.
@@ -2142,10 +2142,10 @@
     denominator := 3.
 
     [
-        delta := exp / denominator.
-        approx := approx + delta.
-        exp := exp * y2.
-        denominator := denominator + 2.
+	delta := exp / denominator.
+	approx := approx + delta.
+	exp := exp * y2.
+	denominator := denominator + 2.
     ] doUntil:[delta <= epsilon].
 
     ^ y * 2 * approx.
@@ -2155,17 +2155,17 @@
      2.0 ln                         0.693147
      2.0q ln                        0.693147181
 
-     2.0q ln_withAccuracy:1         0.691358025     
-     2.0q ln_withAccuracy:0.1       0.691358025       
-     2.0q ln_withAccuracy:0.01      0.693004115    
-     2.0q ln_withAccuracy:0.0000001 0.69314718    
-
-     2.0q ln_withAccuracy:1e-10     
-     2.0q ln_withAccuracy:1e-20     
+     2.0q ln_withAccuracy:1         0.691358025
+     2.0q ln_withAccuracy:0.1       0.691358025
+     2.0q ln_withAccuracy:0.01      0.693004115
+     2.0q ln_withAccuracy:0.0000001 0.69314718
+
+     2.0q ln_withAccuracy:1e-10
+     2.0q ln_withAccuracy:1e-20
      2.0q ln_withAccuracy:1e-40     0.693147181
 
-     2 ln_withAccuracy:1e-40                   
-     0 ln_withAccuracy:1e-40                   
+     2 ln_withAccuracy:1e-40
+     0 ln_withAccuracy:1e-40
 
      (2 ln_withAccuracy:1e-100) asFixedPoint:100
     "
@@ -2189,12 +2189,12 @@
     approx := self + (num / den).
 
     [
-        facN := facN + 2.
-        den := den * (facN - 1) * facN.
-        num := (num * x2) negated.
-
-        delta := num / den.
-        approx := approx + delta.
+	facN := facN + 2.
+	den := den * (facN - 1) * facN.
+	num := (num * x2) negated.
+
+	delta := num / den.
+	approx := approx + delta.
     ] doUntil:[delta abs <= epsilon].
     ^ approx
 
@@ -2203,7 +2203,7 @@
      1.0q sin                        0.841470985
 
      1.0q sin_withAccuracy:1         0.833333333
-     1.0q sin_withAccuracy:0.1       0.841666667 
+     1.0q sin_withAccuracy:0.1       0.841666667
      1.0q sin_withAccuracy:0.01      0.841666667
      1.0q sin_withAccuracy:0.001     0.841468254
 
@@ -2229,12 +2229,12 @@
     approx := self + (num / den).
 
     [
-        facN := facN + 2.
-        den := den * (facN - 1) * facN.
-        num := num * x2.
-
-        delta := num / den.
-        approx := approx + delta.
+	facN := facN + 2.
+	den := den * (facN - 1) * facN.
+	num := num * x2.
+
+	delta := num / den.
+	approx := approx + delta.
     ] doUntil:[delta abs <= epsilon].
     ^ approx
 
@@ -2243,47 +2243,47 @@
      1q sinh                        1.17520119
 
      1q sinh_withAccuracy:1         1.16666667
-     1q sinh_withAccuracy:0.1       1.175 
+     1q sinh_withAccuracy:0.1       1.175
      1q sinh_withAccuracy:0.01      1.175
      1q sinh_withAccuracy:0.001     1.17519841
 
-     1q sinh_withAccuracy:1e-40     1.17520119 
+     1q sinh_withAccuracy:1e-40     1.17520119
     "
 !
 
-sqrt_withAccuracy:epsilon 
+sqrt_withAccuracy:epsilon
     "compute square root of the receiver using newtom/heron algorithm"
     "
       Use the Heron algorithm:
 
-                 x_n + (a / x_n)
-        x_n+1 =  ---------------
-                      2
-
-        sqrt(a) = x_n
+		 x_n + (a / x_n)
+	x_n+1 =  ---------------
+		      2
+
+	sqrt(a) = x_n
     "
-    
+
     |approx|
 
     self <= 0 ifTrue:[
-        self = 0 ifTrue:[
-            ^ self
-        ].
-        ^ self class
-            raise:#imaginaryResultSignal
-            receiver:self
-            selector:#sqrt
-            arguments:#()
-            errorString:'bad (negative) receiver in sqrt'
+	self = 0 ifTrue:[
+	    ^ self
+	].
+	^ self class
+	    raise:#imaginaryResultSignal
+	    receiver:self
+	    selector:#sqrt
+	    arguments:#()
+	    errorString:'bad (negative) receiver in sqrt'
     ].
 
     approx := 1.
     [
-        |lastApprox|
-
-        lastApprox := approx.
-        approx := ((self / approx) + approx) / 2.
-        (approx - lastApprox) abs > epsilon
+	|lastApprox|
+
+	lastApprox := approx.
+	approx := ((self / approx) + approx) / 2.
+	(approx - lastApprox) abs > epsilon
     ] whileTrue.
     ^ approx
 
@@ -2300,16 +2300,16 @@
      (4 sqrt_withAccuracy:Integer epsilon) asFloat
 
      MessageTally spyOn:[ |arg|
-        arg := 2 asLongFloat.
-        1000000 timesRepeat:[
-             arg sqrt_withAccuracy:0.000000000001
-        ]
+	arg := 2 asLongFloat.
+	1000000 timesRepeat:[
+	     arg sqrt_withAccuracy:0.000000000001
+	]
      ]
      Time millisecondsToRun:[ |arg|
-        arg := 2 asLongFloat.
-        1000000 timesRepeat:[
-             arg sqrt_withAccuracy:0.000000000001
-        ]
+	arg := 2 asLongFloat.
+	1000000 timesRepeat:[
+	     arg sqrt_withAccuracy:0.000000000001
+	]
      ]
     "
 !
@@ -2329,27 +2329,27 @@
     "/        num := (2 raisedTo:(2*n)) * ((2 raisedTo:(2*n))-1) * ((n*2) bernoulli).
     "/        den := (2*n) factorial.
     "/        num / den
-    "/    ]   
+    "/    ]
    factors := #(
-        (1 3) 
-        (2 15) 
-        (17 315) 
-        (62 2835)
-        (1382 155925) 
-        (21844 6081075) 
-        (929569 638512875)
-        (6404582 10854718875) 
-        (443861162 1856156927625) 
-        (18888466084 194896477400625) 
-        (113927491862 2900518163668125) 
-        (58870668456604 3698160658676859375) 
-        (8374643517010684 1298054391195577640625) 
-        (689005380505609448 263505041412702261046875) 
-        (129848163681107301953 122529844256906551386796875) 
-        (1736640792209901647222 4043484860477916195764296875) 
-        (418781231495293038913922 2405873491984360136479756640625) 
-        (56518638202982204522669764 801155872830791925447758961328125) 
-        (32207686319158956594455462 1126482925555250126673224649609375)).
+	(1 3)
+	(2 15)
+	(17 315)
+	(62 2835)
+	(1382 155925)
+	(21844 6081075)
+	(929569 638512875)
+	(6404582 10854718875)
+	(443861162 1856156927625)
+	(18888466084 194896477400625)
+	(113927491862 2900518163668125)
+	(58870668456604 3698160658676859375)
+	(8374643517010684 1298054391195577640625)
+	(689005380505609448 263505041412702261046875)
+	(129848163681107301953 122529844256906551386796875)
+	(1736640792209901647222 4043484860477916195764296875)
+	(418781231495293038913922 2405873491984360136479756640625)
+	(56518638202982204522669764 801155872830791925447758961328125)
+	(32207686319158956594455462 1126482925555250126673224649609375)).
 
     x2 := self * self.
 
@@ -2358,21 +2358,21 @@
     lastApprox := self.
     idx := 2.
     [
-        t := factors at:idx ifAbsent:[].
-        t isNil ifTrue:[
-            self error:'too many iterations'.
+	t := factors at:idx ifAbsent:[].
+	t isNil ifTrue:[
+	    self error:'too many iterations'.
 "/ Not enough bernoulli numbers for now...
 "/            |tempNum tempDen|
 "/            tempNum := 2 raisedTo:(2*idx).
 "/            tempNum := tempNum * (tempNum-1) * ((2*idx) bernoulli).
 "/            tempDen := (2*idx) factorial.
 "/            t := Array with:tempNum with:tempDen.
-        ].
-        idx := idx + 1.
-        num := num * x2.
-
-        delta := num * t first / t second.
-        approx := approx + delta.
+	].
+	idx := idx + 1.
+	num := num * x2.
+
+	delta := num * t first / t second.
+	approx := approx + delta.
     ] doUntil:[delta abs <= epsilon].
     ^ approx
 
@@ -2396,19 +2396,19 @@
     "return true if the receiver is divisible by 2."
 
     self fractionPart = 0 ifTrue:[
-        ^ (self / 2) fractionPart = 0 
+	^ (self / 2) fractionPart = 0
     ].
 
     "this will raise an error"
     ^ super even
 
     "
-        2 even
-        2.0 even
-        3.0 even
-        2.4 even
-        (5/3) even
-        2 asFraction even
+	2 even
+	2.0 even
+	3.0 even
+	2.4 even
+	(5/3) even
+	2 asFraction even
     "
 !
 
@@ -2421,11 +2421,11 @@
     ^ (self \\ aNumber) = 0
 
     "
-     3 isDivisibleBy:2     
+     3 isDivisibleBy:2
      4 isDivisibleBy:2
-     4.0 isDivisibleBy:2   
-     4.5 isDivisibleBy:4.5 
-     4.5 isDivisibleBy:1.0 
+     4.0 isDivisibleBy:2
+     4.5 isDivisibleBy:4.5
+     4.5 isDivisibleBy:1.0
     "
 !
 
@@ -2496,7 +2496,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcCos.
+	^ self asFloat arcCos.
     ].
     "/ slow fallback
     ^ (self class pi / 2) - self arcSin
@@ -2510,7 +2510,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcCosech.
+	^ self asFloat arcCosech.
     ].
     "/ slow fallback
     ^ ((1 + ((self*self)+1) sqrt) / self) ln
@@ -2524,7 +2524,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcCosh.
+	^ self asFloat arcCosh.
     ].
     "/ slow fallback
     ^ (self + (self*self-1) sqrt) ln.
@@ -2538,7 +2538,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcCoth.
+	^ self asFloat arcCoth.
     ].
     "/ slow fallback
     ^ ((self+1) / (self-1)) ln / 2
@@ -2552,7 +2552,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcSech.
+	^ self asFloat arcSech.
     ].
     "/ slow fallback
     ^ ((1 + (1-(self*self)) sqrt) / self) ln
@@ -2565,7 +2565,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcSin.
+	^ self asFloat arcSin.
     ].
     "/ very slow fallback
     ^ self arcSin_withAccuracy:self epsilon
@@ -2579,7 +2579,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcSinh.
+	^ self asFloat arcSinh.
     ].
     "/ slow fallback
     ^ ( self + (self*self+1) sqrt ) ln
@@ -2593,7 +2593,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcTan.
+	^ self asFloat arcTan.
     ].
     "/ very slow fallback
     ^ self arcTan_withAccuracy:self epsilon
@@ -2606,7 +2606,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcTan2:x.
+	^ self asFloat arcTan2:x.
     ].
     "/ very slow fallback
     ^ self arcTan2_withAccuracy:self epsilon x:x
@@ -2615,12 +2615,12 @@
 arcTanh
     "return the inverse hyperbolic tangent of the receiver."
     "caveat: misnomer; should be called aTanh or arTanh"
-    
+
     "/ if I am not a Float (or a less general lpReal),
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat arcTanh.
+	^ self asFloat arcTanh.
     ].
     "/ slow fallback
     ^ ((1 + self) / (1 - self)) ln / 2
@@ -2634,7 +2634,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat cos.
+	^ self asFloat cos.
     ].
     "/ very slow fallback
     ^ self cos_withAccuracy:self epsilon
@@ -2647,7 +2647,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat cosh.
+	^ self asFloat cosh.
     ].
     "/ very slow fallback
     ^ self cosh_withAccuracy:self epsilon
@@ -2666,7 +2666,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat sin.
+	^ self asFloat sin.
     ].
     ^ self sin_withAccuracy:self epsilon
 !
@@ -2678,7 +2678,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat sinh.
+	^ self asFloat sinh.
     ].
     ^ self sinh_withAccuracy:self epsilon
 !
@@ -2697,7 +2697,7 @@
     "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
-        ^ self asFloat tanh.
+	^ self asFloat tanh.
     ].
     "/ very slow fallback
     ^ self tanh_withAccuracy:self epsilon
@@ -2715,7 +2715,7 @@
 "/    "/      (exp(x) - exp(-x)) / 2
 "/    "/      ----------------------
 "/    "/      (exp(x) + exp(-x)) / 2
-"/    
+"/
 "/    exp := self exp.
 "/    nexp := self negated exp.
 "/
@@ -2725,12 +2725,12 @@
 !Number methodsFor:'truncation & rounding'!
 
 detentBy: detent atMultiplesOf: grid snap: snap
-    "Map all values that are within detent/2 of any multiple of grid 
-     to that multiple.  
-     Otherwise, if snap is true, return self, meaning that the values 
-     in the dead zone will never be returned.  
+    "Map all values that are within detent/2 of any multiple of grid
+     to that multiple.
+     Otherwise, if snap is true, return self, meaning that the values
+     in the dead zone will never be returned.
      If snap is false, then expand the range between dead zones
-     so that it covers the range between multiples of the grid, 
+     so that it covers the range between multiples of the grid,
      and scale the value by that factor."
 
     | r1 r2 |
@@ -2740,16 +2740,16 @@
     snap ifTrue: [^ self].                       "...or return self"
 
     r2 := self < r1                               "Nearest end of dead zone"
-            ifTrue: [r1 - (detent asFloat/2)]
-            ifFalse: [r1 + (detent asFloat/2)].
+	    ifTrue: [r1 - (detent asFloat/2)]
+	    ifFalse: [r1 + (detent asFloat/2)].
 
     "Scale values between dead zones to fill range between multiples"
     ^ r1 + ((self - r2) * grid asFloat / (grid - detent))
 
     "
-     (170 to: 190 by: 2) collect: [:a | a detentBy: 10 atMultiplesOf: 90 snap: true]         
+     (170 to: 190 by: 2) collect: [:a | a detentBy: 10 atMultiplesOf: 90 snap: true]
      (170 to: 190 by: 2) collect: [:a | a detentBy: 10 atMultiplesOf: 90 snap: false]
-     (3.9 to: 4.1 by: 0.02) collect: [:a | a detentBy: 0.1 atMultiplesOf: 1.0 snap: true]    
+     (3.9 to: 4.1 by: 0.02) collect: [:a | a detentBy: 0.1 atMultiplesOf: 1.0 snap: true]
      (-3.9 to: -4.1 by: -0.02) collect: [:a | a detentBy: 0.1 atMultiplesOf: 1.0 snap: false]
     "
 !
@@ -2763,10 +2763,10 @@
 
     "
      1234.56789 fractionPart
-     1.2345e6 fractionPart  
-
-     1.6 asLongFloat fractionPart + 1.6 asLongFloat truncated    
-     -1.6 asLongFloat fractionPart + -1.6 asLongFloat truncated    
+     1.2345e6 fractionPart
+
+     1.6 asLongFloat fractionPart + 1.6 asLongFloat truncated
+     -1.6 asLongFloat fractionPart + -1.6 asLongFloat truncated
     "
 
     "Modified: / 4.11.1996 / 20:26:54 / cg"
@@ -2780,14 +2780,14 @@
     ^ self truncated asFloat
 
     "
-     1234.56789 integerPart 
-     1.2345e6 integerPart   
-     12.5 integerPart 
-     -12.5 integerPart 
-     (5/3) integerPart  
-     (-5/3) integerPart 
-     (5/3) truncated  
-     (-5/3) truncated  
+     1234.56789 integerPart
+     1.2345e6 integerPart
+     12.5 integerPart
+     -12.5 integerPart
+     (5/3) integerPart
+     (-5/3) integerPart
+     (5/3) truncated
+     (-5/3) truncated
     "
 
     "Created: / 28.10.1998 / 17:14:56 / cg"
--- a/Point.st	Fri Aug 26 01:12:20 2016 +0200
+++ b/Point.st	Fri Aug 26 12:15:15 2016 +0200
@@ -39,23 +39,23 @@
 documentation
 "
     I represent a point in 2D space. Or I can be used to represent
-    an extent (of a rectangle, for example), in which case my x-coordinate 
+    an extent (of a rectangle, for example), in which case my x-coordinate
     represents the width, and y-coordinate the height of something.
 
     The x and y coordinates are usually numbers.
 
     [Instance variables:]
 
-        x              <Number>        the x-coordinate of myself
-        y              <Number>        the y-coordinate of myself
+	x              <Number>        the x-coordinate of myself
+	y              <Number>        the y-coordinate of myself
 
     [author:]
-        Claus Gittinger
+	Claus Gittinger
 
     [see also:]
-        Rectangle Polygon
-        LayoutOrigin LayoutFrame AlignmentOrigin Layout 
-        View GraphicsContext
+	Rectangle Polygon
+	LayoutOrigin LayoutFrame AlignmentOrigin Layout
+	View GraphicsContext
 "
 ! !
 
@@ -95,10 +95,10 @@
     ^ self r:distance theta:angle degreesToRadians
 
     "
-     Point r:100 angle:0  
-     Point r:100 angle:90  
-     Point r:100 angle:45  
-     Point r:100 angle:180  
+     Point r:100 angle:0
+     Point r:100 angle:90
+     Point r:100 angle:45
+     Point r:100 angle:180
     "
 
     "Modified: 8.5.1996 / 20:01:50 / cg"
@@ -112,7 +112,7 @@
     ^ self r:distance theta:angle degreesToRadians
 
     "
-     Point r:100 degrees:90  
+     Point r:100 degrees:90
     "
 
     "Modified: 8.5.1996 / 20:01:50 / cg"
@@ -129,8 +129,8 @@
     ^ x @ y
 
     "
-     Point r:100 theta:0  
-     Point r:100 theta:Float pi/2 
+     Point r:100 theta:0
+     Point r:100 theta:Float pi/2
     "
 
     "Modified: 2.4.1997 / 00:01:40 / cg"
@@ -142,31 +142,31 @@
      if no point can be read."
 
     ^ [
-        |str newX newY hasParen|
+	|str newX newY hasParen|
 
-        str := aStringOrStream readStream.
-        str skipSeparators.
-        (hasParen := str peek) == $( ifTrue:[
-            str next.   
-        ].
-        newX := Number readFrom:str onError:nil.
-        newX notNil ifTrue:[
-            (str skipSeparators == $@) ifTrue:[
-                str  next.
-                newY := Number readFrom:str onError:nil.
-                newY notNil ifTrue:[
-                    hasParen ifTrue:[
-                        str skipSeparators.
-                        str peek == $) ifTrue:[
-                            str next.   
-                        ]
-                    ].
+	str := aStringOrStream readStream.
+	str skipSeparators.
+	(hasParen := str peek) == $( ifTrue:[
+	    str next.
+	].
+	newX := Number readFrom:str onError:nil.
+	newX notNil ifTrue:[
+	    (str skipSeparators == $@) ifTrue:[
+		str  next.
+		newY := Number readFrom:str onError:nil.
+		newY notNil ifTrue:[
+		    hasParen ifTrue:[
+			str skipSeparators.
+			str peek == $) ifTrue:[
+			    str next.
+			]
+		    ].
 
-                    ^ self x:newX y:newY
-                ]
-            ]
-        ].
-        ^ exceptionBlock value
+		    ^ self x:newX y:newY
+		]
+	    ]
+	].
+	^ exceptionBlock value
     ] on:Error do:exceptionBlock.
 
     "
@@ -188,21 +188,21 @@
      * claus: I am no longer certain, if this primitive is worth the effort
      */
     if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
-        if (self == @global(Point)) {
-            OBJ newPoint;
-            int spc;
+	if (self == @global(Point)) {
+	    OBJ newPoint;
+	    int spc;
 
-            __qCheckedAlignedNew(newPoint, sizeof(struct __Point));
-            __InstPtr(newPoint)->o_class = self; __qSTORE(newPoint, self);
-            __PointInstPtr(newPoint)->p_x = newX;
-            __PointInstPtr(newPoint)->p_y = newY;
-            if (! __bothSmallInteger(newX, newY)) {
-                spc = __qSpace(newPoint);
-                __STORE_SPC(newPoint, newX, spc);
-                __STORE_SPC(newPoint, newY, spc);
-            }
-            RETURN ( newPoint );
-        }
+	    __qCheckedNew(newPoint, sizeof(struct __Point));
+	    __InstPtr(newPoint)->o_class = self; __qSTORE(newPoint, self);
+	    __PointInstPtr(newPoint)->p_x = newX;
+	    __PointInstPtr(newPoint)->p_y = newY;
+	    if (! __bothSmallInteger(newX, newY)) {
+		spc = __qSpace(newPoint);
+		__STORE_SPC(newPoint, newX, spc);
+		__STORE_SPC(newPoint, newY, spc);
+	    }
+	    RETURN ( newPoint );
+	}
     }
 %}.
     ^ (self basicNew) x:newX y:newY
@@ -280,8 +280,8 @@
 
 x:newX
     "set the x coordinate to be the argument, aNumber.
-     This is destructive (modifies the receiver, not a copy) and 
-     should only be used if you know, that you are the exclusive owner 
+     This is destructive (modifies the receiver, not a copy) and
+     should only be used if you know, that you are the exclusive owner
      of the receiver."
 
     x := newX
@@ -289,8 +289,8 @@
 
 x:newX y:newY
     "set both the x and y coordinates.
-     This is destructive (modifies the receiver, not a copy) and 
-     should only be used if you know, that you are the exclusive owner 
+     This is destructive (modifies the receiver, not a copy) and
+     should only be used if you know, that you are the exclusive owner
      of the receiver."
 
     x := newX.
@@ -305,8 +305,8 @@
 
 y:newY
     "set the y coordinate to be the argument, aNumber.
-     This is destructive (modifies the receiver, not a copy) and 
-     should only be used if you know, that you are the exclusive owner 
+     This is destructive (modifies the receiver, not a copy) and
+     should only be used if you know, that you are the exclusive owner
      of the receiver."
 
     y := newY
@@ -342,11 +342,11 @@
 
     "notice the funny result if one coordinate has the same value ...
 
-     (3@4) < (4@4)    
-     (3@4) <= (4@4)    
-     (3@4) > (4@4) 
-     (4@4) >= (3@4)   
-     (4@4) > (3@4)   
+     (3@4) < (4@4)
+     (3@4) <= (4@4)
+     (3@4) > (4@4)
+     (4@4) >= (3@4)
+     (4@4) > (3@4)
     "
 
     "Modified: 7.5.1996 / 12:14:25 / cg"
@@ -450,17 +450,17 @@
 
 asFractionalLayout
     "return a LayoutOrigin from the receiver,
-     treating the receiver coordinates as fractional parts 
+     treating the receiver coordinates as fractional parts
      (i.e. relative to superview).
      Notice: in 10.5.x LayoutOrigin is not yet officially released."
 
     ^ LayoutOrigin fractionalFromPoint:self
 
     "
-     (0@0.5) asFractionalLayout 
-     (0@0.5) asLayout           
-     (0@10) asLayout             
-     (0@10) asOffsetLayout      
+     (0@0.5) asFractionalLayout
+     (0@0.5) asLayout
+     (0@10) asLayout
+     (0@10) asOffsetLayout
     "
 
 !
@@ -480,26 +480,26 @@
     ^ LayoutOrigin fromPoint:self
 
     "
-     (0@0.5) asFractionalLayout 
-     (0@0.5) asLayout           
-     (0@10) asLayout             
-     (0@10) asOffsetLayout      
+     (0@0.5) asFractionalLayout
+     (0@0.5) asLayout
+     (0@10) asLayout
+     (0@10) asOffsetLayout
     "
 
 !
 
 asOffsetLayout
     "return a LayoutOrigin from the receiver,
-     treating the receiver coordinates as absolute offsets. 
+     treating the receiver coordinates as absolute offsets.
      Notice: in 10.5.x LayoutOrigin is not yet released."
 
     ^ LayoutOrigin offsetFromPoint:self
 
     "
-     (0@0.5) asFractionalLayout 
-     (0@0.5) asLayout           
-     (0@10) asLayout             
-     (0@10) asOffsetLayout      
+     (0@0.5) asFractionalLayout
+     (0@0.5) asLayout
+     (0@10) asLayout
+     (0@10) asOffsetLayout
     "
 
 !
@@ -511,13 +511,13 @@
 !
 
 asRectangle
-    "return a zero-width rectangle consisting of origin 
+    "return a zero-width rectangle consisting of origin
      and corner being the receiver"
 
     ^ self corner:self
 
     "
-     (0@10) asRectangle             
+     (0@10) asRectangle
     "
 !
 
@@ -551,14 +551,14 @@
      The encoding is: (Point xValue yValue)"
 
     ^ Array
-	with:#Point 
-	with:x 
-	with:y 
+	with:#Point
+	with:x
+	with:y
 
 
     "
-     Point new fromLiteralArrayEncoding:#(Point 10 20) 
-     (10@20) literalArrayEncoding  
+     Point new fromLiteralArrayEncoding:#(Point 10 20)
+     (10@20) literalArrayEncoding
     "
 
     "Modified: 1.9.1995 / 02:18:29 / claus"
@@ -576,10 +576,10 @@
      consider the case, where a view has a preferred extent of 50@50
      and is to be positioned in its superview which has size 100@100.
      For absolute origin:
-	 (10@20) rectangleRelativeTo:(0@0 corner:100@100) preferred:(0@0 corner:50@50) 
+	 (10@20) rectangleRelativeTo:(0@0 corner:100@100) preferred:(0@0 corner:50@50)
 
      for relative origin:
-	 (0.5@0.5) rectangleRelativeTo:(0@0 corner:100@100) preferred:(0@0 corner:50@50) 
+	 (0.5@0.5) rectangleRelativeTo:(0@0 corner:100@100) preferred:(0@0 corner:50@50)
     "
 
     "Modified: / 27.5.1998 / 10:20:13 / cg"
@@ -590,21 +590,21 @@
 scaleBy:aScale
     "scale the receiver, by replacing coordinates by the product
      of the receiver's coordinates and the scale (a Point or Number).
-     This is destructive (modifies the receiver, not a copy) and 
-     should only be used if you know, that you are the exclusive owner 
+     This is destructive (modifies the receiver, not a copy) and
+     should only be used if you know, that you are the exclusive owner
      of the receiver."
 
     |scalePoint|
 
-    (aScale isMemberOf:Point) ifTrue:[  "type hint to stc"  
-        x := x * aScale x.
-        y := y * aScale y.
-        ^ self
+    (aScale isMemberOf:Point) ifTrue:[  "type hint to stc"
+	x := x * aScale x.
+	y := y * aScale y.
+	^ self
     ].
     aScale isNumber ifTrue:[
-        x := x * aScale.
-        y := y * aScale.
-        ^ self
+	x := x * aScale.
+	y := y * aScale.
+	^ self
     ].
 
     "this is the general (& clean) code ..."
@@ -617,21 +617,21 @@
 translateBy:anOffset
     "translate the receiver, by replacing coordinates by the sum
      of the receiver's coordinated and the scale (a Point or Number).
-     This is destructive (modifies the receiver, not a copy) and 
-     should only be used if you know, that you are the exclusive owner 
+     This is destructive (modifies the receiver, not a copy) and
+     should only be used if you know, that you are the exclusive owner
      of the receiver."
 
     |offsetPoint|
 
-    (anOffset isMemberOf:Point) ifTrue:[ "type hint to stc"   
-        x := x + anOffset x.
-        y := y + anOffset y.
-        ^ self
+    (anOffset isMemberOf:Point) ifTrue:[ "type hint to stc"
+	x := x + anOffset x.
+	y := y + anOffset y.
+	^ self
     ].
     anOffset isNumber ifTrue:[
-        x := x + anOffset.
-        y := y + anOffset.
-        ^ self
+	x := x + anOffset.
+	y := y + anOffset.
+	^ self
     ].
 
     "this is the general (& clean) code ..."
@@ -650,9 +650,9 @@
     ^ self + ((end - self) * amountDone).
 
     "
-     (10@10) interpolateTo:(20@20) at:0.5 
-     (10@10) interpolateTo:(20@20) at:0.3 
-     (0@0) interpolateTo:(0@20) at:0.5 
+     (10@10) interpolateTo:(20@20) at:0.5
+     (10@10) interpolateTo:(20@20) at:0.3
+     (0@0) interpolateTo:(0@20) at:0.5
     "
 ! !
 
@@ -669,7 +669,7 @@
      Return the receiver if its coordinates are already integral."
 
     (x isInteger and:[y isInteger]) ifTrue: [
-        ^ self
+	^ self
     ].
 
     ^ self class x:x ceiling y:y ceiling.
@@ -680,7 +680,7 @@
      Return the receiver if its coordinates are already integral."
 
     (x isInteger and:[y isInteger]) ifTrue: [
-        ^ self
+	^ self
     ].
 
     ^ self class x:(x floor) y:(y floor)
@@ -690,11 +690,11 @@
     "return the number of the quadrant containing the receiver.
      quadrants are named as follows:
 
-           ^    2  |  3
-           Y    ------
-                1  |  0
+	   ^    2  |  3
+	   Y    ------
+		1  |  0
 
-                X >
+		X >
 
      Q: what is to be returned if any coordinate is 0 ?
     "
@@ -702,17 +702,17 @@
     ^ 0@0 quadrantContaining:self
 
     "
-     (1@1) quadrant    
-     (-1@1) quadrant    
-     (-1@-1) quadrant 
-     (1@-1) quadrant   
-     (0@0) quadrant   
+     (1@1) quadrant
+     (-1@1) quadrant
+     (-1@-1) quadrant
+     (1@-1) quadrant
+     (0@0) quadrant
     "
 !
 
 quadrantContaining:aPoint
-    "return the number of the quadrant containing aPoint placing  
-     the receiver at the origin, where the quadrants are numbered as  
+    "return the number of the quadrant containing aPoint placing
+     the receiver at the origin, where the quadrants are numbered as
      follows:
 	   ^    2  |  3
 	   Y    ------
@@ -726,14 +726,14 @@
 	 aPoint y >= y ifTrue:[^ 3].
 	 ^ 0
      ].
-     aPoint y >= y ifTrue: [^ 2].     
+     aPoint y >= y ifTrue: [^ 2].
      ^ 1
 
      "
       (10 @ 10) quadrantContaining:(15 @ 15)
-      (10 @ 10) quadrantContaining:(5 @ 5)    
-      (10 @ 10) quadrantContaining:(5 @ 15)   
-      (10 @ 10) quadrantContaining:(15 @ 5)  
+      (10 @ 10) quadrantContaining:(5 @ 5)
+      (10 @ 10) quadrantContaining:(5 @ 15)
+      (10 @ 10) quadrantContaining:(15 @ 5)
      "
 !
 
@@ -742,7 +742,7 @@
      Return the receiver if its coordinates are already integral."
 
     (x isInteger and:[y isInteger]) ifTrue: [
-        ^ self
+	^ self
     ].
     ^ self class x:(x rounded) y:(y rounded)
 
@@ -764,7 +764,7 @@
      Return the receiver if its coordinates are already integral."
 
     (x isInteger and:[y isInteger]) ifTrue: [
-        ^ self
+	^ self
     ].
 
     ^ self class x:(x truncated) y:(y truncated)
@@ -772,8 +772,8 @@
 
 !Point methodsFor:'point functions'!
 
-crossProduct: aPoint 
-    "Return a number that is the cross product of the receiver and the 
+crossProduct: aPoint
+    "Return a number that is the cross product of the receiver and the
      argument, aPoint."
 
     ^ (x * aPoint y) - (y * aPoint x)
@@ -781,13 +781,13 @@
 
 !
 
-dist:aPoint 
+dist:aPoint
     "return the distance between aPoint and the receiver."
 
     ^ (aPoint - self) r
 !
 
-dotProduct:aPoint 
+dotProduct:aPoint
     "return a number that is the dot product of the receiver and
      the argument, aPoint.  That is, the two points are
      multiplied and the coordinates of the result summed."
@@ -796,11 +796,11 @@
 !
 
 fourNeighbors
-    ^ Array 
-        with: self + (1@0)
-        with: self + (0@1)
-        with: self + (-1@0)
-        with: self + (0@-1)
+    ^ Array
+	with: self + (1@0)
+	with: self + (0@1)
+	with: self + (-1@0)
+	with: self + (0@-1)
 !
 
 grid:gridPoint
@@ -824,9 +824,9 @@
     ^ newX @ newY
 !
 
-nearestIntegerPointOnLineFrom: point1 to: point2 
-    "return the closest integer point to the receiver on the line 
-     determined by (point1, point2)--much faster than the more 
+nearestIntegerPointOnLineFrom: point1 to: point2
+    "return the closest integer point to the receiver on the line
+     determined by (point1, point2)--much faster than the more
      accurate version if the receiver and arguments are integer points.
      This method was found in the Manchester goody library."
 
@@ -858,7 +858,7 @@
 	] ifFalse:[
 	    dX2 := dX * dX.
 	    dY2 := dY * dY.
-	    coeff := ((dX * (y - point1 y)) - 
+	    coeff := ((dX * (y - point1 y)) -
 		     ((x - point1 x) * dY)) / (dX2 + dY2).
 	    newX := x + (dY * coeff).
 	    newY := y - (dX * coeff).
@@ -872,8 +872,8 @@
       scale < 0 ifTrue: [point1] ifFalse: [intersect]]) rounded
 
     "
-     120@40 nearestIntegerPointOnLineFrom: 30@120 to: 100@120 
-     0@0 nearestIntegerPointOnLineFrom: 10@10 to: 100@100 
+     120@40 nearestIntegerPointOnLineFrom: 30@120 to: 100@120
+     0@0 nearestIntegerPointOnLineFrom: 10@10 to: 100@100
     "
 !
 
@@ -885,13 +885,13 @@
     ^ self / self r
 
     "
-     (10 @ 10) normalized   
-     (1 @ 1) normalized  
-     (10 @ 0) normalized    
-     (0 @ 10) normalized    
-     (-10 @ 0) normalized    
-     (0 @ -10) normalized    
-     (0 @ 0) normalized    
+     (10 @ 10) normalized
+     (1 @ 1) normalized
+     (10 @ 0) normalized
+     (0 @ 10) normalized
+     (-10 @ 0) normalized
+     (0 @ -10) normalized
+     (0 @ 0) normalized
     "
 !
 
@@ -903,7 +903,7 @@
 
 !Point methodsFor:'polar coordinates'!
 
-angle 
+angle
     "return the receiver's angle (in degrees) in a polar coordinate system.
      (i.e. the angle of a vector from 0@0 to the receiver).
     OBSOLETE ST/X interface; use theta for ST-80 compatibility."
@@ -913,9 +913,9 @@
     ^ self theta radiansToDegrees
 
     "
-     (1@1) angle    
-     (1@0) angle      
-     (2@1) angle   
+     (1@1) angle
+     (1@0) angle
+     (2@1) angle
     "
 
     "Modified: 2.4.1997 / 00:02:17 / cg"
@@ -931,8 +931,8 @@
     ^ self theta radiansToDegrees
 
     "
-     (1@1) degrees    
-     (2@1) degrees   
+     (1@1) degrees
+     (2@1) degrees
     "
 !
 
@@ -943,43 +943,43 @@
     ^ ((x*x) + (y*y)) sqrt
 
     "
-     (1@1) r 
-     (2@1) r  
-     (2@0) r 
-     (0@2) r 
-     (-2@-2) r 
-     (2@2) r  
+     (1@1) r
+     (2@1) r
+     (2@0) r
+     (0@2) r
+     (-2@-2) r
+     (2@2) r
     "
 !
 
-theta 
+theta
     "return the receiver's angle (in radians) in a polar coordinate system.
      (i.e. the angle of a vector from 0@0 to the receiver)"
 
     |theta t|
 
     x = 0 ifTrue:[
-        y >= 0 ifTrue:[
-            ^ Float pi * 0.5
-        ].
-        ^ Float pi * 1.5.
+	y >= 0 ifTrue:[
+	    ^ Float pi * 0.5
+	].
+	^ Float pi * 1.5.
     ].
 
     t := y asFloat / x asFloat.
     theta := t arcTan.
     x < 0 ifTrue:[
-        ^ theta + Float pi
+	^ theta + Float pi
     ].
     theta < 0 ifTrue:[
-        ^ theta + (Float pi * 2.0)
+	^ theta + (Float pi * 2.0)
     ].
     ^ theta.
     "
-     (1@1) theta    
-     (2@1) theta   
-     (-2@1) theta   
-     (-2@-1) theta   
-     (0@-1) theta   
+     (1@1) theta
+     (2@1) theta
+     (-2@1) theta
+     (-2@-1) theta
+     (0@-1) theta
     "
 
     "Modified: 2.4.1997 / 00:15:12 / cg"
@@ -1025,22 +1025,22 @@
 
 !Point methodsFor:'transformations'!
 
-* scale 
-    "Return a new Point that is the product of the 
+* scale
+    "Return a new Point that is the product of the
      receiver and scale (which is a Point or Number)."
 
     |scalePoint|
 
     "speedup for common cases ..."
 
-    (scale isMemberOf:Point) ifTrue:[    
-        ^ self class x:(x * scale x) y:(y * scale y)
+    (scale isMemberOf:Point) ifTrue:[
+	^ self class x:(x * scale x) y:(y * scale y)
     ].
     (scale isMemberOf:SmallInteger) ifTrue:[
-        ^ self class x:(x * scale) y:(y * scale)
+	^ self class x:(x * scale) y:(y * scale)
     ].
     scale isNumber ifTrue:[
-        ^ self class x:(x * scale) y:(y * scale)
+	^ self class x:(x * scale) y:(y * scale)
     ].
 
     "this is the general (& clean) code ..."
@@ -1051,23 +1051,23 @@
     "Modified: 25.1.1997 / 17:28:11 / cg"
 !
 
-+ translation 
-    "Return a new Point that is the sum of the 
++ translation
+    "Return a new Point that is the sum of the
      receiver and translation (which is a Point or Number)."
 
     |translationPoint|
 
     "speedup for common cases ..."
 
-    (translation isMemberOf:Point) ifTrue:[     
-        ^ self class x:(x + translation x) y:(y + translation y)
+    (translation isMemberOf:Point) ifTrue:[
+	^ self class x:(x + translation x) y:(y + translation y)
     ].
     (translation isMemberOf:SmallInteger) ifTrue:[
-        "/ same as below, but stc can do better here
-        ^ self class x:(x + translation) y:(y + translation)
+	"/ same as below, but stc can do better here
+	^ self class x:(x + translation) y:(y + translation)
     ].
     translation isNumber ifTrue:[
-        ^ self class x:(x + translation) y:(y + translation)
+	^ self class x:(x + translation) y:(y + translation)
     ].
 
     "this is the general (& clean) code ..."
@@ -1078,23 +1078,23 @@
     "Modified: 25.1.1997 / 17:27:46 / cg"
 !
 
-- translation 
-    "Return a new Point that is the difference of the 
+- translation
+    "Return a new Point that is the difference of the
      receiver and translation (which is a Point or Number)."
 
     |translationPoint|
 
     "speedup for common cases ..."
 
-    (translation isMemberOf:Point) ifTrue:[     
-        ^ self class x:(x - translation x) y:(y - translation y)
+    (translation isMemberOf:Point) ifTrue:[
+	^ self class x:(x - translation x) y:(y - translation y)
     ].
     (translation isMemberOf:SmallInteger) ifTrue:[
-        "/ same as below, but stc can do better here
-        ^ self class x:(x - translation) y:(y - translation)
+	"/ same as below, but stc can do better here
+	^ self class x:(x - translation) y:(y - translation)
     ].
     translation isNumber ifTrue:[
-        ^ self class x:(x - translation) y:(y - translation)
+	^ self class x:(x - translation) y:(y - translation)
     ].
 
     "this is the general (& clean) code ..."
@@ -1105,19 +1105,19 @@
     "Modified: 25.1.1997 / 17:27:46 / cg"
 !
 
-/ scale 
-    "Return a new Point that is the integer quotient of the 
+/ scale
+    "Return a new Point that is the integer quotient of the
      receiver and scale (which is a Point or Number)."
 
     |scalePoint|
 
     "speedup for common cases ..."
 
-    (scale isMemberOf:Point) ifTrue:[    
-        self class x:(x / scale x) y:(y / scale y)
+    (scale isMemberOf:Point) ifTrue:[
+	self class x:(x / scale x) y:(y / scale y)
     ].
     scale isNumber ifTrue:[
-        ^ self class x:(x / scale) y:(y / scale)
+	^ self class x:(x / scale) y:(y / scale)
     ].
 
     "this is the general (& clean) code ..."
@@ -1126,8 +1126,8 @@
     ^ self class x:(x / scalePoint x) y:(y / scalePoint y)
 !
 
-// scale 
-    "Return a new Point that is the quotient of the 
+// scale
+    "Return a new Point that is the quotient of the
      receiver and scale (which is a Point or Number)."
 
     |scalePoint|
@@ -1137,13 +1137,13 @@
 !
 
 negated
-    "return a new point with my coordinates negated 
+    "return a new point with my coordinates negated
      i.e. the receiver mirrored at the origin"
 
     ^ self class x:x negated y:y negated
 
     "
-        (1 @ 1) negated
+	(1 @ 1) negated
     "
 !
 
@@ -1157,7 +1157,7 @@
 rotateBy:angle about:center
     "Return a new point, generated by rotating the receiver
      counterClockWise by some angle in radians around the given center point.
-     Even though Point.theta is measured CW, 
+     Even though Point.theta is measured CW,
      this rotates with the more conventional CCW interpretateion of angle."
 
     |p r theta|
@@ -1166,23 +1166,23 @@
     r := p r.
     theta := angle asFloat - p theta.
     ^ self class x:(center x asFloat + (r * theta cos))
-                 y:(center y asFloat - (r * theta sin))
+		 y:(center y asFloat - (r * theta sin))
 
     "
-     (10@10) rotateBy:Float pi about:0@0  
-     (10@0) rotateBy:Float pi about:0@0  
+     (10@10) rotateBy:Float pi about:0@0
+     (10@0) rotateBy:Float pi about:0@0
     "
 !
 
 scaledBy:aScale
-    "return a new Point that is the product of the 
+    "return a new Point that is the product of the
      receiver and scale (which is a Point or Number)."
 
     ^ self * aScale
 !
 
 translatedBy:anOffset
-    "return a new Point that is the sum of the 
+    "return a new Point that is the sum of the
      receiver and scale (which is a Point or Number)."
 
     ^ self + anOffset
--- a/Rectangle.st	Fri Aug 26 01:12:20 2016 +0200
+++ b/Rectangle.st	Fri Aug 26 12:15:15 2016 +0200
@@ -49,34 +49,34 @@
 
     Instance variables:
 
-        left           <Number>        the left coordinate (i.e origin x)
-        top            <Number>        the top coordinate (i.e origin y)
-        width          <Number>        the width of the rectangle
-        height         <Number>        the height of the rectangle
+	left           <Number>        the left coordinate (i.e origin x)
+	top            <Number>        the top coordinate (i.e origin y)
+	width          <Number>        the width of the rectangle
+	height         <Number>        the height of the rectangle
 
-    I am not certain, if implementing Rectangle different was a good idea - 
+    I am not certain, if implementing Rectangle different was a good idea -
     subclasses may expect things to be different ...
     Therefore, this may change.
 
     [author:]
-        Claus Gittinger
+	Claus Gittinger
 
     [see also:]
-        Point Polygon Circle EllipticalArc Spline
-        LayoutOrigin LayoutFrame AlignmentOrigin Layout 
-        View GraphicsContext StrokingWrapper FillingWrapper
+	Point Polygon Circle EllipticalArc Spline
+	LayoutOrigin LayoutFrame AlignmentOrigin Layout
+	View GraphicsContext StrokingWrapper FillingWrapper
 "
 ! !
 
 !Rectangle class methodsFor:'instance creation'!
 
-center:centerPoint extent:extentPoint 
-    "return an instance of me whose center is centerPoint and width 
+center:centerPoint extent:extentPoint
+    "return an instance of me whose center is centerPoint and width
      by height is extentPoint."
 
-    ^ self 
-        origin:centerPoint - (extentPoint//2) 
-        extent:extentPoint
+    ^ self
+	origin:centerPoint - (extentPoint//2)
+	extent:extentPoint
 !
 
 decodeFromLiteralArray:anArray
@@ -92,7 +92,7 @@
     ^ self left:l top:t width:w height:h
 
     "
-     Rectangle decodeFromLiteralArray:#(Rectangle 100 200 300 500) 
+     Rectangle decodeFromLiteralArray:#(Rectangle 100 200 300 500)
     "
 
     "Created: / 28.1.1998 / 17:46:52 / cg"
@@ -104,11 +104,11 @@
     |topLeft bottomRight|
 
     topLeft := bottomRight := nil.
-    listOfPoints do:[:p | 
-        topLeft == nil
-            ifTrue: [topLeft := bottomRight := p]
-            ifFalse: [topLeft := topLeft min: p.
-                      bottomRight := bottomRight max: p]
+    listOfPoints do:[:p |
+	topLeft == nil
+	    ifTrue: [topLeft := bottomRight := p]
+	    ifFalse: [topLeft := topLeft min: p.
+		      bottomRight := bottomRight max: p]
     ].
     ^ topLeft corner: bottomRight
 
@@ -148,31 +148,31 @@
     int spc;
 
     if (__CanDoQuickNew(OHDR_SIZE + 4*sizeof(OBJ))) {   /* OBJECT ALLOCATION */
-        if (self == Rectangle) {
-            /*
-             * short cut - rectangles are created so often ...
-             */
-            __qCheckedAlignedNew(newRect, OHDR_SIZE + 4*sizeof(OBJ));
+	if (self == Rectangle) {
+	    /*
+	     * short cut - rectangles are created so often ...
+	     */
+	    __qCheckedNew(newRect, OHDR_SIZE + 4*sizeof(OBJ));
 
-            __InstPtr(newRect)->o_class = Rectangle;
-            __qSTORE(newRect, Rectangle);
+	    __InstPtr(newRect)->o_class = Rectangle;
+	    __qSTORE(newRect, Rectangle);
 
-            __InstPtr(newRect)->i_instvars[0] = left;
-            __InstPtr(newRect)->i_instvars[1] = top;
-            __InstPtr(newRect)->i_instvars[2] = w;
-            __InstPtr(newRect)->i_instvars[3] = h;
+	    __InstPtr(newRect)->i_instvars[0] = left;
+	    __InstPtr(newRect)->i_instvars[1] = top;
+	    __InstPtr(newRect)->i_instvars[2] = w;
+	    __InstPtr(newRect)->i_instvars[3] = h;
 
-            if (! (__bothSmallInteger(left, top) && 
-                   __bothSmallInteger(w, h))) {
-                spc = __qSpace(newRect);
-                __STORE_SPC(newRect, left, spc);
-                __STORE_SPC(newRect, top, spc);
-                __STORE_SPC(newRect, w, spc);
-                __STORE_SPC(newRect, h, spc);
-            }
+	    if (! (__bothSmallInteger(left, top) &&
+		   __bothSmallInteger(w, h))) {
+		spc = __qSpace(newRect);
+		__STORE_SPC(newRect, left, spc);
+		__STORE_SPC(newRect, top, spc);
+		__STORE_SPC(newRect, w, spc);
+		__STORE_SPC(newRect, h, spc);
+	    }
 
-            RETURN ( newRect );
-        }
+	    RETURN ( newRect );
+	}
     }
 %}.
     ^ (self basicNew) left:left top:top width:w height:h
@@ -185,14 +185,14 @@
     | topLeft bottomRight |
 
     topLeft := bottomRight := nil.
-    listOfRects do:[:r | 
-        topLeft == nil ifTrue: [
-            topLeft := r topLeft.
-            bottomRight := r bottomRight
-        ] ifFalse: [
-            topLeft := topLeft min: r topLeft.
-            bottomRight := bottomRight max: r bottomRight
-        ]
+    listOfRects do:[:r |
+	topLeft == nil ifTrue: [
+	    topLeft := r topLeft.
+	    bottomRight := r bottomRight
+	] ifFalse: [
+	    topLeft := topLeft min: r topLeft.
+	    bottomRight := bottomRight max: r bottomRight
+	]
     ].
     ^ topLeft corner: bottomRight
 !
@@ -212,34 +212,34 @@
     int spc;
 
     if (__CanDoQuickNew(OHDR_SIZE + 4*sizeof(OBJ))) {   /* OBJECT ALLOCATION */
-        /*
-         * short cut - rectangles are created so often ...
-         */
-        if (self == Rectangle) {
-            if (__isPoint(origin) && __isPoint(extent)) {
-                __qCheckedAlignedNew(newRect, OHDR_SIZE + 4*sizeof(OBJ));
-                __InstPtr(newRect)->o_class = Rectangle;
-                __qSTORE(newRect, Rectangle);
-                spc = __qSpace(newRect);
+	/*
+	 * short cut - rectangles are created so often ...
+	 */
+	if (self == Rectangle) {
+	    if (__isPoint(origin) && __isPoint(extent)) {
+		__qCheckedNew(newRect, OHDR_SIZE + 4*sizeof(OBJ));
+		__InstPtr(newRect)->o_class = Rectangle;
+		__qSTORE(newRect, Rectangle);
+		spc = __qSpace(newRect);
 
-                t = __PointInstPtr(origin)->p_x;
-                __InstPtr(newRect)->i_instvars[0] = t;
-                __STORE_SPC(newRect, t, spc);
+		t = __PointInstPtr(origin)->p_x;
+		__InstPtr(newRect)->i_instvars[0] = t;
+		__STORE_SPC(newRect, t, spc);
 
-                t = __PointInstPtr(origin)->p_y;
-                __InstPtr(newRect)->i_instvars[1] = t;
-                __STORE_SPC(newRect, t, spc);
+		t = __PointInstPtr(origin)->p_y;
+		__InstPtr(newRect)->i_instvars[1] = t;
+		__STORE_SPC(newRect, t, spc);
 
-                t = __PointInstPtr(extent)->p_x;
-                __InstPtr(newRect)->i_instvars[2] = t;
-                __STORE_SPC(newRect, t, spc);
+		t = __PointInstPtr(extent)->p_x;
+		__InstPtr(newRect)->i_instvars[2] = t;
+		__STORE_SPC(newRect, t, spc);
 
-                t = __PointInstPtr(extent)->p_y;
-                __InstPtr(newRect)->i_instvars[3] = t;
-                __STORE_SPC(newRect, t, spc);
-                RETURN ( newRect );
-            }
-        }
+		t = __PointInstPtr(extent)->p_y;
+		__InstPtr(newRect)->i_instvars[3] = t;
+		__STORE_SPC(newRect, t, spc);
+		RETURN ( newRect );
+	    }
+	}
     }
 %}.
     ^ (self basicNew) origin:origin extent:extent
@@ -254,13 +254,13 @@
     "Created: 8.5.1996 / 20:55:53 / cg"
 !
 
-vertex:vertex1Point vertex:vertex2Point 
+vertex:vertex1Point vertex:vertex2Point
     "create and return a new instance of the receiver,
      given two diagonally opposite vertices."
 
     ^ self
-        origin: (vertex1Point min: vertex2Point)
-        corner: (vertex1Point max: vertex2Point)
+	origin: (vertex1Point min: vertex2Point)
+	corner: (vertex1Point max: vertex2Point)
 
     "Created: 10.2.1997 / 12:14:32 / cg"
 ! !
@@ -274,7 +274,7 @@
     ^ Screen current rectangleFromUser
 
     "
-     Rectangle fromUser     
+     Rectangle fromUser
     "
 !
 
@@ -284,7 +284,7 @@
     ^ Screen current originFromUser:extent
 
     "
-     Rectangle originFromUser:50@50     
+     Rectangle originFromUser:50@50
     "
 ! !
 
@@ -329,7 +329,7 @@
     ^ self translateBy: (self amountToTranslateWithin: aRectangle)
 !
 
-withHeight:height 
+withHeight:height
     "Return a copy of me with a different height"
 
     |origin corner|
@@ -342,7 +342,7 @@
 !Rectangle methodsFor:'accessing'!
 
 area
-    "return the area 
+    "return the area
      - for screen Rectangles this is the number of pixels"
 
     ^ width * height
@@ -393,28 +393,28 @@
 
 %{  /* NOCONTEXT */
     if (self == @global(Rectangle)) {
-        OBJ _tleft = __INST(left);
-        OBJ _ttop = __INST(top);
-        OBJ _twidth = __INST(width);
-        OBJ _theight = __INST(height);
+	OBJ _tleft = __INST(left);
+	OBJ _ttop = __INST(top);
+	OBJ _twidth = __INST(width);
+	OBJ _theight = __INST(height);
 
-        if (__bothSmallInteger(_tleft, _ttop)
-         && __bothSmallInteger(_twidth, _theight)) {
-            if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
-                OBJ newPoint;
-                int spc;
-                int cX = __intVal(_tleft) + __intVal(_twidth);
-                int cY = __intVal(_ttop) + __intVal(_theight);
+	if (__bothSmallInteger(_tleft, _ttop)
+	 && __bothSmallInteger(_twidth, _theight)) {
+	    if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
+		OBJ newPoint;
+		int spc;
+		int cX = __intVal(_tleft) + __intVal(_twidth);
+		int cY = __intVal(_ttop) + __intVal(_theight);
 
-                if (__ISVALIDINTEGER(cX) && __ISVALIDINTEGER(cY)) {
-                    __qCheckedAlignedNew(newPoint, sizeof(struct __Point));
-                    __InstPtr(newPoint)->o_class = self; __qSTORE(newPoint, self);
-                    __PointInstPtr(newPoint)->p_x = __MKSMALLINT(cX);
-                    __PointInstPtr(newPoint)->p_y = __MKSMALLINT(cY);
-                    RETURN ( newPoint );
-                }
-            }
-        }
+		if (__ISVALIDINTEGER(cX) && __ISVALIDINTEGER(cY)) {
+		    __qCheckedNew(newPoint, sizeof(struct __Point));
+		    __InstPtr(newPoint)->o_class = self; __qSTORE(newPoint, self);
+		    __PointInstPtr(newPoint)->p_x = __MKSMALLINT(cX);
+		    __PointInstPtr(newPoint)->p_y = __MKSMALLINT(cY);
+		    RETURN ( newPoint );
+		}
+	    }
+	}
     }
 %}.
     ^ (left + width) @ (top + height)
@@ -433,23 +433,23 @@
 %{  /* NOCONTEXT */
 
     if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
-        if (self == @global(Rectangle)) {
-            OBJ newPoint;
-            int spc;
-            OBJ newX = __INST(width);
-            OBJ newY = __INST(height);
+	if (self == @global(Rectangle)) {
+	    OBJ newPoint;
+	    int spc;
+	    OBJ newX = __INST(width);
+	    OBJ newY = __INST(height);
 
-            __qCheckedAlignedNew(newPoint, sizeof(struct __Point));
-            __InstPtr(newPoint)->o_class = self; __qSTORE(newPoint, self);
-            __PointInstPtr(newPoint)->p_x = newX;
-            __PointInstPtr(newPoint)->p_y = newY;
-            if (! __bothSmallInteger(newX, newY)) {
-                spc = __qSpace(newPoint);
-                __STORE_SPC(newPoint, newX, spc);
-                __STORE_SPC(newPoint, newY, spc);
-            }
-            RETURN ( newPoint );
-        }
+	    __qCheckedNew(newPoint, sizeof(struct __Point));
+	    __InstPtr(newPoint)->o_class = self; __qSTORE(newPoint, self);
+	    __PointInstPtr(newPoint)->p_x = newX;
+	    __PointInstPtr(newPoint)->p_y = newY;
+	    if (! __bothSmallInteger(newX, newY)) {
+		spc = __qSpace(newPoint);
+		__STORE_SPC(newPoint, newX, spc);
+		__STORE_SPC(newPoint, newY, spc);
+	    }
+	    RETURN ( newPoint );
+	}
     }
 %}.
     ^ Point x:width y:height
@@ -490,8 +490,8 @@
     "set the left edge, adjust width - warning: destructive"
 
     left notNil ifTrue:[
-        "adjust width"
-        width := width + (left - aNumber).
+	"adjust width"
+	width := width + (left - aNumber).
     ].
     left := aNumber
 !
@@ -555,23 +555,23 @@
      * claus: I am no longer certain, if this primitive is worth the effort
      */
     if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
-        if (self == @global(Rectangle)) {
-            OBJ newPoint;
-            int spc;
-            OBJ newX = __INST(left);
-            OBJ newY = __INST(top);
+	if (self == @global(Rectangle)) {
+	    OBJ newPoint;
+	    int spc;
+	    OBJ newX = __INST(left);
+	    OBJ newY = __INST(top);
 
-            __qCheckedAlignedNew(newPoint, sizeof(struct __Point));
-            __InstPtr(newPoint)->o_class = self; __qSTORE(newPoint, self);
-            __PointInstPtr(newPoint)->p_x = newX;
-            __PointInstPtr(newPoint)->p_y = newY;
-            if (! __bothSmallInteger(newX, newY)) {
-                spc = __qSpace(newPoint);
-                __STORE_SPC(newPoint, newX, spc);
-                __STORE_SPC(newPoint, newY, spc);
-            }
-            RETURN ( newPoint );
-        }
+	    __qCheckedNew(newPoint, sizeof(struct __Point));
+	    __InstPtr(newPoint)->o_class = self; __qSTORE(newPoint, self);
+	    __PointInstPtr(newPoint)->p_x = newX;
+	    __PointInstPtr(newPoint)->p_y = newY;
+	    if (! __bothSmallInteger(newX, newY)) {
+		spc = __qSpace(newPoint);
+		__STORE_SPC(newPoint, newX, spc);
+		__STORE_SPC(newPoint, newY, spc);
+	    }
+	    RETURN ( newPoint );
+	}
     }
 %}.
     ^ Point x:left y:top
@@ -586,10 +586,10 @@
     newLeft := aPoint x.
     newTop := aPoint y.
     left notNil ifTrue:[
-        width := width + (left - newLeft).
+	width := width + (left - newLeft).
     ].
     top notNil ifTrue:[
-        height := height + (top - newTop).
+	height := height + (top - newTop).
     ].
     left := newLeft.
     top := newTop
@@ -614,7 +614,7 @@
 !
 
 origin:origin width:w height:h
-    "set both origin and extent; 
+    "set both origin and extent;
      the extent is given as individual width and height.
      warning: destructive"
 
@@ -680,8 +680,8 @@
     "set the top edge, adjust height - warning: destructive"
 
     top notNil ifTrue:[
-        "adjust height"
-        height := height + (top - aNumber).
+	"adjust height"
+	height := height + (top - aNumber).
     ].
     top := aNumber
 !
@@ -720,7 +720,7 @@
 !
 
 topRight:aPoint
-    "Set the top and right edges. 
+    "Set the top and right edges.
      The bottom left remains unchanged.
      warning: destructive"
 
@@ -735,16 +735,16 @@
 vertices
     "return the array containing my points as a closed polygon (for Polygon compatibility)"
 
-    ^ Array 
-        with:(self topLeft)
-        with:(self topRight)
-        with:(self bottomRight)
-        with:(self bottomLeft)
-        with:(self topLeft)
+    ^ Array
+	with:(self topLeft)
+	with:(self topRight)
+	with:(self bottomRight)
+	with:(self bottomLeft)
+	with:(self topLeft)
 
     "
-     (Rectangle origin:100@100 extent:20@30) vertices            
-     (Rectangle origin:100@100 extent:20@30) asPolygon vertices  
+     (Rectangle origin:100@100 extent:20@30) vertices
+     (Rectangle origin:100@100 extent:20@30) asPolygon vertices
     "
 
     "Modified: / 16-07-2010 / 16:59:16 / cg"
@@ -777,7 +777,7 @@
      * because rectangles are often compared in the graphics code,
      * handle the common case quickly
      */
-    if (__isNonNilObject(aRectangle) 
+    if (__isNonNilObject(aRectangle)
      && __qClass(aRectangle) == Rectangle) {
 	if ((__InstPtr(self)->i_instvars[0] == __InstPtr(aRectangle)->i_instvars[0])
 	 && (__InstPtr(self)->i_instvars[1] == __InstPtr(aRectangle)->i_instvars[1])
@@ -828,9 +828,9 @@
     ^ l
 
     "
-     (0.5@0.5 corner:0.75@0.75) asFractionalLayout 
-     (0.5@0.5 corner:0.75@0.75) asOffsetLayout      
-     (0.5@0.5 corner:0.75@0.75) asLayout        
+     (0.5@0.5 corner:0.75@0.75) asFractionalLayout
+     (0.5@0.5 corner:0.75@0.75) asOffsetLayout
+     (0.5@0.5 corner:0.75@0.75) asLayout
     "
 !
 
@@ -851,27 +851,27 @@
     and:[(r between:0.0 and:1.0)
     and:[(t between:0.0 and:1.0)
     and:[(b between:0.0 and:1.0)]]]) ifTrue:[
-        newLayout
-            leftFraction:l;
-            rightFraction:r;
-            topFraction:t;
-            bottomFraction:b.
+	newLayout
+	    leftFraction:l;
+	    rightFraction:r;
+	    topFraction:t;
+	    bottomFraction:b.
     ] ifFalse:[
-        newLayout
-            leftOffset:l;
-            rightFraction:0 offset:r;
-            topOffset:t;
-            bottomFraction:0 offset:b.
+	newLayout
+	    leftOffset:l;
+	    rightFraction:0 offset:r;
+	    topOffset:t;
+	    bottomFraction:0 offset:b.
     ].
     ^ newLayout
 
     "
-     (0.5@0.5 corner:0.75@0.75) asFractionalLayout  
-     (0.5@0.5 corner:0.75@0.75) asOffsetLayout       
-     (0.5@0.5 corner:0.75@0.75) asLayout              
-     (0@0 corner:1@1) asLayout                      
-     (0@0 corner:1@1) asFractionalLayout             
-     (0@0 corner:1@1) asOffsetLayout                 
+     (0.5@0.5 corner:0.75@0.75) asFractionalLayout
+     (0.5@0.5 corner:0.75@0.75) asOffsetLayout
+     (0.5@0.5 corner:0.75@0.75) asLayout
+     (0@0 corner:1@1) asLayout
+     (0@0 corner:1@1) asFractionalLayout
+     (0@0 corner:1@1) asOffsetLayout
     "
 
     "Modified: 5.6.1996 / 00:45:46 / cg"
@@ -893,13 +893,13 @@
     ^ newLayout
 
     "
-     (0.5@0.5 corner:0.75@0.75) asFractionalLayout 
-     (0.5@0.5 corner:0.75@0.75) asOffsetLayout      
-     (0.5@0.5 corner:0.75@0.75) asLayout        
+     (0.5@0.5 corner:0.75@0.75) asFractionalLayout
+     (0.5@0.5 corner:0.75@0.75) asOffsetLayout
+     (0.5@0.5 corner:0.75@0.75) asLayout
 
-     (10@10 corner:20@20) asFractionalLayout 
-     (10@10 corner:20@20) asOffsetLayout     
-     (10@10 corner:20@20) asLayout             
+     (10@10 corner:20@20) asFractionalLayout
+     (10@10 corner:20@20) asOffsetLayout
+     (10@10 corner:20@20) asLayout
     "
 
 !
@@ -915,10 +915,10 @@
 	    with:self topRight
 	    with:self corner
 	    with:self bottomLeft
-	    with:org 
+	    with:org
 
     "
-     (10@10 corner:100@100) asPointArray 
+     (10@10 corner:100@100) asPointArray
     "
 !
 
@@ -945,7 +945,7 @@
 
 
     "
-     Rectangle new fromLiteralArrayEncoding:#(Rectangle 100 200 300 500) 
+     Rectangle new fromLiteralArrayEncoding:#(Rectangle 100 200 300 500)
     "
 !
 
@@ -955,16 +955,16 @@
      The encoding is: (Rectangle orgX orgY cornX cornY)"
 
     ^ Array
-        with:#Rectangle
-        with:left
-        with:top
-        with:(left + width)
-        with:(top + height)
+	with:#Rectangle
+	with:left
+	with:top
+	with:(left + width)
+	with:(top + height)
 
 
     "
-     Rectangle new fromLiteralArrayEncoding:#(Rectangle 100 200 300 500) 
-     (100@200 corner:300@500) literalArrayEncoding 
+     Rectangle new fromLiteralArrayEncoding:#(Rectangle 100 200 300 500)
+     (100@200 corner:300@500) literalArrayEncoding
     "
 
     "Modified: 1.9.1995 / 02:16:54 / claus"
@@ -973,15 +973,15 @@
 
 rectangleRelativeTo:aRectangle preferred:prefRectHolder
     "compute a displayRectangle, treating the receiver like a
-     layoutFrame. 
+     layoutFrame.
      This allows rectangles to be used interchangable with Layouts."
 
     ^ (self asLayout) rectangleRelativeTo:aRectangle preferred:prefRectHolder
 
     "
-     (10@20 corner:20@30) rectangleRelativeTo:(0@0 corner:100@100) preferred:(0@0 corner:50@50) 
+     (10@20 corner:20@30) rectangleRelativeTo:(0@0 corner:100@100) preferred:(0@0 corner:50@50)
 
-     (0.5@0.5) rectangleRelativeTo:(0@0 corner:100@100) preferred:(0@0 corner:50@50) 
+     (0.5@0.5) rectangleRelativeTo:(0@0 corner:100@100) preferred:(0@0 corner:50@50)
     "
 
     "Modified: / 27.5.1998 / 10:20:20 / cg"
@@ -1056,8 +1056,8 @@
 
 scaleBy:scale
     "scale the receiver rectangle by scale (a Number or Point).
-     This is destructive (modifies the receiver, not a copy) and 
-     should only be used if you know, that you are the exclusive owner 
+     This is destructive (modifies the receiver, not a copy) and
+     should only be used if you know, that you are the exclusive owner
      of the receiver. (use scaledBy if in doubt)"
 
     |scalePoint sx sy|
@@ -1076,7 +1076,7 @@
     top := top * sy
 
     "
-     (Rectangle origin:10@10 corner:50@50) scaleBy:2 
+     (Rectangle origin:10@10 corner:50@50) scaleBy:2
     "
 
     "its destructive:"
@@ -1085,15 +1085,15 @@
 
      r1 := Rectangle origin:10@10 corner:50@50.
      r2 := r1 scaleBy:2.
-     r1 
+     r1
     "
 !
 
 translateBy:amount
-    "translate (i.e. move) the receiver rectangle 
+    "translate (i.e. move) the receiver rectangle
      by amount, a Point or Number.
-     This is destructive (modifies the receiver, not a copy) and 
-     should only be used if you know, that you are the exclusive owner 
+     This is destructive (modifies the receiver, not a copy) and
+     should only be used if you know, that you are the exclusive owner
      of the receiver. (use translatedBy if in doubt)"
 
     |amountPoint|
@@ -1117,14 +1117,14 @@
 
      r1 := Rectangle origin:10@10 corner:50@50.
      r2 := r1 translateBy:10.
-     r1 
+     r1
     "
 ! !
 
 !Rectangle methodsFor:'displaying'!
 
 displayFilledOn:aGC
-    "display a filled rectangle as represented by the receiver in 
+    "display a filled rectangle as represented by the receiver in
      the graphicsContext, aGC"
 
     aGC fillRectangleX:left y:top width:width height:height
@@ -1141,7 +1141,7 @@
 !
 
 displayStrokedOn:aGC
-    "display an unfilled rectangle as represented by the receiver in 
+    "display an unfilled rectangle as represented by the receiver in
      the graphicsContext, aGC"
 
     aGC displayRectangleX:left y:top width:width height:height
@@ -1220,83 +1220,83 @@
     OBJ slf = self;
     OBJ rct = aRectangle;
 
-    if (__isNonNilObject(rct) 
+    if (__isNonNilObject(rct)
      && __qClass(rct) == Rectangle) {
-        OBJ r_l, r_w, r_t, r_h, l, w, t, h;
-        INT r_ir, r_il, r_ib, r_it;
-        INT il, it, ir, ib, iw, ih;
+	OBJ r_l, r_w, r_t, r_h, l, w, t, h;
+	INT r_ir, r_il, r_ib, r_it;
+	INT il, it, ir, ib, iw, ih;
 
-        r_l = __OINST(rct, left);
-        l = __OINST(slf, left);
-        if (__bothSmallInteger(r_l, l)) {
+	r_l = __OINST(rct, left);
+	l = __OINST(slf, left);
+	if (__bothSmallInteger(r_l, l)) {
 #ifndef POSITIVE_ADDRESSES      /* tag in low-bit */
-            il = (INT)(l);
-            r_il = (INT)(r_l);
+	    il = (INT)(l);
+	    r_il = (INT)(r_l);
 #else
-            il = __intVal(l);
-            r_il = __intVal(r_l);
+	    il = __intVal(l);
+	    r_il = __intVal(r_l);
 #endif
-            if (il > r_il) { RETURN (false); }   /* left > aRectangle left */
+	    if (il > r_il) { RETURN (false); }   /* left > aRectangle left */
 
-            r_t = __OINST(rct, top);
-            t = __OINST(slf, top);
-            if (__bothSmallInteger(r_t, t)) {
+	    r_t = __OINST(rct, top);
+	    t = __OINST(slf, top);
+	    if (__bothSmallInteger(r_t, t)) {
 #ifndef POSITIVE_ADDRESSES      /* tag in low-bit */
-                it = (INT)(t);
-                r_it = (INT)(r_t);
+		it = (INT)(t);
+		r_it = (INT)(r_t);
 #else
-                it = __intVal(t);
-                r_it = __intVal(r_t);
+		it = __intVal(t);
+		r_it = __intVal(r_t);
 #endif
-                if (it > r_it) { RETURN (false); }   /* top > aRectangle top */
+		if (it > r_it) { RETURN (false); }   /* top > aRectangle top */
 
-                r_w = __OINST(rct, width);
-                w = __OINST(slf, width);
-                if (__bothSmallInteger(r_w, w)) {
+		r_w = __OINST(rct, width);
+		w = __OINST(slf, width);
+		if (__bothSmallInteger(r_w, w)) {
 #ifndef POSITIVE_ADDRESSES      /* tag in low-bit */
-                    ir = il + (INT)(w);
-                    r_ir = r_il + (INT)(r_w);
+		    ir = il + (INT)(w);
+		    r_ir = r_il + (INT)(r_w);
 #else
-                    ir = il + __intVal(w);
-                    r_ir = r_il + __intVal(r_w);
+		    ir = il + __intVal(w);
+		    r_ir = r_il + __intVal(r_w);
 #endif
-                    if (ir < r_ir) { RETURN (false); }   /* (left + width) < aRectangle right */
+		    if (ir < r_ir) { RETURN (false); }   /* (left + width) < aRectangle right */
 
-                    r_h = __OINST(rct, height);
-                    h = __OINST(slf, height);
-                    if (__bothSmallInteger(r_h, h)) {
+		    r_h = __OINST(rct, height);
+		    h = __OINST(slf, height);
+		    if (__bothSmallInteger(r_h, h)) {
 #ifndef POSITIVE_ADDRESSES      /* tag in low-bit */
-                        ib = it + (INT)(h);
-                        r_ib = r_it + (INT)(r_h);
+			ib = it + (INT)(h);
+			r_ib = r_it + (INT)(r_h);
 #else
-                        ib = it + __intVal(h);
-                        r_ib = r_it + __intVal(r_h);
+			ib = it + __intVal(h);
+			r_ib = r_it + __intVal(r_h);
 #endif
-                        if (ib < r_ib) { RETURN (false); }   /* (top + height) < aRectangle bottom */
-                        RETURN (true);
-                    }
-                }
-            }
-        }
+			if (ib < r_ib) { RETURN (false); }   /* (top + height) < aRectangle bottom */
+			RETURN (true);
+		    }
+		}
+	    }
+	}
     }
 %}.
     (left <= aRectangle left) ifTrue:[
       ((left + width) >= aRectangle right) ifTrue:[
-        (top <= aRectangle top) ifTrue:[
-          ((top + height) >= aRectangle bottom) ifTrue:[
-            ^ true
-          ]
-        ]
+	(top <= aRectangle top) ifTrue:[
+	  ((top + height) >= aRectangle bottom) ifTrue:[
+	    ^ true
+	  ]
+	]
       ]
     ].
     ^ false
 
     "
-     (0@0 corner:100@100) contains:(10@10 corner:90@90) 
-     (0@0 corner:100@100) contains:(10@10 corner:100@100)  
-     (0@0 corner:100@100) contains:(10@10 corner:110@100) 
-     (0@0 corner:100@100) contains:(10@10 corner:100@110) 
-     (10@10 corner:100@100) contains:(0@10 corner:100@100) 
+     (0@0 corner:100@100) contains:(10@10 corner:90@90)
+     (0@0 corner:100@100) contains:(10@10 corner:100@100)
+     (0@0 corner:100@100) contains:(10@10 corner:110@100)
+     (0@0 corner:100@100) contains:(10@10 corner:100@110)
+     (10@10 corner:100@100) contains:(0@10 corner:100@100)
     "
 !
 
@@ -1331,10 +1331,10 @@
     "Return an array of corner points"
 
     ^ Array
-        with: self topLeft
-        with: self bottomLeft
-        with: self bottomRight
-        with: self topRight
+	with: self topLeft
+	with: self bottomLeft
+	with: self bottomRight
+	with: self topRight
 
 
 !
@@ -1347,8 +1347,8 @@
     ^ (self topLeft corner:(self bottomRight - (1@1))) corners
 
     "
-     (10@10 corner:100@100) corners   
-     (10@10 corner:100@100) innerCorners 
+     (10@10 corner:100@100) corners
+     (10@10 corner:100@100) innerCorners
     "
 !
 
@@ -1367,67 +1367,67 @@
     OBJ slf = self;
     OBJ rct = aRectangle;
 
-    if (__isNonNilObject(rct) 
+    if (__isNonNilObject(rct)
      && __qClass(rct) == Rectangle) {
-        OBJ r_l, r_w, r_t, r_h, l, w, t, h;
-        INT r_ir, r_il, r_ib, r_it;
-        INT il, it, ir, ib, iw, ih;
+	OBJ r_l, r_w, r_t, r_h, l, w, t, h;
+	INT r_ir, r_il, r_ib, r_it;
+	INT il, it, ir, ib, iw, ih;
 
-        r_l = __OINST(rct, left);
-        r_w = __OINST(rct, width);
+	r_l = __OINST(rct, left);
+	r_w = __OINST(rct, width);
 
-        if (__bothSmallInteger(r_l, r_w)) {
-            r_t = __OINST(rct, top);
-            r_h = __OINST(rct, height);
+	if (__bothSmallInteger(r_l, r_w)) {
+	    r_t = __OINST(rct, top);
+	    r_h = __OINST(rct, height);
 
-            l = __OINST(slf, left);
-            w = __OINST(slf, width);
+	    l = __OINST(slf, left);
+	    w = __OINST(slf, width);
 
-            if (__bothSmallInteger(l, w)) {
-                t = __OINST(slf, top);
-                h = __OINST(slf, height);
+	    if (__bothSmallInteger(l, w)) {
+		t = __OINST(slf, top);
+		h = __OINST(slf, height);
 
 #ifndef POSITIVE_ADDRESSES      /* tag in low-bit */
-                r_il = (INT)(r_l);
-                r_ir = r_il + (INT)(r_w) - 1;
-                il = (INT)(l);
-                if (r_ir < il) { RETURN (false); }
-                ir = il + (INT)(w) - 1;
-                if (r_il > ir) { RETURN (false); }
+		r_il = (INT)(r_l);
+		r_ir = r_il + (INT)(r_w) - 1;
+		il = (INT)(l);
+		if (r_ir < il) { RETURN (false); }
+		ir = il + (INT)(w) - 1;
+		if (r_il > ir) { RETURN (false); }
 #else                           /* tag in hi-bit */
-                r_il = __intVal(r_l);
-                r_ir = r_il + __intVal(r_w);        /* aRectangle right */
-                il = __intVal(l);
-                if (r_ir < il) { RETURN (false); }  /* (aRectangle right) < left */
+		r_il = __intVal(r_l);
+		r_ir = r_il + __intVal(r_w);        /* aRectangle right */
+		il = __intVal(l);
+		if (r_ir < il) { RETURN (false); }  /* (aRectangle right) < left */
 
-                ir = il + __intVal(w);
-                if (r_il > ir) { RETURN (false); }   /* (aRectangle left) > r */
+		ir = il + __intVal(w);
+		if (r_il > ir) { RETURN (false); }   /* (aRectangle left) > r */
 #endif
 
-                if (__bothSmallInteger(r_t, r_h)) {
-                    if (__bothSmallInteger(t, h)) {
+		if (__bothSmallInteger(r_t, r_h)) {
+		    if (__bothSmallInteger(t, h)) {
 #ifndef POSITIVE_ADDRESSES
-                        r_it = (INT)(r_t);
-                        r_ib = r_it + (INT)(r_h) - 1; /* aRectangle bottom */
-                        it = (INT)(t);
-                        if (r_ib < it) { RETURN (false); } /* (aRectangle bottom) < top */
+			r_it = (INT)(r_t);
+			r_ib = r_it + (INT)(r_h) - 1; /* aRectangle bottom */
+			it = (INT)(t);
+			if (r_ib < it) { RETURN (false); } /* (aRectangle bottom) < top */
 
-                        ib = it + (INT)(h) - 1;
-                        if (r_it > ib) { RETURN (false); } /* (aRectangle top) > b */
+			ib = it + (INT)(h) - 1;
+			if (r_it > ib) { RETURN (false); } /* (aRectangle top) > b */
 #else
-                        r_it = __intVal(r_t);
-                        r_ib = r_it + __intVal(r_h); /* aRectangle bottom */
-                        it = __intVal(t);
-                        if (r_ib < it) { RETURN (false); } /* (aRectangle bottom) < top */
+			r_it = __intVal(r_t);
+			r_ib = r_it + __intVal(r_h); /* aRectangle bottom */
+			it = __intVal(t);
+			if (r_ib < it) { RETURN (false); } /* (aRectangle bottom) < top */
 
-                        ib = it + __intVal(h);
-                        if (r_it > ib) { RETURN (false); } /* (aRectangle top) > b */
+			ib = it + __intVal(h);
+			if (r_it > ib) { RETURN (false); } /* (aRectangle top) > b */
 #endif
-                        RETURN (true);
-                    }
-                }
-            }
-        }
+			RETURN (true);
+		    }
+		}
+	    }
+	}
     }
 %}.
     (aRectangle right)  < left ifTrue:[^ false].
@@ -1440,16 +1440,16 @@
 !
 
 isContainedIn:aRectangle
-    "return true, if the receiver is fully contained within 
+    "return true, if the receiver is fully contained within
      the argument, aRectangle"
 
     (aRectangle left <= left) ifTrue:[
       (aRectangle right >= (left + width)) ifTrue:[
-        (aRectangle top <= top) ifTrue:[
-          (aRectangle bottom >= (top + height)) ifTrue:[
-            ^ true
-          ]
-        ]
+	(aRectangle top <= top) ifTrue:[
+	  (aRectangle bottom >= (top + height)) ifTrue:[
+	    ^ true
+	  ]
+	]
       ]
     ].
     ^ false
@@ -1473,19 +1473,19 @@
     |amountPoint|
 
     (aPoint isMemberOf:SmallInteger) ifTrue:[
-        "/ this is an stc optimization
-        ^ Rectangle 
-            left:(left + aPoint)
-            top:(top + aPoint)
-            width:width
-            height:height
+	"/ this is an stc optimization
+	^ Rectangle
+	    left:(left + aPoint)
+	    top:(top + aPoint)
+	    width:width
+	    height:height
     ].
 
     amountPoint := aPoint asPoint.
     ^ Rectangle left:(left + amountPoint x)
-                 top:(top + amountPoint y)
-               width:width
-              height:height
+		 top:(top + amountPoint y)
+	       width:width
+	      height:height
 
     "Modified: 25.1.1997 / 17:29:53 / cg"
 !
@@ -1497,26 +1497,26 @@
     |amountPoint|
 
     (aPoint isMemberOf:SmallInteger) ifTrue:[
-        "/ this is an stc optimization
-        ^ Rectangle 
-            left:(left - aPoint)
-            top:(top - aPoint)
-            width:width
-            height:height
+	"/ this is an stc optimization
+	^ Rectangle
+	    left:(left - aPoint)
+	    top:(top - aPoint)
+	    width:width
+	    height:height
     ].
 
     amountPoint := aPoint asPoint.
     ^ Rectangle left:(left - amountPoint x)
-                 top:(top - amountPoint y)
-               width:width
-              height:height
+		 top:(top - amountPoint y)
+	       width:width
+	      height:height
 
     "Modified: 25.1.1997 / 17:29:53 / cg"
     "Created: 25.1.1997 / 17:30:21 / cg"
 !
 
 areasOutside: aRectangle
-    "Answer an Array of Rectangles comprising the parts of the receiver not 
+    "Answer an Array of Rectangles comprising the parts of the receiver not
     intersecting aRectangle."
 
     | areas yOrigin yCorner origin corner|
@@ -1526,19 +1526,19 @@
 
     "Make sure the intersection is non-empty"
     (origin <= aRectangle corner and: [aRectangle origin <= corner])
-            ifFalse: [^ Array with: self].
+	    ifFalse: [^ Array with: self].
     areas := OrderedCollection new.
     aRectangle origin y > origin y
-            ifTrue: [areas addLast: (origin corner: corner x @ (yOrigin := aRectangle origin y))]
-            ifFalse: [yOrigin := origin y].
+	    ifTrue: [areas addLast: (origin corner: corner x @ (yOrigin := aRectangle origin y))]
+	    ifFalse: [yOrigin := origin y].
     aRectangle corner y < corner y
-            ifTrue: [areas addLast: (origin x @ (yCorner := aRectangle corner y) corner: corner)]
-            ifFalse: [yCorner := corner y].
-    aRectangle origin x > origin x 
-            ifTrue: [areas addLast: (origin x @ yOrigin corner: aRectangle origin x @ yCorner)].
-    aRectangle corner x < corner x 
-            ifTrue: [areas addLast: (aRectangle corner x @ yOrigin corner: corner x @ yCorner)].
-    ^areas    
+	    ifTrue: [areas addLast: (origin x @ (yCorner := aRectangle corner y) corner: corner)]
+	    ifFalse: [yCorner := corner y].
+    aRectangle origin x > origin x
+	    ifTrue: [areas addLast: (origin x @ yOrigin corner: aRectangle origin x @ yCorner)].
+    aRectangle corner x < corner x
+	    ifTrue: [areas addLast: (aRectangle corner x @ yOrigin corner: corner x @ yCorner)].
+    ^areas
 
     "/ cg: the old code below was wrong ...
 
@@ -1549,13 +1549,13 @@
 "/    |
 "/    |areasOutside: aRectangle
 "/    | most complicated of the Rectangle primitives
-"/    | The basic methodology is to first determine that there is an 
+"/    | The basic methodology is to first determine that there is an
 "/    | intersection by finding the overlapping rectangle.  From the
 "/    | overlapping rectangle, first determine if it runs along an edge.
 "/    | If it doesn't, extend the rectangle up to the top edge and add
 "/    | the new rectangle to the collection and start the rest of the
 "/    | process.  If the left edge does not touch the left edge of self,
-"/    | extend it to the edge saving the new rectangle.  Then do the 
+"/    | extend it to the edge saving the new rectangle.  Then do the
 "/    | same to the right edge.  Then check top and bottom edges.  Most
 "/    | of the time only 2 or 3 rectangles get formed, occasionally 4.
 "/    | It should be possible to never get more than 3 but requires more
@@ -1569,7 +1569,7 @@
 "/                                "the collect collection gathers Rectangles"
 "/    collect := OrderedCollection new: 4.
 "/                                "is it floating or on the edge?"
-"/    (((((iRect top) ~= self top) 
+"/    (((((iRect top) ~= self top)
 "/         and: [ (iRect bottom) ~= self bottom ])
 "/         and: [ (iRect left) ~= self left ])
 "/         and: [ (iRect right) ~= self right ] )
@@ -1602,12 +1602,12 @@
 "/    ^collect
 !
 
-encompass:aPoint 
+encompass:aPoint
     "return a Rectangle that contains both the receiver and aPoint."
 
-    ^ Rectangle 
-        origin: (self origin min: aPoint)
-        corner: (self corner max: aPoint)
+    ^ Rectangle
+	origin: (self origin min: aPoint)
+	corner: (self corner max: aPoint)
 
 !
 
@@ -1620,10 +1620,10 @@
     "
      |r|
      r := Rectangle origin:10@10 corner:100@100.
-     r expandedBy:5.   
-     r expandedBy:(5 @ 0).  
-     r expandedBy:(10 @ 10).  
-     r expandedBy:( 10@10 corner:20@20 )  
+     r expandedBy:5.
+     r expandedBy:(5 @ 0).
+     r expandedBy:(10 @ 10).
+     r expandedBy:( 10@10 corner:20@20 )
     "
 !
 
@@ -1666,7 +1666,7 @@
 !
 
 insetOriginBy:originDelta cornerBy:cornerDelta
-    "return a new rectangle which is inset by originDelta 
+    "return a new rectangle which is inset by originDelta
      and cornerDelta; both may be instances of Point or Number"
 
     ^ Rectangle
@@ -1675,9 +1675,9 @@
     "
      |r|
      r := Rectangle origin:10@10 corner:100@100.
-     r insetOriginBy:5 cornerBy:10. 
+     r insetOriginBy:5 cornerBy:10.
      r insetOriginBy:10@5 cornerBy:10.
-     r insetOriginBy:10 cornerBy:10@5. 
+     r insetOriginBy:10 cornerBy:10@5.
      r insetOriginBy:10@10 cornerBy:20@20.
     "
 !
@@ -1688,9 +1688,9 @@
      the rectangles must intersect for a valid return"
 
     ^ Rectangle left:(left max:(aRectangle left))
-               right:((left + width) min:(aRectangle right))
-                 top:(top max:(aRectangle top))
-              bottom:((top + height) min:(aRectangle bottom))
+	       right:((left + width) min:(aRectangle right))
+		 top:(top max:(aRectangle top))
+	      bottom:((top + height) min:(aRectangle bottom))
 
     "
      |r1 r2|
@@ -1702,20 +1702,20 @@
 !
 
 merge:aRectangle
-    "return a new rectangle covering both the receiver 
+    "return a new rectangle covering both the receiver
      and the argument, aRectangle"
 
     ^ Rectangle left:(left min:(aRectangle left))
-               right:((left + width) max:(aRectangle right))
-                 top:(top min:(aRectangle top))
-              bottom:((top + height) max:(aRectangle bottom))
+	       right:((left + width) max:(aRectangle right))
+		 top:(top min:(aRectangle top))
+	      bottom:((top + height) max:(aRectangle bottom))
 
     "
      (Rectangle origin:10@10 corner:100@100)
-         merge:(Rectangle origin:20@20 corner:110@110)
+	 merge:(Rectangle origin:20@20 corner:110@110)
 
      (Rectangle origin:10@10 corner:100@100)
-         merge:(Rectangle origin:20@20 corner:100@100)
+	 merge:(Rectangle origin:20@20 corner:100@100)
     "
 !
 
@@ -1725,9 +1725,9 @@
     ^ self areasOutside:aRectangle
 !
 
-quickMerge: aRectangle 
+quickMerge: aRectangle
     "return the receiver if it encloses the given rectangle,
-     or the merge of the two rectangles if it doesn't. 
+     or the merge of the two rectangles if it doesn't.
      This method is an optimized version of merge: to reduce extra rectangle creations."
 
     | useRcvr rLeft rTop rRight rBottom minX maxX minY maxY |
@@ -1749,27 +1749,27 @@
     rBottom > maxY ifTrue: [useRcvr := false. maxY := rBottom].
 
     useRcvr ifTrue: [
-        ^ self
+	^ self
     ].
 
     minX = rLeft ifTrue:[
-        maxX = rRight ifTrue:[
-            minY = rTop ifTrue:[
-                maxY = rBottom ifTrue:[
-                    ^ aRectangle
-                ].
-            ].
-        ].
+	maxX = rRight ifTrue:[
+	    minY = rTop ifTrue:[
+		maxY = rBottom ifTrue:[
+		    ^ aRectangle
+		].
+	    ].
+	].
     ].
 
     ^ Rectangle left:minX top:minY right:maxX bottom:maxY.
 
     "
-     (Rectangle origin:10@10 corner:100@100)  
-         quickMerge:(Rectangle origin:20@20 corner:110@110)   
+     (Rectangle origin:10@10 corner:100@100)
+	 quickMerge:(Rectangle origin:20@20 corner:110@110)
 
      (Rectangle origin:10@10 corner:100@100)
-         quickMerge:(Rectangle origin:20@20 corner:100@100)
+	 quickMerge:(Rectangle origin:20@20 corner:100@100)
     "
 !
 
@@ -1780,22 +1780,22 @@
     |scalePoint sx sy|
 
     (scale isMemberOf:SmallInteger) ifTrue:[
-        "/ this is an stc optimization
-        ^ Rectangle left:left * scale
-                     top:top * scale
-                   width:width * scale
-                  height:height * scale
+	"/ this is an stc optimization
+	^ Rectangle left:left * scale
+		     top:top * scale
+		   width:width * scale
+		  height:height * scale
     ].
 
     scalePoint := scale asPoint.
     sx := scalePoint x.
     sy := scalePoint y.
     ^ Rectangle left:left * sx
-                 top:top * sy
-               width:width * sx
-              height:height * sy
+		 top:top * sy
+	       width:width * sx
+	      height:height * sy
     "
-     (Rectangle origin:10@10 corner:50@50) scaledBy:2   
+     (Rectangle origin:10@10 corner:50@50) scaledBy:2
     "
 
     "it is NOT destructive:"
@@ -1803,19 +1803,19 @@
      |r1 r2|
 
      r1 := Rectangle origin:10@10 corner:50@50.
-     r2 := r1 scaledBy:2.    
-     r1  
+     r2 := r1 scaledBy:2.
+     r1
     "
 !
 
-scaledBy:scale translatedBy:translation 
+scaledBy:scale translatedBy:translation
     "return a new rectangle which is translated (i.e. moved)
      by translation, aPoint or Number and scaled by scale, aPoint or number."
 
     |x y w h translationPoint scalePoint sx sy|
 
     (translation isNil and:[scale isNil]) ifTrue:[
-        ^ self.
+	^ self.
     ].
 
     x := left.
@@ -1824,38 +1824,38 @@
     h := height.
 
     scale notNil ifTrue:[
-        (scale isMemberOf:SmallInteger) ifTrue:[
-            "/ this is an stc optimization
-            x := x * scale.
-            y := y * scale.
-            w := w * scale.
-            h := h * scale.
-        ] ifFalse:[
-            scalePoint := scale asPoint.
-            sx := scalePoint x.
-            sy := scalePoint y.
-            x := x * sx.
-            y := y * sy.
-            w := w * sx.
-            h := h * sy.
-        ].
+	(scale isMemberOf:SmallInteger) ifTrue:[
+	    "/ this is an stc optimization
+	    x := x * scale.
+	    y := y * scale.
+	    w := w * scale.
+	    h := h * scale.
+	] ifFalse:[
+	    scalePoint := scale asPoint.
+	    sx := scalePoint x.
+	    sy := scalePoint y.
+	    x := x * sx.
+	    y := y * sy.
+	    w := w * sx.
+	    h := h * sy.
+	].
     ].
     translation notNil ifTrue:[
-        (translation isMemberOf:SmallInteger) ifTrue:[
-            "/ this is an stc optimization
-            x := x + translation.
-            y := y + translation.
-        ] ifFalse:[
-            translationPoint := translation asPoint.
-            x := x + translationPoint x.
-            y := y + translationPoint y.
-        ].
+	(translation isMemberOf:SmallInteger) ifTrue:[
+	    "/ this is an stc optimization
+	    x := x + translation.
+	    y := y + translation.
+	] ifFalse:[
+	    translationPoint := translation asPoint.
+	    x := x + translationPoint x.
+	    y := y + translationPoint y.
+	].
     ].
 
     ^ Rectangle left:x top:y width:w height:h.
 
     "
-     (Rectangle origin:10@10 corner:50@50) scaledBy:2 translatedBy:10 
+     (Rectangle origin:10@10 corner:50@50) scaledBy:2 translatedBy:10
     "
 !
 
@@ -1866,19 +1866,19 @@
     |amountPoint|
 
     (amount isMemberOf:SmallInteger) ifTrue:[
-        "/ this is an stc optimization
-        ^ Rectangle 
-            left:(left + amount)
-            top:(top + amount)
-            width:width
-            height:height
+	"/ this is an stc optimization
+	^ Rectangle
+	    left:(left + amount)
+	    top:(top + amount)
+	    width:width
+	    height:height
     ].
 
     amountPoint := amount asPoint.
-    ^ Rectangle left:(left + amountPoint x) 
-                 top:(top + amountPoint y)
-               width:width
-              height:height
+    ^ Rectangle left:(left + amountPoint x)
+		 top:(top + amountPoint y)
+	       width:width
+	      height:height
     "
      (Rectangle origin:10@10 corner:50@50) translatedBy:10
     "
@@ -1889,7 +1889,7 @@
 
      r1 := Rectangle origin:10@10 corner:50@50.
      r2 := r1 translatedBy:10.
-     r1 
+     r1
     "
 ! !
 
@@ -1932,33 +1932,33 @@
     "return a copy of the receiver with rounded coordinates.
      Return the receiver if its coordinates are already integral."
 
-    (left isInteger 
-    and:[top isInteger 
-    and:[width isInteger 
+    (left isInteger
+    and:[top isInteger
+    and:[width isInteger
     and:[height isInteger]]])
-        ifTrue: [^ self].
+	ifTrue: [^ self].
 
-    ^ Rectangle left:(left rounded) 
-                 top:(top rounded)
-               width:(width rounded) 
-              height:(height rounded)
+    ^ Rectangle left:(left rounded)
+		 top:(top rounded)
+	       width:(width rounded)
+	      height:(height rounded)
 !
 
 truncated
     "return a Rectangle whose origin and corner have any fractional parts removed.
      Return the receiver if its coordinates are already integral."
 
-    (left isInteger 
-    and:[top isInteger 
-    and:[width isInteger 
+    (left isInteger
+    and:[top isInteger
+    and:[width isInteger
     and:[height isInteger]]])
-        ifTrue: [^ self].
+	ifTrue: [^ self].
 
-    ^ Rectangle 
-        left:left truncated
-        top:top truncated
-        width:width truncated
-        height:height truncated.
+    ^ Rectangle
+	left:left truncated
+	top:top truncated
+	width:width truncated
+	height:height truncated.
 ! !
 
 !Rectangle class methodsFor:'documentation'!