Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 01 Feb 2017 22:17:58 +0000
branchjv
changeset 7855 46203abe7d57
parent 7854 295325696e0d (current diff)
parent 7828 92c02d941b76 (diff)
child 7856 7c52e7a9a087
Merge
Depth32Image.st
DeviceGraphicsContext.st
GraphicsContext.st
GraphicsMedium.st
Image.st
Make.proto
Make.spec
SimpleView.st
TranslucentColor.st
WindowSensor.st
XftFontDescription.st
abbrev.stc
bc.mak
extensions.st
libInit.cc
stx_libview.st
--- a/.hgtags	Wed Feb 01 21:42:41 2017 +0000
+++ b/.hgtags	Wed Feb 01 22:17:58 2017 +0000
@@ -12,6 +12,7 @@
 1a378821a380aacc4266bafcd478cd09cfd0fda4 rel5_1_4
 1ed049b57dc0d21a7efebc3cc87dc6b37a5208c2 expecco_1_7_0b1
 1ed049b57dc0d21a7efebc3cc87dc6b37a5208c2 expecco_1_7_0b2
+204ddab3ac425e1a1a8f257b3d27216623c586de expecco_ALM_1_10_0
 21319eb4135fdc2573a000047bca32ac7d99ff15 expecco_2_0_0
 21319eb4135fdc2573a000047bca32ac7d99ff15 expecco_2_0_0_0
 28bccabea00a97d561d12f6fcb53293d71521678 expecco_2_5_1
@@ -32,6 +33,7 @@
 54bc091ff809f42587cef04385614459b2314536 rel5_2_2
 56b1620d8db582ff666fab545823666b334b1cac rel2_10_8_6_last2
 58448da4dcf2883d0cc8039219ddc54c9b018453 expeccoNET_1_8_0_0
+5931d9c5714830d912f75c603b1ef9afb986647a expecco_2_11_0
 5afcace584e4cf94003dc3745674fe4870dda11e rel5_2_8
 5d89b40aae34cc4ad6997b262ce9d5c9f23e62db expecco_2_7_0
 5d89b40aae34cc4ad6997b262ce9d5c9f23e62db expecco_2_7_0_49
@@ -72,7 +74,6 @@
 c3c7f362b4c35e2b58e987c9822e82a41c69c57f expecco_1_9_1_1
 c3fba5c459930feda0311527e36275065f5f8f3c expecco_2_6_0rc1
 ccae8e4abae1a5c79c82c5846c3a38eb2dd4e29b expecco_2_10_0
-ccae8e4abae1a5c79c82c5846c3a38eb2dd4e29b expecco_2_11_0
 dc5f5e9764d37107a45809b8e156bfbd64fc205e expecco_1_7_0b3
 e35961f7892ae885c956df6bf8e52688beb2a923 stable
 eb14c247272c8f8c82cb6deda9bf62962d721d33 expecco_1_7_0rc5
--- a/Color.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Color.st	Wed Feb 01 22:17:58 2017 +0000
@@ -3214,78 +3214,78 @@
 
     "get hls (since we dither anyway, round them a bit"
 
-    Color withHLSFromScaledRed:rV scaledGreen:gV scaledBlue:bV do:[:h :l :s |
-	h notNil ifTrue:[
-	    rh := (h * 3.0) rounded / 3.0.
-	].
-	rl := (l * 3.0) rounded / 3.0.
-	rs := (s * 3.0) rounded / 3.0.
+    Color withHLSFromScaledRed:rV scaledGreen:gV scaledBlue:bV do:[:hue :light :saturation |
+        hue notNil ifTrue:[
+            rh := (hue * 3.0) rounded / 3.0.
+        ].
+        rl := (light * 3.0) rounded / 3.0.
+        rs := (saturation * 3.0) rounded / 3.0.
     ].
 
     rh isNil ifTrue:[
-	"achromatic,  dither between achromatic colors"
-
-	lowL := nil.
-	hiL := nil.
-
-	"find the 2 bounding colors"
-	aDevice deviceColors do:[:aColor |
-	    aColor colorId notNil ifTrue:[
-
-		Color withHLSFromRed:aColor red green:aColor green blue:aColor blue do:[:h :l :s |
-		    | cl |
-
-		    h isNil ifTrue:[
-			cl := (l * 3.0) rounded / 3.0.
-
-			cl > rl ifTrue:[
-			    hiL isNil ifTrue:[
-				hiL := aColor.
-				hiValL := cl.
-			    ] ifFalse:[
-				cl < hiValL ifTrue:[
-				    hiL := aColor.
-				    hiValL := cl.
-				]
-			    ]
-			] ifFalse:[
-			    lowL isNil ifTrue:[
-				lowL := aColor.
-				lowValL := cl
-			    ] ifFalse:[
-				cl > lowValL ifTrue:[
-				    lowL := aColor.
-				    lowValL := cl
-				]
-			    ]
-			]
-		    ]
-		]
-	    ]
-	].
-
-	(lowL notNil and:[hiL notNil]) ifTrue:[
-	    ^ self
-		monoDitherFor:1.0 / (hiValL - lowValL) * (rl - lowValL)
-		between:lowL and:hiL
-		on:aDevice
-		into:aBlock
-	].
-	"cannot happen, should always find at least black and white"
-	'Color [info]: oops - color to dither is not bound by b&w' infoPrintCR.
-
-	^ aBlock value:nil value:nil
+        "achromatic,  dither between achromatic colors"
+
+        lowL := nil.
+        hiL := nil.
+
+        "find the 2 bounding colors"
+        aDevice deviceColors do:[:aColor |
+            aColor colorId notNil ifTrue:[
+
+                Color withHLSFromRed:aColor red green:aColor green blue:aColor blue do:[:hue :light :saturation |
+                    | cl |
+
+                    hue isNil ifTrue:[
+                        cl := (light * 3.0) rounded / 3.0.
+
+                        cl > rl ifTrue:[
+                            hiL isNil ifTrue:[
+                                hiL := aColor.
+                                hiValL := cl.
+                            ] ifFalse:[
+                                cl < hiValL ifTrue:[
+                                    hiL := aColor.
+                                    hiValL := cl.
+                                ]
+                            ]
+                        ] ifFalse:[
+                            lowL isNil ifTrue:[
+                                lowL := aColor.
+                                lowValL := cl
+                            ] ifFalse:[
+                                cl > lowValL ifTrue:[
+                                    lowL := aColor.
+                                    lowValL := cl
+                                ]
+                            ]
+                        ]
+                    ]
+                ]
+            ]
+        ].
+
+        (lowL notNil and:[hiL notNil]) ifTrue:[
+            ^ self
+                monoDitherFor:1.0 / (hiValL - lowValL) * (rl - lowValL)
+                between:lowL and:hiL
+                on:aDevice
+                into:aBlock
+        ].
+        "cannot happen, should always find at least black and white"
+        'Color [info]: oops - color to dither is not bound by b&w' infoPrintCR.
+
+        ^ aBlock value:nil value:nil
     ].
 
     "chromatic case"
 
     aDevice hasColors ifFalse:[
-	"no chance, return nil values"
-	^ aBlock value:nil value:nil
+        "no chance, return nil values"
+        ^ aBlock value:nil value:nil
     ].
     (Red isNil or:[Green isNil or:[Blue isNil]]) ifTrue:[
-	"if we where not able to get primary colors: no chance"
-	^ aBlock value:nil value:nil
+        "if we where not able to get primary colors: no chance"
+        ^ aBlock value:nil value:nil
     ].
 
     "try to find two bounding colors with same hue and saturation;
@@ -3299,139 +3299,139 @@
     hiH := nil.
 
     aDevice deviceColors do:[:aColor |
-	aColor colorId notNil ifTrue:[
-	    Color withHLSFromRed:aColor red green:aColor green blue:aColor blue do:[:h :l :s |
-		| cl ch cs|
-
-		h notNil ifTrue:[
-		   ch := (h * 3.0) rounded / 3.0.
-		] ifFalse:[
-		   ch := nil
-		].
-		cl := (l * 3.0) rounded / 3.0.
-		cs := (s * 3.0) rounded / 3.0.
-
-		((ch = rh) and:[cs = rs]) ifTrue:[
-		    "found a color with same saturation and same hue, keep for light"
-
-		    cl > rl ifTrue:[
-			hiL isNil ifTrue:[
-			    hiL := aColor.
-			    hiValL := cl
-			] ifFalse:[
-			    cl < hiValL ifTrue:[
-				hiL := aColor.
-				hiValL := cl
-			    ]
-			].
-		    ] ifFalse:[
-			lowL isNil ifTrue:[
-			    lowL := aColor.
-			    lowValL := cl
-			] ifFalse:[
-			    cl > lowValL ifTrue:[
-				lowL := aColor.
-				lowValL := cl
-			    ]
-			]
-		    ]
-		].
-
-		(((ch = rh) or:[ch == nil]) and:[cl = rl]) ifTrue:[
-		    "found a color with same light and same hue, keep for saturation"
-
-		    cs > rs ifTrue:[
-			hiS isNil ifTrue:[
-			    hiS := aColor.
-			    hiValS := cs
-			] ifFalse:[
-			    cs < hiValS ifTrue:[
-				hiS := aColor.
-				hiValS := cs
-			    ]
-			].
-		    ] ifFalse:[
-			lowS isNil ifTrue:[
-			    lowS := aColor.
-			    lowValS := cs
-			] ifFalse:[
-			    cs > lowValS ifTrue:[
-				lowS := aColor.
-				lowValS := cs
-			    ]
-			]
-		    ]
-		].
-
-		rh notNil ifTrue:[
-		    cl = rl ifTrue:[
-			cs = rs ifTrue:[
-			    ch notNil ifTrue:[
-				d := (ch - rh) abs.
-				d > 300 ifTrue:[
-				    rh > 180 ifTrue:[
-					ch := ch + 360
-				    ] ifFalse:[
-					ch := ch - 360
-				    ].
-				].
-				ch > rh ifTrue:[
-				    hiH isNil ifTrue:[
-					hiH := aColor.
-					hiValH := ch
-				    ] ifFalse:[
-					ch < hiValH ifTrue:[
-					    hiH := aColor.
-					    hiValH := ch
-					]
-				    ]
-				] ifFalse:[
-				    lowH isNil ifTrue:[
-					lowH := aColor.
-					lowValH := ch
-				    ] ifFalse:[
-					ch > lowValH ifTrue:[
-					    lowH := aColor.
-					    lowValH := ch
-					]
-				    ]
-				]
-			    ]
-			]
-		    ]
-		]
-	    ]
-	]
+        aColor colorId notNil ifTrue:[
+            Color withHLSFromRed:aColor red green:aColor green blue:aColor blue do:[:hue :light :saturation |
+                | cl ch cs|
+
+                hue notNil ifTrue:[
+                   ch := (hue * 3.0) rounded / 3.0.
+                ] ifFalse:[
+                   ch := nil
+                ].
+                cl := (light * 3.0) rounded / 3.0.
+                cs := (saturation * 3.0) rounded / 3.0.
+
+                ((ch = rh) and:[cs = rs]) ifTrue:[
+                    "found a color with same saturation and same hue, keep for light"
+
+                    cl > rl ifTrue:[
+                        hiL isNil ifTrue:[
+                            hiL := aColor.
+                            hiValL := cl
+                        ] ifFalse:[
+                            cl < hiValL ifTrue:[
+                                hiL := aColor.
+                                hiValL := cl
+                            ]
+                        ].
+                    ] ifFalse:[
+                        lowL isNil ifTrue:[
+                            lowL := aColor.
+                            lowValL := cl
+                        ] ifFalse:[
+                            cl > lowValL ifTrue:[
+                                lowL := aColor.
+                                lowValL := cl
+                            ]
+                        ]
+                    ]
+                ].
+
+                (((ch = rh) or:[ch isNil]) and:[cl = rl]) ifTrue:[
+                    "found a color with same light and same hue, keep for saturation"
+
+                    cs > rs ifTrue:[
+                        hiS isNil ifTrue:[
+                            hiS := aColor.
+                            hiValS := cs
+                        ] ifFalse:[
+                            cs < hiValS ifTrue:[
+                                hiS := aColor.
+                                hiValS := cs
+                            ]
+                        ].
+                    ] ifFalse:[
+                        lowS isNil ifTrue:[
+                            lowS := aColor.
+                            lowValS := cs
+                        ] ifFalse:[
+                            cs > lowValS ifTrue:[
+                                lowS := aColor.
+                                lowValS := cs
+                            ]
+                        ]
+                    ]
+                ].
+
+                rh notNil ifTrue:[
+                    cl = rl ifTrue:[
+                        cs = rs ifTrue:[
+                            ch notNil ifTrue:[
+                                d := (ch - rh) abs.
+                                d > 300 ifTrue:[
+                                    rh > 180 ifTrue:[
+                                        ch := ch + 360
+                                    ] ifFalse:[
+                                        ch := ch - 360
+                                    ].
+                                ].
+                                ch > rh ifTrue:[
+                                    hiH isNil ifTrue:[
+                                        hiH := aColor.
+                                        hiValH := ch
+                                    ] ifFalse:[
+                                        ch < hiValH ifTrue:[
+                                            hiH := aColor.
+                                            hiValH := ch
+                                        ]
+                                    ]
+                                ] ifFalse:[
+                                    lowH isNil ifTrue:[
+                                        lowH := aColor.
+                                        lowValH := ch
+                                    ] ifFalse:[
+                                        ch > lowValH ifTrue:[
+                                            lowH := aColor.
+                                            lowValH := ch
+                                        ]
+                                    ]
+                                ]
+                            ]
+                        ]
+                    ]
+                ]
+            ]
+        ]
     ].
 
     "found bounds for light ?"
 
     lowL notNil ifTrue:[
-	rl = lowValL ifTrue:[
-	    ^ aBlock value:lowL value:nil
-	].
-	hiL notNil ifTrue:[
-	    ^ self
-		monoDitherFor:1.0 / (hiValL - lowValL) / (rl - lowValL)
-		between:lowL and:hiL
-		on:aDevice
-		into:aBlock
-	].
-	"found bound for light - dither with white"
-	^ self
-	    monoDitherFor:1.0 / (100 - lowValL) / (rl - lowValL)
-	    between:lowL and:White
-	    on:aDevice
-	    into:aBlock
+        rl = lowValL ifTrue:[
+            ^ aBlock value:lowL value:nil
+        ].
+        hiL notNil ifTrue:[
+            ^ self
+                monoDitherFor:1.0 / (hiValL - lowValL) / (rl - lowValL)
+                between:lowL and:hiL
+                on:aDevice
+                into:aBlock
+        ].
+        "found bound for light - dither with white"
+        ^ self
+            monoDitherFor:1.0 / (100 - lowValL) / (rl - lowValL)
+            between:lowL and:White
+            on:aDevice
+            into:aBlock
     ].
 
     "found bound for light - dither with black"
     hiL notNil ifTrue:[
-	^ self
-	    monoDitherFor:1.0 / (hiValL) / (rl)
-	    between:Black and:hiL
-	    on:aDevice
-	    into:aBlock
+        ^ self
+            monoDitherFor:1.0 / (hiValL) / (rl)
+            between:Black and:hiL
+            on:aDevice
+            into:aBlock
     ].
 
 
@@ -3439,32 +3439,32 @@
 
     (lowS notNil and:[hiS notNil]) ifTrue:[
 "
-	'saturation dither' printNewline.
+        'saturation dither' printNewline.
 "
-	^ self
-	    monoDitherFor:1.0 / (hiValS - lowValS) / (rs - lowValS)
-	    between:lowS and:hiS
-	    on:aDevice
-	    into:aBlock
+        ^ self
+            monoDitherFor:1.0 / (hiValS - lowValS) / (rs - lowValS)
+            between:lowS and:hiS
+            on:aDevice
+            into:aBlock
     ].
 
     "found bounds for hue ?"
 
     (lowH notNil and:[hiH notNil]) ifTrue:[
 "
-	'hue dither' printNewline.
+        'hue dither' printNewline.
 "
-	hiValH < lowValH ifTrue:[
-	    hiValH := hiValH + 360
-	].
-
-	d := hiValH - lowValH.
-
-	^ self
-	    monoDitherFor:1.0 / (d / (rh - lowValH))
-	    between:lowH and:hiH
-	    on:aDevice
-	    into:aBlock
+        hiValH < lowValH ifTrue:[
+            hiValH := hiValH + 360
+        ].
+
+        d := hiValH - lowValH.
+
+        ^ self
+            monoDitherFor:1.0 / (d / (rh - lowValH))
+            between:lowH and:hiH
+            on:aDevice
+            into:aBlock
     ].
 
     ^ aBlock value:nil value:nil
--- a/Colormap.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Colormap.st	Wed Feb 01 22:17:58 2017 +0000
@@ -632,6 +632,12 @@
     "Modified: 23.4.1996 / 22:13:43 / cg"
 ! !
 
+!Colormap methodsFor:'testing'!
+
+isColormap
+    ^ true
+! !
+
 !Colormap class methodsFor:'documentation'!
 
 version
--- a/Depth16Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Depth16Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -139,9 +139,10 @@
 initialize
     super initialize.
     samplesPerPixel := 3.
-    bitsPerSample := #(5 5 5).
+    bitsPerSample := #[5 5 5].
 
     "Created: / 27-05-2007 / 14:09:46 / cg"
+    "Modified: / 30-01-2017 / 18:24:16 / stefan"
 ! !
 
 !Depth16Image methodsFor:'magnification'!
--- a/Depth1Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Depth1Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -155,7 +155,7 @@
 
     "left pixel is in high bit"
     byte := bytes at:index.
-    mask := #(16r80 16r40 16r20 16r10 16r08 16r04 16r02 16r01) at:((x \\ 8) + 1).
+    mask := #[16r80 16r40 16r20 16r10 16r08 16r04 16r02 16r01] at:((x \\ 8) + 1).
     aPixelValue == 0 ifTrue:[
         byte := byte bitAnd:(mask bitInvert)
     ] ifFalse:[
@@ -740,14 +740,16 @@
     bits isEmptyOrNil ifTrue:[^ #() ].
 
     first := bits at:1.
-    ((first == 0) or:[(first == 2r11111111)]) ifFalse:[ ^ #(0 1) ].
+    ((first == 0) or:[(first == 2r11111111)]) ifFalse:[ ^ #[0 1] ].
 
     bits do:[:eachByte |
-	(first bitXor:eachByte) ~~ 0 ifTrue:[
-	    ^ #(0 1)
-	].
+        (first bitXor:eachByte) ~~ 0 ifTrue:[
+            ^ #[0 1]
+        ].
     ].
-    ^ first == 0 ifTrue:[ #(0) ] ifFalse:[ #(1) ].
+    ^ first == 0 ifTrue:[ #[0] ] ifFalse:[ #[1] ].
+
+    "Modified: / 30-01-2017 / 19:21:52 / stefan"
 !
 
 valueFromColor:aColor
--- a/Depth24Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Depth24Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1993 by Claus Gittinger
 	      All Rights Reserved
@@ -1609,61 +1611,61 @@
 
     "/ collect valid ditherColors ...
     aMapOrNil isNil ifTrue:[
-	ditherColors := colors select:[:clr | clr notNil].
+        ditherColors := colors select:[:clr | clr notNil].
     ] ifFalse:[
-	ditherColors := colors
+        ditherColors := colors
     ].
 
     "/ ... and sort by manhatten distance from black
 
     qScramble := #(
-		"/  2rX00X00X00X00
-
-		    2r000000000000    "/ 0
-		    2r000000000100    "/ 1
-		    2r000000100000    "/ 2
-		    2r000000100100    "/ 3
-		    2r000100000000    "/ 4
-		    2r000100000100    "/ 5
-		    2r000100100000    "/ 6
-		    2r000100100100    "/ 7
-		    2r100000000000    "/ 8
-		    2r100000000100    "/ 9
-		    2r100000100000    "/ a
-		    2r100000100100    "/ b
-		    2r100100000000    "/ c
-		    2r100100000100    "/ d
-		    2r100100100000    "/ e
-		    2r100100100100    "/ f
-		  ).
+                "/  2rX00X00X00X00
+
+                    2r000000000000    "/ 0
+                    2r000000000100    "/ 1
+                    2r000000100000    "/ 2
+                    2r000000100100    "/ 3
+                    2r000100000000    "/ 4
+                    2r000100000100    "/ 5
+                    2r000100100000    "/ 6
+                    2r000100100100    "/ 7
+                    2r100000000000    "/ 8
+                    2r100000000100    "/ 9
+                    2r100000100000    "/ a
+                    2r100000100100    "/ b
+                    2r100100000000    "/ c
+                    2r100100000100    "/ d
+                    2r100100100000    "/ e
+                    2r100100100100    "/ f
+                  ).
 
     ditherColors := ditherColors sort:[:a :b |
-				|cr "{Class: SmallInteger }"
-				 cg "{Class: SmallInteger }"
-				 cb "{Class: SmallInteger }"
-				 i1 "{Class: SmallInteger }"
-				 i2 "{Class: SmallInteger }"|
-
-				cr := a redByte.
-				cg := a greenByte.
-				cb := a blueByte.
-				i1 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
-				i1 := i1 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
-				i1 := i1 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
-
-				cr := b redByte.
-				cg := b greenByte.
-				cb := b blueByte.
-				i2 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
-				i2 := i2 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
-				i2 := i2 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
-
-				i1 < i2
-		    ].
+                                |cr "{Class: SmallInteger }"
+                                 cg "{Class: SmallInteger }"
+                                 cb "{Class: SmallInteger }"
+                                 i1 "{Class: SmallInteger }"
+                                 i2 "{Class: SmallInteger }"|
+
+                                cr := a redByte.
+                                cg := a greenByte.
+                                cb := a blueByte.
+                                i1 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
+                                i1 := i1 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
+                                i1 := i1 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
+
+                                cr := b redByte.
+                                cg := b greenByte.
+                                cb := b blueByte.
+                                i2 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
+                                i2 := i2 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
+                                i2 := i2 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
+
+                                i1 < i2
+                    ].
     aMapOrNil isNil ifTrue:[
-	ditherIds := (ditherColors asArray collect:[:clr | clr colorId]) asByteArray.
+        ditherIds := (ditherColors asArray collect:[:clr | clr colorId]) asByteArray.
     ] ifFalse:[
-	ditherIds := aMapOrNil asByteArray
+        ditherIds := aMapOrNil asByteArray
     ].
 
     "/ build an index table, for fast lookup from manhatten-r-g-b distance
@@ -1672,20 +1674,20 @@
     clrLookup := ByteArray new:(4096).
     index := 0.
     ditherColors keysAndValuesDo:[:clrPosition :clr |
-	|r g b i|
-
-	r := clr redByte.
-	g := clr greenByte.
-	b := clr blueByte.
-	i := qScramble at:((r bitShift:-4) bitAnd:16r0F) + 1.
-	i := i + ((qScramble at:((g bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
-	i := i + ((qScramble at:((b bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
-	lookupPos := i.
-
-	[index < lookupPos] whileTrue:[
-	    clrLookup at:(index+1) put:(clrPosition-1-1).
-	    index := index + 1
-	]
+        |r g b i|
+
+        r := clr redByte.
+        g := clr greenByte.
+        b := clr blueByte.
+        i := qScramble at:((r bitShift:-4) bitAnd:16r0F) + 1.
+        i := i + ((qScramble at:((g bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
+        i := i + ((qScramble at:((b bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
+        lookupPos := i.
+
+        index+1 to:lookupPos do:[:idx|
+            clrLookup at:idx put:(clrPosition-1-1).
+        ].
+        index := lookupPos.
     ].
     clrLookup from:index+1 to:4096 put:(ditherColors size - 1).
 
@@ -1701,16 +1703,16 @@
     ditherRGBBytes := ByteArray uninitializedNew:(lastColor * 3).
     index := 1.
     1 to:lastColor do:[:pix |
-	clr := ditherColors at:pix.
-	ditherRGBBytes at:index put:(clr redByte).
-	ditherRGBBytes at:index+1 put:(clr greenByte).
-	ditherRGBBytes at:index+2 put:(clr blueByte).
-	aMapOrNil isNil ifTrue:[
-	    ditherIds at:pix put:clr colorId.
-	] ifFalse:[
-	    ditherIds at:pix put:(aMapOrNil at:pix).
-	].
-	index := index + 3.
+        clr := ditherColors at:pix.
+        ditherRGBBytes at:index put:(clr redByte).
+        ditherRGBBytes at:index+1 put:(clr greenByte).
+        ditherRGBBytes at:index+2 put:(clr blueByte).
+        aMapOrNil isNil ifTrue:[
+            ditherIds at:pix put:clr colorId.
+        ] ifFalse:[
+            ditherIds at:pix put:(aMapOrNil at:pix).
+        ].
+        index := index + 3.
     ].
     pseudoBits := ByteArray uninitializedNew:(width * height).
 
@@ -1732,23 +1734,23 @@
     int __nColors = __intVal(lastColor);
     int __wR = -1, __wG, __wB;
     static int __qScramble[16] = {
-		    0x000 /* 2r000000000000    0 */,
-		    0x004 /* 2r000000000100    1 */,
-		    0x020 /* 2r000000100000    2 */,
-		    0x024 /* 2r000000100100    3 */,
-		    0x100 /* 2r000100000000    4 */,
-		    0x104 /* 2r000100000100    5 */,
-		    0x120 /* 2r000100100000    6 */,
-		    0x124 /* 2r000100100100    7 */,
-		    0x800 /* 2r100000000000    8 */,
-		    0x804 /* 2r100000000100    9 */,
-		    0x820 /* 2r100000100000    a */,
-		    0x824 /* 2r100000100100    b */,
-		    0x900 /* 2r100100000000    c */,
-		    0x904 /* 2r100100000100    d */,
-		    0x920 /* 2r100100100000    e */,
-		    0x924 /* 2r100100100100    f */,
-		  };
+                    0x000 /* 2r000000000000    0 */,
+                    0x004 /* 2r000000000100    1 */,
+                    0x020 /* 2r000000100000    2 */,
+                    0x024 /* 2r000000100100    3 */,
+                    0x100 /* 2r000100000000    4 */,
+                    0x104 /* 2r000100000100    5 */,
+                    0x120 /* 2r000100100000    6 */,
+                    0x124 /* 2r000100100100    7 */,
+                    0x800 /* 2r100000000000    8 */,
+                    0x804 /* 2r100000000100    9 */,
+                    0x820 /* 2r100000100000    a */,
+                    0x824 /* 2r100000100100    b */,
+                    0x900 /* 2r100100000000    c */,
+                    0x904 /* 2r100100000100    d */,
+                    0x920 /* 2r100100100000    e */,
+                    0x924 /* 2r100100100100    f */,
+                  };
 
     if (__isByteArrayLike(__INST(bytes))
      && __isByteArray(pseudoBits)
@@ -1756,54 +1758,54 @@
      && __isByteArray(ditherIds)
      && __isByteArray(clrLookup)
      && __isByteArray(error)) {
-	failed = false;
-
-	srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
-	dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
-	idP = __ByteArrayInstPtr(ditherIds)->ba_element;
-	__clrLookup = __ByteArrayInstPtr(clrLookup)->ba_element;
-	errP = (short *) __ByteArrayInstPtr(error)->ba_element;
-
-	/*
-	 * clear error accumulator
-	 */
-	eP = errP;
-	bzero(eP, (__w+2) * 2 * 3);
-
-	for (__y=__h; __y>0; __y--) {
-	    unsigned char *dp;
-	    int __eR, __eG, __eB;
-
-	    __eR = __eG = __eB = 0;
-
-	    eP = &(errP[3]);
-	    __eR = eP[0];
-	    __eG = eP[1];
-	    __eB = eP[2];
-
-	    for (__x=__w; __x>0; __x--) {
-		int __want;
-		int pix;
-		int __wantR, __wantG, __wantB;
-		int idx;
-		int tR, tG, tB;
-		int nR, nG, nB;
-		int dR, dG, dB;
-		int minDelta, bestIdx;
-		int cnt;
-
-		__wantR = srcP[0];
-		__wantG = srcP[1];
-		__wantB = srcP[2];
-		srcP += 3;
-
-		/*
-		 * wI are the wanted r/g/b values;
-		 * eI are the error values;
-		 */
-		__wantR = __wantR + __eR;
-		__wantG = __wantG + __eG;
-		__wantB = __wantB + __eB;
+        failed = false;
+
+        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
+        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
+        idP = __ByteArrayInstPtr(ditherIds)->ba_element;
+        __clrLookup = __ByteArrayInstPtr(clrLookup)->ba_element;
+        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
+
+        /*
+         * clear error accumulator
+         */
+        eP = errP;
+        bzero(eP, (__w+2) * 2 * 3);
+
+        for (__y=__h; __y>0; __y--) {
+            unsigned char *dp;
+            int __eR, __eG, __eB;
+
+            __eR = __eG = __eB = 0;
+
+            eP = &(errP[3]);
+            __eR = eP[0];
+            __eG = eP[1];
+            __eB = eP[2];
+
+            for (__x=__w; __x>0; __x--) {
+                int __want;
+                int pix;
+                int __wantR, __wantG, __wantB;
+                int idx;
+                int tR, tG, tB;
+                int nR, nG, nB;
+                int dR, dG, dB;
+                int minDelta, bestIdx;
+                int cnt;
+
+                __wantR = srcP[0];
+                __wantG = srcP[1];
+                __wantB = srcP[2];
+                srcP += 3;
+
+                /*
+                 * wI are the wanted r/g/b values;
+                 * eI are the error values;
+                 */
+                __wantR = __wantR + __eR;
+                __wantG = __wantG + __eG;
+                __wantB = __wantB + __eB;
 
 #define RED_SCALE 30
 #define GREEN_SCALE 59
@@ -1815,237 +1817,237 @@
 #define NPROBE 16
 
 #ifndef FAST_LOOKUP
-		if ((__wantR == __wR)
-		 && (__wantG == __wG)
-		 && (__wantB == __wB)) {
-		    /*
-		     * same color again - reuse last bestMatch
-		     */
-		} else
+                if ((__wantR == __wR)
+                 && (__wantG == __wG)
+                 && (__wantB == __wB)) {
+                    /*
+                     * same color again - reuse last bestMatch
+                     */
+                } else
 #endif
-		{
-		    __wR = __wantR;
-		    __wG = __wantG;
-		    __wB = __wantB;
+                {
+                    __wR = __wantR;
+                    __wG = __wantG;
+                    __wB = __wantB;
 
 #ifdef FAST_LOOKUP
-		    if(__wR > 255) __wR = 255;
-		    else if (__wR < 0) __wR = 0;
-		    if(__wG > 255) __wG = 255;
-		    else if (__wG < 0) __wG = 0;
-		    if(__wB > 255) __wB = 255;
-		    else if (__wB < 0) __wB = 0;
-
-		    {
-			int lookupIndex;
-			int idx, idx0;
-			int d, delta;
-			unsigned char *dp0;
-
-			dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
-			lookupIndex =    __qScramble[((__wR & 0xF0)>>4)];
-			lookupIndex |=   __qScramble[((__wG & 0xF0)>>4)] >> 1;
-			lookupIndex |=   __qScramble[((__wB & 0xF0)>>4)] >> 2;
-			idx = bestIdx =__clrLookup[lookupIndex];
-			dp += (idx+idx+idx);
-
-			/* try color at lookupIndex */
-
-			d = dp[0];
-			delta = (__wR - d) * RED_SCALE;
-			if (delta < 0) delta = -delta;
-
-			d = dp[1];
-			if (__wG > d)
-			    delta += (__wG - d) * GREEN_SCALE;
-			else
-			    delta += (d - __wG) * GREEN_SCALE;
-			d = dp[2];
-			if (__wB > d)
-			    delta += (__wB - d) * BLUE_SCALE;
-			else
-			    delta += (d - __wB) * BLUE_SCALE;
-
-			if (delta <= GOOD_DELTA) {
-			    goto foundBest;
-			}
-			minDelta = delta;
+                    if(__wR > 255) __wR = 255;
+                    else if (__wR < 0) __wR = 0;
+                    if(__wG > 255) __wG = 255;
+                    else if (__wG < 0) __wG = 0;
+                    if(__wB > 255) __wB = 255;
+                    else if (__wB < 0) __wB = 0;
+
+                    {
+                        int lookupIndex;
+                        int idx, idx0;
+                        int d, delta;
+                        unsigned char *dp0;
+
+                        dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
+                        lookupIndex =    __qScramble[((__wR & 0xF0)>>4)];
+                        lookupIndex |=   __qScramble[((__wG & 0xF0)>>4)] >> 1;
+                        lookupIndex |=   __qScramble[((__wB & 0xF0)>>4)] >> 2;
+                        idx = bestIdx =__clrLookup[lookupIndex];
+                        dp += (idx+idx+idx);
+
+                        /* try color at lookupIndex */
+
+                        d = dp[0];
+                        delta = (__wR - d) * RED_SCALE;
+                        if (delta < 0) delta = -delta;
+
+                        d = dp[1];
+                        if (__wG > d)
+                            delta += (__wG - d) * GREEN_SCALE;
+                        else
+                            delta += (d - __wG) * GREEN_SCALE;
+                        d = dp[2];
+                        if (__wB > d)
+                            delta += (__wB - d) * BLUE_SCALE;
+                        else
+                            delta += (d - __wB) * BLUE_SCALE;
+
+                        if (delta <= GOOD_DELTA) {
+                            goto foundBest;
+                        }
+                        minDelta = delta;
 # ifndef ONE_SHOT
-			idx0 = idx; dp0 = dp;
-			cnt = 0;
-			while ((++cnt <= NPROBE) && (idx > 0)) {
-			    /* try previous color(s) */
-
-			    idx--; dp -= 3;
-			    d = dp[0];
-			    delta = (__wR - d) * RED_SCALE;
-			    if (delta < 0) delta = -delta;
-			    d = dp[1];
-			    if (__wG > d)
-				delta += (__wG - d) * GREEN_SCALE;
-			    else
-				delta += (d - __wG) * GREEN_SCALE;
-			    d = dp[2];
-			    if (__wB > d)
-				delta += (__wB - d) * BLUE_SCALE;
-			    else
-				delta += (d - __wB) * BLUE_SCALE;
-
-			    if (delta < minDelta) {
-				bestIdx = idx;
-				if (delta <= GOOD_DELTA) {
-				    goto foundBest;
-				}
-				minDelta = delta;
-			    }
-			}
-
-			idx = idx0; dp = dp0;
-			cnt = 0;
-			while ((++cnt <= NPROBE) && (++idx < __nColors)) {
-			    /* try next color */
-
-			    dp += 3;
-			    d = dp[0];
-			    delta = (__wR - d) * RED_SCALE;
-			    if (delta < 0) delta = -delta;
-			    d = dp[1];
-			    if (__wG > d)
-				delta += (__wG - d) * GREEN_SCALE;
-			    else
-				delta += (d - __wG) * GREEN_SCALE;
-			    d = dp[2];
-			    if (__wB > d)
-				delta += (__wB - d) * BLUE_SCALE;
-			    else
-				delta += (d - __wB) * BLUE_SCALE;
-
-			    if (delta < minDelta) {
-				bestIdx = idx;
-				if (delta <= GOOD_DELTA) {
-				    goto foundBest;
-				}
-				minDelta = delta;
-			    }
-			}
+                        idx0 = idx; dp0 = dp;
+                        cnt = 0;
+                        while ((++cnt <= NPROBE) && (idx > 0)) {
+                            /* try previous color(s) */
+
+                            idx--; dp -= 3;
+                            d = dp[0];
+                            delta = (__wR - d) * RED_SCALE;
+                            if (delta < 0) delta = -delta;
+                            d = dp[1];
+                            if (__wG > d)
+                                delta += (__wG - d) * GREEN_SCALE;
+                            else
+                                delta += (d - __wG) * GREEN_SCALE;
+                            d = dp[2];
+                            if (__wB > d)
+                                delta += (__wB - d) * BLUE_SCALE;
+                            else
+                                delta += (d - __wB) * BLUE_SCALE;
+
+                            if (delta < minDelta) {
+                                bestIdx = idx;
+                                if (delta <= GOOD_DELTA) {
+                                    goto foundBest;
+                                }
+                                minDelta = delta;
+                            }
+                        }
+
+                        idx = idx0; dp = dp0;
+                        cnt = 0;
+                        while ((++cnt <= NPROBE) && (++idx < __nColors)) {
+                            /* try next color */
+
+                            dp += 3;
+                            d = dp[0];
+                            delta = (__wR - d) * RED_SCALE;
+                            if (delta < 0) delta = -delta;
+                            d = dp[1];
+                            if (__wG > d)
+                                delta += (__wG - d) * GREEN_SCALE;
+                            else
+                                delta += (d - __wG) * GREEN_SCALE;
+                            d = dp[2];
+                            if (__wB > d)
+                                delta += (__wB - d) * BLUE_SCALE;
+                            else
+                                delta += (d - __wB) * BLUE_SCALE;
+
+                            if (delta < minDelta) {
+                                bestIdx = idx;
+                                if (delta <= GOOD_DELTA) {
+                                    goto foundBest;
+                                }
+                                minDelta = delta;
+                            }
+                        }
 # endif
-		    }
-	foundBest: ;
+                    }
+        foundBest: ;
 #else
 /*
-		    if(__wR > 255) __wR = 255;
-		    else if (__wR < 0) __wR = 0;
-		    if(__wG > 255) __wG = 255;
-		    else if (__wG < 0) __wG = 0;
-		    if(__wB > 255) __wB = 255;
-		    else if (__wB < 0) __wB = 0;
+                    if(__wR > 255) __wR = 255;
+                    else if (__wR < 0) __wR = 0;
+                    if(__wG > 255) __wG = 255;
+                    else if (__wG < 0) __wG = 0;
+                    if(__wB > 255) __wB = 255;
+                    else if (__wB < 0) __wB = 0;
 */
 
-		    /* find the best matching color */
-
-		    minDelta = 99999;
-		    bestIdx = -1;
-		    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
-		    for (idx = 0; idx<__nColors; idx++) {
-			int d, delta;
-
-			d = dp[0];
-			delta = (__wR - d) * RED_SCALE;
-			if (delta < 0) delta = -delta;
-			if (delta < minDelta) {
-			    d = dp[1];
-			    if (__wG > d)
-				delta += (__wG - d) * GREEN_SCALE;
-			    else
-				delta += (d - __wG) * GREEN_SCALE;
-			    if (delta < minDelta) {
-				d = dp[2];
-				if (__wB > d)
-				    delta += (__wB - d) * BLUE_SCALE;
-				else
-				    delta += (d - __wB) * BLUE_SCALE;
-
-				if (delta < minDelta) {
-				    bestIdx = idx;
-				    if (delta <= GOOD_DELTA) {
-					break;
-				    }
-				    minDelta = delta;
-				}
-			    }
-			}
-			dp += 3;
-		    }
+                    /* find the best matching color */
+
+                    minDelta = 99999;
+                    bestIdx = -1;
+                    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
+                    for (idx = 0; idx<__nColors; idx++) {
+                        int d, delta;
+
+                        d = dp[0];
+                        delta = (__wR - d) * RED_SCALE;
+                        if (delta < 0) delta = -delta;
+                        if (delta < minDelta) {
+                            d = dp[1];
+                            if (__wG > d)
+                                delta += (__wG - d) * GREEN_SCALE;
+                            else
+                                delta += (d - __wG) * GREEN_SCALE;
+                            if (delta < minDelta) {
+                                d = dp[2];
+                                if (__wB > d)
+                                    delta += (__wB - d) * BLUE_SCALE;
+                                else
+                                    delta += (d - __wB) * BLUE_SCALE;
+
+                                if (delta < minDelta) {
+                                    bestIdx = idx;
+                                    if (delta <= GOOD_DELTA) {
+                                        break;
+                                    }
+                                    minDelta = delta;
+                                }
+                            }
+                        }
+                        dp += 3;
+                    }
 #endif
-		}
-
-		dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
-		dp += bestIdx * 3;
-		dR = dp[0];
-		dG = dp[1];
-		dB = dp[2];
+                }
+
+                dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
+                dp += bestIdx * 3;
+                dR = dp[0];
+                dG = dp[1];
+                dB = dp[2];
 
 /*
 console_fprintf(stderr, "want: %d/%d/%d (%d/%d/%d) got: %d/%d/%d\n",
-		__wantR, __wantG, __wantB,
-		__wR, __wG, __wB,
-		dR, dG, dB);
+                __wantR, __wantG, __wantB,
+                __wR, __wG, __wB,
+                dR, dG, dB);
 */
-		/*
-		 * store the corresponding dither colors colorId
-		 */
-		*dstP++ = idP[bestIdx];
-
-		/*
-		 * the new error & distribute the error
-		 */
-		__eR = __wantR - dR;
-		if (__eR) {
-		    tR = __eR >> 4;  /* 16th of error */
-		    nR = eP[3] + (tR * 7);/* from accu: error for (x+1 / y) */
-		    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
-		    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
-		    eP[3] = __eR - (tR*15);  /* 1/16th for (x+1 / y+1) */
-		    __eR = nR;
-		} else {
-		    __eR = eP[3];
-		    eP[0] = eP[-3] = eP[3] = 0;
-		}
-
-		__eG = __wantG - dG;
-		if (__eG) {
-		    tG = __eG >> 4;
-		    nG = eP[4] + (tG * 7);/* plus 7/16'th of this error */
-		    eP[1] = tG*5;
-		    eP[-2] = tG*3;
-		    eP[4] = __eG - (tG*15);
-		    __eG = nG;
-		} else {
-		    __eG = eP[4];
-		    eP[1] = eP[-2] = eP[4] = 0;
-		}
-
-		__eB = __wantB - dB;
-		if (__eB) {
-		    tB = __eB >> 4;
-		    nB = eP[5] + (tB * 7);
-		    eP[2] = tB*5;
-		    eP[-1] = tB*3;
-		    eP[5] = __eB - (tB*15);
-		    __eB = nB;
-		} else {
-		    __eB = eP[5];
-		    eP[2] = eP[-1] = eP[5] = 0;
-		}
-
-		eP += 3;
-	    }
-	}
+                /*
+                 * store the corresponding dither colors colorId
+                 */
+                *dstP++ = idP[bestIdx];
+
+                /*
+                 * the new error & distribute the error
+                 */
+                __eR = __wantR - dR;
+                if (__eR) {
+                    tR = __eR >> 4;  /* 16th of error */
+                    nR = eP[3] + (tR * 7);/* from accu: error for (x+1 / y) */
+                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
+                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
+                    eP[3] = __eR - (tR*15);  /* 1/16th for (x+1 / y+1) */
+                    __eR = nR;
+                } else {
+                    __eR = eP[3];
+                    eP[0] = eP[-3] = eP[3] = 0;
+                }
+
+                __eG = __wantG - dG;
+                if (__eG) {
+                    tG = __eG >> 4;
+                    nG = eP[4] + (tG * 7);/* plus 7/16'th of this error */
+                    eP[1] = tG*5;
+                    eP[-2] = tG*3;
+                    eP[4] = __eG - (tG*15);
+                    __eG = nG;
+                } else {
+                    __eG = eP[4];
+                    eP[1] = eP[-2] = eP[4] = 0;
+                }
+
+                __eB = __wantB - dB;
+                if (__eB) {
+                    tB = __eB >> 4;
+                    nB = eP[5] + (tB * 7);
+                    eP[2] = tB*5;
+                    eP[-1] = tB*3;
+                    eP[5] = __eB - (tB*15);
+                    __eB = nB;
+                } else {
+                    __eB = eP[5];
+                    eP[2] = eP[-1] = eP[5] = 0;
+                }
+
+                eP += 3;
+            }
+        }
     }
 %}.
     failed ifTrue:[
-	self primitiveFailed.
-	^ nil
+        self primitiveFailed.
+        ^ nil
     ].
 
     ^ pseudoBits
@@ -2071,9 +2073,9 @@
      eR eRB eB eLB bytes|
 
     (samplesPerPixel ~~ 3
-    or:[bitsPerSample ~= #(8 8 8)
-    or:[depth > 8]]) ifTrue:[
-	^ super floydSteinbergDitheredGrayBitsDepth:depth
+     or:[(#[8 8 8] isSameSequenceAs:bitsPerSample) not
+     or:[depth > 8]]) ifTrue:[
+        ^ super floydSteinbergDitheredGrayBitsDepth:depth
     ].
 
     bytes := self bits.
@@ -2086,22 +2088,22 @@
     outBits := ByteArray uninitializedNew:(bytesPerOutRow * h).
 
     depth ~~ 8 ifTrue:[
-	greyLevels := (1 bitShift:depth) - 1.
-	greyMap1 := Array new:256.
-	greyMap2 := Array new:256.
-	1 to:256 do:[:i |
-	    v := (greyLevels / 255 * (i-1)).
-	    greyMap1 at:i put:v.
-	    greyMap2 at:i put:v.
-	].
-	greyMap1 := (greyMap1 collect:[:b | b truncated]) asByteArray.
-
-	greyMap2 := (greyMap2 collect:[:el |
-					    ((el - el truncated)  "/ the error (0..1)
-						* 255) rounded]) asByteArray.
-
-	errorArray := ByteArray new:(w + 2) * 2.
-	errorArray1 := ByteArray new:(w + 2) * 2.
+        greyLevels := (1 bitShift:depth) - 1.
+        greyMap1 := Array new:256.
+        greyMap2 := Array new:256.
+        1 to:256 do:[:i |
+            v := (greyLevels / 255 * (i-1)).
+            greyMap1 at:i put:v.
+            greyMap2 at:i put:v.
+        ].
+        greyMap1 := (greyMap1 collect:[:b | b truncated]) asByteArray.
+
+        greyMap2 := (greyMap2 collect:[:el |
+                                            ((el - el truncated)  "/ the error (0..1)
+                                                * 255) rounded]) asByteArray.
+
+        errorArray := ByteArray new:(w + 2) * 2.
+        errorArray1 := ByteArray new:(w + 2) * 2.
     ].
 
 %{
@@ -2132,97 +2134,98 @@
     short *__t;
 
     if (__depth == 8) {
-	/*
-	 * special code for destination depth 8
-	 */
-	for (__y=0; __y<__h; __y++) {
-	    __nextDst = __dstIdx + __bytesPerOutRow;
-	    __nextSrc = __srcIdx + __bytesPerRow;
-	    for (__x=0; __x<__w; __x++) {
-		__grey = (__bytes[__srcIdx] * 3)           /* 0.3*r + 0.6*g + b -> 0..2550 */
-			 + (__bytes[__srcIdx+1] * 6)
-			 + __bytes[__srcIdx+2];
-		__pixel = __grey / 10;                      /* 0 .. 255 */
-
-		__srcIdx += 3;
-		__outBits[__dstIdx] = __pixel;
-	       __dstIdx++;
-	    }
-	    __srcIdx = __nextSrc;
-	    __dstIdx = __nextDst;
-	}
+        /*
+         * special code for destination depth 8
+         */
+        for (__y=0; __y<__h; __y++) {
+            __nextDst = __dstIdx + __bytesPerOutRow;
+            __nextSrc = __srcIdx + __bytesPerRow;
+            for (__x=0; __x<__w; __x++) {
+                __grey = (__bytes[__srcIdx] * 3)           /* 0.3*r + 0.6*g + b -> 0..2550 */
+                         + (__bytes[__srcIdx+1] * 6)
+                         + __bytes[__srcIdx+2];
+                __pixel = __grey / 10;                      /* 0 .. 255 */
+
+                __srcIdx += 3;
+                __outBits[__dstIdx] = __pixel;
+               __dstIdx++;
+            }
+            __srcIdx = __nextSrc;
+            __dstIdx = __nextDst;
+        }
     } else {
-	bzero(errorArray1, (__w+2) * 2);
-
-	__bitCnt = 8;
-	for (__y=0; __y<__h; __y++) {
-	    __nextDst = __dstIdx + __bytesPerOutRow;
-	    __nextSrc = __srcIdx + __bytesPerRow;
-
-	    __byte = 0;
-
-	    __t = __errorArray;
-	    __errorArray = __errorArray1;
-	    __errorArray1 = __t;
-	    bzero(errorArray1, (__w+2) * 2);
-
-	    for (__x=0; __x<__w; __x++) {
-		__grey = (__bytes[__srcIdx] * 3)           /* 0.3*r + 0.6*g + b -> 0..2550 */
-			 + (__bytes[__srcIdx+1] * 6)
-			 + __bytes[__srcIdx+2];
-		__grey = __grey / 10;                      /* 0 .. 255 */
-
-		__pixel = __greyMap1[__grey];            /* 0..(greyLevels-1) */
-		__err = __greyMap2[__grey];              /* 0.. 255 - error) */
-		__err += __errorArray[__x+1];
-
-		if (__err > 127) {                        /* dither says: next pixel */
-		   if ( __pixel != __greyLevels)
-			__pixel++;
-		    __err = __err - 255;
-		} else {
-		}
-		if (__err) {
-		    __e16 = __err >> 4;
-		    __eR = __e16 * 7;                    /* 7/16 -> right pixel */
-		    __eRB = __e16 * 1;                   /* 1/16 -> right below */
-		    __eB = __e16 * 5;                    /* 5/16 -> below */
-		    __eLB = __err - __eR - __eRB - __eB; /* 3/16 -> left below */
-
-		    __errorArray [__x+1+1] += __eR;
-		    __errorArray1[__x+1+1] += __eRB;
-		    __errorArray1[__x+1  ] += __eB;
-		    __errorArray1[__x+1-1] += __eLB;
-		}
-
-		__srcIdx += 3;
-
-		__byte = (__byte << __depth) | __pixel;
-
-		__bitCnt = __bitCnt - __depth;
-		if (__bitCnt == 0) {
-		    __outBits[__dstIdx] = __byte;
-		    __dstIdx++;
-		    __byte = 0;
-		    __bitCnt = 8;
-		}
-	    }
-
-	    if (__bitCnt != 8) {
-		__byte = __byte << __bitCnt;
-		__outBits[__dstIdx] = __byte;
-		__bitCnt = 8;
-	    }
-	    __srcIdx = __nextSrc;
-	    __dstIdx = __nextDst;
-	}
+        bzero(errorArray1, (__w+2) * 2);
+
+        __bitCnt = 8;
+        for (__y=0; __y<__h; __y++) {
+            __nextDst = __dstIdx + __bytesPerOutRow;
+            __nextSrc = __srcIdx + __bytesPerRow;
+
+            __byte = 0;
+
+            __t = __errorArray;
+            __errorArray = __errorArray1;
+            __errorArray1 = __t;
+            bzero(errorArray1, (__w+2) * 2);
+
+            for (__x=0; __x<__w; __x++) {
+                __grey = (__bytes[__srcIdx] * 3)           /* 0.3*r + 0.6*g + b -> 0..2550 */
+                         + (__bytes[__srcIdx+1] * 6)
+                         + __bytes[__srcIdx+2];
+                __grey = __grey / 10;                      /* 0 .. 255 */
+
+                __pixel = __greyMap1[__grey];            /* 0..(greyLevels-1) */
+                __err = __greyMap2[__grey];              /* 0.. 255 - error) */
+                __err += __errorArray[__x+1];
+
+                if (__err > 127) {                        /* dither says: next pixel */
+                   if ( __pixel != __greyLevels)
+                        __pixel++;
+                    __err = __err - 255;
+                } else {
+                }
+                if (__err) {
+                    __e16 = __err >> 4;
+                    __eR = __e16 * 7;                    /* 7/16 -> right pixel */
+                    __eRB = __e16 * 1;                   /* 1/16 -> right below */
+                    __eB = __e16 * 5;                    /* 5/16 -> below */
+                    __eLB = __err - __eR - __eRB - __eB; /* 3/16 -> left below */
+
+                    __errorArray [__x+1+1] += __eR;
+                    __errorArray1[__x+1+1] += __eRB;
+                    __errorArray1[__x+1  ] += __eB;
+                    __errorArray1[__x+1-1] += __eLB;
+                }
+
+                __srcIdx += 3;
+
+                __byte = (__byte << __depth) | __pixel;
+
+                __bitCnt = __bitCnt - __depth;
+                if (__bitCnt == 0) {
+                    __outBits[__dstIdx] = __byte;
+                    __dstIdx++;
+                    __byte = 0;
+                    __bitCnt = 8;
+                }
+            }
+
+            if (__bitCnt != 8) {
+                __byte = __byte << __bitCnt;
+                __outBits[__dstIdx] = __byte;
+                __bitCnt = 8;
+            }
+            __srcIdx = __nextSrc;
+            __dstIdx = __nextDst;
+        }
     }
 %}.
 
     ^ outBits
 
-    "Created: 10.6.1996 / 13:28:22 / cg"
-    "Modified: 10.6.1996 / 15:09:07 / cg"
+    "Created: / 10-06-1996 / 13:28:22 / cg"
+    "Modified: / 10-06-1996 / 15:09:07 / cg"
+    "Modified: / 31-01-2017 / 12:39:31 / stefan"
 !
 
 floydSteinbergDitheredMonochromeBits
@@ -2956,9 +2959,10 @@
 initialize
     super initialize.
     samplesPerPixel := 3.
-    bitsPerSample := #(8 8 8).
+    bitsPerSample := #[8 8 8].
 
     "Created: / 27-05-2007 / 14:09:34 / cg"
+    "Modified: / 30-01-2017 / 18:29:01 / stefan"
 ! !
 
 !Depth24Image methodsFor:'magnification'!
@@ -3154,19 +3158,19 @@
     newBytes := ByteArray uninitializedNew:(newWidth * 3 * newHeight).
 
     mask notNil ifTrue:[
-	newMask := (mask magnifiedBy:scalePoint)
+        newMask := (mask magnifiedBy:scalePoint)
     ].
 
     newImage := self species new.
     newImage
-	width:newWidth
-	height:newHeight
-	photometric:photometric
-	samplesPerPixel:samplesPerPixel
-	bitsPerSample:#(8 8 8)
-	colorMap:nil
-	bits:newBytes
-	mask:newMask.
+        width:newWidth
+        height:newHeight
+        photometric:photometric
+        samplesPerPixel:samplesPerPixel
+        bitsPerSample:#[8 8 8]
+        colorMap:nil
+        bits:newBytes
+        mask:newMask.
 
     "walk over destination image fetching pixels from source image"
 
@@ -3184,14 +3188,14 @@
     double _mY = __floatVal(mY);
 
     for (_row = 0; _row <= _h; _row++) {
-	_srcRowP = _srcP + (_width3 * (int)((double)_row / _mY));
-	for (_col = 0; _col <= _w; _col++) {
-	    sP = _srcRowP + (((int)((double)_col / _mX)) * 3);
-	    _dstP[0] = sP[0];
-	    _dstP[1] = sP[1];
-	    _dstP[2] = sP[2];
-	    _dstP += 3;
-	}
+        _srcRowP = _srcP + (_width3 * (int)((double)_row / _mY));
+        for (_col = 0; _col <= _w; _col++) {
+            sP = _srcRowP + (((int)((double)_col / _mX)) * 3);
+            _dstP[0] = sP[0];
+            _dstP[1] = sP[1];
+            _dstP[2] = sP[2];
+            _dstP += 3;
+        }
     }
 %}
 .
@@ -3201,17 +3205,17 @@
     w := newWidth - 1.
     h := newHeight - 1.
     0 to:h do:[:row |
-	srcRowIdx := (width * 3 * (row // mY)) + 1.
-	0 to:w do:[:col |
-	    srcIndex := srcRowIdx + ((col // mX) * 3).
-	    value := bytes at:srcIndex.
-	    newBytes at:dstIndex put:value.
-	    value := bytes at:(srcIndex + 1).
-	    newBytes at:(dstIndex + 1) put:value.
-	    value := bytes at:(srcIndex + 2).
-	    newBytes at:(dstIndex + 2) put:value.
-	    dstIndex := dstIndex + 3
-	]
+        srcRowIdx := (width * 3 * (row // mY)) + 1.
+        0 to:w do:[:col |
+            srcIndex := srcRowIdx + ((col // mX) * 3).
+            value := bytes at:srcIndex.
+            newBytes at:dstIndex put:value.
+            value := bytes at:(srcIndex + 1).
+            newBytes at:(dstIndex + 1) put:value.
+            value := bytes at:(srcIndex + 2).
+            newBytes at:(dstIndex + 2) put:value.
+            dstIndex := dstIndex + 3
+        ]
     ].
 "
     ^ newImage
@@ -3277,9 +3281,10 @@
      The return value is an array of bits-per-plane."
 
     bitsPerSample notNil ifTrue:[^ bitsPerSample].
-    ^ #(8 8 8)
-
-    "Modified: 10.6.1996 / 18:02:33 / cg"
+    ^ #[8 8 8]
+
+    "Modified: / 10-06-1996 / 18:02:33 / cg"
+    "Modified: / 30-01-2017 / 18:27:45 / stefan"
 !
 
 blueBitsOf:pixel
--- a/Depth2Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Depth2Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -107,11 +107,12 @@
     "left pixel is in high bits"
     index := lineIndex + (x // 4).
     byte := bytes at:index.
-    shift := #(6 4 2 0) at:((x \\ 4) + 1).
+    shift := #[6 4 2 0] at:((x \\ 4) + 1).
     byte := (byte bitAnd:(3 bitShift:shift) bitInvert) bitOr:(aPixelValue bitShift:shift).
     bytes at:index put:byte
 
-    "Created: 24.4.1997 / 17:06:36 / cg"
+    "Created: / 24-04-1997 / 17:06:36 / cg"
+    "Modified: / 30-01-2017 / 19:22:33 / stefan"
 ! !
 
 !Depth2Image methodsFor:'converting images'!
@@ -996,9 +997,10 @@
      really used. However, assume that we don't care for
      those extra colors here ..."
 
-    ^ #(0 1 2 3)
+    ^ #[0 1 2 3]
 
-    "Modified: / 28.7.1998 / 22:23:15 / cg"
+    "Modified: / 28-07-1998 / 22:23:15 / cg"
+    "Modified: / 30-01-2017 / 19:23:07 / stefan"
 ! !
 
 !Depth2Image class methodsFor:'documentation'!
--- a/Depth32Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Depth32Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -862,9 +862,10 @@
 initialize
     super initialize.
     samplesPerPixel := 4.
-    bitsPerSample := #(8 8 8 8).
+    bitsPerSample := #[8 8 8 8].
 
     "Created: / 27-05-2007 / 14:09:16 / cg"
+    "Modified: / 30-01-2017 / 19:32:13 / stefan"
 ! !
 
 !Depth32Image methodsFor:'magnification'!
@@ -980,7 +981,9 @@
      The return value is an array of bits-per-plane."
 
     bitsPerSample notNil ifTrue:[^ bitsPerSample].
-    ^ #(8 8 8 8)
+    ^ #[8 8 8 8]
+
+    "Modified: / 30-01-2017 / 19:23:31 / stefan"
 !
 
 blueBitsOf:pixel
--- a/Depth48Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Depth48Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -111,7 +111,9 @@
 initialize
     super initialize.
     samplesPerPixel := 3. 
-    bitsPerSample := #(16 16 16).
+    bitsPerSample := #[16 16 16].
+
+    "Modified: / 30-01-2017 / 19:32:29 / stefan"
 ! !
 
 !Depth48Image methodsFor:'queries'!
--- a/Depth4Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Depth4Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -137,26 +137,24 @@
     |lineIndex "{ Class: SmallInteger }"
      byte      "{ Class: SmallInteger }"
      w         "{ Class: SmallInteger }"
-     pixel dstIdx bytes|
+     pixel bytes|
 
     bytes := self bits.
-    dstIdx := 1.
     w := width - 1.
-    lineIndex := (self bytesPerRow * y).
+    lineIndex := self bytesPerRow * y.
     0 to:w do:[:x |
-	x even ifTrue:[
-	    lineIndex := lineIndex + 1.
-	    byte := bytes at:lineIndex.
-	    pixel := (byte bitShift:-4) bitAnd:16rF.
-	] ifFalse:[
-	    pixel := byte bitAnd:16rF.
-	].
-	aPixelBuffer at:dstIdx put:pixel.
-	dstIdx := dstIdx + 1
+        x even ifTrue:[
+            lineIndex := lineIndex + 1.
+            byte := bytes at:lineIndex.
+            pixel := (byte bitShift:-4) bitAnd:16rF.
+        ] ifFalse:[
+            pixel := byte bitAnd:16rF.
+        ].
+        aPixelBuffer at:x+1 put:pixel.
     ].
 
-    "Created: 21.7.1997 / 18:04:00 / cg"
-    "Modified: 21.7.1997 / 18:05:47 / cg"
+    "Created: / 21-07-1997 / 18:04:00 / cg"
+    "Modified: / 30-01-2017 / 18:51:24 / stefan"
 ! !
 
 !Depth4Image methodsFor:'converting images'!
@@ -857,7 +855,6 @@
      real image processing, specialized methods should be written."
 
     |srcIndex   "{ Class: SmallInteger }"
-     byte       "{ Class: SmallInteger }"
      shift      "{ Class: SmallInteger }"
      pixelValue "{ Class: SmallInteger }"
      x1         "{ Class: SmallInteger }"
@@ -871,26 +868,25 @@
     srcIndex := (self bytesPerRow * y) + 1.
     srcIndex := srcIndex + (x1 // 2).
     x1 even ifTrue:[
-	shift := -4
+        shift := -4
     ] ifFalse:[
-	shift := 0
+        shift := 0
     ].
 
     x1 to:x2 do:[:x |
-	shift == 0 ifTrue:[
-	    byte := bytes at:srcIndex.
-	    pixelValue := byte bitAnd:16rF.
-	    shift := -4.
-	    srcIndex := srcIndex + 1.
-	] ifFalse:[
-	    byte := bytes at:srcIndex.
-	    pixelValue := (byte bitShift:-4) bitAnd:16rF.
-	    shift := 0
-	].
-	aBlock value:x value:pixelValue.
+        pixelValue := bytes at:srcIndex.
+        shift == 0 ifTrue:[
+            shift := -4.
+            srcIndex := srcIndex + 1.
+        ] ifFalse:[
+            pixelValue := pixelValue bitShift:-4.
+            shift := 0
+        ].
+        aBlock value:x value:(pixelValue bitAnd:16rF).
     ]
 
-    "Created: 7.6.1996 / 19:09:45 / cg"
+    "Created: / 07-06-1996 / 19:09:45 / cg"
+    "Modified (format): / 30-01-2017 / 20:41:31 / stefan"
 ! !
 
 !Depth4Image methodsFor:'magnification'!
--- a/Depth64Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Depth64Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -113,7 +113,9 @@
 initialize
     super initialize.
     samplesPerPixel := 4. 
-    bitsPerSample := #(16 16 16 16).
+    bitsPerSample := #[16 16 16 16].
+
+    "Modified: / 31-01-2017 / 13:11:33 / stefan"
 ! !
 
 !Depth64Image methodsFor:'queries'!
--- a/Depth8Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Depth8Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1993 by Claus Gittinger
 	      All Rights Reserved
@@ -196,8 +198,8 @@
      srcDepth map bytes|
 
     srcDepth := anImage depth.
-    (#(1 2 4) includes:srcDepth) ifFalse:[
-	^ super fromImage:anImage
+    (#[1 2 4] includes:srcDepth) ifFalse:[
+        ^ super fromImage:anImage
     ].
 
     width := w := anImage width.
@@ -208,14 +210,14 @@
     self colormapFromImage:anImage.
 
     colorMap isNil ifTrue:[
-	"/ if source has no colorMap, more work is needed ...
-	map := #(
-		#[0 16rFF]
-		#[0 16r55 16rAA 16rFF]
-		nil
-		#[16r00 16r11 16r22 16r33 16r44 16r55 16r66 16r77
-		  16r88 16r99 16rAA 16rBB 16rCC 16rDD 16rEE 16rFF]
-	       ) at:srcDepth.
+        "/ if source has no colorMap, more work is needed ...
+        map := #(
+                #[0 16rFF]
+                #[0 16r55 16rAA 16rFF]
+                nil
+                #[16r00 16r11 16r22 16r33 16r44 16r55 16r66 16r77
+                  16r88 16r99 16rAA 16rBB 16rCC 16rDD 16rEE 16rFF]
+               ) at:srcDepth.
     ].
 
     self mask:anImage mask.
@@ -231,14 +233,14 @@
     dstIdx := 1.
     bytes := self bits.
     bytes isNil ifTrue:[
-	self bits:(bytes := ByteArray new:(self bytesPerRow * self height)).
+        self bits:(bytes := ByteArray new:(self bytesPerRow * self height)).
     ].
     1 to:h do:[:hi |
-	srcBuffer replaceFrom:1 to:srcBytesPerRow with:srcBytes startingAt:srcIdx.
-	srcBuffer expandPixels:srcDepth width:w height:1 into:dstBuffer mapping:map.
-	bytes replaceFrom:dstIdx to:dstIdx+w-1 with:dstBuffer startingAt:1.
-	dstIdx := dstIdx + w.
-	srcIdx := srcIdx + srcBytesPerRow.
+        srcBuffer replaceFrom:1 to:srcBytesPerRow with:srcBytes startingAt:srcIdx.
+        srcBuffer expandPixels:srcDepth width:w height:1 into:dstBuffer mapping:map.
+        bytes replaceFrom:dstIdx to:dstIdx+w-1 with:dstBuffer startingAt:1.
+        dstIdx := dstIdx + w.
+        srcIdx := srcIdx + srcBytesPerRow.
     ]
 
     "
@@ -256,7 +258,8 @@
      i8 inspect.
     "
 
-    "Modified: 24.4.1997 / 14:01:14 / cg"
+    "Modified: / 24-04-1997 / 14:01:14 / cg"
+    "Modified: / 30-01-2017 / 19:33:25 / stefan"
 ! !
 
 !Depth8Image methodsFor:'converting images'!
@@ -334,9 +337,6 @@
 
     usedColors do:[:aColorIndex |
         |devColor color
-         r        "{Class: SmallInteger }"
-         g        "{Class: SmallInteger }"
-         b        "{Class: SmallInteger }"
          mapIndex "{Class: SmallInteger }"|
 
         fit ifTrue:[
@@ -601,8 +601,9 @@
 
     ^ f
 
-    "Modified: 15.10.1997 / 01:48:20 / cg"
-    "Created: 19.10.1997 / 04:57:05 / cg"
+    "Modified: / 15-10-1997 / 01:48:20 / cg"
+    "Created: / 19-10-1997 / 04:57:05 / cg"
+    "Modified (comment): / 30-01-2017 / 21:00:08 / stefan"
 !
 
 anyImageAsTrueColorFormOn:aDevice
@@ -1096,9 +1097,9 @@
      w       "{Class: SmallInteger }"
      h       "{Class: SmallInteger }"
      index   "{Class: SmallInteger }"
+     lookupPos "{Class: SmallInteger }"
      ditherIds failed lastColor qScramble
-     clrLookup lookupPos
-     error clr|
+     clrLookup error clr|
 
     "/
     "/ collect color components as integer values (for integer arithmetic)
@@ -1106,77 +1107,77 @@
     rgbBytes := ByteArray uninitializedNew:256 * 3.
 
     photometric == #palette ifTrue:[
-	lastColor := colorMap size - 1
+        lastColor := colorMap size - 1
     ] ifFalse:[
-	lastColor := 255.
+        lastColor := 255.
     ].
     index := 1.
     0 to:lastColor do:[:pix |
-	clr := self colorFromValue:pix.
-	rgbBytes at:index put:(clr redByte).
-	rgbBytes at:index+1 put:(clr greenByte).
-	rgbBytes at:index+2 put:(clr blueByte).
-
-	index := index + 3.
+        clr := self colorFromValue:pix.
+        rgbBytes at:index put:(clr redByte).
+        rgbBytes at:index+1 put:(clr greenByte).
+        rgbBytes at:index+2 put:(clr blueByte).
+
+        index := index + 3.
     ].
 
     "/ collect valid ditherColors ...
     aMapOrNil isNil ifTrue:[
-	ditherColors := colors select:[:clr | clr notNil].
+        ditherColors := colors select:[:clr | clr notNil].
     ] ifFalse:[
-	ditherColors := colors
+        ditherColors := colors
     ].
 
     "/ ... and sort by manhatten distance from black
 
     qScramble := #(
-		"/  2rX00X00X00X00
-
-		    2r000000000000    "/ 0
-		    2r000000000100    "/ 1
-		    2r000000100000    "/ 2
-		    2r000000100100    "/ 3
-		    2r000100000000    "/ 4
-		    2r000100000100    "/ 5
-		    2r000100100000    "/ 6
-		    2r000100100100    "/ 7
-		    2r100000000000    "/ 8
-		    2r100000000100    "/ 9
-		    2r100000100000    "/ a
-		    2r100000100100    "/ b
-		    2r100100000000    "/ c
-		    2r100100000100    "/ d
-		    2r100100100000    "/ e
-		    2r100100100100    "/ f
-		  ).
+                "/  2rX00X00X00X00
+
+                    2r000000000000    "/ 0
+                    2r000000000100    "/ 1
+                    2r000000100000    "/ 2
+                    2r000000100100    "/ 3
+                    2r000100000000    "/ 4
+                    2r000100000100    "/ 5
+                    2r000100100000    "/ 6
+                    2r000100100100    "/ 7
+                    2r100000000000    "/ 8
+                    2r100000000100    "/ 9
+                    2r100000100000    "/ a
+                    2r100000100100    "/ b
+                    2r100100000000    "/ c
+                    2r100100000100    "/ d
+                    2r100100100000    "/ e
+                    2r100100100100    "/ f
+                  ).
 
     ditherColors := ditherColors sort:[:a :b |
-				|cr "{Class: SmallInteger }"
-				 cg "{Class: SmallInteger }"
-				 cb "{Class: SmallInteger }"
-				 i1 "{Class: SmallInteger }"
-				 i2 "{Class: SmallInteger }"|
-
-				cr := a redByte.
-				cg := a greenByte.
-				cb := a blueByte.
-				i1 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
-				i1 := i1 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
-				i1 := i1 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
-
-				cr := b redByte.
-				cg := b greenByte.
-				cb := b blueByte.
-				i2 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
-				i2 := i2 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
-				i2 := i2 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
-
-				i1 < i2
-		    ].
+                                |cr "{Class: SmallInteger }"
+                                 cg "{Class: SmallInteger }"
+                                 cb "{Class: SmallInteger }"
+                                 i1 "{Class: SmallInteger }"
+                                 i2 "{Class: SmallInteger }"|
+
+                                cr := a redByte.
+                                cg := a greenByte.
+                                cb := a blueByte.
+                                i1 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
+                                i1 := i1 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
+                                i1 := i1 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
+
+                                cr := b redByte.
+                                cg := b greenByte.
+                                cb := b blueByte.
+                                i2 := qScramble at:((cr bitShift:-4) bitAnd:16r0F) + 1.
+                                i2 := i2 + ((qScramble at:((cg bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
+                                i2 := i2 + ((qScramble at:((cb bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
+
+                                i1 < i2
+                    ].
     aMapOrNil isNil ifTrue:[
-	ditherIds := (ditherColors asArray collect:[:clr | clr colorId]) asByteArray.
+        ditherIds := (ditherColors asArray collect:[:clr | clr colorId]) asByteArray.
     ] ifFalse:[
-	ditherIds := aMapOrNil asByteArray
+        ditherIds := aMapOrNil asByteArray
     ].
 
     "/ build an index table, for fast lookup from manhatten-r-g-b distance
@@ -1185,20 +1186,20 @@
     clrLookup := ByteArray new:(4096).
     index := 0.
     ditherColors keysAndValuesDo:[:clrPosition :clr |
-	|r g b i|
-
-	r := clr redByte.
-	g := clr greenByte.
-	b := clr blueByte.
-	i := qScramble at:((r bitShift:-4) bitAnd:16r0F) + 1.
-	i := i + ((qScramble at:((g bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
-	i := i + ((qScramble at:((b bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
-	lookupPos := i.
-
-	[index < lookupPos] whileTrue:[
-	    clrLookup at:(index+1) put:(clrPosition-1-1).
-	    index := index + 1
-	]
+        |r g b i|
+
+        r := clr redByte.
+        g := clr greenByte.
+        b := clr blueByte.
+        i := qScramble at:((r bitShift:-4) bitAnd:16r0F) + 1.
+        i := i + ((qScramble at:((g bitShift:-4) bitAnd:16r0F) + 1) bitShift:-1).
+        i := i + ((qScramble at:((b bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
+        lookupPos := i.
+
+        index+1 to:lookupPos do:[:idx|
+            clrLookup at:idx put:(clrPosition-1-1).
+        ].
+        index := lookupPos.
     ].
     clrLookup from:index+1 to:4096 put:(ditherColors size - 1).
 
@@ -1214,16 +1215,16 @@
     ditherRGBBytes := ByteArray uninitializedNew:(lastColor * 3).
     index := 1.
     1 to:lastColor do:[:pix |
-	clr := ditherColors at:pix.
-	ditherRGBBytes at:index put:(clr redByte).
-	ditherRGBBytes at:index+1 put:(clr greenByte).
-	ditherRGBBytes at:index+2 put:(clr blueByte).
-	aMapOrNil isNil ifTrue:[
-	    ditherIds at:pix put:clr colorId.
-	] ifFalse:[
-	    ditherIds at:pix put:(aMapOrNil at:pix).
-	].
-	index := index + 3.
+        clr := ditherColors at:pix.
+        ditherRGBBytes at:index put:(clr redByte).
+        ditherRGBBytes at:index+1 put:(clr greenByte).
+        ditherRGBBytes at:index+2 put:(clr blueByte).
+        aMapOrNil isNil ifTrue:[
+            ditherIds at:pix put:clr colorId.
+        ] ifFalse:[
+            ditherIds at:pix put:(aMapOrNil at:pix).
+        ].
+        index := index + 3.
     ].
 
     pseudoBits := ByteArray uninitializedNew:(width * height).
@@ -1253,23 +1254,23 @@
     int __nColors = __intVal(lastColor);
     int __wR = -1, __wG, __wB;
     static int __qScramble[16] = {
-		    0x000 /* 2r000000000000    0 */,
-		    0x004 /* 2r000000000100    1 */,
-		    0x020 /* 2r000000100000    2 */,
-		    0x024 /* 2r000000100100    3 */,
-		    0x100 /* 2r000100000000    4 */,
-		    0x104 /* 2r000100000100    5 */,
-		    0x120 /* 2r000100100000    6 */,
-		    0x124 /* 2r000100100100    7 */,
-		    0x800 /* 2r100000000000    8 */,
-		    0x804 /* 2r100000000100    9 */,
-		    0x820 /* 2r100000100000    a */,
-		    0x824 /* 2r100000100100    b */,
-		    0x900 /* 2r100100000000    c */,
-		    0x904 /* 2r100100000100    d */,
-		    0x920 /* 2r100100100000    e */,
-		    0x924 /* 2r100100100100    f */,
-		  };
+                    0x000 /* 2r000000000000    0 */,
+                    0x004 /* 2r000000000100    1 */,
+                    0x020 /* 2r000000100000    2 */,
+                    0x024 /* 2r000000100100    3 */,
+                    0x100 /* 2r000100000000    4 */,
+                    0x104 /* 2r000100000100    5 */,
+                    0x120 /* 2r000100100000    6 */,
+                    0x124 /* 2r000100100100    7 */,
+                    0x800 /* 2r100000000000    8 */,
+                    0x804 /* 2r100000000100    9 */,
+                    0x820 /* 2r100000100000    a */,
+                    0x824 /* 2r100000100100    b */,
+                    0x900 /* 2r100100000000    c */,
+                    0x904 /* 2r100100000100    d */,
+                    0x920 /* 2r100100100000    e */,
+                    0x924 /* 2r100100100100    f */,
+                  };
 
     if (__isByteArrayLike(__INST(bytes))
      && __isByteArray(pseudoBits)
@@ -1278,50 +1279,50 @@
      && __isByteArray(ditherIds)
      && __isByteArray(clrLookup)
      && __isByteArray(error)) {
-	failed = false;
-
-	srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
-	dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
-	rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
-	idP = __ByteArrayInstPtr(ditherIds)->ba_element;
-	__clrLookup = __ByteArrayInstPtr(clrLookup)->ba_element;
-	errP = (short *) __ByteArrayInstPtr(error)->ba_element;
-
-	/*
-	 * clear error accumulator
-	 */
-	eP = errP;
-	bzero(eP, (__w+2) * 2 * 3);
-
-	for (__y=__h; __y>0; __y--) {
-	    __eR = __eG = __eB = 0;
-
-	    eP = &(errP[3]);
-	    __eR = eP[0];
-	    __eG = eP[1];
-	    __eB = eP[2];
-
-	    for (__x=__w; __x>0; __x--) {
-		int __want;
-		int pix;
-		int __wantR, __wantG, __wantB;
-		int idx;
-		int tR, tG, tB;
-		int nR, nG, nB;
-		int dR, dG, dB;
-		int minDelta, bestIdx;
-		int cnt;
-
-		pix = *srcP++;
-
-		/*
-		 * wR, wG and wB is the wanted r/g/b value;
-		 */
-		idx = pix+pix+pix;  /* pix * 3 */
-
-		__wantR = rgbP[idx] + __eR;
-		__wantG = rgbP[idx+1] + __eG;
-		__wantB = rgbP[idx+2] + __eB;
+        failed = false;
+
+        srcP = __ByteArrayInstPtr(__INST(bytes))->ba_element;
+        dstP = __ByteArrayInstPtr(pseudoBits)->ba_element;
+        rgbP = __ByteArrayInstPtr(rgbBytes)->ba_element;
+        idP = __ByteArrayInstPtr(ditherIds)->ba_element;
+        __clrLookup = __ByteArrayInstPtr(clrLookup)->ba_element;
+        errP = (short *) __ByteArrayInstPtr(error)->ba_element;
+
+        /*
+         * clear error accumulator
+         */
+        eP = errP;
+        bzero(eP, (__w+2) * 2 * 3);
+
+        for (__y=__h; __y>0; __y--) {
+            __eR = __eG = __eB = 0;
+
+            eP = &(errP[3]);
+            __eR = eP[0];
+            __eG = eP[1];
+            __eB = eP[2];
+
+            for (__x=__w; __x>0; __x--) {
+                int __want;
+                int pix;
+                int __wantR, __wantG, __wantB;
+                int idx;
+                int tR, tG, tB;
+                int nR, nG, nB;
+                int dR, dG, dB;
+                int minDelta, bestIdx;
+                int cnt;
+
+                pix = *srcP++;
+
+                /*
+                 * wR, wG and wB is the wanted r/g/b value;
+                 */
+                idx = pix+pix+pix;  /* pix * 3 */
+
+                __wantR = rgbP[idx] + __eR;
+                __wantG = rgbP[idx+1] + __eG;
+                __wantB = rgbP[idx+2] + __eB;
 
 #define RED_SCALE 30
 #define GREEN_SCALE 59
@@ -1338,236 +1339,236 @@
 #define NPROBE 8
 
 #ifndef FAST_LOOKUP
-		if ((__wantR == __wR)
-		 && (__wantG == __wG)
-		 && (__wantB == __wB)) {
-		    /*
-		     * same color again - reuse last bestMatch
-		     */
-		} else
+                if ((__wantR == __wR)
+                 && (__wantG == __wG)
+                 && (__wantB == __wB)) {
+                    /*
+                     * same color again - reuse last bestMatch
+                     */
+                } else
 #endif
-		{
-		    __wR = __wantR;
-		    __wG = __wantG;
-		    __wB = __wantB;
+                {
+                    __wR = __wantR;
+                    __wG = __wantG;
+                    __wB = __wantB;
 
 #ifdef FAST_LOOKUP
-		    if(__wR > 255) __wR = 255;
-		    else if (__wR < 0) __wR = 0;
-		    if(__wG > 255) __wG = 255;
-		    else if (__wG < 0) __wG = 0;
-		    if(__wB > 255) __wB = 255;
-		    else if (__wB < 0) __wB = 0;
-
-		    {
-			int lookupIndex;
-			int idx, idx0;
-			int d, delta;
-			unsigned char *dp0;
-
-			dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
-			lookupIndex =    __qScramble[((__wR & 0xF0)>>4)];
-			lookupIndex |=   __qScramble[((__wG & 0xF0)>>4)] >> 1;
-			lookupIndex |=   __qScramble[((__wB & 0xF0)>>4)] >> 2;
-			idx = bestIdx =__clrLookup[lookupIndex];
-			dp += (idx+idx+idx);
-
-			/* try color at lookupIndex */
-
-			d = dp[0];
-			delta = (__wR - d) * RED_SCALE;
-			if (delta < 0) delta = -delta;
-
-			d = dp[1];
-			if (__wG > d)
-			    delta += (__wG - d) * GREEN_SCALE;
-			else
-			    delta += (d - __wG) * GREEN_SCALE;
-			d = dp[2];
-			if (__wB > d)
-			    delta += (__wB - d) * BLUE_SCALE;
-			else
-			    delta += (d - __wB) * BLUE_SCALE;
-
-			if (delta <= GOOD_DELTA) {
-			    goto foundBest;
-			}
-			minDelta = delta;
+                    if(__wR > 255) __wR = 255;
+                    else if (__wR < 0) __wR = 0;
+                    if(__wG > 255) __wG = 255;
+                    else if (__wG < 0) __wG = 0;
+                    if(__wB > 255) __wB = 255;
+                    else if (__wB < 0) __wB = 0;
+
+                    {
+                        int lookupIndex;
+                        int idx, idx0;
+                        int d, delta;
+                        unsigned char *dp0;
+
+                        dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
+                        lookupIndex =    __qScramble[((__wR & 0xF0)>>4)];
+                        lookupIndex |=   __qScramble[((__wG & 0xF0)>>4)] >> 1;
+                        lookupIndex |=   __qScramble[((__wB & 0xF0)>>4)] >> 2;
+                        idx = bestIdx =__clrLookup[lookupIndex];
+                        dp += (idx+idx+idx);
+
+                        /* try color at lookupIndex */
+
+                        d = dp[0];
+                        delta = (__wR - d) * RED_SCALE;
+                        if (delta < 0) delta = -delta;
+
+                        d = dp[1];
+                        if (__wG > d)
+                            delta += (__wG - d) * GREEN_SCALE;
+                        else
+                            delta += (d - __wG) * GREEN_SCALE;
+                        d = dp[2];
+                        if (__wB > d)
+                            delta += (__wB - d) * BLUE_SCALE;
+                        else
+                            delta += (d - __wB) * BLUE_SCALE;
+
+                        if (delta <= GOOD_DELTA) {
+                            goto foundBest;
+                        }
+                        minDelta = delta;
 # ifndef ONE_SHOT
-			idx0 = idx; dp0 = dp;
-			cnt = 0;
-			while ((++cnt <= NPROBE) && (idx > 0)) {
-			    /* try previous color(s) */
-
-			    idx--; dp -= 3;
-			    d = dp[0];
-			    delta = (__wR - d) * RED_SCALE;
-			    if (delta < 0) delta = -delta;
-			    d = dp[1];
-			    if (__wG > d)
-				delta += (__wG - d) * GREEN_SCALE;
-			    else
-				delta += (d - __wG) * GREEN_SCALE;
-			    d = dp[2];
-			    if (__wB > d)
-				delta += (__wB - d) * BLUE_SCALE;
-			    else
-				delta += (d - __wB) * BLUE_SCALE;
-
-			    if (delta < minDelta) {
-				bestIdx = idx;
-				if (delta <= GOOD_DELTA) {
-				    goto foundBest;
-				}
-				minDelta = delta;
-			    }
-			}
-
-			idx = idx0; dp = dp0;
-			cnt = 0;
-			while ((++cnt <= NPROBE) && (++idx < __nColors)) {
-			    /* try next color */
-
-			    dp += 3;
-			    d = dp[0];
-			    delta = (__wR - d) * RED_SCALE;
-			    if (delta < 0) delta = -delta;
-			    d = dp[1];
-			    if (__wG > d)
-				delta += (__wG - d) * GREEN_SCALE;
-			    else
-				delta += (d - __wG) * GREEN_SCALE;
-			    d = dp[2];
-			    if (__wB > d)
-				delta += (__wB - d) * BLUE_SCALE;
-			    else
-				delta += (d - __wB) * BLUE_SCALE;
-
-			    if (delta < minDelta) {
-				bestIdx = idx;
-				if (delta <= GOOD_DELTA) {
-				    goto foundBest;
-				}
-				minDelta = delta;
-			    }
-			}
+                        idx0 = idx; dp0 = dp;
+                        cnt = 0;
+                        while ((++cnt <= NPROBE) && (idx > 0)) {
+                            /* try previous color(s) */
+
+                            idx--; dp -= 3;
+                            d = dp[0];
+                            delta = (__wR - d) * RED_SCALE;
+                            if (delta < 0) delta = -delta;
+                            d = dp[1];
+                            if (__wG > d)
+                                delta += (__wG - d) * GREEN_SCALE;
+                            else
+                                delta += (d - __wG) * GREEN_SCALE;
+                            d = dp[2];
+                            if (__wB > d)
+                                delta += (__wB - d) * BLUE_SCALE;
+                            else
+                                delta += (d - __wB) * BLUE_SCALE;
+
+                            if (delta < minDelta) {
+                                bestIdx = idx;
+                                if (delta <= GOOD_DELTA) {
+                                    goto foundBest;
+                                }
+                                minDelta = delta;
+                            }
+                        }
+
+                        idx = idx0; dp = dp0;
+                        cnt = 0;
+                        while ((++cnt <= NPROBE) && (++idx < __nColors)) {
+                            /* try next color */
+
+                            dp += 3;
+                            d = dp[0];
+                            delta = (__wR - d) * RED_SCALE;
+                            if (delta < 0) delta = -delta;
+                            d = dp[1];
+                            if (__wG > d)
+                                delta += (__wG - d) * GREEN_SCALE;
+                            else
+                                delta += (d - __wG) * GREEN_SCALE;
+                            d = dp[2];
+                            if (__wB > d)
+                                delta += (__wB - d) * BLUE_SCALE;
+                            else
+                                delta += (d - __wB) * BLUE_SCALE;
+
+                            if (delta < minDelta) {
+                                bestIdx = idx;
+                                if (delta <= GOOD_DELTA) {
+                                    goto foundBest;
+                                }
+                                minDelta = delta;
+                            }
+                        }
 # endif
-		    }
-	foundBest: ;
+                    }
+        foundBest: ;
 #else
 /*
-		    if(__wR > 255) __wR = 255;
-		    else if (__wR < 0) __wR = 0;
-		    if(__wG > 255) __wG = 255;
-		    else if (__wG < 0) __wG = 0;
-		    if(__wB > 255) __wB = 255;
-		    else if (__wB < 0) __wB = 0;
+                    if(__wR > 255) __wR = 255;
+                    else if (__wR < 0) __wR = 0;
+                    if(__wG > 255) __wG = 255;
+                    else if (__wG < 0) __wG = 0;
+                    if(__wB > 255) __wB = 255;
+                    else if (__wB < 0) __wB = 0;
 */
 
-		    /* find the best matching color */
-
-		    minDelta = 99999;
-		    bestIdx = -1;
-		    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
-		    for (idx = 0; idx<__nColors; idx++) {
-			int d, delta;
-
-			d = dp[0];
-			delta = (__wR - d) * RED_SCALE;
-			if (delta < 0) delta = -delta;
-			if (delta < minDelta) {
-			    d = dp[1];
-			    if (__wG > d)
-				delta += (__wG - d) * GREEN_SCALE;
-			    else
-				delta += (d - __wG) * GREEN_SCALE;
-			    if (delta < minDelta) {
-				d = dp[2];
-				if (__wB > d)
-				    delta += (__wB - d) * BLUE_SCALE;
-				else
-				    delta += (d - __wB) * BLUE_SCALE;
-
-				if (delta < minDelta) {
-				    bestIdx = idx;
-				    if (delta <= GOOD_DELTA) {
-					break;
-				    }
-				    minDelta = delta;
-				}
-			    }
-			}
-			dp += 3;
-		    }
+                    /* find the best matching color */
+
+                    minDelta = 99999;
+                    bestIdx = -1;
+                    dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
+                    for (idx = 0; idx<__nColors; idx++) {
+                        int d, delta;
+
+                        d = dp[0];
+                        delta = (__wR - d) * RED_SCALE;
+                        if (delta < 0) delta = -delta;
+                        if (delta < minDelta) {
+                            d = dp[1];
+                            if (__wG > d)
+                                delta += (__wG - d) * GREEN_SCALE;
+                            else
+                                delta += (d - __wG) * GREEN_SCALE;
+                            if (delta < minDelta) {
+                                d = dp[2];
+                                if (__wB > d)
+                                    delta += (__wB - d) * BLUE_SCALE;
+                                else
+                                    delta += (d - __wB) * BLUE_SCALE;
+
+                                if (delta < minDelta) {
+                                    bestIdx = idx;
+                                    if (delta <= GOOD_DELTA) {
+                                        break;
+                                    }
+                                    minDelta = delta;
+                                }
+                            }
+                        }
+                        dp += 3;
+                    }
 #endif
-		}
-		dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
-		dp += bestIdx * 3;
-		dR = dp[0];
-		dG = dp[1];
-		dB = dp[2];
+                }
+                dp = __ByteArrayInstPtr(ditherRGBBytes)->ba_element;
+                dp += bestIdx * 3;
+                dR = dp[0];
+                dG = dp[1];
+                dB = dp[2];
 
 /*
 console_fprintf(stderr, "want: %d/%d/%d (%d/%d/%d) got: %d/%d/%d\n",
-		__wantR, __wantG, __wantB,
-		__wR, __wG, __wB,
-		dR, dG, dB);
+                __wantR, __wantG, __wantB,
+                __wR, __wG, __wB,
+                dR, dG, dB);
 */
-		/*
-		 * store the corresponding dither colors colorId
-		 */
-		*dstP++ = idP[bestIdx];
-
-		/*
-		 * the new error & distribute the error
-		 */
-		__eR = __wantR - dR;
-		if (__eR) {
-		    tR = __eR >> 4;  /* 16th of error */
-		    nR = eP[3] + (tR * 7);/* from accu: error for (x+1 / y) */
-		    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
-		    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
-		    eP[3] = __eR - (tR*15);  /* 1/16th for (x+1 / y+1) */
-		    __eR = nR;
-		} else {
-		    __eR = eP[3];
-		    eP[0] = eP[-3] = eP[3] = 0;
-		}
-
-		__eG = __wantG - dG;
-		if (__eG) {
-		    tG = __eG >> 4;
-		    nG = eP[4] + (tG * 7);/* plus 7/16'th of this error */
-		    eP[1] = tG*5;
-		    eP[-2] = tG*3;
-		    eP[4] = __eG - (tG*15);
-		    __eG = nG;
-		} else {
-		    __eG = eP[4];
-		    eP[1] = eP[-2] = eP[4] = 0;
-		}
-
-		__eB = __wantB - dB;
-		if (__eB) {
-		    tB = __eB >> 4;
-		    nB = eP[5] + (tB * 7);
-		    eP[2] = tB*5;
-		    eP[-1] = tB*3;
-		    eP[5] = __eB - (tB*15);
-		    __eB = nB;
-		} else {
-		    __eB = eP[5];
-		    eP[2] = eP[-1] = eP[5] = 0;
-		}
-
-		eP += 3;
-	    }
-	}
+                /*
+                 * store the corresponding dither colors colorId
+                 */
+                *dstP++ = idP[bestIdx];
+
+                /*
+                 * the new error & distribute the error
+                 */
+                __eR = __wantR - dR;
+                if (__eR) {
+                    tR = __eR >> 4;  /* 16th of error */
+                    nR = eP[3] + (tR * 7);/* from accu: error for (x+1 / y) */
+                    eP[0] = tR*5;         /* 5/16th for (x / y+1) */
+                    eP[-3] = tR*3;        /* 3/16th for (x-1 / y+1) */
+                    eP[3] = __eR - (tR*15);  /* 1/16th for (x+1 / y+1) */
+                    __eR = nR;
+                } else {
+                    __eR = eP[3];
+                    eP[0] = eP[-3] = eP[3] = 0;
+                }
+
+                __eG = __wantG - dG;
+                if (__eG) {
+                    tG = __eG >> 4;
+                    nG = eP[4] + (tG * 7);/* plus 7/16'th of this error */
+                    eP[1] = tG*5;
+                    eP[-2] = tG*3;
+                    eP[4] = __eG - (tG*15);
+                    __eG = nG;
+                } else {
+                    __eG = eP[4];
+                    eP[1] = eP[-2] = eP[4] = 0;
+                }
+
+                __eB = __wantB - dB;
+                if (__eB) {
+                    tB = __eB >> 4;
+                    nB = eP[5] + (tB * 7);
+                    eP[2] = tB*5;
+                    eP[-1] = tB*3;
+                    eP[5] = __eB - (tB*15);
+                    __eB = nB;
+                } else {
+                    __eB = eP[5];
+                    eP[2] = eP[-1] = eP[5] = 0;
+                }
+
+                eP += 3;
+            }
+        }
     }
 %}.
     failed ifTrue:[
-	self primitiveFailed.
-	^ nil
+        self primitiveFailed.
+        ^ nil
     ].
 
     ^ pseudoBits
@@ -1952,16 +1953,16 @@
 
     x1 := xLow.
     x2 := xHigh.
-    srcIndex := (width * y) + 1 + x1.
+    srcIndex := (width * y) + 1.
     bytes := self bits.
 
     x1 to:x2 do:[:x |
-	pixelValue := bytes at:srcIndex.
-	srcIndex := srcIndex + 1.
-	aBlock value:x value:pixelValue
+        pixelValue := bytes at:srcIndex+x.
+        aBlock value:x value:pixelValue
     ]
 
-    "Created: 7.6.1996 / 19:09:47 / cg"
+    "Created: / 07-06-1996 / 19:09:47 / cg"
+    "Modified: / 30-01-2017 / 18:54:15 / stefan"
 !
 
 valuesFromX:xStart y:yStart toX:xEnd y:yEnd do:aBlock
@@ -1974,8 +1975,7 @@
      However, for real high performance image processing, specialized methods
      should be written which know how to deal with specific photometric interpretations."
 
-    |srcIndex    "{ Class: SmallInteger }"
-     srcNext     "{ Class: SmallInteger }"
+    |srcIndex    "{ Class: SmallInteger }" 
      bytesPerRow "{ Class: SmallInteger }"
      value    "{ Class: SmallInteger }"
      x1       "{ Class: SmallInteger }"
@@ -1989,24 +1989,21 @@
     y1 := yStart.
     y2 := yEnd.
 
-    srcIndex := (width * y1) + x1 + 1 .
+    srcIndex := (width * y1) + 1 .
     bytesPerRow := self bytesPerRow.
     bytes := self bits.
 
     y1 to:y2 do:[:y |
-	srcNext := srcIndex + bytesPerRow.
-	x1 to:x2 do:[:x |
-	    value := bytes at:srcIndex.
-	    srcIndex := srcIndex + 1.
-
-	    aBlock value:x value:y value:value
-	].
-	srcIndex := srcNext.
+        x1 to:x2 do:[:x |
+            value := bytes at:srcIndex+x.
+            aBlock value:x value:y value:value
+        ].
+        srcIndex := srcIndex + bytesPerRow.
     ].
-    ^ self
-
-    "Modified: 11.7.1996 / 20:06:47 / cg"
-    "Created: 11.7.1996 / 20:08:11 / cg"
+
+    "Created: / 11-07-1996 / 20:08:11 / cg"
+    "Modified: / 30-01-2017 / 19:04:05 / stefan"
+    "Modified (format): / 31-01-2017 / 12:44:04 / stefan"
 ! !
 
 !Depth8Image methodsFor:'image manipulations'!
@@ -2169,19 +2166,19 @@
     newBytes := ByteArray uninitializedNew:(newWidth * newHeight).
 
     mask notNil ifTrue:[
-	newMask := (mask magnifiedBy:scalePoint)
+        newMask := (mask magnifiedBy:scalePoint)
     ].
 
     newImage := self species new.
     newImage
-	width:newWidth
-	height:newHeight
-	photometric:photometric
-	samplesPerPixel:samplesPerPixel
-	bitsPerSample:#(8)
-	colorMap:colorMap copy
-	bits:newBytes
-	mask:newMask.
+        width:newWidth
+        height:newHeight
+        photometric:photometric
+        samplesPerPixel:samplesPerPixel
+        bitsPerSample:#[8]
+        colorMap:colorMap copy
+        bits:newBytes
+        mask:newMask.
 
     "walk over destination image fetching pixels from source image"
 
@@ -2199,10 +2196,10 @@
     double __mY = __floatVal(mY);
 
     for (__row = 0; __row <= __h; __row++) {
-	__srcRowP = __srcP + (__width * (int)((double)__row / __mY));
-	for (__col = 0; __col <= __w; __col++) {
-	    *__dstP++ = __srcRowP[(int)((double)__col / __mX)];
-	}
+        __srcRowP = __srcP + (__width * (int)((double)__row / __mY));
+        for (__col = 0; __col <= __w; __col++) {
+            *__dstP++ = __srcRowP[(int)((double)__col / __mX)];
+        }
     }
 %}
 .
--- a/DeviceGraphicsContext.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/DeviceGraphicsContext.st	Wed Feb 01 22:17:58 2017 +0000
@@ -587,7 +587,7 @@
     (aForm ~~ mask) ifTrue:[
         mask := aForm.
         gcId notNil ifTrue:[
-            (mask == nil) ifTrue:[
+            mask isNil ifTrue:[
                 device setBitmapMask:nil in:gcId
             ] ifFalse:[
                 mask := mask asFormOn:device.
--- a/GraphicsContext.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/GraphicsContext.st	Wed Feb 01 22:17:58 2017 +0000
@@ -1659,9 +1659,7 @@
 
     left := origin x.
     top := origin y.
-    self displayRectangleX:left y:top
-		     width:(corner x - left)
-		    height:(corner y - top)
+    self displayRectangleX:left y:top width:(corner x - left) height:(corner y - top)
 
     "Modified: 13.4.1996 / 20:58:31 / cg"
 !
--- a/GraphicsMedium.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/GraphicsMedium.st	Wed Feb 01 22:17:58 2017 +0000
@@ -1814,9 +1814,7 @@
 
     left := origin x.
     top := origin y.
-    self displayRectangleX:left y:top
-		     width:(corner x - left)
-		    height:(corner y - top)
+    self displayRectangleX:left y:top width:(corner x - left) height:(corner y - top)
 !
 
 displayRectangleOrigin:origin extent:extent
@@ -2420,7 +2418,7 @@
     "fill the receiver with something;
      something may be a Form, Color or colorIndex"
 
-    gc fillRectangle:self boundingBox color:something
+    gc fillRectangle:(self boundingBox) color:something
 !
 
 fillArc:origin radius:r from:startAngle angle:angle
--- a/Image.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/Image.st	Wed Feb 01 22:17:58 2017 +0000
@@ -999,9 +999,8 @@
 !
 
 extent:ext depth:d antiAliasedPalette:aBasicColorArray bgColor:bgColor mixedArray:mixedArray
-    |colors colorMap colorIndex colorDictionary tmpDic newImage emptyBits|
-
-    colors := OrderedCollection new.
+    |colorMap colorIndex colorDictionary tmpDic newImage|
+
     colorMap := OrderedCollection new.
     colorIndex := 0.
     colorDictionary := Dictionary new.
@@ -1057,13 +1056,15 @@
             from:0
             angle:360
             withColor:Color blue
-            antiAliasedPalette:aaImgArray first
-            startWith:aaImgArray second.
+            colorDictionary:aaImgArray first
+            blendStart:aaImgArray second.
 
         aaImgArray last inspect.
     "
 
     "Modified: / 02-11-2010 / 20:57:41 / cg"
+    "Modified: / 31-01-2017 / 14:30:22 / stefan"
+    "Modified (comment): / 31-01-2017 / 15:47:39 / stefan"
 !
 
 extent:ext depth:d bits:bits
@@ -1095,7 +1096,7 @@
     "create & return a blank image of the given size.
      ST-80 compatibility"
 
-    |newImage emptyBits|
+    |newImage|
 
     newImage := (self implementorForDepth:d) new.
     newImage width:ext x height:ext y depth:d palette:aColormap.
@@ -1112,6 +1113,7 @@
 
     "Created: / 06-03-1997 / 15:24:01 / cg"
     "Modified: / 02-11-2010 / 20:56:53 / cg"
+    "Modified (format): / 31-01-2017 / 14:51:03 / stefan"
 !
 
 extent:ext depth:d palette:aColormap bits:bits
@@ -1227,7 +1229,7 @@
     depth := aForm depth.
     formsDevice := aForm device.
 
-    photometric := (depth > 8) ifTrue:#rgb ifFalse:#palette.
+    photometric := (depth > 8) ifTrue:[#rgb] ifFalse:[#palette].
 
     (formsDevice notNil and:[depth == formsDevice depth]) ifTrue:[
         "/
@@ -1274,6 +1276,8 @@
      (Image fromForm:f) inspect.
      (Image fromSubForm:(5@5 corner:10@10) in:f) inspect
     "
+
+    "Modified: / 31-01-2017 / 15:03:17 / stefan"
 !
 
 fromSubImage:anImage in:aRectangle
@@ -1286,7 +1290,7 @@
     |cls|
 
     self == Image ifTrue:[
-        cls := (self implementorForDepth:anImage depth).
+        cls := self implementorForDepth:anImage depth.
     ] ifFalse:[
         cls := self.
     ].
@@ -1322,8 +1326,9 @@
      i24 inspect
     "
 
-    "Created: 20.9.1995 / 01:05:43 / claus"
-    "Modified: 24.4.1997 / 23:13:02 / cg"
+    "Created: / 20-09-1995 / 01:05:43 / claus"
+    "Modified: / 24-04-1997 / 23:13:02 / cg"
+    "Modified (format): / 30-01-2017 / 19:45:54 / stefan"
 !
 
 new
@@ -1747,8 +1752,8 @@
             inStream := fn readStream.
             zipStream := ZipStream readOpenOn:inStream suppressHeaderAndChecksum:true.
             zipStream notNil ifTrue:[
-                [
-                    image := readerClass fromStream:zipStream.
+                image := [
+                    readerClass fromStream:zipStream.
                 ] ensure:[
                     zipStream close.
                     inStream close.
@@ -1756,8 +1761,11 @@
             ]
         ] ifFalse:[
             BadImageFormatQuerySignal handle:[:ex |
-                BadImageFormatQuerySignal isHandled ifTrue:[ ex reject ].
-                Transcript showCR:(readersErrorMsg := ex description).
+                BadImageFormatQuerySignal isHandled ifTrue:[
+                    ex reject
+                ].
+                readersErrorMsg := ex description.
+                Logger warning:readersErrorMsg.
                 image := nil.
                 ex return.
             ] do:[
@@ -1835,6 +1843,7 @@
     "
 
     "Modified: / 19-11-2007 / 15:50:52 / cg"
+    "Modified: / 31-01-2017 / 15:56:14 / stefan"
 !
 
 fromFile:aFileName inPackage:aPackage
@@ -1910,7 +1919,9 @@
     ] ifFalse:[
         dpiH := 90
     ].
-    ((dpi >= (dpiH * 0.75)) and:[dpi <= (dpiH * 1.5)]) ifTrue:[^ img].
+    (dpi between:(dpiH * 0.75) and:(dpiH * 1.5)) ifTrue:[
+        ^ img
+    ].
     mag := (dpiH / dpi) rounded.
     mag = 0 ifTrue:[^ img].
     mag = 1 ifTrue:[^ img].
@@ -1921,7 +1932,8 @@
     ].
     ^ img
 
-    "Modified: 1.2.1997 / 14:48:20 / cg"
+    "Modified: / 01-02-1997 / 14:48:20 / cg"
+    "Modified (format): / 31-01-2017 / 15:06:23 / stefan"
 !
 
 fromStream:aStream
@@ -2193,6 +2205,10 @@
     "Modified: 24.4.1997 / 19:04:52 / cg"
 !
 
+isAbstract
+    ^ self == Image
+!
+
 isImageFileSuffix:aSuffix
     "return true, if the given suffix is known to be an image files suffix"
 
@@ -2316,12 +2332,11 @@
                                                 with:aRectangle top
                                                 with:aRectangle width
                                                 with:aRectangle height).
-            [
-                img := Image fromFile:tmpFile.
+            ^ [
+                Image fromFile:tmpFile.
             ] ensure:[
                 tmpFile remove.
             ].
-            ^ img.
         ].
     ].
 
@@ -2342,7 +2357,8 @@
     img := self newForDepth:depth.
     ^ img fromScreen:aRectangle on:aDisplay grab:doGrab
 
-    "Modified: / 26.1.1998 / 22:23:08 / cg"
+    "Modified: / 26-01-1998 / 22:23:08 / cg"
+    "Modified: / 30-01-2017 / 19:49:01 / stefan"
 !
 
 fromScreenArea
@@ -2780,8 +2796,7 @@
 colorMap:aColorMap
     "set the colorMap; this also sets the photometric to a useful default."
 
-    |newSize "{ Class: SmallInteger }"
-     oldSize "{ Class: SmallInteger }"
+    |oldSize "{ Class: SmallInteger }"
      sameColors|
 
     (aColorMap isNil and:[colorMap isNil]) ifTrue:[^ self].
@@ -2790,7 +2805,8 @@
 
     photometric == #palette ifTrue:[
         "/ any change at all ?
-        (newSize := aColorMap size) >= (oldSize := colorMap size) ifTrue:[
+        oldSize := colorMap size.
+        aColorMap size >= oldSize ifTrue:[
             sameColors := true.
 
             1 to:oldSize do:[:idx |
@@ -2817,8 +2833,9 @@
         self release
     ]
 
-    "Modified: / 31.8.1995 / 03:05:59 / claus"
-    "Modified: / 22.8.1998 / 12:29:58 / cg"
+    "Modified: / 31-08-1995 / 03:05:59 / claus"
+    "Modified: / 22-08-1998 / 12:29:58 / cg"
+    "Modified: / 31-01-2017 / 14:48:56 / stefan"
 !
 
 colorMapFromArray: anArray
@@ -3033,11 +3050,13 @@
 !
 
 setColorMap:aColorMap
-    (aColorMap isNil or:[aColorMap isKindOf:Colormap]) ifFalse:[
-        colorMap := MappedPalette withColors:aColorMap
-    ] ifTrue:[
-        colorMap := aColorMap
-    ]
+    colorMap isColormap ifTrue:[
+        colorMap := aColorMap.
+    ] ifFalse:[
+        colorMap := MappedPalette withColors:aColorMap.
+    ].
+
+    "Modified: / 30-01-2017 / 19:15:34 / stefan"
 !
 
 width
@@ -3753,15 +3772,15 @@
     "/ bitsPerPixel := d.
     d == 24 ifTrue:[
         samplesPerPixel := 3.
-        bitsPerSample := #(8 8 8)
+        bitsPerSample := #[8 8 8]
     ] ifFalse:[
         d == 32 ifTrue:[
             samplesPerPixel := 4.
-            bitsPerSample := #(8 8 8 8)
+            bitsPerSample := #[8 8 8 8]
         ] ifFalse:[
             d == 16 ifTrue:[
                 samplesPerPixel := 3.
-                bitsPerSample := #(5 5 5).
+                bitsPerSample := #[5 5 5].
                 "/ bitsPerPixel := 15.
             ] ifFalse:[
                 samplesPerPixel := 1.
@@ -3771,6 +3790,7 @@
     ]
 
     "Modified: / 27-05-2007 / 16:59:47 / cg"
+    "Modified: / 30-01-2017 / 19:36:00 / stefan"
 !
 
 extent:anExtent
@@ -4102,8 +4122,9 @@
     newBits isNil ifTrue:[
         self error:'dithering failed'
     ].
-    ^ (self class newForDepth:d) extent:(self extent); depth:d; palette:colors; bits:newBits
-
+    ^ (self class newForDepth:d) extent:(self extent); depth:d; palette:colors; bits:newBits; yourself
+
+    "Modified: / 30-01-2017 / 19:40:19 / stefan"
 !
 
 asErrorDitheredMonochromeImage
@@ -4741,24 +4762,27 @@
     "Modified: 14.6.1996 / 15:17:28 / cg"
 !
 
-asGrayImageDepth:depth
+asGrayImageDepth:depthArg
     "get a gray image from the receiver"
 
-    ((self colorMap notNil and:[depth <= 8 and:[depth >= self depth]])
-    or:[ self depth >= 8 "do need for dither" ]) ifTrue:[
+    ((self colorMap notNil and:[depthArg between:self depth and:8])
+     or:[self depth >= 8 "do need for dither" ]) ifTrue:[
         ^ self copyWithColorMapProcessing:[:clr | Color brightness:(clr brightness)].
     ].
-    ^ self asGrayImageDepth:depth dither:DitherAlgorithm.
-
-    "
-     |i|
-
-     i := Image fromFile:'goodies/bitmaps/claus.gif'.
-     (i asGrayFormOn:Display) inspect.
-    "
-
-    "Modified: 10.6.1996 / 17:39:30 / cg"
-    "Created: 10.6.1996 / 19:07:08 / cg"
+    ^ self asGrayImageDepth:depthArg dither:DitherAlgorithm.
+
+    "
+     |i|
+
+     i := Image fromFile:'../../goodies/bitmaps/gifImages/claus.gif'.
+     (i asGrayImageDepth:16).
+     (i asGrayImageDepth:4).
+    "
+
+    "Modified: / 10-06-1996 / 17:39:30 / cg"
+    "Created: / 10-06-1996 / 19:07:08 / cg"
+    "Modified: / 30-01-2017 / 20:13:06 / stefan"
+    "Modified (comment): / 31-01-2017 / 13:25:29 / stefan"
 !
 
 asGrayImageDepth:depth dither:aDitherAlgorithm
@@ -5022,7 +5046,9 @@
     newBits isNil ifTrue:[
         self error:'conversion failed'
     ].
-    ^ (self class newForDepth:d) extent:(self extent); depth:d; palette:colors; bits:newBits
+    ^ (self class newForDepth:d) extent:(self extent); depth:d; palette:colors; bits:newBits; yourself
+
+    "Modified: / 30-01-2017 / 19:40:28 / stefan"
 !
 
 asOrderedDitheredGrayFormOn:aDevice
@@ -5864,9 +5890,7 @@
 
     |map clr mappedRowPixels samePhotometric
      h "{ Class: SmallInteger }"
-     w "{ Class: SmallInteger }"
-     a r g b rgbPixel
-     myDepth otherDepth|
+     w "{ Class: SmallInteger }" myDepth otherDepth|
 
     width := anImage width.
     height := anImage height.
@@ -5889,7 +5913,7 @@
     ].
     self mask:anImage mask.
 
-    samePhotometric := (photometric == anImage photometric).
+    samePhotometric := photometric == anImage photometric.
     myDepth := self depth.
     otherDepth := anImage depth.
 
@@ -5991,6 +6015,7 @@
     "
 
     "Modified: / 22-11-2016 / 03:34:08 / cg"
+    "Modified (format): / 30-01-2017 / 20:46:22 / stefan"
 !
 
 fromSubImage:anImage in:aRectangle
@@ -6217,7 +6242,7 @@
 
     pictureDepth := bitsPerSample at:1.
 
-    (#(2 4 8) includes:pictureDepth) ifFalse:[
+    (#[2 4 8] includes:pictureDepth) ifFalse:[
         self error:'currently only depth-2, 4 or 8 supported'.
         ^ nil
     ].
@@ -6328,15 +6353,15 @@
         with:(f initGC).
     ^ f
 
-    "Modified: 19.10.1997 / 05:19:44 / cg"
+    "Modified: / 19-10-1997 / 05:19:44 / cg"
+    "Modified: / 30-01-2017 / 19:37:01 / stefan"
 !
 
 greyImageAsTrueColorFormOn:aDevice
     "return a true-color device-form for the grey-image receiver.
      TODO: the pixel loops ought to be implemented as inline primitive code ..."
 
-    |depth
-     myDepth    "{ Class: SmallInteger }"
+    |myDepth    "{ Class: SmallInteger }"
      nColors    "{ Class: SmallInteger }"
      colorValues
      scaleDown
@@ -6355,7 +6380,6 @@
     "/ this is a slow fallback method; this ought to be
     "/ redefined in DepthxImage for more performance.
 
-    depth := aDevice depth.
     myDepth := self depth.
     myDepth > 16 ifTrue:[
         self error:'unsupported depth' mayProceed:true.
@@ -6440,6 +6464,7 @@
 
     "Created: / 20-10-1995 / 22:05:10 / cg"
     "Modified: / 05-02-2011 / 10:40:13 / cg"
+    "Modified (format): / 31-01-2017 / 14:42:05 / stefan"
 ! !
 
 !Image methodsFor:'converting palette images'!
@@ -6455,7 +6480,8 @@
         ^ self asMonochromeFormOn:aDevice
     ].
 
-    ((type := aDevice visualType) == #StaticGray) ifTrue:[
+    type := aDevice visualType.
+    (type == #StaticGray) ifTrue:[
         ddepth == 8 ifTrue:[
             ^ self paletteImageAsGray8FormOn:aDevice
         ].
@@ -6480,7 +6506,8 @@
 
     ^ self paletteImageAsPseudoFormOn:aDevice
 
-    "Modified: 14.6.1996 / 19:31:01 / cg"
+    "Modified: / 14-06-1996 / 19:31:01 / cg"
+    "Modified: / 30-01-2017 / 20:55:32 / stefan"
 !
 
 paletteImageAsPseudoFormOn:aDevice
@@ -6489,7 +6516,7 @@
     |tempImage d temp8|
 
     d := self depth.
-    (#(1 2 4 8) includes:d) ifTrue:[
+    (#[1 2 4 8] includes:d) ifTrue:[
         "
          fallback code for some depth's:
          create a temporary Depth8Image and use its conversion method
@@ -6507,13 +6534,14 @@
         ^ tempImage paletteImageAsPseudoFormOn:aDevice
     ].
     ^ self subclassResponsibility
+
+    "Modified: / 30-01-2017 / 19:37:57 / stefan"
 !
 
 paletteImageAsTrueColorFormOn:aDevice
     "return a true-color device-form for the palette-image receiver."
 
-    |depth
-     nColors "{ Class: SmallInteger }"
+    |nColors "{ Class: SmallInteger }"
      h       "{ Class: SmallInteger }"
      pixel   "{ Class: SmallInteger }"
      colorValues
@@ -6525,8 +6553,6 @@
     "/ this is a slow fallback method; this ought to be
     "/ redefined in DepthxImage for more performance.
 
-    depth := aDevice depth.
-
     bestFormat := self bestSupportedImageFormatFor:aDevice.
     usedDeviceDepth := bestFormat at:#depth.
     usedDeviceDepth == 1 ifTrue:[
@@ -6593,7 +6619,7 @@
             self rowAt:y into:pixelArray.
             1 to:width do:[:x |
                 pixel := pixelArray at:x.
-                newPixelArray at:x put:(colorValues at:pixel + 1 ifAbsent:0).
+                newPixelArray at:x put:(colorValues at:pixel + 1 ifAbsent:[0]).
             ].
             i rowAt:y putAll:newPixelArray.
         ].
@@ -6637,7 +6663,8 @@
 
     ^ form
 
-    "Modified: / 24.7.1998 / 00:56:14 / cg"
+    "Modified: / 24-07-1998 / 00:56:14 / cg"
+    "Modified: / 31-01-2017 / 15:01:05 / stefan"
 ! !
 
 !Image methodsFor:'converting rgb images'!
@@ -6660,9 +6687,9 @@
     shiftGreen := aDevice shiftGreen.
     shiftBlue := aDevice shiftBlue.
 
-    nRed := (1 bitShift:aDevice bitsRed).
-    nGreen := (1 bitShift:aDevice bitsGreen).
-    nBlue := (1 bitShift:aDevice bitsBlue).
+    nRed := 1 bitShift:aDevice bitsRed.
+    nGreen := 1 bitShift:aDevice bitsGreen.
+    nBlue := 1 bitShift:aDevice bitsBlue.
 
     fixColors := Array new:(nRed * nGreen * nBlue).
 
@@ -6673,7 +6700,7 @@
                 pixel := (sR bitShift:shiftRed)
                          + (sG bitShift:shiftGreen)
                          + (sB bitShift:shiftBlue).
-                fixColors at:dstIdx put:(Color colorId:(pixel)).
+                fixColors at:dstIdx put:(Color colorId:pixel).
                 dstIdx := dstIdx + 1
             ]
         ]
@@ -6684,8 +6711,9 @@
         colors:fixColors
         nRed:nRed nGreen:nGreen nBlue:nBlue
 
-    "Created: 14.6.1996 / 17:23:52 / cg"
-    "Modified: 23.6.1997 / 15:22:36 / cg"
+    "Created: / 14-06-1996 / 17:23:52 / cg"
+    "Modified: / 23-06-1997 / 15:22:36 / cg"
+    "Modified (format): / 30-01-2017 / 19:06:08 / stefan"
 !
 
 compressColorMap
@@ -6919,16 +6947,17 @@
      and clear out any device handles in the copy."
 
     bytes := bytes copy.
-    (colorMap isNil or:[colorMap isKindOf:Colormap]) ifFalse:[
+    colorMap isColormap ifTrue:[
+        colorMap := colorMap copy.
+    ] ifFalse:[
         colorMap := MappedPalette withColors:colorMap.
-    ] ifTrue:[
-        colorMap := colorMap copy.
     ].
     device := deviceForm := monoDeviceForm := fullColorDeviceForm := nil.
     mask := mask copy.
     maskedPixelsAre0 := false.
 
-    "Modified: / 22.8.1998 / 11:27:09 / cg"
+    "Modified: / 22-08-1998 / 11:27:09 / cg"
+    "Modified: / 30-01-2017 / 19:16:02 / stefan"
 !
 
 skipInstvarIndexInDeepCopy:index
@@ -6937,6 +6966,9 @@
 
     "
         self allInstanceVariableNames indexOf:#device
+        self allInstanceVariableNames indexOf:#deviceForm
+        self allInstanceVariableNames indexOf:#monoDeviceForm
+        self allInstanceVariableNames indexOf:#fullColorDeviceForm
     "
 
     index == 13 ifTrue:[
@@ -6952,6 +6984,8 @@
         ^ true "/ skip fullColorDeviceForm
     ].
     ^ false
+
+    "Modified (comment): / 31-01-2017 / 15:41:40 / stefan"
 ! !
 
 !Image methodsFor:'displaying'!
@@ -7176,9 +7210,9 @@
      w       "{Class: SmallInteger }"
      h       "{Class: SmallInteger }"
      index   "{Class: SmallInteger }"
+     lookupPos "{Class: SmallInteger }"
      ditherIds failed lastColor qScramble
-     clrLookup lookupPos
-     error clr|
+     clrLookup error clr|
 
     self depth ~~ 24 ifTrue:[^ nil].
 
@@ -7257,10 +7291,10 @@
         i := i + ((qScramble at:((b bitShift:-4) bitAnd:16r0F) + 1) bitShift:-2).
         lookupPos := i.
 
-        [index < lookupPos] whileTrue:[
-            clrLookup at:(index+1) put:(clrPosition-1-1).
-            index := index + 1
-        ]
+        index+1 to:lookupPos do:[:idx|
+            clrLookup at:idx put:(clrPosition-1-1).
+        ].
+        index := lookupPos.
     ].
     clrLookup from:index+1 to:4096 put:(ditherColors size - 1).
 
@@ -7630,6 +7664,8 @@
     ].
 
     ^ pseudoBits
+
+    "Modified: / 30-01-2017 / 19:58:45 / stefan"
 !
 
 floydSteinbergDitheredDepth8BitsColors:fixColors nRed:nRed nGreen:nGreen nBlue:nBlue
@@ -10068,7 +10104,7 @@
 
     processPixelToFill :=
         [:spX :spY |
-            |samePixel sp idx|
+            |samePixel idx|
 
             mask isNil ifTrue:[
                 samePixel := (self pixelAtX:spX y:spY) == detectedPixel
@@ -10136,7 +10172,8 @@
     self release. "/ device-image is no longer valid
     ^ allDetectedPixelCoordinates
 
-    "Modified: / 29.7.1998 / 03:09:16 / cg"
+    "Modified: / 29-07-1998 / 03:09:16 / cg"
+    "Modified (format): / 30-01-2017 / 20:57:36 / stefan"
 !
 
 rectangle: aRectangle withColor:aColor
@@ -10278,18 +10315,19 @@
      should be redefined in concrete subclasses, to avoid some processing
      when going from pixel to pixel (i.e. the byte-index and mask computations)."
 
-    |xS "{Class: SmallInteger }"
-     xE "{Class: SmallInteger }"|
-
-    xS := xStart.
-    xE := xEnd.
-    yStart to:yEnd do:[:yRun |
+    |yS "{Class: SmallInteger }"
+     yE "{Class: SmallInteger }"|
+
+    yS := yStart.
+    yE := yEnd.
+    yS to:yE do:[:yRun |
         self valuesAtY:yRun from:xStart to:xEnd do:[:xRun :pixel |
             aBlock value:xRun value:yRun value:pixel
         ]
     ]
 
-    "Modified: 7.6.1996 / 19:09:29 / cg"
+    "Modified: / 07-06-1996 / 19:09:29 / cg"
+    "Modified: / 31-01-2017 / 14:46:26 / stefan"
 ! !
 
 !Image methodsFor:'finalization'!
@@ -11845,21 +11883,19 @@
 
      ^ self
         copyWithColorMapProcessing:[:clr |
-                |newColor|
-
-                newColor := Color
-                                redByte:(255 - clr redByte)
-                                greenByte:(255 - clr greenByte)
-                                blueByte:(255 - clr blueByte)
-        ]
+                Color
+                    redByte:(255 - clr redByte)
+                    greenByte:(255 - clr greenByte)
+                    blueByte:(255 - clr blueByte)
+            ]
 
     "
      (Image fromFile:'goodies/bitmaps/gifImages/claus.gif') inspect
      (Image fromFile:'goodies/bitmaps/gifImages/claus.gif') negative inspect
     "
 
-    "Created: 20.6.1997 / 13:13:41 / cg"
-    "Modified: 20.6.1997 / 13:17:50 / cg"
+    "Created: / 20-06-1997 / 13:13:41 / cg"
+    "Modified: / 31-01-2017 / 14:43:19 / stefan"
 !
 
 rotated:degrees
@@ -11976,13 +12012,12 @@
 threeDProjected:fraction1 and:fraction2
     "return a 3D-projected version"
 
-    |dx1 dx2 newImage newBytesPerRow newBits
-     blackPixel halfW halfH m myDepth maskBits pix fr fl ml mr dm fractX my fy dstY o1 o2 df|
+    |dx1 dx2 newImage newBits
+     blackPixel halfH m myDepth maskBits pix fr fl ml mr dm fractX my fy dstY o1 df|
 
     newImage := self species new.
     newImage width:width.
     newImage height:height.
-    newBytesPerRow := newImage bytesPerRow.
     newImage createPixelStore.
     newBits := newImage bits.
     newImage photometric:photometric.
@@ -12028,7 +12063,6 @@
     "/ now, walk over destination pixels,
     "/ fetching from source.
 
-    halfW := (width - 1) / 2.0.
     halfH := (height - 1) / 2.0.
 
     "/  --------------------------------------------------------------
@@ -12065,7 +12099,6 @@
         my := ml + (dm * fractX).
         fy := fl + (df * fractX).
         o1 := dx1 * fractX.
-        o2 := dx2 * fractX.
 
         0 to:height-1 do:[:srcY |
             srcY < halfH ifTrue:[
@@ -12091,6 +12124,8 @@
      (i threeDProjected:0.1 and:0.3) inspect
      (i threeDProjected:0.1 and:0.1) inspect
     "
+
+    "Modified: / 31-01-2017 / 15:04:22 / stefan"
 !
 
 withColorResolutionReducedBy:numBits
@@ -12138,7 +12173,7 @@
         ].
 
 
-    photometric == #palette ifFalse:[
+    photometric ~~ #palette ifTrue:[
         "/ direct manipulation of the pixels
         0 to:yMax do:[:y |
             0 to:xMax do:[:x |
@@ -12153,7 +12188,7 @@
         anyChange ifFalse:[
             ^ nil
         ].
-    ] ifTrue:[
+    ] ifFalse:[
         "/ manipulate the colormap
         0 to:yMax do:[:y |
             0 to:xMax do:[:x |
@@ -12192,6 +12227,8 @@
     ].
 
     ^ newImage
+
+    "Modified: / 30-01-2017 / 20:15:02 / stefan"
 !
 
 withPixelFunctionApplied:pixelFunctionBlock
@@ -12800,16 +12837,17 @@
 computeBitsFromPixelFunction
     "compute the bits from the pixelfunction"
 
-    |bpr idx|
+    |bpr|
 
     bpr := self bytesPerRow.
     bytes := ByteArray new:(bpr * height).
-    idx := 1.
     0 to:height-1 do:[:y |
         0 to:width-1 do:[:x |
             self pixelAtX:x y:y put:(pixelFunction value:x value:y).
         ]
     ].
+
+    "Modified: / 31-01-2017 / 14:39:26 / stefan"
 !
 
 pixelFunction
@@ -13477,13 +13515,14 @@
     samplesPerPixel == 4 ifTrue:[
         "/ assume that the cyan bits are the leftMost bits (cmyk)
 
-        bitsPerSample = #(8 8 8 8) ifTrue:[
+        (#[8 8 8 8] isSameSequenceAs:bitsPerSample) ifTrue:[
             ^ 100.0 / 255 * (pixel bitAnd:16rFF)
         ]
     ].
 
     self subclassResponsibility
 
+    "Modified (format): / 31-01-2017 / 13:15:23 / stefan"
 !
 
 blueBitsOf:pixel
@@ -13700,14 +13739,14 @@
 
     samplesPerPixel == 3 ifTrue:[
         "/ assume that the cyan bits are the leftMost bits (cmy)
-
-        bitsPerSample = #(8 8 8) ifTrue:[
+        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
             ^ 100.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
         ]
     ].
 
     self subclassResponsibility
 
+    "Modified (format): / 31-01-2017 / 13:15:56 / stefan"
 !
 
 cyanComponentOfCMYK:pixel
@@ -13716,14 +13755,14 @@
 
     samplesPerPixel == 4 ifTrue:[
         "/ assume that the cyan bits are the leftMost bits (cmyk)
-
-        bitsPerSample = #(8 8 8 8) ifTrue:[
+        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
             ^ 100.0 / 255 * ((pixel bitShift:-24) bitAnd:16rFF)
         ]
     ].
 
     self subclassResponsibility
 
+    "Modified: / 31-01-2017 / 13:16:14 / stefan"
 !
 
 greenBitsOf:pixel
@@ -13851,15 +13890,14 @@
      return the magenta component scaled to a percentage (0 .. 100) of a pixelValue."
 
     samplesPerPixel == 3 ifTrue:[
-        "/ assume that the cyan bits are the leftMost bits (cmy)
-
-        bitsPerSample = #(8 8 8) ifTrue:[
+        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
             ^ 100.0 / 255 * ((pixel bitShift:-8) bitAnd:16rFF)
         ]
     ].
 
     self subclassResponsibility
 
+    "Modified (format): / 31-01-2017 / 13:19:06 / stefan"
 !
 
 magentaComponentOfCMYK:pixel
@@ -13867,15 +13905,14 @@
      return the magenta component scaled to a percentage (0 .. 100) of a pixelValue."
 
     samplesPerPixel == 4 ifTrue:[
-        "/ assume that the cyan bits are the leftMost bits (cmyk)
-
-        bitsPerSample = #(8 8 8 8) ifTrue:[
+        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
             ^ 100.0 / 255 * ((pixel bitShift:-16) bitAnd:16rFF)
         ]
     ].
 
     self subclassResponsibility
 
+    "Modified (format): / 31-01-2017 / 13:19:11 / stefan"
 !
 
 nColorsUsed
@@ -13885,12 +13922,13 @@
 pixelArraySpecies
     "return the kind of pixel-value container in rowAt:/rowAt:put: methods"
 
-    |d|
-
-    (d := self depth) <= 8 ifTrue:[^ ByteArray].
+    self depth <= 8 ifTrue:[^ ByteArray].
+    "/ (d := self depth) <= 8 ifTrue:[^ ByteArray].
     "/ d <= 16 ifTrue:[^ WordArray].
     "/ ^ IntegerArray
     ^ Array
+
+    "Modified: / 31-01-2017 / 14:52:42 / stefan"
 !
 
 realColorMap
@@ -14295,7 +14333,7 @@
     "given a color, return the corresponding pixel value.
      Non-representable colors return nil."
 
-    |pixel redBits greenBits blueBits alphaBits r g b a|
+    |pixel redBits greenBits blueBits r g b a|
 
     r := rgb bitAnd:16rFF.
     g := (rgb bitShift:-8) bitAnd:16rFF.
@@ -14346,7 +14384,7 @@
             redBits := bitsPerSample at:1.
             greenBits := bitsPerSample at:2.
             blueBits := bitsPerSample at:3.
-            alphaBits := bitsPerSample at:4.
+"/            alphaBits := bitsPerSample at:4.
             pixel := (((((a bitShift:redBits) + r) bitShift:greenBits) + g) bitShift:blueBits) + b.
             ^ pixel
         ]
@@ -14355,6 +14393,7 @@
     ^ nil
 
     "Created: / 15-01-2008 / 15:55:08 / cg"
+    "Modified: / 31-01-2017 / 14:45:00 / stefan"
 !
 
 valueFromRedBits:redBits greenBits:greenBits blueBits:blueBits
@@ -14396,9 +14435,7 @@
      return the yellow component scaled to a percentage (0 .. 100) of a pixelValue."
 
     samplesPerPixel == 3 ifTrue:[
-        "/ assume that the cyan bits are the leftMost bits (cmy)
-
-        bitsPerSample = #(8 8 8) ifTrue:[
+        (#[8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
             ^ 100.0 / 255 * (pixel bitAnd:16rFF)
         ]
     ].
@@ -14406,6 +14443,7 @@
 
     self subclassResponsibility
 
+    "Modified (format): / 31-01-2017 / 13:18:47 / stefan"
 !
 
 yellowComponentOfCMYK:pixel
@@ -14413,15 +14451,14 @@
      return the yellow component scaled to a percentage (0 .. 100) of a pixelValue."
 
     samplesPerPixel == 4 ifTrue:[
-        "/ assume that the cyan bits are the leftMost bits (cmyk)
-
-        bitsPerSample = #(8 8 8 8) ifTrue:[
+        (#[8 8 8 8] isSameSequenceAs:bitsPerSample)ifTrue:[
             ^ 100.0 / 255 * ((pixel bitShift:-8) bitAnd:16rFF)
         ]
     ].
 
     self subclassResponsibility
 
+    "Modified: / 31-01-2017 / 13:19:00 / stefan"
 ! !
 
 !Image methodsFor:'saving on file'!
@@ -14643,8 +14680,8 @@
             ddepth := aDrawable depth.
         ]. 
         photometric := aDrawable photometric.
-        samplesPerPixel := ddepth == 24 ifTrue:3 ifFalse:1.
-        bitsPerSample := ddepth == 24 ifTrue:#[8 8 8] ifFalse:[ByteArray with:bpp].
+        samplesPerPixel := ddepth == 24 ifTrue:[3] ifFalse:[1].
+        bitsPerSample := ddepth == 24 ifTrue:[#[8 8 8]] ifFalse:[ByteArray with:bpp].
     ] ifFalse:[
         "get some attributes of the display device"
         visType := device visualType.
@@ -14677,7 +14714,7 @@
     "/                                       with:device bitsGreen
     "/                                       with:device bitsBlue
                     bpp := "bitsPerPixel :=" 24.
-                    bitsPerSample := #(8 8 8).
+                    bitsPerSample := #[8 8 8].
                 ] ifFalse:[
                     self error:'screen visual not supported'.
                     ^ nil
@@ -14761,9 +14798,9 @@
     bytesPerLineIn := (info at:#bytesPerLine).           "what I got"
     bytesPerLine := (w * bpp + 7) // 8.                  "what I want"
 
-    maskR := info at:#redMask ifAbsent:0.
-    maskG := info at:#greenMask ifAbsent:0.
-    maskB := info at:#blueMask ifAbsent:0.
+    maskR := info at:#redMask ifAbsent:[0].
+    maskG := info at:#greenMask ifAbsent:[0].
+    maskB := info at:#blueMask ifAbsent:[0].
 
     ((bytesPerLine ~~ bytesPerLineIn)
      or:[bitsPerPixelIn ~~ bpp]) ifTrue:[
@@ -14898,8 +14935,8 @@
         self setColorMap:map.
     ].
 
-    "Modified: / 9.1.1998 / 21:32:36 / stefan"
-    "Modified: / 7.2.1998 / 18:23:07 / cg"
+    "Modified: / 07-02-1998 / 18:23:07 / cg"
+    "Modified: / 31-01-2017 / 15:02:52 / stefan"
 !
 
 fromScreen:aRectangle
--- a/Make.spec	Wed Feb 01 21:42:41 2017 +0000
+++ b/Make.spec	Wed Feb 01 22:17:58 2017 +0000
@@ -60,6 +60,7 @@
 	DeviceHandle \
 	DisplayTransform \
 	Event \
+	FillStyle \
 	FontDescription \
 	GraphicsContext \
 	GraphicsDevice \
@@ -73,6 +74,7 @@
 	WindowSensor \
 	stx_libview \
 	BeveledBorder \
+	BitmapFillStyle \
 	BitmapFont \
 	Border \
 	ColorPalette \
@@ -91,14 +93,20 @@
 	Font \
 	Form \
 	GradientBackground \
+	GradientFillStyle \
 	HostGraphicsDevice \
 	ImageBackground \
 	MacButtonBorder \
 	NoBackground \
+	OrientedFillStyle \
+	RoundButtonBorder \
 	ScaleTransform \
 	SimpleBorder \
 	SolidBackground \
+	SolidFillStyle \
 	SynchronousWindowSensor \
+	TranslationTransform \
+	TranslucentColor \
 	ViewStyle \
 	WindowEvent \
 	DeviceWorkstation \
@@ -111,7 +119,6 @@
 	SimpleView \
 	WidgetEvent \
 	WindowingTransformation \
-	XGraphicsContext \
 	FixedPaletteWithAlpha \
 	MonoMappedPalette \
 	ShadowView \
@@ -121,6 +128,9 @@
 	StandardSystemView \
 	ModalBox \
 
+WIN32_CLASSES= \
+	WinWorkstation \
+
 UNIX_CLASSES= \
 	FcConstants \
 	FcPattern \
@@ -129,9 +139,6 @@
 	XWorkstation \
 	GLXWorkstation \
 
-WIN32_CLASSES= \
-	WinWorkstation \
-
 
 
 
@@ -145,6 +152,7 @@
     $(OUTDIR)DeviceHandle.$(O) \
     $(OUTDIR)DisplayTransform.$(O) \
     $(OUTDIR)Event.$(O) \
+    $(OUTDIR)FillStyle.$(O) \
     $(OUTDIR)FontDescription.$(O) \
     $(OUTDIR)GraphicsContext.$(O) \
     $(OUTDIR)GraphicsDevice.$(O) \
@@ -158,6 +166,7 @@
     $(OUTDIR)WindowSensor.$(O) \
     $(OUTDIR)stx_libview.$(O) \
     $(OUTDIR)BeveledBorder.$(O) \
+    $(OUTDIR)BitmapFillStyle.$(O) \
     $(OUTDIR)BitmapFont.$(O) \
     $(OUTDIR)Border.$(O) \
     $(OUTDIR)ColorPalette.$(O) \
@@ -176,14 +185,20 @@
     $(OUTDIR)Font.$(O) \
     $(OUTDIR)Form.$(O) \
     $(OUTDIR)GradientBackground.$(O) \
+    $(OUTDIR)GradientFillStyle.$(O) \
     $(OUTDIR)HostGraphicsDevice.$(O) \
     $(OUTDIR)ImageBackground.$(O) \
     $(OUTDIR)MacButtonBorder.$(O) \
     $(OUTDIR)NoBackground.$(O) \
+    $(OUTDIR)OrientedFillStyle.$(O) \
+    $(OUTDIR)RoundButtonBorder.$(O) \
     $(OUTDIR)ScaleTransform.$(O) \
     $(OUTDIR)SimpleBorder.$(O) \
     $(OUTDIR)SolidBackground.$(O) \
+    $(OUTDIR)SolidFillStyle.$(O) \
     $(OUTDIR)SynchronousWindowSensor.$(O) \
+    $(OUTDIR)TranslationTransform.$(O) \
+    $(OUTDIR)TranslucentColor.$(O) \
     $(OUTDIR)ViewStyle.$(O) \
     $(OUTDIR)WindowEvent.$(O) \
     $(OUTDIR)DeviceWorkstation.$(O) \
@@ -207,6 +222,9 @@
     $(OUTDIR)ModalBox.$(O) \
     $(OUTDIR)extensions.$(O) \
 
+WIN32_OBJS= \
+    $(OUTDIR)WinWorkstation.$(O) \
+
 UNIX_OBJS= \
     $(OUTDIR)FcConstants.$(O) \
     $(OUTDIR)FcPattern.$(O) \
@@ -215,8 +233,5 @@
     $(OUTDIR)XWorkstation.$(O) \
     $(OUTDIR)GLXWorkstation.$(O) \
 
-WIN32_OBJS= \
-    $(OUTDIR)WinWorkstation.$(O) \
 
 
-
--- a/SimpleView.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/SimpleView.st	Wed Feb 01 22:17:58 2017 +0000
@@ -10383,20 +10383,26 @@
      when problem or warning conditions arise.
      Someone may redefine this to flash its contents (instead of black/white)."
 
+    shown ifFalse:[^ self]. 
+
     self fill:flashColor.
     messageOrNil notNil ifTrue:[
-	self withForeground:self whiteColor do:[
-	    self displayString:messageOrNil centeredAt:(self center).
-	].
+        gc withForeground:self whiteColor do:[
+            self displayString:messageOrNil centeredAt:(self center).
+        ].
     ].
     Delay waitForSeconds:0.1.
+    shown ifFalse:[^ self]. 
+    
     self fill:self whiteColor.
     messageOrNil notNil ifTrue:[
-	self withForeground:self blackColor do:[
-	    self displayString:messageOrNil centeredAt:(self center).
-	].
+        gc withForeground:self blackColor do:[
+            self displayString:messageOrNil centeredAt:(self center).
+        ].
     ].
     Delay waitForSeconds:0.1.
+    shown ifFalse:[^ self]. 
+
     self fill:viewBackground.
     self invalidate
 
--- a/TranslucentColor.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/TranslucentColor.st	Wed Feb 01 22:17:58 2017 +0000
@@ -38,8 +38,7 @@
 
 documentation
 "
-    TranslucentColor represents colors with an alpha (transparency)
-    channel.
+    TranslucentColor represents colors with an alpha (transparency) channel.
     This is experimental and not yet used by the system.
 
     [Instance variables:]
@@ -168,5 +167,9 @@
 
 version
     ^ '$Header$'
+!
+
+version_CVS
+    ^ '$Header$'
 ! !
 
--- a/WindowGroup.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/WindowGroup.st	Wed Feb 01 22:17:58 2017 +0000
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1993 by Claus Gittinger
 	      All Rights Reserved
@@ -1071,10 +1073,11 @@
      checkBlock is evaluated and the modal loop is left, 
      whenever false is returned."
 
-    ^ self startupModal:checkBlock forGroup:(WindowGroup activeGroup).
-
-    "Created: 10.12.1995 / 14:15:11 / cg"
-    "Modified: 20.8.1997 / 17:54:33 / cg"
+    ^ self startupModal:checkBlock forGroup:(self class activeGroup).
+
+    "Created: / 10-12-1995 / 14:15:11 / cg"
+    "Modified: / 20-08-1997 / 17:54:33 / cg"
+    "Modified: / 31-01-2017 / 20:43:37 / stefan"
 !
 
 startupModal:checkBlock forGroup:mainGroup
@@ -1175,7 +1178,7 @@
       the caller - which may make a difference in case of errors and/or
       blocking operations ...]"
 
-    |top nm dev devNm invokingApp|
+    |dev invokingApp|
 
     previousGroup := nil.
 
@@ -1188,30 +1191,28 @@
         "/ (well, not really forever ... ;-)
 
         myProcess := [
-            [
-                startupAction value.
-                self showWaitCursorWhenBusyForMillis:400.
-                self eventLoopWhile:[true] onLeave:[]
-            ] ensure:[
-                |dev w app|
-
-                (w := self mainView) notNil ifTrue:[
-                    (app := w application) notNil ifTrue:[
-                        app release
-                    ]
-                ].
-                (dev := self graphicsDevice) notNil ifTrue:[
-                    dev deviceIOErrorSignal handle:[:ex |
-                    ] do:[
-                        "/ just in case the view did not yet have a chance to 
-                        "/ shutDown properly (process killed in processMonitor)
-                        views notNil ifTrue:[
+                [
+                    startupAction value.
+                    self showWaitCursorWhenBusyForMillis:400.
+                    self eventLoopWhile:[true] onLeave:[]
+                ] ensure:[
+                    |dev w app|
+
+                    (w := self mainView) notNil ifTrue:[
+                        (app := w application) notNil ifTrue:[
+                            app release
+                        ]
+                    ].
+                    dev := self graphicsDevice.
+                    (dev notNil and:[views notNil]) ifTrue:[
+                        dev deviceIOErrorSignal catch:[
+                            "/ just in case the view did not yet have a chance to 
+                            "/ shutDown properly (process killed in processMonitor)
                             self closeDownViews
                         ]
                     ]
                 ]
-            ]
-        ] newProcess.
+            ] newProcess.
 
         self setProcessNameWithRedirectIndicator:''.
         myProcess priority:processPriority;
@@ -1236,17 +1237,17 @@
 
         "/ allow for the currently active application,
         "/ to hook on new-application process creation.
-        (invokingApp := WindowGroup activeMainApplication) notNil ifTrue:[
+        (invokingApp := self class activeMainApplication) notNil ifTrue:[
             invokingApp postApplicationProcessCreate:myProcess windowGroup:self.
         ].
-        top := nm := dev := devNm := invokingApp:= nil.  "/ to avoid dangling references via blocks home context.
+        dev := invokingApp:= nil.  "/ to avoid dangling references via blocks home context.
 
         myProcess resume.
     ]
 
-    "Modified: / 13-12-1995 / 14:04:53 / stefan"
     "Created: / 24-07-1997 / 12:52:04 / cg"
     "Modified: / 17-09-2007 / 10:59:34 / cg"
+    "Modified: / 31-01-2017 / 21:45:42 / stefan"
 !
 
 unhideTopViews
@@ -1373,9 +1374,7 @@
         ActivityNotifications send a #showActivity: if nonModal, 
         otherwise they are ignored."
 
-    |thisProcess signalsToHandle|
-
-    thisProcess := Processor activeProcess.
+    |signalsToHandle|
 
     signalsToHandle := SignalSet
                 with:LeaveSignal 
@@ -1390,7 +1389,7 @@
 
     WindowGroupQuerySignal answer:self do:[
         [
-            |p g s mainGroup mySema waitSema mainSema groupForSema|
+            |g s mainGroup mySema waitSema mainSema groupForSema|
 
             waitSema := mySema := mySensor eventSemaphore.
 
@@ -1477,7 +1476,7 @@
                     ].
                     ex proceedWith:nil.
                 ] do:[
-                    |dev gotSema mainView|
+                    |gotSema mainView|
 
                     (mainGroup notNil or:[mySensor hasEvents not]) ifTrue:[
                         waitSema isNil ifTrue:[
@@ -1500,11 +1499,7 @@
                                 self graphicsDevice flush.
                             ].
 
-                        self isModal ifTrue:[
-                            thisProcess setStateTo:#modalEventWait if:#active.
-                        ] ifFalse:[
-                            thisProcess setStateTo:#eventWait if:#active.
-                        ].
+                        Processor activeProcess setStateTo:(self isModal ifTrue:[#modalEventWait] ifFalse:[#eventWait]) if:#active.
 
                         "/ now, wait for an event to arrive
                         gotSema := waitSema wait.
@@ -1554,8 +1549,8 @@
         ] ensure:cleanupActions
     ]
 
-    "Modified: / 14-12-1995 / 11:12:24 / stefan"
     "Modified: / 06-07-2010 / 11:47:27 / cg"
+    "Modified (format): / 31-01-2017 / 20:43:00 / stefan"
 !
 
 executePostEventHooksFor:anEvent
@@ -1649,229 +1644,223 @@
     self processExposeEvents.
 
     [
-        LastEventQuerySignal handle:[:ex |
-            ex proceedWith:event
-        ] do:[
-            [mySensor notNil
-             and:[(event := mySensor nextEvent) notNil]] whileTrue:[
-                ignore := false.
-                focus := focusView.
-                modalDelegate := false.
-                modalTop := nil.
-
-                modalGroup notNil ifTrue:[
-                    "/ an incoming event for a masterView, 
-                    "/ while being blocked by some other modalView.
-
-                    modalTops := modalGroup topViews.
-                    modalTops size > 0 ifTrue:[
-                        modalTop := modalTops first.
+        [mySensor notNil
+         and:[(event := mySensor nextEvent) notNil]] whileTrue:[
+            ignore := false.
+            focus := focusView.
+            modalDelegate := false.
+            modalTop := nil.
+
+            modalGroup notNil ifTrue:[
+                "/ an incoming event for a masterView, 
+                "/ while being blocked by some other modalView.
+
+                modalTops := modalGroup topViews.
+                modalTops notEmptyOrNil ifTrue:[
+                    modalTop := modalTops first.
+                ].
+
+                event isKeyEvent ifTrue:[
+                    "/ forward keyboard events to my modal
+                    "/ groups first topView ...
+                    modalTop notNil ifTrue:[
+                        focus := modalTop.
+                        modalDelegate := true.
+                    ].
+                    modalGroup focusView notNil ifTrue:[
+                        focus := modalGroup focusView
                     ].
-
-                    event isKeyEvent ifTrue:[
-                        "/ forward keyboard events to my modal
-                        "/ groups first topView ...
-                        modalTop notNil ifTrue:[
-                            focus := modalTop.
-                            modalDelegate := true.
+                ] ifFalse:[
+                    event isFocusEvent ifTrue:[
+                        event isFocusInEvent ifTrue:[
+                            "/ move focus over to modalBox
+                            modalTop notNil ifTrue:[
+                                modalTop getKeyboardFocus.
+                                "/ focusIn is forwarded to the modalGroup
+                                "/ (since keyboard is forwarded)
+                                event view:modalTop.
+                                focus := modalTop.
+                            ]
+                        ] ifFalse:[
+                            "/ focusOut goes to both the modal and
+                            "/ the blocked main-group
+                            "/ (actually, only the very first focusOut
+                            "/  is needed in the mainGroup (to turn off the cursor)
+                            "/  all others are only needed in the modalGroup)
+
+"/                            syntheticEvent := event copy.
+"/                            syntheticEvent view:modalTop.
+"/                            LastEventQuerySignal handle:[:ex |
+"/                                ex proceedWith:syntheticEvent
+"/                            ] do:[
+"/                                syntheticEvent sendEventWithFocusOn:nil.
+"/                            ].
+
+                            "/ event view:modalTop.
                         ].
-                        modalGroup focusView notNil ifTrue:[
-                            focus := modalGroup focusView
-                        ].
+                        modalDelegate := true.
                     ] ifFalse:[
-                        event isFocusEvent ifTrue:[
-                            event isFocusInEvent ifTrue:[
-                                "/ move focus over to modalBox
-                                modalTop notNil ifTrue:[
-                                    modalTop getKeyboardFocus.
-                                    "/ focusIn is forwarded to the modalGroup
-                                    "/ (since keyboard is forwarded)
-                                    event view:modalTop.
-                                    focus := modalTop.
-                                ]
-                            ] ifFalse:[
-                                "/ focusOut goes to both the modal and
-                                "/ the blocked main-group
-                                "/ (actually, only the very first focusOut
-                                "/  is needed in the mainGroup (to turn off the cursor)
-                                "/  all others are only needed in the modalGroup)
-
-    "/                            syntheticEvent := event copy.
-    "/                            syntheticEvent view:modalTop.
-    "/                            LastEventQuerySignal handle:[:ex |
-    "/                                ex proceedWith:syntheticEvent
-    "/                            ] do:[
-    "/                                syntheticEvent sendEventWithFocusOn:nil.
-    "/                            ].
-
-                                "/ event view:modalTop.
-                            ].
-                            modalDelegate := true.
+                        event isPointerLeaveEvent ifTrue:[
                         ] ifFalse:[
-                            event isPointerLeaveEvent ifTrue:[
-                            ] ifFalse:[
-                                event isUserEvent ifTrue:[
-                                    ignore := true.
-
-                                    event isButtonPressEvent ifTrue:[
-                                        "/ raise the modalTop and beep 
-                                        event view device beep.
-                                        modalTop notNil ifTrue:[ modalTop raise ].
-                                    ]
+                            event isUserEvent ifTrue:[
+                                ignore := true.
+
+                                event isButtonPressEvent ifTrue:[
+                                    "/ raise the modalTop and beep 
+                                    event view device beep.
+                                    modalTop notNil ifTrue:[ modalTop raise ].
                                 ]
                             ]
                         ]
-                    ].
-                    "/ also update the slave-sensor's modifier state from the master-sensor's
-                    "/ state. This is needed for a popUpView to see the correct shift-, ctrl- and alt states
-                    "/ in its own sensor.
-
-                    "/ cg: disabled 15-jun-2014
-                    "/ mhmh - something seems to have changed on a lower level,
-                    "/ so now the modal sensor already has the correct sensor state
-                    "/ (as opposed to previous versions, where this was not true).
-                    "/ Now, enabling the following line leads to a confirmation dialog to NOT
-                    "/ behave correctly w.r.t. Shift-CursorRight.
-                    "/ I wonder, what is responsible for that fixing side effect... (sigh)
-                    "/ modalGroup sensor updateModifierStatesFrom:mySensor
+                    ]
                 ].
-
-                ignore ifFalse:[
-                    (views notNil or:[topViews notNil]) ifTrue:[
-
-                        "/ give eventRecorders, catchers etc. 
-                        "/ a chance to eat or modify that event
-
-                        modalGroup notNil ifTrue:[
-                            ignore := (modalGroup executePreEventHooksFor:event).
-                        ] ifFalse:[
-                            ignore := false
-                        ].
+                "/ also update the slave-sensor's modifier state from the master-sensor's
+                "/ state. This is needed for a popUpView to see the correct shift-, ctrl- and alt states
+                "/ in its own sensor.
+
+                "/ cg: disabled 15-jun-2014
+                "/ mhmh - something seems to have changed on a lower level,
+                "/ so now the modal sensor already has the correct sensor state
+                "/ (as opposed to previous versions, where this was not true).
+                "/ Now, enabling the following line leads to a confirmation dialog to NOT
+                "/ behave correctly w.r.t. Shift-CursorRight.
+                "/ I wonder, what is responsible for that fixing side effect... (sigh)
+                "/ modalGroup sensor updateModifierStatesFrom:mySensor
+            ].
+
+            ignore ifFalse:[
+                (views notNil or:[topViews notNil]) ifTrue:[
+                    "/ give eventRecorders, catchers etc. 
+                    "/ a chance to eat or modify that event
+                    modalGroup notNil ifTrue:[
+                        ignore := modalGroup executePreEventHooksFor:event.
+                    ] ifFalse:[
+                        ignore := false
+                    ].
+                    ignore ifFalse:[
+                        ignore := self executePreEventHooksFor:event.
                         ignore ifFalse:[
-                            ignore := (self executePreEventHooksFor:event).
+                            evView := event view.
+
+                            (event isKeyEvent 
+                            and:[(keyboardProcessor := (modalTop ? evView topView) keyboardProcessor) notNil]) ifTrue:[
+                                ignore := keyboardProcessor processEvent:event forModalView:modalTop
+                            ].
+
                             ignore ifFalse:[
-                                evView := event view.
-
-                                (event isKeyEvent 
-                                and:[(keyboardProcessor := (modalTop ? evView topView) keyboardProcessor) notNil]) ifTrue:[
-                                    ignore := keyboardProcessor processEvent:event forModalView:modalTop
-                                ].
-
-                                ignore ifFalse:[
-                                    "/ event handling below will vanish ...
-                                    "/ (keyboardProcessor will do it eventually)
-
-                                    event isKeyPressEvent ifTrue:[
-                                        event key == #Escape ifTrue:[
-                                            modalDelegate ifTrue:[
-                                                top := modalTop.
-                                            ] ifFalse:[
-                                                (isModal and:[topViews size > 0]) ifTrue:[
-                                                    top := topViews first.
+                                "/ event handling below will vanish ...
+                                "/ (keyboardProcessor will do it eventually)
+
+                                event isKeyPressEvent ifTrue:[
+                                    event key == #Escape ifTrue:[
+                                        modalDelegate ifTrue:[
+                                            top := modalTop.
+                                        ] ifFalse:[
+                                            (isModal and:[topViews notEmptyOrNil]) ifTrue:[
+                                                top := topViews first.
+                                            ]
+                                        ].
+                                        top notNil ifTrue:[
+                                            "/ a popUpView does it himself (only closing one submenu)
+                                            (top isPopUpView not
+                                             or:[UserPreferences current closePopUpMenuChainOnEscape]) ifTrue:[
+                                                top escapeIsCancel ifTrue:[
+                                                    top closeCancel.
+                                                    "/ top hideRequest. 
+                                                    top realized ifFalse:[ ignore := true ].
                                                 ]
-                                            ].
-                                            top notNil ifTrue:[
-                                                "/ a popUpView does it himself (only closing one submenu)
-                                                (top isPopUpView not
-                                                or:[ UserPreferences current closePopUpMenuChainOnEscape ]) ifTrue:[
-                                                    top escapeIsCancel ifTrue:[
-                                                        top closeCancel.
-                                                        "/ top hideRequest. 
-                                                        top realized ifFalse:[ ignore := true ].
-                                                    ]
-                                                ]
-                                            ].
-                                        ]
-                                    ] ifFalse:[
-                                        "/
-                                        "/ keep track of which view has the pointer
-                                        "/
-                                        event isPointerEnterEvent ifTrue:[
-                                            pointerView := evView
-                                        ] ifFalse:[
-                                            event isPointerLeaveEvent ifTrue:[
-                                                pointerView := nil
                                             ]
-                                        ]
-                                    ].
+                                        ].
+                                    ]
+                                ] ifFalse:[
+                                    "/
+                                    "/ keep track of which view has the pointer
+                                    "/
+                                    event isPointerEnterEvent ifTrue:[
+                                        pointerView := evView
+                                    ] ifFalse:[event isPointerLeaveEvent ifTrue:[
+                                        pointerView := nil
+                                    ]].
                                 ].
                             ].
                         ].
-
-                        ignore ifFalse:[
-                            "/
-                            "/ buttonPress events turn off explicit focus, and reverts
-                            "/ to implicit focus control
-                            "/ This used to be done for every click -
-                            "/ but behaved ugly if clicking in a scrollbar ...
-
-                            "/ XXX: move to dispatchEvent
-                            event isButtonPressEvent ifTrue:[
-                                (evView wantsFocusWithButtonPress) ifTrue:[
-                                    "/ cannot use 'evView requestFocus' here,
-                                    "/ since we want to enforce it without giving the
-                                    "/ view a chance to circumvent this.
-
-                                    "/ evView requestFocus.
-                                    self focusView:evView.
-                                ].
+                    ].
+
+                    ignore ifFalse:[
+                        "/
+                        "/ buttonPress events turn off explicit focus, and reverts
+                        "/ to implicit focus control
+                        "/ This used to be done for every click -
+                        "/ but behaved ugly if clicking in a scrollbar ...
+
+                        "/ XXX: move to dispatchEvent
+                        event isButtonPressEvent ifTrue:[
+                            (evView wantsFocusWithButtonPress) ifTrue:[
+                                "/ cannot use 'evView requestFocus' here,
+                                "/ since we want to enforce it without giving the
+                                "/ view a chance to circumvent this.
+
+                                "/ evView requestFocus.
+                                self focusView:evView.
                             ].
-
-                            (busyHook notNil and:[busyHookBlock isNil]) ifTrue:[
-                                (event isKeyEvent or:[event isButtonPressEvent]) ifTrue:[
-                                    "/ start a timeout action - to invoke the busyHook after some time
-                                    busyHookCalled := false.
-                                    busyHookBlock := [ 
-                                                        (inModalLoop ~~ true and:[busyHookCalled not]) ifTrue:[ 
-                                                            busyHook value:true. 
-                                                            busyHookCalled := true 
-                                                        ] 
-                                                     ].
-                                    Processor 
-                                        addTimedBlock:busyHookBlock 
-                                        for:Processor timeoutHandlerProcess
-                                        afterMilliseconds:(busyHookTimeout ? BusyHookTime ? 150).
-                                ].
+                        ].
+
+                        (busyHook notNil and:[busyHookBlock isNil]) ifTrue:[
+                            (event isKeyEvent or:[event isButtonPressEvent]) ifTrue:[
+                                "/ start a timeout action - to invoke the busyHook after some time
+                                busyHookCalled := false.
+                                busyHookBlock := [ 
+                                                    (inModalLoop ~~ true and:[busyHookCalled not]) ifTrue:[ 
+                                                        busyHook value:true. 
+                                                        busyHookCalled := true 
+                                                    ] 
+                                                 ].
+                                Processor 
+                                    addTimedBlock:busyHookBlock 
+                                    for:Processor timeoutHandlerProcess
+                                    afterMilliseconds:(busyHookTimeout ? BusyHookTime ? 150).
                             ].
-                            event isMessageSendEvent ifTrue:[
-                                "/ a synthetic event (delayed message)
+                        ].
+                        event isMessageSendEvent ifTrue:[
+                            "/ a synthetic event (delayed message)
 "/ cg: seems to not be a good idea (see modalLoopStarts):
 "/ if in a modal-loop, do not process now, but repush onto the queue
 "/                                modalGroup notNil ifTrue:[
 "/                                    mySensor pushEvent:event
 "/                                ] ifFalse:[
-                                    event value 
+                                event value 
 "/                                ]
+                        ] ifFalse:[
+                            "
+                             if there is no view information in the event,
+                             it must have been sent directly to the sensor.
+                             Send it to the first topView.
+                            "
+                            (evReceiver := evView) isNil ifTrue:[
+                                (firstTop := topViews first) notNil ifTrue:[
+                                    event isApplicationEvent ifTrue:[
+                                        evReceiver := firstTop application ? firstTop
+                                    ] ifFalse:[
+                                        evReceiver := firstTop.
+                                    ]. 
+                                ]
+                            ].
+                            evReceiver isNil ifTrue:[
+                                ('WindowGroup [warning]: no receiver to dispatch ' , event type asString , '-event to. Ignored.') infoPrintCR.
                             ] ifFalse:[
-                                "
-                                 if there is no view information in the event,
-                                 it must have been sent directly to the sensor.
-                                 Send it to the first topView.
-                                "
-                                (evReceiver := evView) isNil ifTrue:[
-                                    (firstTop := topViews first) notNil ifTrue:[
-                                        event isApplicationEvent ifTrue:[
-                                            evReceiver := firstTop application ? firstTop
-                                        ] ifFalse:[
-                                            evReceiver := firstTop.
-                                        ]. 
-                                    ]
-                                ].
-                                evReceiver isNil ifTrue:[
-                                    ('WindowGroup [warning]: no receiver to dispatch ' , event type asString , '-event to. Ignored.') infoPrintCR.
-                                ] ifFalse:[
-                                    evReceiver dispatchEvent:event withFocusOn:focus delegate:true
-                                ].
+                                evReceiver dispatchEvent:event withFocusOn:focus delegate:true
                             ].
                         ].
-
-                        "/ give eventRecorders, postProcessors 
-                        "/ a chance to see that event
-                        self executePostEventHooksFor:event
-                    ]
-                ].
+                    ].
+
+                    "/ give eventRecorders, postProcessors 
+                    "/ a chance to see that event
+                    self executePostEventHooksFor:event
+                ]
             ].
-        ]
+        ] "end while".
+    ] on:LastEventQuerySignal do:[:ex |
+        ex proceedWith:event
     ] ensure:[
         busyHookBlock notNil ifTrue:[
             Processor removeTimedBlock:busyHookBlock.
@@ -1883,8 +1872,9 @@
         ].
     ].
 
-    "Created: / 5.3.1997 / 11:33:11 / cg"
-    "Modified: / 4.8.1998 / 18:18:55 / cg"
+    "Created: / 05-03-1997 / 11:33:11 / cg"
+    "Modified: / 04-08-1998 / 18:18:55 / cg"
+    "Modified: / 31-01-2017 / 16:48:45 / stefan"
 !
 
 processExposeEvents
@@ -1954,15 +1944,15 @@
      This is required after a scroll operation,
      to wait for either a noExpose or a real expose."
 
-    |event view sensor thisProcess|
+    |sensor|
 
     (sensor := mySensor) isNil ifTrue:[^ self].
     sensor damageCount == 0 ifTrue:[^ self].
 
-    thisProcess := Processor activeProcess.
-
     WindowGroupQuerySignal answer:self do:[
-        [true] whileTrue:[
+        |event view|
+
+        [
             "/ event := aView nextDamage.
             event := sensor nextExposeEventFor:someViewOrNil.
             event isNil ifTrue:[^ self].
@@ -1984,11 +1974,12 @@
                     self executePostEventHooksFor:event.
                 ]
             ]
-        ]
-    ]
-
-    "Created: / 2.7.1997 / 14:32:19 / cg"
-    "Modified: / 5.4.1998 / 11:35:43 / cg"
+        ] loop.
+    ].
+
+    "Created: / 02-07-1997 / 14:32:19 / cg"
+    "Modified: / 05-04-1998 / 11:35:43 / cg"
+    "Modified (format): / 31-01-2017 / 21:53:29 / stefan"
 !
 
 repairDamage
@@ -2905,15 +2896,14 @@
 !WindowGroup::WindowGroupQuery class methodsFor:'redefined answering'!
 
 answer:something do:action
-    |retVal|
-
-    [
+    ^ [
         WindowGroup flushCachedActiveGroup.
-        retVal := super answer:something do:action
+        super answer:something do:action
     ] ensure:[
         WindowGroup flushCachedActiveGroup
     ].
-    ^ retVal
+
+    "Modified: / 31-01-2017 / 20:28:14 / stefan"
 ! !
 
 !WindowGroup class methodsFor:'documentation'!
--- a/WindowSensor.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/WindowSensor.st	Wed Feb 01 22:17:58 2017 +0000
@@ -888,23 +888,23 @@
 
     p := Processor activeProcess.
     wasBlocked := p blockInterrupts.
+
     [
-        Error handle:[:ex |
-            ('WindowSensor [Warning]: Error in eventQ handling ignored: ' , ex description) errorPrintCR.
-            "/ thisContext fullPrintAll.
-            "/ whichLock printCR.
-            ex return
-        ] do:[
-            whichLock critical:aBlock
-        ]
+        whichLock critical:aBlock
+    ] on:Error do:[:ex|
+        ('WindowSensor [Warning]: Error in eventQ handling ignored: ' , ex description) errorPrintCR.
+        "/ thisContext fullPrintAll.
+        "/ whichLock printCR.
+        ex return.
     ] ensure:[
         wasBlocked ifFalse:[
             p unblockInterrupts.
         ]
     ]
 
-    "Created: / 6.6.1998 / 21:04:02 / cg"
-    "Modified: / 14.10.1998 / 17:17:05 / cg"
+    "Created: / 06-06-1998 / 21:04:02 / cg"
+    "Modified: / 14-10-1998 / 17:17:05 / cg"
+    "Modified: / 31-01-2017 / 16:53:08 / stefan"
 !
 
 criticalUserEventQueueAccess:aBlock
--- a/XftFontDescription.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/XftFontDescription.st	Wed Feb 01 22:17:58 2017 +0000
@@ -1,3 +1,15 @@
+"
+ COPYRIGHT (c) 2013 by Jan Vrany
+ COPYRIGHT (c) 2013 by eXept Software AG
+              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
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+"
 "{ Package: 'stx:libview' }"
 
 "{ NameSpace: Smalltalk }"
@@ -94,6 +106,22 @@
 
 !XftFontDescription class methodsFor:'documentation'!
 
+copyright
+"
+ COPYRIGHT (c) 2013 by Jan Vrany
+ COPYRIGHT (c) 2013 by eXept Software AG
+              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
+ inclusion of the above copyright notice.   This software may not
+ be provided or otherwise made available to, or used by, any
+ other person.  No title to or ownership of the software is
+ hereby transferred.
+
+"
+!
+
 documentation
 "
     WARNING: Unfinished.
--- a/abbrev.stc	Wed Feb 01 21:42:41 2017 +0000
+++ b/abbrev.stc	Wed Feb 01 22:17:58 2017 +0000
@@ -83,4 +83,7 @@
 PopUpView PopUpView stx:libview 'Views-Basic' 2
 StandardSystemView StandardSystemView stx:libview 'Views-Basic' 2
 ModalBox ModalBox stx:libview 'Views-Basic' 2
+ControllerWithMenu ControllerWithMenu stx:libview 'Interface-Support-Controllers' 0
+GraphicsAttributes GraphicsAttributes stx:libview 'Graphics-Support' 0
+NeXTWorkstation NeXTWorkstation stx:libview 'Interface-Graphics' 0
 WinWorkstation WinWorkstation stx:libview  'unknownCategory'  0
--- a/extensions.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/extensions.st	Wed Feb 01 22:17:58 2017 +0000
@@ -26,6 +26,12 @@
     "Created: / 22-02-2016 / 08:08:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!Object methodsFor:'testing'!
+
+isColormap
+    ^ false
+! !
+
 !stx_libview class methodsFor:'documentation'!
 
 extensionsVersion_HG
--- a/stx_libview.st	Wed Feb 01 21:42:41 2017 +0000
+++ b/stx_libview.st	Wed Feb 01 22:17:58 2017 +0000
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) Claus Gittinger / 2006 by eXept Software AG
               All Rights Reserved
@@ -103,15 +105,17 @@
 
 excludedFromPreRequisites
     ^ #(
-	#'stx:libcompat'    "OrderedDither - referenced by Image>>convertToPalette:renderedBy: "
-	#'stx:libtool'    "GenericToolbarIconLibrary - referenced by SimpleView class>>readStyleSheet "
-	#'stx:libtool2'    "ImageEditor - referenced by Image>>edit "
-	#'stx:libui'    "ViewSpec - referenced by SimpleView>>specClass "
-	#'stx:libview2'    "TIFFReader - referenced by Image>>saveOn: "
-	#'stx:libwidg'    "Button - referenced by ModalBox>>initialize "
-	#'stx:libwidg2'    "ImageView - referenced by Form>>show "
-        #'stx:goodies/communication'    "HTTPInterface - referenced by ImageReader class>>fromURL: "
+        #'stx:libcompat'    "OrderedDither - referenced by Image>>convertToPalette:renderedBy: "
+        #'stx:libtool'    "GenericToolbarIconLibrary - referenced by SimpleView class>>readStyleSheet "
+        #'stx:libtool2'    "ImageEditor - referenced by Image>>edit "
+        #'stx:libui'    "ViewSpec - referenced by SimpleView>>specClass "
+        #'stx:libview2'    "TIFFReader - referenced by Image>>saveOn: "
+        #'stx:libwidg'    "Button - referenced by ModalBox>>initialize "
+        #'stx:libwidg2'    "ImageView - referenced by Form>>show "
+        #'stx:goodies/communication'    "HTTPInterface - referenced by ImageReader class>>fromURL:"
     )
+
+    "Modified: / 31-01-2017 / 13:35:51 / stefan"
 !
 
 mandatoryPreRequisites
@@ -120,33 +124,37 @@
      are extended by myself.
      They are mandatory, because we need these packages as a prerequisite for loading and compiling.
      This method is generated automatically,
-     by searching along the inheritance chain of all of my classes."
+     by searching along the inheritance chain of all of my classes.
+     Please take a look at the #referencedPreRequisites method as well."
 
     ^ #(
-        #'stx:libbasic'    "Collection - superclass of ColorPalette"
+        #'stx:libbasic'    "AllocationFailure - superclass of GraphicsDevice::GraphicResourceAllocationFailure"
     )
 !
 
 referencedPreRequisites
     "list packages which are a prerequisite, because they contain
      classes which are referenced by my classes.
-     We do not need these packages as a prerequisite for compiling or loading,
+     These packages are NOT needed as a prerequisite for compiling or loading,
      however, a class from it may be referenced during execution and having it
      unloaded then may lead to a runtime doesNotUnderstand error, unless the caller
      includes explicit checks for the package being present.
      This method is generated automatically,
-     by searching all classes (and their packages) which are referenced by my classes."
+     by searching all classes (and their packages) which are referenced by my classes.
+     Please also take a look at the #mandatoryPreRequisites method"
 
     ^ #(
-        #'stx:libbasic2'    "BooleanArray - referenced by Image>>floodFillAt:withValue:"
+        #'stx:libbasic2'    "UUID - referenced by DisplayRootView>>uuid"
     )
+
+    "Modified: / 31-01-2017 / 13:35:33 / stefan"
 !
 
 subProjects
     "list packages which are known as subprojects.
      The generated makefile will enter those and make there as well.
      However: they are not forced to be loaded when a package is loaded;
-     for those, redefine requiredPrerequisites"
+     for those, redefine #referencedPrerequisites or #mandatoryPreRequisites."
 
     ^ #(
     )
@@ -479,16 +487,24 @@
         PopUpView
         StandardSystemView
         ModalBox
+        (ControllerWithMenu autoload)
+        (GraphicsAttributes autoload)
+        (NeXTWorkstation autoload)
         (WinWorkstation win32)
     )
+
+    "Modified (format): / 31-01-2017 / 13:35:18 / stefan"
 !
 
 extensionMethodNames
     "list class/selector pairs of extensions.
-     A correponding method with real names must be present in my concrete subclasses"
+     Entries are 2-element array literals, consisting of class-name and selector.
+     A correponding method with real names must be present in my concrete subclasses
+     if it has extensions."
 
     ^ #(
         'ConfigurableFeatures class' hasFontConfig
+        Object isColormap
         'ConfigurableFeatures class' hasXFT
     )
 ! !
--- a/stx_libviewWINrc.rc	Wed Feb 01 21:42:41 2017 +0000
+++ b/stx_libviewWINrc.rc	Wed Feb 01 22:17:58 2017 +0000
@@ -3,7 +3,7 @@
 // automagically generated from the projectDefinition: stx_libview.
 //
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION     7,1,1,90
+  FILEVERSION     7,1,1,93
   PRODUCTVERSION  7,1,0,0
 #if (__BORLANDC__)
   FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
@@ -18,14 +18,14 @@
   BEGIN
     BLOCK "040904E4"
     BEGIN
-      VALUE "CompanyName", "eXept Software AG\0"
+      VALUE "CompanyName", "Claus Gittinger / eXept Software AG\0"
       VALUE "FileDescription", "Smalltalk/X Low Level Graphic Interfacing (LIB)\0"
-      VALUE "FileVersion", "7.1.1.90\0"
+      VALUE "FileVersion", "7.1.1.93\0"
       VALUE "InternalName", "stx:libview\0"
-      VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 2012\0"
+      VALUE "LegalCopyright", "Copyright Claus Gittinger 1988\nCopyright eXept Software AG 2012\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "7.1.0.0\0"
-      VALUE "ProductDate", "Wed, 20 Jul 2016 10:51:07 GMT\0"
+      VALUE "ProductDate", "Tue, 31 Jan 2017 12:37:04 GMT\0"
     END
 
   END