WinPrinterContext.st
changeset 2343 b7ef200fbfad
parent 2342 78014f6a3c32
child 2344 507334e9746f
--- a/WinPrinterContext.st	Tue Oct 23 07:08:45 2007 +0200
+++ b/WinPrinterContext.st	Tue Oct 23 10:56:21 2007 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 2006 by eXept Software AG
-	      All Rights Reserved
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -12,10 +12,10 @@
 "{ Package: 'stx:libview2' }"
 
 PrinterContext subclass:#WinPrinterContext
-	instanceVariableNames:'deviceFonts hatch supportsColor'
-	classVariableNames:''
-	poolDictionaries:''
-	category:'Interface-Printing'
+        instanceVariableNames:'deviceFonts hatch supportsColor'
+        classVariableNames:''
+        poolDictionaries:''
+        category:'Interface-Printing'
 !
 
 !WinPrinterContext primitiveDefinitions!
@@ -196,7 +196,7 @@
 copyright
 "
  COPYRIGHT (c) 2006 by eXept Software AG
-	      All Rights Reserved
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -215,7 +215,7 @@
     When you open a printer, you will typically talk to me.
 
     [author:]
-	Felix Madrid (fm@exept.de)
+        Felix Madrid (fm@exept.de)
 "
 ! !
 
@@ -253,9 +253,9 @@
 
     h := OperatingSystem openPrinter:printerNameString.
     ^ OperatingSystem
-	getDocumentProperties:nil
-	hPrinter:h
-	pDeviceName:printerNameString.
+        getDocumentProperties:nil
+        hPrinter:h
+        pDeviceName:printerNameString.
 
     "Created: / 27-07-2006 / 10:22:32 / fm"
     "Modified: / 01-08-2006 / 16:01:44 / fm"
@@ -303,31 +303,31 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Advanced Lines'.
-	printer foreground:Color red background:Color white.
-	pairOfPointsArray
-	    do:[:pairOfPointsAndContext |
-		 |pairOfPoints|
-		 pairOfPoints := pairOfPointsAndContext at:1.
-		 printer
-		    lineWidth: (pairOfPointsAndContext at:2);
-		    lineStyle: (pairOfPointsAndContext at:3);
-		    capStyle: (pairOfPointsAndContext at:4);
-		    joinStyle: (pairOfPointsAndContext at:5);
-		    foreground: (pairOfPointsAndContext at:6);
-
-		    displayAdvanceLineFrom: (pairOfPoints at:1)  to: (pairOfPoints at:2).
-	    ].
-	printer endPrintJob.
+        printer startPrintJob: 'Advanced Lines'.
+        printer foreground:Color red background:Color white.
+        pairOfPointsArray
+            do:[:pairOfPointsAndContext |
+                 |pairOfPoints|
+                 pairOfPoints := pairOfPointsAndContext at:1.
+                 printer
+                    lineWidth: (pairOfPointsAndContext at:2);
+                    lineStyle: (pairOfPointsAndContext at:3);
+                    capStyle: (pairOfPointsAndContext at:4);
+                    joinStyle: (pairOfPointsAndContext at:5);
+                    foreground: (pairOfPointsAndContext at:6);
+
+                    displayAdvanceLineFrom: (pairOfPoints at:1)  to: (pairOfPoints at:2).
+            ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext printAdvancedLines:
-	(Array with: (Array with: (Array with:10@10 with:1000@5000) with: 3 with:#dashed with: #butt with: #miter with: Color green)
-	       with: (Array with: (Array with:10@10 with:3500@2000) with: 2 with:#solid  with: #butt with: #miter with: Color yellow)
-	       with: (Array with: (Array with:1000@800 with:6000@5000) with: 8 with:#dashed  with: #butt with: #miter with: Color black)
-	       with: (Array with: (Array with:2000@2800 with:2000@5000) with: 1 with:#dashed  with: #butt with: #miter with: Color red)
-	)
+        (Array with: (Array with: (Array with:10@10 with:1000@5000) with: 3 with:#dashed with: #butt with: #miter with: Color green)
+               with: (Array with: (Array with:10@10 with:3500@2000) with: 2 with:#solid  with: #butt with: #miter with: Color yellow)
+               with: (Array with: (Array with:1000@800 with:6000@5000) with: 8 with:#dashed  with: #butt with: #miter with: Color black)
+               with: (Array with: (Array with:2000@2800 with:2000@5000) with: 1 with:#dashed  with: #butt with: #miter with: Color red)
+        )
     "
 
     "Created: / 07-08-2006 / 12:09:48 / fm"
@@ -335,6 +335,61 @@
     "Modified: / 16-04-2007 / 15:37:41 / cg"
 ! !
 
+!WinPrinterContext class methodsFor:'testing'!
+
+computeScaleForPrinter:aPrinter
+    ^ Point x:(aPrinter pixelsPerInchOfScreenWidth / Screen current horizontalPixelPerInch)
+            y:(aPrinter pixelsPerInchOfScreenHeight / Screen current verticalPixelPerInch)
+!
+
+testPrintingDo:anOneArgBlock
+
+    "Opens a print dialog and invokes the action with the printer"
+
+    | printerInfo printer |
+
+    printerInfo := PrintingDialog getPrinterInfo.
+    printerInfo isNil ifTrue:[^self].
+
+    printer := self fromPrinterInfo: printerInfo.
+
+    printer startPrintJob: 'Testing'.
+    anOneArgBlock value:printer.
+    printer endPrintJob.
+
+
+"
+self testPrintingDo:[:aPrinter| |icon|
+    aPrinter scale:(self computeScaleForPrinter:aPrinter).
+
+    aPrinter displayLineFrom:10@10   to:100@10.
+    aPrinter displayLineFrom:100@10  to:100@100.
+    aPrinter displayLineFrom:100@100 to:10@100.
+    aPrinter displayLineFrom:10@100  to:10@10.
+
+    icon := XPToolbarIconLibrary eraseXP28x28Icon.
+    icon displayOn:aPrinter x:10 y:10.
+
+].
+
+self testPrintingDo:[:aPrinter| |scale|
+    scale := self computeScaleForPrinter:aPrinter.
+    aPrinter scale:(1 * scale).
+
+    aPrinter  font:(Font family:'Arial' face:'medium' size:8).
+    aPrinter displayLineFrom:8@16 to:100@16.
+    aPrinter displayLineFrom:8@16 to:8@128.
+
+    'hallo' displayOn:aPrinter x:8 y:16.
+    aPrinter scale:(2 * scale).
+    'hallo' displayOn:aPrinter x:4 y:32.
+
+    aPrinter scale:(4 * scale).
+    'hallo' displayOn:aPrinter x:2 y:32.
+].
+"
+! !
+
 !WinPrinterContext class methodsFor:'testing & examples'!
 
 fillCircles: arrayOfPointsAndRadiusWithContextArray
@@ -347,21 +402,21 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Fill Circles'.
-	arrayOfPointsAndRadiusWithContextArray
-	    do:[:pointsAndRadiusWithContextArray |
-		printer foreground:(pointsAndRadiusWithContextArray at:3).
-		printer fillCircle:(pointsAndRadiusWithContextArray at:1)
-			radius:(pointsAndRadiusWithContextArray at:2).
-	    ].
-	printer endPrintJob.
+        printer startPrintJob: 'Fill Circles'.
+        arrayOfPointsAndRadiusWithContextArray
+            do:[:pointsAndRadiusWithContextArray |
+                printer foreground:(pointsAndRadiusWithContextArray at:3).
+                printer fillCircle:(pointsAndRadiusWithContextArray at:1)
+                        radius:(pointsAndRadiusWithContextArray at:2).
+            ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext fillCircles:
-	(Array with: (Array with: 800@800 with: 600 with:Color red)
-	       with: (Array with: 1500@1500 with: 1000 with:Color blue)
-	       with: (Array with: 4000@2500 with: 2000 with:Color gray))
+        (Array with: (Array with: 800@800 with: 600 with:Color red)
+               with: (Array with: 1500@1500 with: 1000 with:Color blue)
+               with: (Array with: 4000@2500 with: 2000 with:Color gray))
     "
 
     "Created: / 07-08-2006 / 11:46:52 / fm"
@@ -504,33 +559,33 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Fill Polygons'.
-	polygonsWithContextArray
-	    do:[:polygonWithContextArray |
-		 |aPolygon|
-		 aPolygon := polygonWithContextArray at: 1.
-		 printer foreground:(polygonWithContextArray at: 2).
-		 aPolygon displayFilledOn: printer.
-	    ].
-	printer endPrintJob.
+        printer startPrintJob: 'Fill Polygons'.
+        polygonsWithContextArray
+            do:[:polygonWithContextArray |
+                 |aPolygon|
+                 aPolygon := polygonWithContextArray at: 1.
+                 printer foreground:(polygonWithContextArray at: 2).
+                 aPolygon displayFilledOn: printer.
+            ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext fillPolygons:
-	(Array with: (Array with: (Polygon vertices:(
-				Array
-				    with:100@100
-				    with:600@1000
-				    with:3500@4000
-				    with:100@4000
-				    with:100@100))
-			    with: Color red)
-		with: (Array with: (Polygon vertices:(
-				Array
-				    with:1000@1000
-				    with:1000@2000
-				    with:2000@1000))
-			     with: Color blue)
+        (Array with: (Array with: (Polygon vertices:(
+                                Array
+                                    with:100@100
+                                    with:600@1000
+                                    with:3500@4000
+                                    with:100@4000
+                                    with:100@100))
+                            with: Color red)
+                with: (Array with: (Polygon vertices:(
+                                Array
+                                    with:1000@1000
+                                    with:1000@2000
+                                    with:2000@1000))
+                             with: Color blue)
     )
     "
 
@@ -549,25 +604,25 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Fill Rectangles'.
-	printer foreground:Color blue background:Color white.
-	rectangles
-	    do:[:rectangle |
-		printer fillRectangleX: rectangle origin x
-			y: rectangle origin y
-			width: rectangle width
-			height: rectangle height.
-	    ].
-	printer endPrintJob.
+        printer startPrintJob: 'Fill Rectangles'.
+        printer foreground:Color blue background:Color white.
+        rectangles
+            do:[:rectangle |
+                printer fillRectangleX: rectangle origin x
+                        y: rectangle origin y
+                        width: rectangle width
+                        height: rectangle height.
+            ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext fillRectangles:
-	(Array with: (Rectangle left:20 top:20 width:400 height:600)
-	       with: (Rectangle left:500 top:700 width:600 height:400)
-	       with: (Rectangle left:800 top:1000 width:1600 height:2000)
-	       with: (Rectangle left:1040 top:1240 width:3000 height:3000)
-	)
+        (Array with: (Rectangle left:20 top:20 width:400 height:600)
+               with: (Rectangle left:500 top:700 width:600 height:400)
+               with: (Rectangle left:800 top:1000 width:1600 height:2000)
+               with: (Rectangle left:1040 top:1240 width:3000 height:3000)
+        )
     "
 
     "Created: / 07-08-2006 / 11:40:48 / fm"
@@ -630,21 +685,21 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Circles'.
-	printer foreground:Color green background:Color white.
-	arrayOfPointsAndRadius
-	    do:[:pointAndRadius |
-		printer displayCircle:(pointAndRadius at:1)
-			radius:(pointAndRadius at:2).
-	    ].
-	printer endPrintJob.
+        printer startPrintJob: 'Circles'.
+        printer foreground:Color green background:Color white.
+        arrayOfPointsAndRadius
+            do:[:pointAndRadius |
+                printer displayCircle:(pointAndRadius at:1)
+                        radius:(pointAndRadius at:2).
+            ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext printCircles:
-	(Array with: (Array with: 800@800 with: 600)
-	       with: (Array with: 1500@1500 with: 1000)
-	       with: (Array with: 4000@2500 with: 2000))
+        (Array with: (Array with: 800@800 with: 600)
+               with: (Array with: 1500@1500 with: 1000)
+               with: (Array with: 4000@2500 with: 2000))
     "
 
     "Created: / 07-08-2006 / 11:46:52 / fm"
@@ -661,19 +716,19 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Circles In Rectangles'.
-	rectangles
-	   do:[:rectangle |
-	       printer displayCircleIn: rectangle.
-	   ].
+        printer startPrintJob: 'Circles In Rectangles'.
+        rectangles
+           do:[:rectangle |
+               printer displayCircleIn: rectangle.
+           ].
        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext printCirclesIn:
-	(Array with: (Rectangle left:20 top:20 width:400 height:600)
-	       with: (Rectangle left:40 top:40 width:600 height:400)
-	)
+        (Array with: (Rectangle left:20 top:20 width:400 height:600)
+               with: (Rectangle left:40 top:40 width:600 height:400)
+        )
     "
 
     "Created: / 07-08-2006 / 11:48:46 / fm"
@@ -718,26 +773,26 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Lines'.
-	pairOfPointsWithContextArray
-	    do:[:pairOfPointsAndContext |
-		 |pairOfPoints|
-		 pairOfPoints := pairOfPointsAndContext at: 1.
-		 printer
-		    foreground:(pairOfPointsAndContext at:2);
-		    lineWidth: (pairOfPointsAndContext at:3);
-		    lineStyle: (pairOfPointsAndContext at:4);
-		    displayLineFrom: (pairOfPoints at:1)  to: (pairOfPoints at:2).
-	    ].
-	printer endPrintJob.
+        printer startPrintJob: 'Lines'.
+        pairOfPointsWithContextArray
+            do:[:pairOfPointsAndContext |
+                 |pairOfPoints|
+                 pairOfPoints := pairOfPointsAndContext at: 1.
+                 printer
+                    foreground:(pairOfPointsAndContext at:2);
+                    lineWidth: (pairOfPointsAndContext at:3);
+                    lineStyle: (pairOfPointsAndContext at:4);
+                    displayLineFrom: (pairOfPoints at:1)  to: (pairOfPoints at:2).
+            ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext printLines:
-	(Array with: (Array with:(Array with:10@10 with:1000@5000) with: Color red with:4 with: #solid)
-	       with: (Array with:(Array with:10@10 with:3500@2000) with: Color blue with:1 with: #dashed)
-	       with: (Array with:(Array with:1000@800 with:6000@5000) with: Color black with: 1 with:#dotted)
-	       with: (Array with: (Array with:2000@2800 with:2000@5000) with: Color green with:8 with: nil))
+        (Array with: (Array with:(Array with:10@10 with:1000@5000) with: Color red with:4 with: #solid)
+               with: (Array with:(Array with:10@10 with:3500@2000) with: Color blue with:1 with: #dashed)
+               with: (Array with:(Array with:1000@800 with:6000@5000) with: Color black with: 1 with:#dotted)
+               with: (Array with: (Array with:2000@2800 with:2000@5000) with: Color green with:8 with: nil))
     "
 
     "Created: / 07-08-2006 / 12:09:48 / fm"
@@ -755,22 +810,22 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Points'.
-	aCollectionOfPoints do:[:each |
-	    printer displayPointX: each x y: each y.
-	].
-	printer endPrintJob.
+        printer startPrintJob: 'Points'.
+        aCollectionOfPoints do:[:each |
+            printer displayPointX: each x y: each y.
+        ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext printPoints:
-	(Array with: (10 @ 10)
-	       with: (500 @ 700)
-	       with: (900 @ 1000)
-	       with: (1500 @ 1700)
-	       with: (2100 @ 2000)
-	       with: (2500 @ 2700)
-	)
+        (Array with: (10 @ 10)
+               with: (500 @ 700)
+               with: (900 @ 1000)
+               with: (1500 @ 1700)
+               with: (2100 @ 2000)
+               with: (2500 @ 2700)
+        )
     "
 !
 
@@ -784,29 +839,29 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Polygons'.
-	printer foreground:Color black background:Color white.
-	polygons
-	    do:[:aPolygon |
-		 aPolygon displayStrokedOn: printer.
-	    ].
-	printer endPrintJob.
+        printer startPrintJob: 'Polygons'.
+        printer foreground:Color black background:Color white.
+        polygons
+            do:[:aPolygon |
+                 aPolygon displayStrokedOn: printer.
+            ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext printPolygons:
-	(Array with: (Polygon vertices:(
-				Array
-				    with:100@100
-				    with:600@1000
-				    with:3500@4000
-				    with:100@4000
-				    with:100@100))
-		with: (Polygon vertices:(
-				Array
-				    with:1000@1000
-				    with:1000@2000
-				    with:2000@1000)))
+        (Array with: (Polygon vertices:(
+                                Array
+                                    with:100@100
+                                    with:600@1000
+                                    with:3500@4000
+                                    with:100@4000
+                                    with:100@100))
+                with: (Polygon vertices:(
+                                Array
+                                    with:1000@1000
+                                    with:1000@2000
+                                    with:2000@1000)))
     "
 
     "Created: / 07-08-2006 / 12:09:48 / fm"
@@ -824,20 +879,20 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Polylines'.
-	printer displayPolylines:evenCollectionOfPoints.
-	printer endPrintJob.
+        printer startPrintJob: 'Polylines'.
+        printer displayPolylines:evenCollectionOfPoints.
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext printPolylines:
-	(Array with: (10 @ 10)
-	       with: (500 @ 700)
-	       with: (900 @ 1000)
-	       with: (1500 @ 1700)
-	       with: (2100 @ 2000)
-	       with: (2500 @ 2700)
-	)
+        (Array with: (10 @ 10)
+               with: (500 @ 700)
+               with: (900 @ 1000)
+               with: (1500 @ 1700)
+               with: (2100 @ 2000)
+               with: (2500 @ 2700)
+        )
     "
 
     "Created: / 07-08-2006 / 11:40:48 / fm"
@@ -854,31 +909,31 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Rectangles'.
-	printer foreground:Color red background:Color white.
-	rectanglesWithContextArray do:[:rectangleWithContextArray |
-	    |rectangle|
-	    rectangle := rectangleWithContextArray at: 1.
-	    printer
-		foreground:(rectangleWithContextArray at:2);
-		lineWidth: (rectangleWithContextArray at:3);
-		lineStyle: (rectangleWithContextArray at:4);
-		displayRectangleX: rectangle origin x
-			y: rectangle origin y
-			width: rectangle width
-			height: rectangle height.
-	    ].
-	printer endPrintJob.
+        printer startPrintJob: 'Rectangles'.
+        printer foreground:Color red background:Color white.
+        rectanglesWithContextArray do:[:rectangleWithContextArray |
+            |rectangle|
+            rectangle := rectangleWithContextArray at: 1.
+            printer
+                foreground:(rectangleWithContextArray at:2);
+                lineWidth: (rectangleWithContextArray at:3);
+                lineStyle: (rectangleWithContextArray at:4);
+                displayRectangleX: rectangle origin x
+                        y: rectangle origin y
+                        width: rectangle width
+                        height: rectangle height.
+            ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext printRectangles:
-	(Array with: (Array with: (Rectangle left:30 top:10 width:400 height:600) with: Color red with:4 with: #solid)
-	       with: (Array with: (Rectangle left:100 top:140 width:700 height:800) with: Color blue with:1 with: #dashed)
-	       with: (Array with: (Rectangle left:800 top:1500 width:2600 height:3400) with: Color green with:1 with: #dotted)
-	       with: (Array with: (Rectangle left:1000 top:1200 width:1400 height:1600) with: Color gray with:8 with: #dashed)
-	       with: (Array with: (Rectangle left:2600 top:1200 width:1400 height:1600) with: Color darkGray with:1 with: #dashDotDot)
-	)
+        (Array with: (Array with: (Rectangle left:30 top:10 width:400 height:600) with: Color red with:4 with: #solid)
+               with: (Array with: (Rectangle left:100 top:140 width:700 height:800) with: Color blue with:1 with: #dashed)
+               with: (Array with: (Rectangle left:800 top:1500 width:2600 height:3400) with: Color green with:1 with: #dotted)
+               with: (Array with: (Rectangle left:1000 top:1200 width:1400 height:1600) with: Color gray with:8 with: #dashed)
+               with: (Array with: (Rectangle left:2600 top:1200 width:1400 height:1600) with: Color darkGray with:1 with: #dashDotDot)
+        )
     "
 
     "Created: / 07-08-2006 / 11:40:48 / fm"
@@ -895,21 +950,21 @@
 
     printer := self fromPrinterInfo: printerInfo.
     [
-	printer startPrintJob: 'Strings with Position'.
-	printer foreground:Color black background:Color white.
-	stringAndPositionsArray
-	    do:[:pairOfPointsAndPosition |
-		 printer displayString:(pairOfPointsAndPosition at: 1)
-			    x:(pairOfPointsAndPosition at: 2) x
-			    y:(pairOfPointsAndPosition at: 2) y
-	    ].
-	printer endPrintJob.
+        printer startPrintJob: 'Strings with Position'.
+        printer foreground:Color black background:Color white.
+        stringAndPositionsArray
+            do:[:pairOfPointsAndPosition |
+                 printer displayString:(pairOfPointsAndPosition at: 1)
+                            x:(pairOfPointsAndPosition at: 2) x
+                            y:(pairOfPointsAndPosition at: 2) y
+            ].
+        printer endPrintJob.
     ] forkAt: 3
 
     "
      WinPrinterContext printStrings:
-	(Array with: (Array with:'Testing printing with standart method' with:10@10)
-	       with: (Array with:'Another test string to print' with:80@200))
+        (Array with: (Array with:'Testing printing with standart method' with:10@10)
+               with: (Array with:'Another test string to print' with:80@200))
     "
 
     "Created: / 07-08-2006 / 12:09:48 / fm"
@@ -1052,13 +1107,13 @@
     int id, ir, ig, ib;
 
     if (__bothSmallInteger(r, g) && __isSmallInteger(b)) {
-	ir = (__intVal(r) >> 8) & 0xff;
-	ig = (__intVal(g) >> 8) & 0xff;
-	ib = (__intVal(b) >> 8) & 0xff;
-
-	id = RGB( ir, ig, ib);
-
-	RETURN ( __MKSMALLINT(id) );
+        ir = (__intVal(r) >> 8) & 0xff;
+        ig = (__intVal(g) >> 8) & 0xff;
+        ib = (__intVal(b) >> 8) & 0xff;
+
+        id = RGB( ir, ig, ib);
+
+        RETURN ( __MKSMALLINT(id) );
     }
 %}.
     self primitiveFailed.
@@ -1073,19 +1128,19 @@
     HDC hDC;
 
     if (__isExternalAddressLike(aDC)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	COLORREF bg, oldBg;
-
-	oldBg = GetBkColor(hDC);
-
-	bg = __intVal(bgColorIndex) & 0xffffff;
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        COLORREF bg, oldBg;
+
+        oldBg = GetBkColor(hDC);
+
+        bg = __intVal(bgColorIndex) & 0xffffff;
 /*        bg = (COLORREF)st2RGB(__intVal(bgColorIndex),gcData);         */
 
-	if (bg != oldBg) {
-	    SetBkColor(hDC, bg);
-	}
-
-	RETURN (self);
+        if (bg != oldBg) {
+            SetBkColor(hDC, bg);
+        }
+
+        RETURN (self);
     }
 %}
 !
@@ -1096,17 +1151,17 @@
     |colorId deviceColor|
 
     (color isOnDevice:self) ifTrue:[
-	colorId := color colorId.
+        colorId := color colorId.
     ] ifFalse:[
-	deviceColor := color onDevice:self.
-	deviceColor notNil ifTrue:[
-	    colorId := deviceColor colorId.
-	]
+        deviceColor := color onDevice:self.
+        deviceColor notNil ifTrue:[
+            colorId := deviceColor colorId.
+        ]
     ].
     colorId isNil ifTrue:[
-	'DeviceWorkstation [warning]: could not set bg color' infoPrintCR.
+        'DeviceWorkstation [warning]: could not set bg color' infoPrintCR.
     ] ifFalse:[
-	self setBackground:colorId in:aGCId.
+        self setBackground:colorId in:aGCId.
     ]
 !
 
@@ -1116,27 +1171,27 @@
 %{  /* NOCONTEXT */
 
     if (__isExternalAddressLike(aDC)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	COLORREF fg, bg, oldFg, oldBg;
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        COLORREF fg, bg, oldFg, oldBg;
 
 /*        fg = (COLORREF)st2RGB(__intVal(fgColorIndex),gcData);    */
-	fg = __intVal(fgColorIndex) & 0xffffff;
+        fg = __intVal(fgColorIndex) & 0xffffff;
 /*        bg = (COLORREF)st2RGB(__intVal(bgColorIndex),gcData);    */
-	bg = __intVal(bgColorIndex) & 0xffffff;
-
-	oldFg = GetTextColor(hDC);
-	oldBg = GetBkColor(hDC);
-
-	if ((fg != oldFg) || (bg != oldBg)) {
-	    /* Pen only depends upon fg-color */
-	    if (fg != oldFg) {
-		SetTextColor(hDC, fg);
-	    }
-	    if (bg != oldBg) {
-		SetBkColor(hDC, bg);
-	    }
-	}
-	RETURN (self);
+        bg = __intVal(bgColorIndex) & 0xffffff;
+
+        oldFg = GetTextColor(hDC);
+        oldBg = GetBkColor(hDC);
+
+        if ((fg != oldFg) || (bg != oldBg)) {
+            /* Pen only depends upon fg-color */
+            if (fg != oldFg) {
+                SetTextColor(hDC, fg);
+            }
+            if (bg != oldBg) {
+                SetBkColor(hDC, bg);
+            }
+        }
+        RETURN (self);
     }
 %}
 !
@@ -1149,19 +1204,19 @@
     HDC hDC;
 
     if (__isExternalAddressLike(aDC)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	COLORREF fg, oldFg;
-
-	oldFg = GetTextColor(hDC);
-
-	fg = __intVal(fgColorIndex) & 0xffffff;
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        COLORREF fg, oldFg;
+
+        oldFg = GetTextColor(hDC);
+
+        fg = __intVal(fgColorIndex) & 0xffffff;
 /*        fg = (COLORREF)st2RGB(__intVal(fgColorIndex),gcData);         */
 
-	if (fg != oldFg) {
-	    SetTextColor(hDC, fg);
-	}
-
-	RETURN (self);
+        if (fg != oldFg) {
+            SetTextColor(hDC, fg);
+        }
+
+        RETURN (self);
     }
 %}
 !
@@ -1172,17 +1227,17 @@
     |colorId deviceColor|
 
     (color isOnDevice:self) ifTrue:[
-	colorId := color colorId.
+        colorId := color colorId.
     ] ifFalse:[
-	deviceColor := color onDevice:self.
-	deviceColor notNil ifTrue:[
-	    colorId := deviceColor colorId.
-	]
+        deviceColor := color onDevice:self.
+        deviceColor notNil ifTrue:[
+            colorId := deviceColor colorId.
+        ]
     ].
     colorId isNil ifTrue:[
-	'DeviceWorkstation [warning]: could not set fg color' infoPrintCR.
+        'DeviceWorkstation [warning]: could not set fg color' infoPrintCR.
     ] ifFalse:[
-	self setForeground:colorId in:aGCId.
+        self setForeground:colorId in:aGCId.
     ]
 ! !
 
@@ -1195,52 +1250,52 @@
 
     if (__isExternalAddressLike(aDC)
      && __isSmallInteger(__INST(lineWidth))) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	COLORREF fgColor;
-	HANDLE hPen, prevPen;
-	int lineStyleInt, capStyleInt, joinStyleInt, lineWidth;
-
-	lineWidth= __INST(lineWidth);
-
-	if (__INST(lineStyle) == @symbol(solid)) {
-	    lineStyleInt= PS_SOLID;
-	} else if (__INST(lineStyle) == @symbol(dashed)) {
-	    lineStyleInt= PS_DASH;
-	} else if (__INST(lineStyle) == @symbol(dotted)) {
-	    lineStyleInt= PS_DOT;
-	} else if (__INST(lineStyle) == @symbol(dashDot)) {
-	    lineStyleInt= PS_DASHDOT;
-	} else if (__INST(lineStyle) == @symbol(dashDotDot)) {
-	    lineStyleInt= PS_DASHDOTDOT;
-	} else
-	    lineStyleInt= PS_SOLID;
-
-	if (__INST(capStyle) == @symbol(round)) {
-	    capStyleInt= PS_ENDCAP_ROUND;
-	} else if (__INST(capStyle) == @symbol(square)) {
-	    capStyleInt= PS_ENDCAP_SQUARE;
-	} else if (__INST(capStyle) == @symbol(flat)) {
-	    capStyleInt= PS_ENDCAP_FLAT;
-	} else
-	    capStyleInt= PS_ENDCAP_FLAT;
-
-	if (__INST(joinStyle) == @symbol(bevel)) {
-	    joinStyleInt= PS_JOIN_BEVEL;
-	} else if (__INST(joinStyle) == @symbol(miter)) {
-	    joinStyleInt= PS_JOIN_MITER;
-	} else if (__INST(joinStyle) == @symbol(round)) {
-	    joinStyleInt= PS_JOIN_ROUND;
-	} else
-	    joinStyleInt= PS_JOIN_MITER;
-
-
-	fgColor = GetTextColor(hDC);
-
-	hPen = CreatePen(lineStyleInt | capStyleInt | joinStyleInt, lineWidth, fgColor);
-	prevPen = SelectObject(hDC, hPen);
-
-
-	RETURN (self);
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        COLORREF fgColor;
+        HANDLE hPen, prevPen;
+        int lineStyleInt, capStyleInt, joinStyleInt, lineWidth;
+
+        lineWidth= __INST(lineWidth);
+
+        if (__INST(lineStyle) == @symbol(solid)) {
+            lineStyleInt= PS_SOLID;
+        } else if (__INST(lineStyle) == @symbol(dashed)) {
+            lineStyleInt= PS_DASH;
+        } else if (__INST(lineStyle) == @symbol(dotted)) {
+            lineStyleInt= PS_DOT;
+        } else if (__INST(lineStyle) == @symbol(dashDot)) {
+            lineStyleInt= PS_DASHDOT;
+        } else if (__INST(lineStyle) == @symbol(dashDotDot)) {
+            lineStyleInt= PS_DASHDOTDOT;
+        } else
+            lineStyleInt= PS_SOLID;
+
+        if (__INST(capStyle) == @symbol(round)) {
+            capStyleInt= PS_ENDCAP_ROUND;
+        } else if (__INST(capStyle) == @symbol(square)) {
+            capStyleInt= PS_ENDCAP_SQUARE;
+        } else if (__INST(capStyle) == @symbol(flat)) {
+            capStyleInt= PS_ENDCAP_FLAT;
+        } else
+            capStyleInt= PS_ENDCAP_FLAT;
+
+        if (__INST(joinStyle) == @symbol(bevel)) {
+            joinStyleInt= PS_JOIN_BEVEL;
+        } else if (__INST(joinStyle) == @symbol(miter)) {
+            joinStyleInt= PS_JOIN_MITER;
+        } else if (__INST(joinStyle) == @symbol(round)) {
+            joinStyleInt= PS_JOIN_ROUND;
+        } else
+            joinStyleInt= PS_JOIN_MITER;
+
+
+        fgColor = GetTextColor(hDC);
+
+        hPen = CreatePen(lineStyleInt | capStyleInt | joinStyleInt, lineWidth, fgColor);
+        prevPen = SelectObject(hDC, hPen);
+
+
+        RETURN (self);
     }
 %}.
     self primitiveFailed
@@ -1253,50 +1308,50 @@
 
     if (__isExternalAddressLike(__INST(gcId))
      && __isSmallInteger(__INST(lineWidth))) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(__INST(gcId)));
-	COLORREF fgColor;
-	HANDLE hPen;
-	int lineStyleInt, capStyleInt, joinStyleInt, lineWidth;
-
-	lineWidth= __INST(lineWidth);
-
-	if (__INST(lineStyle) == @symbol(solid)) {
-	    lineStyleInt= PS_SOLID;
-	} else if (__INST(lineStyle) == @symbol(dashed)) {
-	    lineStyleInt= PS_DASH;
-	} else if (__INST(lineStyle) == @symbol(dotted)) {
-	    lineStyleInt= PS_DOT;
-	} else if (__INST(lineStyle) == @symbol(dashDot)) {
-	    lineStyleInt= PS_DASHDOT;
-	} else if (__INST(lineStyle) == @symbol(dashDotDot)) {
-	    lineStyleInt= PS_DASHDOTDOT;
-	} else
-	    lineStyleInt= PS_SOLID;
-
-	if (__INST(capStyle) == @symbol(round)) {
-	    capStyleInt= PS_ENDCAP_ROUND;
-	} else if (__INST(capStyle) == @symbol(square)) {
-	    capStyleInt= PS_ENDCAP_SQUARE;
-	} else if (__INST(capStyle) == @symbol(flat)) {
-	    capStyleInt= PS_ENDCAP_FLAT;
-	} else
-	    capStyleInt= PS_ENDCAP_FLAT;
-
-	if (__INST(joinStyle) == @symbol(bevel)) {
-	    joinStyleInt= PS_JOIN_BEVEL;
-	} else if (__INST(joinStyle) == @symbol(miter)) {
-	    joinStyleInt= PS_JOIN_MITER;
-	} else if (__INST(joinStyle) == @symbol(round)) {
-	    joinStyleInt= PS_JOIN_ROUND;
-	} else
-	    joinStyleInt= PS_JOIN_MITER;
-
-
-	fgColor = GetTextColor(hDC);
-
-	hPen = CreatePen(lineStyleInt | capStyleInt | joinStyleInt, lineWidth, fgColor);
-
-	RETURN (self);
+        HANDLE hDC = (HANDLE)(__externalAddressVal(__INST(gcId)));
+        COLORREF fgColor;
+        HANDLE hPen;
+        int lineStyleInt, capStyleInt, joinStyleInt, lineWidth;
+
+        lineWidth= __INST(lineWidth);
+
+        if (__INST(lineStyle) == @symbol(solid)) {
+            lineStyleInt= PS_SOLID;
+        } else if (__INST(lineStyle) == @symbol(dashed)) {
+            lineStyleInt= PS_DASH;
+        } else if (__INST(lineStyle) == @symbol(dotted)) {
+            lineStyleInt= PS_DOT;
+        } else if (__INST(lineStyle) == @symbol(dashDot)) {
+            lineStyleInt= PS_DASHDOT;
+        } else if (__INST(lineStyle) == @symbol(dashDotDot)) {
+            lineStyleInt= PS_DASHDOTDOT;
+        } else
+            lineStyleInt= PS_SOLID;
+
+        if (__INST(capStyle) == @symbol(round)) {
+            capStyleInt= PS_ENDCAP_ROUND;
+        } else if (__INST(capStyle) == @symbol(square)) {
+            capStyleInt= PS_ENDCAP_SQUARE;
+        } else if (__INST(capStyle) == @symbol(flat)) {
+            capStyleInt= PS_ENDCAP_FLAT;
+        } else
+            capStyleInt= PS_ENDCAP_FLAT;
+
+        if (__INST(joinStyle) == @symbol(bevel)) {
+            joinStyleInt= PS_JOIN_BEVEL;
+        } else if (__INST(joinStyle) == @symbol(miter)) {
+            joinStyleInt= PS_JOIN_MITER;
+        } else if (__INST(joinStyle) == @symbol(round)) {
+            joinStyleInt= PS_JOIN_ROUND;
+        } else
+            joinStyleInt= PS_JOIN_MITER;
+
+
+        fgColor = GetTextColor(hDC);
+
+        hPen = CreatePen(lineStyleInt | capStyleInt | joinStyleInt, lineWidth, fgColor);
+
+        RETURN (self);
     }
 %}.
     self primitiveFailed
@@ -1341,10 +1396,10 @@
 %{  /* NOCONTEXT */
 
     if (__isExternalAddressLike(aDC)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-
-	SelectClipRgn(hDC, NULL);
-	RETURN (self);
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+
+        SelectClipRgn(hDC, NULL);
+        RETURN (self);
     }
 %}
 !
@@ -1355,20 +1410,20 @@
 %{  /* NOCONTEXT */
 
     if (__isExternalAddressLike(aDC)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	HBITMAP oldM;
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        HBITMAP oldM;
 
 /*        oldM = gcData->hMask;
-	if (__isExternalAddress(aBitmapId))
-	    gcData->hMask = _HBITMAPVAL(aBitmapId);
-	else
-	    gcData->hMask = 0;
-
-	if (oldM != gcData->hMask) {
-	  FLUSH_CACHED_DC(gcData);
-	    CPRINTF(("masks set to %x\n",gcData->hMask));
-	}                                                     */
-	RETURN (self);
+        if (__isExternalAddress(aBitmapId))
+            gcData->hMask = _HBITMAPVAL(aBitmapId);
+        else
+            gcData->hMask = 0;
+
+        if (oldM != gcData->hMask) {
+          FLUSH_CACHED_DC(gcData);
+            CPRINTF(("masks set to %x\n",gcData->hMask));
+        }                                                     */
+        RETURN (self);
     }
 %}
 !
@@ -1382,7 +1437,7 @@
       h     |  the clipping rectangle
       |     |
       -------
-	  where p = ( clipX, clipY ), w = clipWidth, h = clipHeight
+          where p = ( clipX, clipY ), w = clipWidth, h = clipHeight
 "
 
 %{  /* NOCONTEXT */
@@ -1390,36 +1445,36 @@
     if (__isExternalAddressLike(aDC)
      && __bothSmallInteger(clipX, clipY)
      && __bothSmallInteger(clipWidth, clipHeight) ) {
-	HANDLE hDC;
-	int cX, cY, cW, cH;
-	POINT ptOrg;
-
-
-	hDC = (HANDLE)(__externalAddressVal(aDC));
-
-	GetViewportOrgEx(hDC,&ptOrg);
-
-	// set the clip rectangle
-	// and offset the rectangle by the viewport origin
-
-	cX = __intVal(clipX) + ptOrg.x;
-	cY = __intVal(clipY) + ptOrg.y;
-	cW = __intVal(clipWidth)+ ptOrg.x;
-	cH = __intVal(clipHeight)+ ptOrg.y;
-
-	{
-	    HRGN region = CreateRectRgn(cX, cY, cX + cW, cY + cH);
-
-	    if (region == NULL ) {
-		console_fprintf(stderr, "WinWorkstat [warning]: clipping region creation failed\n");
-	    } else {
-		if (SelectClipRgn(hDC, region) == ERROR ) {
-		    console_fprintf(stderr, "WinWorkstat [warning]: select clipping region failed\n");
-		}
-		DeleteObject(region);
-	    }
-	}
-	RETURN (self);
+        HANDLE hDC;
+        int cX, cY, cW, cH;
+        POINT ptOrg;
+
+
+        hDC = (HANDLE)(__externalAddressVal(aDC));
+
+        GetViewportOrgEx(hDC,&ptOrg);
+
+        // set the clip rectangle
+        // and offset the rectangle by the viewport origin
+
+        cX = __intVal(clipX) + ptOrg.x;
+        cY = __intVal(clipY) + ptOrg.y;
+        cW = __intVal(clipWidth)+ ptOrg.x;
+        cH = __intVal(clipHeight)+ ptOrg.y;
+
+        {
+            HRGN region = CreateRectRgn(cX, cY, cX + cW, cY + cH);
+
+            if (region == NULL ) {
+                console_fprintf(stderr, "WinWorkstat [warning]: clipping region creation failed\n");
+            } else {
+                if (SelectClipRgn(hDC, region) == ERROR ) {
+                    console_fprintf(stderr, "WinWorkstat [warning]: select clipping region failed\n");
+                }
+                DeleteObject(region);
+            }
+        }
+        RETURN (self);
     }
 %}.
     self primitiveFailed
@@ -1431,7 +1486,7 @@
 %{  /* NOCONTEXT */
 
     if (__isExternalAddressLike(aGCId)) {
-	DPRINTF(("WinWorkstat [warning]: dashes not (yet) implemented\n"));
+        DPRINTF(("WinWorkstat [warning]: dashes not (yet) implemented\n"));
     }
 %}
 !
@@ -1445,42 +1500,42 @@
 
     if (__isExternalAddressLike(aDC)
      && __isSmallInteger(aNumber)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	int style;
-
-	if (lineStyle == @symbol(solid)) {
-	    style = PS_SOLID;
-	} else if (lineStyle == @symbol(dashed)) {
-	    style= PS_DASH;
-	} else if (lineStyle == @symbol(dotted)) {
-	    style= PS_DOT;
-	} else if (lineStyle == @symbol(dashDot)) {
-	    style= PS_DASHDOT;
-	} else if (lineStyle == @symbol(dashDotDot)) {
-	    style= PS_DASHDOTDOT;
-	} else
-	    style= PS_SOLID;
-
-	if (capStyle == @symbol(round)) {
-	    style = PS_ENDCAP_ROUND;
-	} else if (capStyle == @symbol(square)) {
-	    style = PS_ENDCAP_SQUARE;
-	} else if (capStyle == @symbol(flat)) {
-	    style = PS_ENDCAP_FLAT;
-	} else
-	    style = PS_ENDCAP_FLAT;
-
-	if (joinStyle == @symbol(bevel)) {
-	    style = PS_JOIN_BEVEL;
-	} else if (joinStyle == @symbol(miter)) {
-	    style = PS_JOIN_MITER;
-	} else if (joinStyle == @symbol(round)) {
-	    style = PS_JOIN_ROUND;
-	} else
-	    style = PS_JOIN_MITER;
-
-
-	RETURN (self);
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        int style;
+
+        if (lineStyle == @symbol(solid)) {
+            style = PS_SOLID;
+        } else if (lineStyle == @symbol(dashed)) {
+            style= PS_DASH;
+        } else if (lineStyle == @symbol(dotted)) {
+            style= PS_DOT;
+        } else if (lineStyle == @symbol(dashDot)) {
+            style= PS_DASHDOT;
+        } else if (lineStyle == @symbol(dashDotDot)) {
+            style= PS_DASHDOTDOT;
+        } else
+            style= PS_SOLID;
+
+        if (capStyle == @symbol(round)) {
+            style = PS_ENDCAP_ROUND;
+        } else if (capStyle == @symbol(square)) {
+            style = PS_ENDCAP_SQUARE;
+        } else if (capStyle == @symbol(flat)) {
+            style = PS_ENDCAP_FLAT;
+        } else
+            style = PS_ENDCAP_FLAT;
+
+        if (joinStyle == @symbol(bevel)) {
+            style = PS_JOIN_BEVEL;
+        } else if (joinStyle == @symbol(miter)) {
+            style = PS_JOIN_MITER;
+        } else if (joinStyle == @symbol(round)) {
+            style = PS_JOIN_ROUND;
+        } else
+            style = PS_JOIN_MITER;
+
+
+        RETURN (self);
     }
 %}.
     self primitiveFailed
@@ -1493,17 +1548,17 @@
 
     if (__isExternalAddress(aDC)
      && __bothSmallInteger(orgX,orgY)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	int oX, oY, maskOrgX, maskOrgY;
-
-	oX = __intVal(orgX);
-	oY = __intVal(orgY);
-	if ((oX != maskOrgX)
-	 || (oY != maskOrgY)) {
-	    maskOrgX = __intVal(orgX);
-	    maskOrgY = __intVal(orgY);;
-	}
-	RETURN (self);
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        int oX, oY, maskOrgX, maskOrgY;
+
+        oX = __intVal(orgX);
+        oY = __intVal(orgY);
+        if ((oX != maskOrgX)
+         || (oY != maskOrgY)) {
+            maskOrgX = __intVal(orgX);
+            maskOrgY = __intVal(orgY);;
+        }
+        RETURN (self);
     }
 %}
 !
@@ -1513,10 +1568,10 @@
     "Sets the viewport origin (LOGICAL point (0,0)) of the device context"
 
     ^ OperatingSystem
-	    setViewportOrg: gcId "deviceContext"
-	    x: aPoint x
-	    y: aPoint y
-	    oldOrigin: nil
+            setViewportOrg: gcId "deviceContext"
+            x: aPoint x
+            y: aPoint y
+            oldOrigin: nil
 
     "Created: / 01-08-2006 / 16:14:08 / fm"
 ! !
@@ -1533,105 +1588,105 @@
     double f;
 
     if (__isSmallInteger(startAngle))
-	angle1 = (float)(__intVal(startAngle));
+        angle1 = (float)(__intVal(startAngle));
     else if (__isFloat(startAngle)) {
-	angle1 = (float) __floatVal(startAngle);
+        angle1 = (float) __floatVal(startAngle);
     } else if (__isShortFloat(startAngle)) {
-	angle1 = __shortFloatVal(startAngle);
+        angle1 = __shortFloatVal(startAngle);
     } else goto bad;
 
     if (__isSmallInteger(angle))
-	angle2 = (float)(__intVal(angle));
+        angle2 = (float)(__intVal(angle));
     else if (__isFloat(angle)) {
-	angle2 = (float) __floatVal(angle);
+        angle2 = (float) __floatVal(angle);
     } else if (__isShortFloat(angle)) {
-	angle2 = __shortFloatVal(angle);
+        angle2 = __shortFloatVal(angle);
     } else goto bad;
 
     if (angle2 <= 0) {
-	RETURN (self);
+        RETURN (self);
     }
 
     if (__isExternalAddressLike(aDC)
      && __bothSmallInteger(x, y)
      && __bothSmallInteger(width, height))
      {
-	POINT p;
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	DWORD clr = 0 /* 0xFFFFFFFF */;
-	HANDLE prevPen, hPen;
-	double xB, yB, xE, yE, xR, yR;
-	COLORREF fgColor;
-	int lStyleSymbol, lStyleInt;
-	int lw;
-
-	lw= __intVal(__INST(lineWidth));
-	lStyleSymbol= __INST(lineStyle);
-
-	/*  PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT
-	    only works with lineWidth = 1  */
-
-	if (lStyleSymbol == @symbol(solid)) {
-	    lStyleInt= PS_SOLID;
-	} else if (lStyleSymbol == @symbol(dashed)) {
-	    lStyleInt= PS_DASH;
-	} else if (lStyleSymbol == @symbol(dotted)) {
-	    lStyleInt= PS_DOT;
-	} else if (lStyleSymbol == @symbol(dashDot)) {
-	    lStyleInt= PS_DASHDOT;
-	} else if (lStyleSymbol == @symbol(dashDotDot)) {
-	    lStyleInt= PS_DASHDOTDOT;
-	} else if (lStyleSymbol == @symbol(insideFrame)) {
-	    lStyleInt= PS_INSIDEFRAME;
-	} else
-	    lStyleInt= PS_SOLID;
-
-	fgColor = GetTextColor(hDC);
-	hPen = CreatePen(lStyleInt, lw, fgColor);
-
-	w = __intVal(width);
-	h = __intVal(height);
-	__x = __intVal(x);
-	__y = __intVal(y);
-
-	    xR = w / 2;
-	    yR = h / 2;
-	    if (angle2 - angle1 >= 360) {
-		xB = xE = __x + xR + 0.5;
-		yB = yE = __y /*+ yR + 0.5*/;
-	    } else {
-		double sin(), cos();
-		float rad1, rad2;
-
-		if (angle1 <= 180)
-		  angle1 = 180 - angle1;
-		else
-		  angle1 = 360 + 180 - angle1;
-		angle2 = angle1 - angle2;
-		/* sigh - compute the intersections ... */
-		rad1 = (angle1 * 3.14159265359) / 180.0;
-		rad2 = (angle2 * 3.14159265359) / 180.0;
-		xB = cos(rad1) * xR;
-		yB = sin(rad1) * yR;
-		xE = cos(rad2) * xR;
-		yE = sin(rad2) * yR;
-		xB = __x + xR - xB + 0.5;
-		yB = __y + yR - yB + 0.5;
-		xE = __x + xR - xE + 0.5;
-		yE = __y + yR - yE + 0.5;
-	    }
-	    prevPen = SelectObject(hDC, hPen);
-	    DPRINTF(("Arc x=%d y=%d w=%d h=%d xB=%d xE=%d yB=%d yE=%d a1=%f a2=%f\n",__x,__y,w,h,(int)xB,(int)xE,(int)yB,(int)yE,angle1,angle2));
-	    Arc(hDC,
-		__x, __y,
-		__x + w, __y + h,
-		(int)xB, (int)yB,
-		(int)xE, (int)yE);
-
-	    SelectObject(hDC, prevPen);
-	    DeleteObject(hPen);
-
-	RETURN ( self );
+        POINT p;
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        DWORD clr = 0 /* 0xFFFFFFFF */;
+        HANDLE prevPen, hPen;
+        double xB, yB, xE, yE, xR, yR;
+        COLORREF fgColor;
+        int lStyleSymbol, lStyleInt;
+        int lw;
+
+        lw= __intVal(__INST(lineWidth));
+        lStyleSymbol= __INST(lineStyle);
+
+        /*  PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT
+            only works with lineWidth = 1  */
+
+        if (lStyleSymbol == @symbol(solid)) {
+            lStyleInt= PS_SOLID;
+        } else if (lStyleSymbol == @symbol(dashed)) {
+            lStyleInt= PS_DASH;
+        } else if (lStyleSymbol == @symbol(dotted)) {
+            lStyleInt= PS_DOT;
+        } else if (lStyleSymbol == @symbol(dashDot)) {
+            lStyleInt= PS_DASHDOT;
+        } else if (lStyleSymbol == @symbol(dashDotDot)) {
+            lStyleInt= PS_DASHDOTDOT;
+        } else if (lStyleSymbol == @symbol(insideFrame)) {
+            lStyleInt= PS_INSIDEFRAME;
+        } else
+            lStyleInt= PS_SOLID;
+
+        fgColor = GetTextColor(hDC);
+        hPen = CreatePen(lStyleInt, lw, fgColor);
+
+        w = __intVal(width);
+        h = __intVal(height);
+        __x = __intVal(x);
+        __y = __intVal(y);
+
+            xR = w / 2;
+            yR = h / 2;
+            if (angle2 - angle1 >= 360) {
+                xB = xE = __x + xR + 0.5;
+                yB = yE = __y /*+ yR + 0.5*/;
+            } else {
+                double sin(), cos();
+                float rad1, rad2;
+
+                if (angle1 <= 180)
+                  angle1 = 180 - angle1;
+                else
+                  angle1 = 360 + 180 - angle1;
+                angle2 = angle1 - angle2;
+                /* sigh - compute the intersections ... */
+                rad1 = (angle1 * 3.14159265359) / 180.0;
+                rad2 = (angle2 * 3.14159265359) / 180.0;
+                xB = cos(rad1) * xR;
+                yB = sin(rad1) * yR;
+                xE = cos(rad2) * xR;
+                yE = sin(rad2) * yR;
+                xB = __x + xR - xB + 0.5;
+                yB = __y + yR - yB + 0.5;
+                xE = __x + xR - xE + 0.5;
+                yE = __y + yR - yE + 0.5;
+            }
+            prevPen = SelectObject(hDC, hPen);
+            DPRINTF(("Arc x=%d y=%d w=%d h=%d xB=%d xE=%d yB=%d yE=%d a1=%f a2=%f\n",__x,__y,w,h,(int)xB,(int)xE,(int)yB,(int)yE,angle1,angle2));
+            Arc(hDC,
+                __x, __y,
+                __x + w, __y + h,
+                (int)xB, (int)yB,
+                (int)xE, (int)yE);
+
+            SelectObject(hDC, prevPen);
+            DeleteObject(hPen);
+
+        RETURN ( self );
     }
     bad: ;
 %}.
@@ -1683,13 +1738,9 @@
 
         fgColor = GetTextColor(hDC);
         hPen = CreatePen(lStyleInt, lw, fgColor);
-
         prevPen = SelectObject(hDC, hPen);
-
         MoveToEx(hDC, __intVal(x0), __intVal(y0), NULL);
-
         LineTo(hDC, __x1, __y1);
-
         /*
          * end-point ...
          */
@@ -1709,16 +1760,16 @@
 %{  /* NOCONTEXT */
     if (__isExternalAddressLike(aDC)
      && __bothSmallInteger(px, py)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	POINT p;
-	COLORREF fgColor;
-
-	int __x = __intVal(px), __y = __intVal(py);
-
-	fgColor = GetTextColor(hDC);
-	SetPixelV(hDC, __x, __y, fgColor);
-
-	RETURN ( self );
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        POINT p;
+        COLORREF fgColor;
+
+        int __x = __intVal(px), __y = __intVal(py);
+
+        fgColor = GetTextColor(hDC);
+        SetPixelV(hDC, __x, __y, fgColor);
+
+        RETURN ( self );
     }
 %}
 !
@@ -1738,79 +1789,79 @@
     if (__isExternalAddressLike(aDC)
      /* && __isExternalAddress(aDrawableId) */
      && __isSmallInteger(numberOfPoints)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	POINT p;
-	DWORD clr = 0 /* 0xFFFFFFFF */;
-	HANDLE prevPen, hPen;
-	int lw;
-	COLORREF fgColor;
-	int lStyleSymbol, lStyleInt;
-
-	lw= __intVal(__INST(lineWidth));
-	lStyleSymbol= __INST(lineStyle);
-
-	/*  PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT
-	    only works with lineWidth = 1  */
-
-	if (lStyleSymbol == @symbol(solid)) {
-	    lStyleInt= PS_SOLID;
-	} else if (lStyleSymbol == @symbol(dashed)) {
-	    lStyleInt= PS_DASH;
-	} else if (lStyleSymbol == @symbol(dotted)) {
-	    lStyleInt= PS_DOT;
-	} else if (lStyleSymbol == @symbol(dashDot)) {
-	    lStyleInt= PS_DASHDOT;
-	} else if (lStyleSymbol == @symbol(dashDotDot)) {
-	    lStyleInt= PS_DASHDOTDOT;
-	} else if (lStyleSymbol == @symbol(insideFrame)) {
-	    lStyleInt= PS_INSIDEFRAME;
-	} else
-	    lStyleInt= PS_SOLID;
-
-	num = __intVal(numberOfPoints);
-
-	for (i=0; i<num; i++) {
-	    point = __AT_(aPolygon, __MKSMALLINT(i+1));
-	    if (! __isPoint(point)) goto fail;
-	    px = _point_X(point);
-	    py = _point_Y(point);
-	    if (! __bothSmallInteger(px, py)) {
-		goto fail;
-	    }
-	}
-
-	fgColor = GetTextColor(hDC);
-
-	hPen = CreatePen(lStyleInt, lw, fgColor);
-	prevPen = SelectObject(hDC, hPen);
-
-	for (i=0; i<num; i++) {
-	    point = __AT_(aPolygon, __MKSMALLINT(i+1));
-	    px = _point_X(point);
-	    py = _point_Y(point);
-	    p.x = __intVal(px);
-	    p.y = __intVal(py);
-	    if (i == 0) {
-		MoveToEx(hDC, p.x, p.y, NULL);
-	    } else {
-		if (i == (num-1)) {
-		    PolylineTo(hDC, &p, 1);
-		} else {
-		    LineTo(hDC, p.x, p.y);
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        POINT p;
+        DWORD clr = 0 /* 0xFFFFFFFF */;
+        HANDLE prevPen, hPen;
+        int lw;
+        COLORREF fgColor;
+        int lStyleSymbol, lStyleInt;
+
+        lw= __intVal(__INST(lineWidth));
+        lStyleSymbol= __INST(lineStyle);
+
+        /*  PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT
+            only works with lineWidth = 1  */
+
+        if (lStyleSymbol == @symbol(solid)) {
+            lStyleInt= PS_SOLID;
+        } else if (lStyleSymbol == @symbol(dashed)) {
+            lStyleInt= PS_DASH;
+        } else if (lStyleSymbol == @symbol(dotted)) {
+            lStyleInt= PS_DOT;
+        } else if (lStyleSymbol == @symbol(dashDot)) {
+            lStyleInt= PS_DASHDOT;
+        } else if (lStyleSymbol == @symbol(dashDotDot)) {
+            lStyleInt= PS_DASHDOTDOT;
+        } else if (lStyleSymbol == @symbol(insideFrame)) {
+            lStyleInt= PS_INSIDEFRAME;
+        } else
+            lStyleInt= PS_SOLID;
+
+        num = __intVal(numberOfPoints);
+
+        for (i=0; i<num; i++) {
+            point = __AT_(aPolygon, __MKSMALLINT(i+1));
+            if (! __isPoint(point)) goto fail;
+            px = _point_X(point);
+            py = _point_Y(point);
+            if (! __bothSmallInteger(px, py)) {
+                goto fail;
+            }
+        }
+
+        fgColor = GetTextColor(hDC);
+
+        hPen = CreatePen(lStyleInt, lw, fgColor);
+        prevPen = SelectObject(hDC, hPen);
+
+        for (i=0; i<num; i++) {
+            point = __AT_(aPolygon, __MKSMALLINT(i+1));
+            px = _point_X(point);
+            py = _point_Y(point);
+            p.x = __intVal(px);
+            p.y = __intVal(py);
+            if (i == 0) {
+                MoveToEx(hDC, p.x, p.y, NULL);
+            } else {
+                if (i == (num-1)) {
+                    PolylineTo(hDC, &p, 1);
+                } else {
+                    LineTo(hDC, p.x, p.y);
 #ifdef PRE_04_JUN_04
-		    /*
-		     * end-point ...
-		     */
-		    LineTo(hDC, p.x+1, p.y);
+                    /*
+                     * end-point ...
+                     */
+                    LineTo(hDC, p.x+1, p.y);
 #endif
-		}
-	    }
-	}
-	SelectObject(hDC, prevPen);
-	DeleteObject(hPen);
-
-
-	RETURN ( self );
+                }
+            }
+        }
+        SelectObject(hDC, prevPen);
+        DeleteObject(hPen);
+
+
+        RETURN ( self );
     }
 fail: ;
 %}
@@ -1839,74 +1890,74 @@
     if (__isExternalAddressLike(aDC)
      && __isSmallInteger(numberOfPoints)) {
 
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	POINT p;
-	HANDLE prevPen, hPen;
-	COLORREF fgColor;
-	int lw;
-	int lStyleSymbol, lStyleInt;
-
-
-	lw= __intVal(__INST(lineWidth));
-	lStyleSymbol= __INST(lineStyle);
-
-	/*  PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT
-	    only works with lineWidth = 1  */
-
-	if (lStyleSymbol == @symbol(solid)) {
-	    lStyleInt= PS_SOLID;
-	} else if (lStyleSymbol == @symbol(dashed)) {
-	    lStyleInt= PS_DASH;
-	} else if (lStyleSymbol == @symbol(dotted)) {
-	    lStyleInt= PS_DOT;
-	} else if (lStyleSymbol == @symbol(dashDot)) {
-	    lStyleInt= PS_DASHDOT;
-	} else if (lStyleSymbol == @symbol(dashDotDot)) {
-	    lStyleInt= PS_DASHDOTDOT;
-	} else if (lStyleSymbol == @symbol(insideFrame)) {
-	    lStyleInt= PS_INSIDEFRAME;
-	} else
-	    lStyleInt= PS_SOLID;
-
-	fgColor = GetTextColor(hDC);
-
-	num = __intVal(numberOfPoints);
-
-	for (i=0; i<num; i++) {
-	    point = __AT_(aPolyline, __MKSMALLINT(i+1));
-	    if (! __isPoint(point)) goto fail;
-	    px = _point_X(point);
-	    py = _point_Y(point);
-	    if (! __bothSmallInteger(px, py)) {
-		goto fail;
-	    }
-	}
-
-	hPen = CreatePen(lStyleInt, lw, fgColor);
-	prevPen = SelectObject(hDC, hPen);
-
-	for (i=0; i<num; i++) {
-	    point = __AT_(aPolyline, __MKSMALLINT(i+1));
-	    px = _point_X(point);
-	    py = _point_Y(point);
-	    p.x = __intVal(px);
-	    p.y = __intVal(py);
-	    DPRINTF(("printing point"));
-	    DPRINTF(("displayPolygon: no pen\n"));
-
-	    if ((i & 1) == 0) {
-		MoveToEx(hDC, p.x, p.y, NULL);
-	    } else {
-		LineTo(hDC, p.x, p.y);
-		/*
-		 * end-point ...
-		 */
-		LineTo(hDC, p.x+1, p.y);
-	    }
-	}
-	SelectObject(hDC, prevPen);
-	DeleteObject(hPen);
-	RETURN ( self );
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        POINT p;
+        HANDLE prevPen, hPen;
+        COLORREF fgColor;
+        int lw;
+        int lStyleSymbol, lStyleInt;
+
+
+        lw= __intVal(__INST(lineWidth));
+        lStyleSymbol= __INST(lineStyle);
+
+        /*  PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT
+            only works with lineWidth = 1  */
+
+        if (lStyleSymbol == @symbol(solid)) {
+            lStyleInt= PS_SOLID;
+        } else if (lStyleSymbol == @symbol(dashed)) {
+            lStyleInt= PS_DASH;
+        } else if (lStyleSymbol == @symbol(dotted)) {
+            lStyleInt= PS_DOT;
+        } else if (lStyleSymbol == @symbol(dashDot)) {
+            lStyleInt= PS_DASHDOT;
+        } else if (lStyleSymbol == @symbol(dashDotDot)) {
+            lStyleInt= PS_DASHDOTDOT;
+        } else if (lStyleSymbol == @symbol(insideFrame)) {
+            lStyleInt= PS_INSIDEFRAME;
+        } else
+            lStyleInt= PS_SOLID;
+
+        fgColor = GetTextColor(hDC);
+
+        num = __intVal(numberOfPoints);
+
+        for (i=0; i<num; i++) {
+            point = __AT_(aPolyline, __MKSMALLINT(i+1));
+            if (! __isPoint(point)) goto fail;
+            px = _point_X(point);
+            py = _point_Y(point);
+            if (! __bothSmallInteger(px, py)) {
+                goto fail;
+            }
+        }
+
+        hPen = CreatePen(lStyleInt, lw, fgColor);
+        prevPen = SelectObject(hDC, hPen);
+
+        for (i=0; i<num; i++) {
+            point = __AT_(aPolyline, __MKSMALLINT(i+1));
+            px = _point_X(point);
+            py = _point_Y(point);
+            p.x = __intVal(px);
+            p.y = __intVal(py);
+            DPRINTF(("printing point"));
+            DPRINTF(("displayPolygon: no pen\n"));
+
+            if ((i & 1) == 0) {
+                MoveToEx(hDC, p.x, p.y, NULL);
+            } else {
+                LineTo(hDC, p.x, p.y);
+                /*
+                 * end-point ...
+                 */
+                LineTo(hDC, p.x+1, p.y);
+            }
+        }
+        SelectObject(hDC, prevPen);
+        DeleteObject(hPen);
+        RETURN ( self );
     }
 fail: ;
 %}
@@ -1987,14 +2038,14 @@
      If the coordinates are not integers, retry with rounded."
 
     self
-	displayString:aString
-	from:index1
-	to:index2
-	x:x
-	y:y
-	in:aDrawableId
-	with:aGCId
-	opaque:false
+        displayString:aString
+        from:index1
+        to:index2
+        x:x
+        y:y
+        in:aDrawableId
+        with:aGCId
+        opaque:false
 !
 
 displayString:aString from:index1 to:index2 x:x y:y in:ignoredDrawableId with:aDC opaque:opaque
@@ -2207,25 +2258,25 @@
      If the coordinates are not integers, retry with rounded."
 
     self
-	displayString:aString
-	x:x
-	y:y
-	in:aDrawableId
-	with:aDC
-	opaque:false
+        displayString:aString
+        x:x
+        y:y
+        in:aDrawableId
+        with:aDC
+        opaque:false
 !
 
 displayString:aString x:x y:y in:aDrawableId with:aDC opaque:opaque
     "draw a string"
 
     self displayString:aString
-		  from:1
-		    to:aString size
-		     x:x
-		     y:y
-		     in:aDrawableId
-		     with:aDC
-		     opaque:opaque
+                  from:1
+                    to:aString size
+                     x:x
+                     y:y
+                     in:aDrawableId
+                     with:aDC
+                     opaque:opaque
 !
 
 fillArcX:x y:y width:width height:height from:startAngle angle:angle
@@ -2386,8 +2437,8 @@
 
     numberOfPoints := aPolygon size.
     self
-	primFillPolygon:aPolygon n:numberOfPoints
-	in:ignoredDrawableId with:aGCId
+        primFillPolygon:aPolygon n:numberOfPoints
+        in:ignoredDrawableId with:aGCId
 !
 
 fillRectangleX:x y:y width:width height:height in:ignoredDrawableId with:aDC
@@ -2552,6 +2603,74 @@
 fail: ;
     }
 %}
+!
+
+scaleTest_displayString:aString x:x y:y
+    "draw a string at the coordinate x/y - 
+     draw foreground-pixels only (in current paint-color), 
+     leaving background as-is. If the transformation involves scaling, 
+     the fonts point-size is scaled as appropriate."
+
+    |id pX pY fontUsed sz s fontsEncoding|
+
+    "hook for non-strings (i.e. attributed text)"
+    (aString isString not
+    or:[aString isText]) ifTrue:[
+        ^ aString displayOn:self x:x y:y
+    ].
+
+    gcId isNil ifTrue:[
+        self initGC
+    ].
+
+    fontUsed := font.
+    transformation notNil ifTrue:[
+        pX := transformation applyToX:x.
+        pY := transformation applyToY:y.
+        transformation noScale ifFalse:[
+            sz := font size.
+            sz isNil ifTrue:[
+                "/ oops - not a real font; use original font
+                fontUsed := font
+            ] ifFalse:[ |yS|
+                yS := self pixelsPerInchOfScreenHeight / Screen current verticalPixelPerInch.
+                yS := self scale y / yS.
+                fontUsed := font size:(sz * yS) rounded.
+            ]
+        ]
+    ] ifFalse:[
+        pX := x.
+        pY := y.
+    ].
+    pX := pX rounded.
+    pY := pY rounded.
+
+    s := aString.
+    fontUsed := fontUsed onDevice:device.
+    fontsEncoding := fontUsed encoding.
+    (characterEncoding ~~ fontsEncoding) ifTrue:[
+        [
+            s := CharacterEncoder encodeString:s from:characterEncoding into:fontsEncoding.
+        ] on:CharacterEncoderError do:[:ex|
+            "substitute a default value for codes that cannot be represented
+             in the new character set"
+            ex proceedWith:ex defaultValue.
+        ].
+    ].
+
+    id := fontUsed fontId.
+    id isNil ifTrue:[
+        "hook for alien fonts"
+        fontUsed displayString:s x:x y:y in:self
+    ] ifFalse:[
+        deviceFont ~~ fontUsed ifTrue:[
+            device setFont:id in:gcId.
+            deviceFont := fontUsed
+        ].
+        device displayString:s x:pX y:pY in:drawableId with:gcId
+    ]
+
+    "Modified: 1.7.1997 / 17:08:35 / cg"
 ! !
 
 !WinPrinterContext methodsFor:'drawing bitmaps'!
@@ -2812,7 +2931,7 @@
 !
 
 copyPlaneFromId:sourceId x:srcX y:srcY gc:srcDCId to:destId x:dstX y:dstY gc:dstDCId
-		width:w height:h
+                width:w height:h
     "do a bit-blt, but only copy the low-bit plane;
      copy bits from the rectangle defined by
      srcX/srcY and w/h from the sourceId drawable to the rectangle
@@ -2820,10 +2939,10 @@
      argument is not integer."
 
     ^ self
-	copyFromId:sourceId
-		 x:srcX y:srcY gc:srcDCId
-		to:destId x:dstX y:dstY gc:dstDCId
-	     width:w height:h
+        copyFromId:sourceId
+                 x:srcX y:srcY gc:srcDCId
+                to:destId x:dstX y:dstY gc:dstDCId
+             width:w height:h
 !
 
 copyPlaneFromPixmapId:sourceId x:srcX y:srcY gc:srcGCId to:destId x:dstX y:dstY gc:dstGCId width:w height:h
@@ -2841,7 +2960,7 @@
     bitmapId := self primCreateBitmapFromArray:anArray width:w height:h.
 
     bitmapId isNil ifTrue:[
-	'WINWORKSTATION: cannot create bitmap' errorPrintCR.
+        'WINWORKSTATION: cannot create bitmap' errorPrintCR.
     ].
     ^ bitmapId
 !
@@ -2856,23 +2975,23 @@
 
     /*console_printf("CreateBitmap Color\n");*/
     if (__bothSmallInteger(w, h) && __isSmallInteger(d) /*&& ISCONNECTED */) {
-	if (__intVal(d) == 1) {
-	    newBitmapHandle = CreateBitmap(__intVal(w), __intVal(h) , 1, 1, NULL);
-	} else {
+        if (__intVal(d) == 1) {
+            newBitmapHandle = CreateBitmap(__intVal(w), __intVal(h) , 1, 1, NULL);
+        } else {
 #if 0
-	    if (__intVal(d) != __depth) {
-		console_printf("invalid depth\n");
-		RETURN (nil);
-	    }
+            if (__intVal(d) != __depth) {
+                console_printf("invalid depth\n");
+                RETURN (nil);
+            }
 #endif
-	    newBitmapHandle = CreateCompatibleBitmap(rootDC, __intVal(w), __intVal(h) );
-	}
-
-	if (newBitmapHandle) {
-	    RETURN ( __MKOBJ(newBitmapHandle));
-	}
+            newBitmapHandle = CreateCompatibleBitmap(rootDC, __intVal(w), __intVal(h) );
+        }
+
+        if (newBitmapHandle) {
+            RETURN ( __MKOBJ(newBitmapHandle));
+        }
 /*
-	DPRINTF(("empty bitmap handle = %x\n", newBitmapHandle));
+        DPRINTF(("empty bitmap handle = %x\n", newBitmapHandle));
 */
     }
     RETURN (nil);
@@ -2883,53 +3002,58 @@
 
 %{  /* NOCONTEXT */
     if (__isExternalAddress(aDrawableId) /* && ISCONNECTED */ ) {
-	HANDLE bitmapHandle = _HANDLEVal(aDrawableId);
-
-	if (bitmapHandle) {
-	    DeleteObject(bitmapHandle);
-	/*    _DeleteObject(bitmapHandle, __LINE__);    */
-	}
+        HANDLE bitmapHandle = _HANDLEVal(aDrawableId);
+
+        if (bitmapHandle) {
+            DeleteObject(bitmapHandle);
+        /*    _DeleteObject(bitmapHandle, __LINE__);    */
+        }
     }
 %}
 !
 
 displayDeviceForm:aForm x:x y:y
 
-    |sortedImage formMask bitsWithTransparency|
+    |sortedImage formMask bitsWithTransparency redVector greenVector blueVector|
 
     sortedImage := aForm.
 
-    aForm depth ~~ 8 ifTrue:[
-        sortedImage := aForm asImageWithDepth: 8.
+    aForm depth > 8 ifTrue:[
+        bitsWithTransparency := sortedImage bits.
     ].
-"/    sortedImage := self sortColorMapImage: aForm.
-    sortedImage := self compressColorMapImage: sortedImage.
-
-    formMask := sortedImage mask.
-    formMask isNil 
-        ifTrue:[bitsWithTransparency := sortedImage bits ]
-        ifFalse:[
-            |bitsWithTransparencySize|
-            formMask := formMask asImageWithDepth: sortedImage depth.
-            bitsWithTransparency := sortedImage bits copy.
-            bitsWithTransparencySize := bitsWithTransparency size.
-            formMask bits doWithIndex:[:maskBit :index |
-                bitsWithTransparencySize >= index ifTrue:[
-                    maskBit == 0 ifTrue:[bitsWithTransparency at: index put: 255 "60" "bitClearAt: index"].
-"/                maskBit == 1 ifTrue:[bitsWithTransparency at: index put: (bitsWithTransparency at: index)].
+    aForm depth <= 8 ifTrue:[
+        aForm depth < 8 ifTrue:[
+            sortedImage := aForm asImageWithDepth: 8.
+        ].
+"/        sortedImage := self sortColorMapImage: aForm.
+        sortedImage := self compressColorMapImage: sortedImage.
+
+        formMask := sortedImage mask.
+        formMask isNil 
+            ifTrue:[bitsWithTransparency := sortedImage bits ]
+            ifFalse:[
+                |bitsWithTransparencySize|
+                formMask := formMask asImageWithDepth: sortedImage depth.
+                bitsWithTransparency := sortedImage bits copy.
+                bitsWithTransparencySize := bitsWithTransparency size.
+                formMask bits doWithIndex:[:maskBit :index |
+                    bitsWithTransparencySize >= index ifTrue:[
+                        maskBit == 0 ifTrue:[bitsWithTransparency at: index put: 255 "60" "bitClearAt: index"].
+"/                    maskBit == 1 ifTrue:[bitsWithTransparency at: index put: (bitsWithTransparency at: index)].
+                    ].
                 ].
-            ].
+        ].
+
+        redVector := sortedImage colorMap redVector.
+        greenVector := sortedImage colorMap greenVector.
+        blueVector := sortedImage colorMap blueVector.
     ].
 
-"/    sortedImage colorMap redVector at:255 put: 255.
-"/    sortedImage colorMap greenVector at:255 put: 255.
-"/    sortedImage colorMap blueVector at:255 put: 255.
-
     self 
-         drawBits: bitsWithTransparency ? sortedImage bits
-        redVector: sortedImage colorMap redVector
-      greenVector: sortedImage colorMap greenVector
-       blueVector: sortedImage colorMap blueVector
+         drawBits: bitsWithTransparency
+        redVector: redVector
+      greenVector: greenVector
+       blueVector: blueVector
      bitsPerPixel: sortedImage bitsPerPixel
             depth: sortedImage depth
             width: sortedImage width 
@@ -3006,10 +3130,6 @@
                               width:w height:h
                                with:aGCId)
     ifFalse:[
-        "
-         also happens, if a segmentation violation occurs in the
-         XPutImage ...
-        "
         self primitiveFailed
     ].
 !
@@ -3029,70 +3149,70 @@
 
     if (__bothSmallInteger(w, h)
      && _isNonNilObject(anArray)) {
-	OBJ cls = __qClass(anArray);
-
-	b_width = __intVal(w);
-	b_height = __intVal(h);
-	bytesPerRowST = (b_width + 7) / 8;
-	bytesPerRowWN = ((b_width + 15) / 16) * 2;
-	padding = bytesPerRowWN - bytesPerRowST;
-
-	if ((padding == 0) && (cls == @global(ByteArray))) {
-	    b_bits = __ByteArrayInstPtr(anArray)->ba_element;
-	    cp = 0;
-	} else {
-	    int nBytes = b_height * bytesPerRowWN;
-
-	    if (nBytes < sizeof(fastBits)) {
-		cp = b_bits = fastBits;
-	    } else {
-		cp = b_bits = allocatedBits = (unsigned char *) malloc(nBytes);
-		if (! cp) goto fail;
-	    }
-	}
-	if (cp) {
-	    if (cls == @global(Array)) {
-		OBJ *op;
-
-		index = 1;
-		op = &(__ArrayInstPtr(anArray)->a_element[index - 1]);
-		for (row = b_height; row; row--) {
-		    for (col = bytesPerRowST; col; col--) {
-			num = *op++;
-			if (! __isSmallInteger(num))
-			    goto fail;
-			*cp++ = __intVal(num);
-		    }
-		    cp += padding;
-		}
-	    } else if (cls == @global(ByteArray)) {
-		unsigned char *pBits;
-
-		pBits = __ByteArrayInstPtr(anArray)->ba_element;
-		for (row = b_height; row; row--) {
-		    for (col = bytesPerRowST; col; col--) {
-			*cp++ = ( *pBits++ /*^ 0xFF*/ );
-		    }
-		    cp += padding;
-		}
-	    } else {
-		goto fail;
-	    }
-	}
+        OBJ cls = __qClass(anArray);
+
+        b_width = __intVal(w);
+        b_height = __intVal(h);
+        bytesPerRowST = (b_width + 7) / 8;
+        bytesPerRowWN = ((b_width + 15) / 16) * 2;
+        padding = bytesPerRowWN - bytesPerRowST;
+
+        if ((padding == 0) && (cls == @global(ByteArray))) {
+            b_bits = __ByteArrayInstPtr(anArray)->ba_element;
+            cp = 0;
+        } else {
+            int nBytes = b_height * bytesPerRowWN;
+
+            if (nBytes < sizeof(fastBits)) {
+                cp = b_bits = fastBits;
+            } else {
+                cp = b_bits = allocatedBits = (unsigned char *) malloc(nBytes);
+                if (! cp) goto fail;
+            }
+        }
+        if (cp) {
+            if (cls == @global(Array)) {
+                OBJ *op;
+
+                index = 1;
+                op = &(__ArrayInstPtr(anArray)->a_element[index - 1]);
+                for (row = b_height; row; row--) {
+                    for (col = bytesPerRowST; col; col--) {
+                        num = *op++;
+                        if (! __isSmallInteger(num))
+                            goto fail;
+                        *cp++ = __intVal(num);
+                    }
+                    cp += padding;
+                }
+            } else if (cls == @global(ByteArray)) {
+                unsigned char *pBits;
+
+                pBits = __ByteArrayInstPtr(anArray)->ba_element;
+                for (row = b_height; row; row--) {
+                    for (col = bytesPerRowST; col; col--) {
+                        *cp++ = ( *pBits++ /*^ 0xFF*/ );
+                    }
+                    cp += padding;
+                }
+            } else {
+                goto fail;
+            }
+        }
 /*
-	CPRINTF(("create bitmap ...\n"));
+        CPRINTF(("create bitmap ...\n"));
 */
-	newBitmapHandle = CreateBitmap(b_width, b_height, 1, 1, b_bits );
-
-	if (newBitmapHandle ) {
+        newBitmapHandle = CreateBitmap(b_width, b_height, 1, 1, b_bits );
+
+        if (newBitmapHandle ) {
 /*
-	    DDPRINTF(("returning bitmap %x ...\n", newBitmapHandle));
+            DDPRINTF(("returning bitmap %x ...\n", newBitmapHandle));
 */
-	    if (allocatedBits) {
-		free(allocatedBits);
-	    }
-	    RETURN ( __MKOBJ(newBitmapHandle));
-	}
+            if (allocatedBits) {
+                free(allocatedBits);
+            }
+            RETURN ( __MKOBJ(newBitmapHandle));
+        }
     }
 fail: ;
 /*
@@ -3100,9 +3220,9 @@
 */
     if (allocatedBits) {
 /*
-	CPRINTF(("freeing up bitmap bits ...\n"));
+        CPRINTF(("freeing up bitmap bits ...\n"));
 */
-	free(allocatedBits);
+        free(allocatedBits);
     }
 /*
     CPRINTF(("returning nil ...\n"));
@@ -3333,10 +3453,7 @@
      && __bothSmallInteger(w, h)
      && __bothSmallInteger(imageWidth, imageHeight)
      && __bothSmallInteger(imageDepth, bitsPerPixel)
-     && __imageBits
-     && __redVector
-     && __greenVector
-     && __blueVector)
+     && __imageBits)
      {
         struct
         {
@@ -3404,7 +3521,7 @@
         bitmap.bmiHeader.biBitCount = __intVal(bitsPerPixel);
         /*console_printf("drawBits depth:%d bitsPerPixel:%d IW%d W:%d H:%d\n",__intVal(imageDepth),bitmap.bmiHeader.biBitCount,bitmap.bmiHeader.biWidth,__intVal(w),bitmap.bmiHeader.biHeight);*/
 
- //       if (__intVal(imageDepth) == 8) {
+        if (__intVal(imageDepth) <= 8) {
             for(col=0;col<256;col++)
              {
               bitmap.bmiColors[col].rgbBlue = __blueVector[col];    // Microsoft idea: change rgbBlue to rgbRed
@@ -3413,7 +3530,7 @@
               bitmap.bmiColors[col].rgbReserved = 0;
 
             }
- //       }
+        }
 
         bitmap.bmiColors[255].rgbBlue=255;
         bitmap.bmiColors[255].rgbGreen=255;
@@ -3632,6 +3749,236 @@
         newImage mask:(oldImage mask copy).
 
         ^newImage
+!
+
+transparencyTest_primDrawBits:imageBits redVector:redVector greenVector:greenVector blueVector:blueVector bitsPerPixel:bitsPerPixel depth:imageDepth 
+                              width:imageWidth height:imageHeight
+                               into:ignoredDrawableId
+                                  x:dstx y:dsty
+                              width:w height:h
+                               with:aGCId
+
+    "since XPutImage may allocate huge amount of stack space
+     (some implementations use alloca), this must run with unlimited stack."
+
+%{
+    unsigned char fastBits[10000];
+    unsigned char *b_bits = 0;
+    unsigned char *allocatedBits = 0;
+    unsigned char *__imageBits = 0;
+    unsigned char *__redVector = 0;
+    unsigned char *__greenVector = 0;
+    unsigned char *__blueVector = 0;
+    int padd = 8;
+
+    if (__isByteArray(imageBits)) {
+        __imageBits = __ByteArrayInstPtr(imageBits)->ba_element;
+    } else if (__isExternalBytesLike(imageBits)) {
+        __imageBits = (unsigned char *)(__externalBytesAddress(imageBits));
+    }
+
+    if (__isByteArray(redVector)) {
+        __redVector = __ByteArrayInstPtr(redVector)->ba_element;
+    } else if (__isExternalBytesLike(redVector)) {
+        __redVector = (unsigned char *)(__externalBytesAddress(redVector));
+    }
+
+    if (__isByteArray(greenVector)) {
+        __greenVector = __ByteArrayInstPtr(greenVector)->ba_element;
+    } else if (__isExternalBytesLike(greenVector)) {
+        __greenVector = (unsigned char *)(__externalBytesAddress(greenVector));
+    }
+
+    if (__isByteArray(blueVector)) {
+        __blueVector = __ByteArrayInstPtr(blueVector)->ba_element;
+    } else if (__isExternalBytesLike(blueVector)) {
+        __blueVector = (unsigned char *)(__externalBytesAddress(blueVector));
+    }
+
+    if (/* ISCONNECTED
+     && */ __isExternalAddressLike(aGCId)
+//     && __bothSmallInteger(srcx, srcy)
+     && __bothSmallInteger(dstx, dsty)
+     && __bothSmallInteger(w, h)
+     && __bothSmallInteger(imageWidth, imageHeight)
+     && __bothSmallInteger(imageDepth, bitsPerPixel)
+     && __imageBits)
+     {
+        struct
+        {
+          BITMAPINFOHEADER bmiHeader;
+          RGBQUAD bmiColors[256];
+        } bitmap;
+
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aGCId));
+        HBITMAP hBitmap = _HBITMAPVAL(__INST(drawableId));
+        int col;
+/*
+        DDPRINTF(("hDC = %x\n", hDC));
+*/
+
+        if (padd != WIN32PADDING) {
+
+            int row, col;
+            unsigned char *cp;
+            unsigned char *pBits;
+            int b_width, b_height, bytesPerRowST, bytesPerRowWN, padding, nBytes;
+            int bi = __intVal(bitsPerPixel);
+
+//            console_fprintf(stderr, "Non WIN32PADDING");
+
+            b_width = __intVal(w);
+            b_height = __intVal(h);
+            bytesPerRowST = (b_width * bi + (padd - 1 )) / padd;
+            bytesPerRowWN = (b_width * bi + (WIN32PADDING-1)) / WIN32PADDING * (WIN32PADDING/8);
+            padding = bytesPerRowWN - bytesPerRowST;
+            nBytes = b_height * bytesPerRowWN;
+            /*console_printf("padd %d bs %d bw %d p %d\n",__intVal(padd),bytesPerRowST,bytesPerRowWN,padding);*/
+            if (padding) {
+                if (nBytes < sizeof(fastBits)) {
+                    cp = b_bits = fastBits;
+                } else {
+                    cp = b_bits = allocatedBits = (unsigned char *) malloc(nBytes);
+                }
+                if (cp) {
+                    pBits = __imageBits;
+                    for (row = b_height; row; row--) {
+                        for (col = bytesPerRowST; col; col--) {
+                            *cp++ = *pBits++;
+                        }
+                        cp += padding;
+                    }
+                } else
+                    goto fail;
+            }
+        }
+
+        if (b_bits == 0) {
+            b_bits = __imageBits;
+        }
+
+        bitmap.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+        bitmap.bmiHeader.biPlanes = 1;
+        bitmap.bmiHeader.biCompression = BI_RGB;
+        bitmap.bmiHeader.biSizeImage = 0;
+        bitmap.bmiHeader.biXPelsPerMeter = 0;
+        bitmap.bmiHeader.biYPelsPerMeter = 0;
+        bitmap.bmiHeader.biClrUsed = 0;
+        bitmap.bmiHeader.biClrImportant = 0;
+        bitmap.bmiHeader.biWidth = __intVal(imageWidth);
+        bitmap.bmiHeader.biHeight = -(__intVal(imageHeight));
+        bitmap.bmiHeader.biBitCount = __intVal(bitsPerPixel);
+        /*console_printf("drawBits depth:%d bitsPerPixel:%d IW%d W:%d H:%d\n",__intVal(imageDepth),bitmap.bmiHeader.biBitCount,bitmap.bmiHeader.biWidth,__intVal(w),bitmap.bmiHeader.biHeight);*/
+
+        if (__intVal(imageDepth) <= 8) {
+            for(col=0;col<256;col++)
+             {
+              bitmap.bmiColors[col].rgbBlue = 0;    
+              bitmap.bmiColors[col].rgbGreen = 0;
+              bitmap.bmiColors[col].rgbRed = 0;     
+              bitmap.bmiColors[col].rgbReserved = 0;
+
+            }
+        }
+
+        bitmap.bmiColors[255].rgbBlue=255;
+        bitmap.bmiColors[255].rgbGreen=255;
+        bitmap.bmiColors[255].rgbRed =255;
+        bitmap.bmiColors[255].rgbReserved = 0;
+        StretchDIBits(hDC,
+                      __intVal(dstx),(__intVal(dsty)),            //  x & y coord of destination upper-left corner
+                      __intVal(w), __intVal(h),                 // width & height of destination rectangle
+                      0, 0,  /* __intVal(srcx), __intVal(srcy),    */   // x & y coord of source upper-left corner
+                      __intVal(w), __intVal(h),                 // width & height of source rectangle
+                      (void *)b_bits,                           // bitmap bits
+                      (BITMAPINFO*)&bitmap,                     // bitmap data
+                      DIB_RGB_COLORS,                           // usage options
+                      SRCAND                                   // raster operation code
+        );
+/*
+        if (__intVal(imageDepth) <= 8) {
+            for(col=0;col<256;col++)
+             {
+              bitmap.bmiColors[col].rgbBlue = __blueVector[col];    // Microsoft idea: change rgbBlue to rgbRed
+              bitmap.bmiColors[col].rgbGreen = __greenVector[col];
+              bitmap.bmiColors[col].rgbRed = __redVector[col];         // Microsoft idea: change rgbRed to rgbBlue
+              bitmap.bmiColors[col].rgbReserved = 0;
+
+            }
+        }
+
+        bitmap.bmiColors[255].rgbBlue=0;
+        bitmap.bmiColors[255].rgbGreen=0;
+        bitmap.bmiColors[255].rgbRed =0;
+        bitmap.bmiColors[255].rgbReserved = 0;
+        StretchDIBits(hDC,
+                      __intVal(dstx),(__intVal(dsty)),            //  x & y coord of destination upper-left corner
+                      __intVal(w), __intVal(h),                 // width & height of destination rectangle
+                      0, 0,                                     // x & y coord of source upper-left corner
+                      __intVal(w), __intVal(h),                 // width & height of source rectangle
+                      (void *)b_bits,                           // bitmap bits
+                      (BITMAPINFO*)&bitmap,                     // bitmap data
+                      DIB_RGB_COLORS,                           // usage options
+                      SRCPAINT                                  // raster operation code
+        );
+ */
+/*
+        SetDIBitsToDevice(hDC,__intVal(dstx),__intVal(dsty),
+                              __intVal(w), __intVal(h),
+                              0, 0,
+                              0,__intVal(h),
+                              (void *)b_bits,
+                              (BITMAPINFO*)&bitmap,DIB_RGB_COLORS);
+*/
+/*
+        SetDIBits(hDC,hBitmap,
+                              0,__intVal(h),
+                              (void *)b_bits,
+                              (BITMAPINFO*)&bitmap,DIB_RGB_COLORS);
+*/
+/*
+        StretchDIBits(hDC,
+                      __intVal(dstx),(__intVal(dsty)),            //  x & y coord of destination upper-left corner
+                      __intVal(w), __intVal(h),                 // width & height of destination rectangle
+                      __intVal(srcx), __intVal(srcy),           // x & y coord of source upper-left corner
+                      __intVal(w), __intVal(h),                 // width & height of source rectangle
+                      (void *)b_bits,                           // bitmap bits
+                      (BITMAPINFO*)&bitmap,                     // bitmap data
+                      DIB_RGB_COLORS,                           // usage options
+                      SRCCOPY                                   // raster operation code
+        );
+*/
+        if (allocatedBits) {
+            free(allocatedBits);
+        }
+/*
+#ifndef CACHE_LAST_DC
+        _releaseDC(gcData);
+#endif
+*/
+        RETURN ( true );
+    }
+
+fail: ;
+/*
+    PRINTF(("create temp bitmap FAILED!!!\n"));
+*/
+    if (allocatedBits) {
+/*
+        PRINTF(("freeing up temp bitmap bits ...\n"));
+*/
+        free(allocatedBits);
+    }
+/*
+#ifndef CACHE_LAST_DC
+    if (hDC) {
+        _releaseDC(gcData);
+    }
+#endif
+*/
+%}
+.
+    ^ false
 ! !
 
 !WinPrinterContext methodsFor:'font stuff'!
@@ -3646,24 +3993,24 @@
     char *fn;
 
     if (__isString(aFontName) || __isSymbol(aFontName)) {
-	fn = __stringVal(aFontName);
-	if ((strcmp(fn, "fixed") == 0) || (strcmp(fn, "ANSI_FIXED_FONT") == 0)) {
-	    hFont = GetStockObject(ANSI_FIXED_FONT);
-	} else if ((strcmp(fn, "variable") == 0) || (strcmp(fn, "ANSI_VAR_FONT") == 0)) {
-	    hFont = GetStockObject(ANSI_VAR_FONT);
-	} else if ((strcmp(fn, "system") == 0) || (strcmp(fn, "SYSTEM_FONT") == 0)) {
-	    hFont = GetStockObject(SYSTEM_FONT);
-	} else if ((strcmp(fn, "systemFixed") == 0) || (strcmp(fn, "SYSTEM_FIXED_FONT") == 0)) {
-	    hFont = GetStockObject(SYSTEM_FIXED_FONT);
-	} else if ((strcmp(fn, "deviceDefault") == 0) || (strcmp(fn, "DEVICE_DEFAULT_FONT") == 0)) {
-	    hFont = GetStockObject(DEVICE_DEFAULT_FONT);
-	} else {
-	    hFont = GetStockObject(ANSI_FIXED_FONT);
-	}
-	if (hFont) {
-	    DPRINTF(("createFontFor:%s -> %x\n", fn, hFont));
-	    RETURN ( __MKOBJ(hFont) );
-	}
+        fn = __stringVal(aFontName);
+        if ((strcmp(fn, "fixed") == 0) || (strcmp(fn, "ANSI_FIXED_FONT") == 0)) {
+            hFont = GetStockObject(ANSI_FIXED_FONT);
+        } else if ((strcmp(fn, "variable") == 0) || (strcmp(fn, "ANSI_VAR_FONT") == 0)) {
+            hFont = GetStockObject(ANSI_VAR_FONT);
+        } else if ((strcmp(fn, "system") == 0) || (strcmp(fn, "SYSTEM_FONT") == 0)) {
+            hFont = GetStockObject(SYSTEM_FONT);
+        } else if ((strcmp(fn, "systemFixed") == 0) || (strcmp(fn, "SYSTEM_FIXED_FONT") == 0)) {
+            hFont = GetStockObject(SYSTEM_FIXED_FONT);
+        } else if ((strcmp(fn, "deviceDefault") == 0) || (strcmp(fn, "DEVICE_DEFAULT_FONT") == 0)) {
+            hFont = GetStockObject(DEVICE_DEFAULT_FONT);
+        } else {
+            hFont = GetStockObject(ANSI_FIXED_FONT);
+        }
+        if (hFont) {
+            DPRINTF(("createFontFor:%s -> %x\n", fn, hFont));
+            RETURN ( __MKOBJ(hFont) );
+        }
     }
 %}.
     ^ nil
@@ -3676,8 +4023,8 @@
 
     rawData := Array new:15.
     (self primFontMetricsOf:fontId hdc:gcId intoArray:rawData) isNil ifTrue:[
-	self primitiveFailed.
-	^ self
+        self primitiveFailed.
+        ^ self
     ].
 
     rawData at:11 put:#'ms-ansi'.
@@ -3708,7 +4055,7 @@
 !
 
 getFontWithFamily:familyString face:faceString
-	    style:styleArgString size:sizeArg encoding:encodingSym
+            style:styleArgString size:sizeArg encoding:encodingSym
 
     "try to get the specified font, if not available, try the next smaller
      font."
@@ -3719,94 +4066,94 @@
 
     "special: if face is nil, allow access to X-fonts"
     faceString isNil ifTrue:[
-	sizeArg notNil ifTrue:[
-	    theName := familyString , '-' , sizeArg printString
-	] ifFalse:[
-	    theName := familyString
-	].
-	theName isNil ifTrue:[
-	    "
-	     mhmh - fall back to the default font
-	    "
-	    theName := 'fixed'
-	].
-	theId := self createFontFor:theName.
-	theId isNil ifTrue:[
-	    theId := self getDefaultFont
-	].
-	^ theId
+        sizeArg notNil ifTrue:[
+            theName := familyString , '-' , sizeArg printString
+        ] ifFalse:[
+            theName := familyString
+        ].
+        theName isNil ifTrue:[
+            "
+             mhmh - fall back to the default font
+            "
+            theName := 'fixed'
+        ].
+        theId := self createFontFor:theName.
+        theId isNil ifTrue:[
+            theId := self getDefaultFont
+        ].
+        ^ theId
     ].
 
     "/ spacing other than 'normal' is contained as last component
     "/ in style
     styleString notNil ifTrue:[
-	((styleString endsWith:'-narrow')
-	 or:[styleString endsWith:'-semicondensed']) ifTrue:[
-	    |i|
-	    i := styleString lastIndexOf:$-.
-	    spacing := styleString copyFrom:(i+1).
-	    styleString := styleString copyTo:(i-1).
-	] ifFalse:[
-	    spacing := 'normal'.
-	].
+        ((styleString endsWith:'-narrow')
+         or:[styleString endsWith:'-semicondensed']) ifTrue:[
+            |i|
+            i := styleString lastIndexOf:$-.
+            spacing := styleString copyFrom:(i+1).
+            styleString := styleString copyTo:(i-1).
+        ] ifFalse:[
+            spacing := 'normal'.
+        ].
     ].
 
     xlatedStyle := styleString.
     xlatedStyle notNil ifTrue:[
-	xlatedStyle := xlatedStyle first asString
+        xlatedStyle := xlatedStyle first asString
     ].
 
     id := self
-	    getFontWithFoundry:'*'
-	    family:familyString asLowercase
-	    weight:faceString
-	    slant:styleString "/ xlatedStyle
-	    spacing:spacing
-	    pixelSize:nil
-	    size:sizeArg
-	    registry:'*'
-	    encoding:encodingSym.
+            getFontWithFoundry:'*'
+            family:familyString asLowercase
+            weight:faceString
+            slant:styleString "/ xlatedStyle
+            spacing:spacing
+            pixelSize:nil
+            size:sizeArg
+            registry:'*'
+            encoding:encodingSym.
 
     id isNil ifTrue:[
-	(encodingSym notNil and:[encodingSym ~= '*']) ifTrue:[
-	    "/ too stupid: encodings come in both cases
-	    "/
-	    id := self
-		    getFontWithFoundry:'*'
-		    family:familyString asLowercase
-		    weight:faceString
-		    slant:styleString "/ xlatedStyle
-		    spacing:spacing
-		    pixelSize:nil
-		    size:sizeArg
-		    registry:'*'
-		    encoding:encodingSym asUppercase.
-	    id isNil ifTrue:[
-		id := self
-			getFontWithFoundry:'*'
-			family:familyString asLowercase
-			weight:faceString
-			slant:styleString "/ xlatedStyle
-			spacing:spacing
-			pixelSize:nil
-			size:sizeArg
-			registry:'*'
-			encoding:encodingSym asLowercase.
-
-		id isNil ifTrue:[
-		    id := self
-			    getFontWithFoundry:'*'
-			    family:familyString asLowercase
-			    weight:faceString asLowercase
-			    slant:styleString asLowercase
-			    spacing:spacing
-			    pixelSize:nil
-			    size:sizeArg
-			    registry:'*'
-			    encoding:encodingSym asLowercase.
-		]
-	    ]
-	]
+        (encodingSym notNil and:[encodingSym ~= '*']) ifTrue:[
+            "/ too stupid: encodings come in both cases
+            "/
+            id := self
+                    getFontWithFoundry:'*'
+                    family:familyString asLowercase
+                    weight:faceString
+                    slant:styleString "/ xlatedStyle
+                    spacing:spacing
+                    pixelSize:nil
+                    size:sizeArg
+                    registry:'*'
+                    encoding:encodingSym asUppercase.
+            id isNil ifTrue:[
+                id := self
+                        getFontWithFoundry:'*'
+                        family:familyString asLowercase
+                        weight:faceString
+                        slant:styleString "/ xlatedStyle
+                        spacing:spacing
+                        pixelSize:nil
+                        size:sizeArg
+                        registry:'*'
+                        encoding:encodingSym asLowercase.
+
+                id isNil ifTrue:[
+                    id := self
+                            getFontWithFoundry:'*'
+                            family:familyString asLowercase
+                            weight:faceString asLowercase
+                            slant:styleString asLowercase
+                            spacing:spacing
+                            pixelSize:nil
+                            size:sizeArg
+                            registry:'*'
+                            encoding:encodingSym asLowercase.
+                ]
+            ]
+        ]
     ].
     ^ id
 
@@ -3815,8 +4162,8 @@
 !
 
 getFontWithFoundry:foundry family:family weight:weight
-	      slant:slant spacing:spc pixelSize:pixelSize size:pointSize
-	      registry:registry encoding:encoding
+              slant:slant spacing:spc pixelSize:pixelSize size:pointSize
+              registry:registry encoding:encoding
 
     "get the specified font, if not available, return nil.
      For now, this is a poor (incomplete) emulation of the X code ...
@@ -3836,43 +4183,43 @@
     "
      Windows-NT/95 allows the creation of a font with the following parameters
 
-	nHeight
-	nWidth
-	nEscapement
-	nOrientation
-	fnWeight        FW_DONTCARE, FW_NORMAL, FW_MEDIUM, FW_BOLD, ...
-	fdwItalic       TRUE or FALSE
-	fdwUnderline    TRUE or FALSE
-	fdwStrikeOut    TRUE or FALSE
-	fdwCharSet      ANSI_CHARSET, UNICODE_, SYMBOL_, SHIFTJIS_,...
-	fdwOutputPrecision      DEFAULT, STRING, CHAR, ...
-	fdwClipPrecision        DEFAULT, CHAR, STROKE, MASK, ...
-	fdwQuality      DEFAULT, DRAFT, or PROOF.
-	fdwPitchAndFamily
-		DEFAULT, FIXED or VARIABLE pitch
-		DECORATIVE, DONTCASE, MODERN, ROMAN, SCRIPT, or SWISS.
-	lpszFace
-		Typeface Name
+        nHeight
+        nWidth
+        nEscapement
+        nOrientation
+        fnWeight        FW_DONTCARE, FW_NORMAL, FW_MEDIUM, FW_BOLD, ...
+        fdwItalic       TRUE or FALSE
+        fdwUnderline    TRUE or FALSE
+        fdwStrikeOut    TRUE or FALSE
+        fdwCharSet      ANSI_CHARSET, UNICODE_, SYMBOL_, SHIFTJIS_,...
+        fdwOutputPrecision      DEFAULT, STRING, CHAR, ...
+        fdwClipPrecision        DEFAULT, CHAR, STROKE, MASK, ...
+        fdwQuality      DEFAULT, DRAFT, or PROOF.
+        fdwPitchAndFamily
+                DEFAULT, FIXED or VARIABLE pitch
+                DECORATIVE, DONTCASE, MODERN, ROMAN, SCRIPT, or SWISS.
+        lpszFace
+                Typeface Name
 
       These two above descriptions will be matched as follows:
 
-	foundry   - ignored
-	family    - mapped to type face name.
-	weight    - mapped to fnWeight
-	slant     - used for style
-	spacing   - NOT USED INITIALLY
-	pixelSize - NOT USED INITIALLY
-	size      - mapped to nHeight
-	registry  - NOT USED INITIALLY
-	encoding  - mapped to fdwCharSet
+        foundry   - ignored
+        family    - mapped to type face name.
+        weight    - mapped to fnWeight
+        slant     - used for style
+        spacing   - NOT USED INITIALLY
+        pixelSize - NOT USED INITIALLY
+        size      - mapped to nHeight
+        registry  - NOT USED INITIALLY
+        encoding  - mapped to fdwCharSet
      "
 
     |logSize|
 
     pixelSize notNil ifTrue:[
-	logSize := pixelSize
+        logSize := pixelSize
     ] ifFalse:[
-	logSize := (pointSize * (self getLogicalPixelSizeY) / 72.0) rounded.
+        logSize := (pointSize * (self getLogicalPixelSizeY) / 72.0) rounded.
     ].
 %{
     HGDIOBJ hFont;
@@ -3907,152 +4254,152 @@
 
     fdwCharSet   = ANSI_CHARSET;
     if ((encoding == @symbol('ms-ansi'))) {
-	fdwCharSet   = ANSI_CHARSET;
+        fdwCharSet   = ANSI_CHARSET;
     } else if (encoding == @symbol('ms-default')) {
-	fdwCharSet   = DEFAULT_CHARSET;
+        fdwCharSet   = DEFAULT_CHARSET;
     } else if ((encoding == @symbol('ms-symbol'))
-	    || (encoding == @symbol('misc-fontspecific'))) {
-	fdwCharSet   = SYMBOL_CHARSET;
+            || (encoding == @symbol('misc-fontspecific'))) {
+        fdwCharSet   = SYMBOL_CHARSET;
     } else if ((encoding == @symbol('ms-shiftjis'))
-	    || (encoding == @symbol('jisx0208.1983-0'))){
-	fdwCharSet   = SHIFTJIS_CHARSET;
+            || (encoding == @symbol('jisx0208.1983-0'))){
+        fdwCharSet   = SHIFTJIS_CHARSET;
     } else if ((encoding == @symbol('ms-gb2312'))
-	    || (encoding == @symbol('gb2312.1980-0'))) {
-	fdwCharSet   = GB2312_CHARSET;
+            || (encoding == @symbol('gb2312.1980-0'))) {
+        fdwCharSet   = GB2312_CHARSET;
     } else if ((encoding == @symbol('ms-hangeul'))
-	    || (encoding == @symbol('ksc5601.1987-0'))) {
-	fdwCharSet   = HANGEUL_CHARSET;
+            || (encoding == @symbol('ksc5601.1987-0'))) {
+        fdwCharSet   = HANGEUL_CHARSET;
     } else if ((encoding == @symbol('ms-chinesebig5'))
-	    || (encoding == @symbol('big5'))) {
-	fdwCharSet   = CHINESEBIG5_CHARSET;
+            || (encoding == @symbol('big5'))) {
+        fdwCharSet   = CHINESEBIG5_CHARSET;
     } else if (encoding == @symbol('ms-oem')) {
-	fdwCharSet   = OEM_CHARSET;
+        fdwCharSet   = OEM_CHARSET;
     } else if (encoding == @symbol('ms-johab')) {
-	fdwCharSet   = JOHAB_CHARSET;
+        fdwCharSet   = JOHAB_CHARSET;
     } else if ((encoding == @symbol('ms-hebrew'))
-	    || (encoding == @symbol('ms-cp1255'))) {
-	fdwCharSet   = HEBREW_CHARSET;
+            || (encoding == @symbol('ms-cp1255'))) {
+        fdwCharSet   = HEBREW_CHARSET;
     } else if ((encoding == @symbol('ms-arabic'))
-	    || (encoding == @symbol('ms-cp1256'))) {
-	fdwCharSet   = ARABIC_CHARSET;
+            || (encoding == @symbol('ms-cp1256'))) {
+        fdwCharSet   = ARABIC_CHARSET;
     } else if ((encoding == @symbol('ms-greek'))
-	    || (encoding == @symbol('ms-cp1253'))) {
-	fdwCharSet   = GREEK_CHARSET;
+            || (encoding == @symbol('ms-cp1253'))) {
+        fdwCharSet   = GREEK_CHARSET;
     } else if ((encoding == @symbol('ms-turkish'))
-	    || (encoding == @symbol('ms-cp1254'))) {
-	fdwCharSet   = TURKISH_CHARSET;
+            || (encoding == @symbol('ms-cp1254'))) {
+        fdwCharSet   = TURKISH_CHARSET;
     } else if ((encoding == @symbol('ms-russian'))
-	    || (encoding == @symbol('ms-cp1251'))) {
-	fdwCharSet   = RUSSIAN_CHARSET;
+            || (encoding == @symbol('ms-cp1251'))) {
+        fdwCharSet   = RUSSIAN_CHARSET;
     } else if ((encoding == @symbol('ms-easteurope'))
-	    || (encoding == @symbol('ms-cp1250'))) {
-	fdwCharSet   = EASTEUROPE_CHARSET;
+            || (encoding == @symbol('ms-cp1250'))) {
+        fdwCharSet   = EASTEUROPE_CHARSET;
     } else if ((encoding == @symbol('ms-baltic'))
-	    || (encoding == @symbol('ms-cp1257'))) {
-	fdwCharSet   = BALTIC_CHARSET;
+            || (encoding == @symbol('ms-cp1257'))) {
+        fdwCharSet   = BALTIC_CHARSET;
     } else if ((encoding == @symbol('ms-vietnamese'))) {
-	fdwCharSet   = VIETNAMESE_CHARSET;
+        fdwCharSet   = VIETNAMESE_CHARSET;
     } else if ((encoding == @symbol('ms-thai'))) {
-	fdwCharSet   = THAI_CHARSET;
+        fdwCharSet   = THAI_CHARSET;
     } else if ((encoding == @symbol('ms-mac'))) {
-	fdwCharSet   = MAC_CHARSET;
+        fdwCharSet   = MAC_CHARSET;
 #ifdef UNICODE_CHARSET
     } else if ((encoding == @symbol('ms-unicode'))) {
-	fdwCharSet   = UNICODE_CHARSET;
+        fdwCharSet   = UNICODE_CHARSET;
 #endif
     }
 
     if ( __isString( family ) ) {
-	work = __stringVal( family );
-	if (strcmp( work, "nil" ) != 0 ) {
-	    strncpy( faceName, work, sizeof(faceName)-1 );
-	}
+        work = __stringVal( family );
+        if (strcmp( work, "nil" ) != 0 ) {
+            strncpy( faceName, work, sizeof(faceName)-1 );
+        }
     }
 
     /* Q: should we allow those ? (they make ST/X programs less portable to X */
     if( __isString( weight ) ) {
-	work = __stringVal( weight );
-	if (strcmp( work, "bold" ) == 0 ) {
-	    fnWeight = FW_BOLD;
-	} else if (strcmp( work, "medium" ) == 0 ) {
-	    fnWeight = FW_MEDIUM;
-	} else if (strcmp( work, "normal" ) == 0 ) {
-	    fnWeight = FW_NORMAL;
-	} else if (strcmp( work, "light" ) == 0 ) {
-	    fnWeight = FW_LIGHT;
-	} else if (strcmp( work, "demi" ) == 0 ) {
-	    fnWeight = FW_LIGHT;
-	} else if (strcmp( work, "heavy" ) == 0 ) {
-	    fnWeight = FW_HEAVY;
-	} else if (strcmp( work, "extraBold" ) == 0 ) {
-	    fnWeight = FW_EXTRABOLD;
-	} else if (strcmp( work, "semiBold" ) == 0 ) {
-	    fnWeight = FW_SEMIBOLD;
-	} else if (strcmp( work, "thin" ) == 0 ) {
-	    fnWeight = FW_THIN;
-	} else if (strcmp( work, "extraLight" ) == 0 ) {
-	    fnWeight = FW_EXTRALIGHT;
-	}
+        work = __stringVal( weight );
+        if (strcmp( work, "bold" ) == 0 ) {
+            fnWeight = FW_BOLD;
+        } else if (strcmp( work, "medium" ) == 0 ) {
+            fnWeight = FW_MEDIUM;
+        } else if (strcmp( work, "normal" ) == 0 ) {
+            fnWeight = FW_NORMAL;
+        } else if (strcmp( work, "light" ) == 0 ) {
+            fnWeight = FW_LIGHT;
+        } else if (strcmp( work, "demi" ) == 0 ) {
+            fnWeight = FW_LIGHT;
+        } else if (strcmp( work, "heavy" ) == 0 ) {
+            fnWeight = FW_HEAVY;
+        } else if (strcmp( work, "extraBold" ) == 0 ) {
+            fnWeight = FW_EXTRABOLD;
+        } else if (strcmp( work, "semiBold" ) == 0 ) {
+            fnWeight = FW_SEMIBOLD;
+        } else if (strcmp( work, "thin" ) == 0 ) {
+            fnWeight = FW_THIN;
+        } else if (strcmp( work, "extraLight" ) == 0 ) {
+            fnWeight = FW_EXTRALIGHT;
+        }
     } else if (__isSmallInteger(weight)) {
-	fnWeight = __intVal(weight);
+        fnWeight = __intVal(weight);
     }
 
     if(__isSmallInteger( logSize )) {
-	nHeight = __intVal( logSize );
+        nHeight = __intVal( logSize );
     }
 
     if (__isString(slant)) {
-	work2 = __stringVal( slant );
-	work  = __stringVal( slant );
-
-	if (strncmp(work2, "italic", 6) == 0)  {
-	    fdwItalic = TRUE;
-	    if ( work2[6] == '-' )
-		strncpy( work, &work2[7], ( strlen( work2) - 7) );
-	} else {
-	    if (strncmp(work2, "oblique", 7) == 0)  {
-		fdwItalic = TRUE;
-		if ( work2[7] == '-' )
-		    strncpy( work, &work2[8], ( strlen( work2) - 8) );
-	    }
-	}
-	if (strncmp( work, "underline", 9 ) == 0 ) {
-	    fdwUnderline = TRUE;
-	    if( work[10] == '-' )
-		strncpy( work2, &work[11], ( strlen( work ) - 10 ) );
-	}
-	if (strncmp( work2, "strikeOut", 9 ) == 0 ) {
-	    fdwStrikeOut = TRUE;
-	}
+        work2 = __stringVal( slant );
+        work  = __stringVal( slant );
+
+        if (strncmp(work2, "italic", 6) == 0)  {
+            fdwItalic = TRUE;
+            if ( work2[6] == '-' )
+                strncpy( work, &work2[7], ( strlen( work2) - 7) );
+        } else {
+            if (strncmp(work2, "oblique", 7) == 0)  {
+                fdwItalic = TRUE;
+                if ( work2[7] == '-' )
+                    strncpy( work, &work2[8], ( strlen( work2) - 8) );
+            }
+        }
+        if (strncmp( work, "underline", 9 ) == 0 ) {
+            fdwUnderline = TRUE;
+            if( work[10] == '-' )
+                strncpy( work2, &work[11], ( strlen( work ) - 10 ) );
+        }
+        if (strncmp( work2, "strikeOut", 9 ) == 0 ) {
+            fdwStrikeOut = TRUE;
+        }
     }
 
     DPRINTF(("CreateFont face:%s h=%d w=%d wght=%d\n",
-		faceName, nHeight, nWidth, fnWeight));
+                faceName, nHeight, nWidth, fnWeight));
 
     hFont = CreateFont( -nHeight,   /* character height - not cell height */
-			nWidth,
-			nEscapement,
-			nOrientation,
-			fnWeight,
-			fdwItalic,
-			fdwUnderline,
-			fdwStrikeOut,
-			fdwCharSet,
-			fdwOutputPrecision,
-			fdwClipPrecision,
-			fdwQuality,
-			fdwPitchAndFamily,
-			faceName );
+                        nWidth,
+                        nEscapement,
+                        nOrientation,
+                        fnWeight,
+                        fdwItalic,
+                        fdwUnderline,
+                        fdwStrikeOut,
+                        fdwCharSet,
+                        fdwOutputPrecision,
+                        fdwClipPrecision,
+                        fdwQuality,
+                        fdwPitchAndFamily,
+                        faceName );
 
     if (hFont != NULL) {
-	DPRINTF(("createFont: %x\n", hFont));
+        DPRINTF(("createFont: %x\n", hFont));
 /*
     #ifdef COUNT_RESOURCES
-	__cnt_font++;
-	RES1PRINTF(("CreateFont %d\n", __cnt_font));
+        __cnt_font++;
+        RES1PRINTF(("CreateFont %d\n", __cnt_font));
     #endif
 */
-	RETURN ( __MKOBJ(hFont) );
+        RETURN ( __MKOBJ(hFont) );
     }
 
     DPRINTF(("***** ERROR createFontWithFoundry failed ERROR *****\n" ));
@@ -4061,14 +4408,14 @@
 
     "
      Display getFontWithFoundry:'*'
-			 family:'courier'
-			 weight:'medium'
-			  slant:'r'
-			spacing:nil
-		      pixelSize:nil
-			   size:13
-		       registry:'iso8859'
-		       encoding:'*'
+                         family:'courier'
+                         weight:'medium'
+                          slant:'r'
+                        spacing:nil
+                      pixelSize:nil
+                           size:13
+                       registry:'iso8859'
+                       encoding:'*'
     "
 
     "new NT Version: 20.2.1997 / 22:33:29 / dq"
@@ -4096,57 +4443,57 @@
      && __isExternalAddressLike(aDC)
      && __isArray(rawData)
      && (__arraySize(rawData) >= 11)) {
-	SIZE size;
-	int avgWidth;
-	HGDIOBJ hFont;
-	HGDIOBJ prevFont;
-	TEXTMETRIC tmet;
-	static char *s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-	static int len;
-	OBJ t;
-	HANDLE hDC;
-
-	hFont = _HGDIOBJVal(fontId);
-	hDC = (HANDLE)(__externalAddressVal(aDC));
-
-	/*
-	 * temporarily set this font in the tmpDC (root-) context
-	 */
-
-	prevFont = SelectObject(hDC, hFont);
-
-	GetTextMetricsW(hDC, &tmet);
-	if (len == 0) {
-	    len = strlen(s);
-	}
+        SIZE size;
+        int avgWidth;
+        HGDIOBJ hFont;
+        HGDIOBJ prevFont;
+        TEXTMETRIC tmet;
+        static char *s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+        static int len;
+        OBJ t;
+        HANDLE hDC;
+
+        hFont = _HGDIOBJVal(fontId);
+        hDC = (HANDLE)(__externalAddressVal(aDC));
+
+        /*
+         * temporarily set this font in the tmpDC (root-) context
+         */
+
+        prevFont = SelectObject(hDC, hFont);
+
+        GetTextMetricsW(hDC, &tmet);
+        if (len == 0) {
+            len = strlen(s);
+        }
 #if 0
-	GetTextExtentPoint32(hDC, s, len, &size);
-	avgWidth = (size.cx / (len / 2) + 1) / 2;
+        GetTextExtentPoint32(hDC, s, len, &size);
+        avgWidth = (size.cx / (len / 2) + 1) / 2;
 #else
-	avgWidth = tmet.tmAveCharWidth;
+        avgWidth = tmet.tmAveCharWidth;
 #endif
 
-	__ArrayInstPtr(rawData)->a_element[0] = __MKSMALLINT(tmet.tmAscent);        /* ascent     -> (data at:1) */
-	__ArrayInstPtr(rawData)->a_element[1] = __MKSMALLINT(tmet.tmDescent);       /* descent    -> (data at:2) */
-	__ArrayInstPtr(rawData)->a_element[2] = __MKSMALLINT(tmet.tmAscent);        /* maxAscent  -> (data at:3) */
-	__ArrayInstPtr(rawData)->a_element[3] = __MKSMALLINT(tmet.tmDescent);       /* maxDescent -> (data at:4) */
-	__ArrayInstPtr(rawData)->a_element[4] = __MKSMALLINT(avgWidth);             /* minWidth   -> (data at:5) */
-	__ArrayInstPtr(rawData)->a_element[5] = __MKSMALLINT(tmet.tmMaxCharWidth);  /* maxWidth   -> (data at:6) */
-	__ArrayInstPtr(rawData)->a_element[6] = __MKSMALLINT(avgWidth);             /* avgWidth   -> (data at:7) */
-	__ArrayInstPtr(rawData)->a_element[7] = __MKSMALLINT(tmet.tmFirstChar);     /* min        -> (data at:8) */
-	__ArrayInstPtr(rawData)->a_element[8] = __MKSMALLINT(tmet.tmLastChar);      /* max        -> (data at:9) */
-	__ArrayInstPtr(rawData)->a_element[9] = __MKSMALLINT(tmet.tmDefaultChar);   /* default    -> (data at:10) */
+        __ArrayInstPtr(rawData)->a_element[0] = __MKSMALLINT(tmet.tmAscent);        /* ascent     -> (data at:1) */
+        __ArrayInstPtr(rawData)->a_element[1] = __MKSMALLINT(tmet.tmDescent);       /* descent    -> (data at:2) */
+        __ArrayInstPtr(rawData)->a_element[2] = __MKSMALLINT(tmet.tmAscent);        /* maxAscent  -> (data at:3) */
+        __ArrayInstPtr(rawData)->a_element[3] = __MKSMALLINT(tmet.tmDescent);       /* maxDescent -> (data at:4) */
+        __ArrayInstPtr(rawData)->a_element[4] = __MKSMALLINT(avgWidth);             /* minWidth   -> (data at:5) */
+        __ArrayInstPtr(rawData)->a_element[5] = __MKSMALLINT(tmet.tmMaxCharWidth);  /* maxWidth   -> (data at:6) */
+        __ArrayInstPtr(rawData)->a_element[6] = __MKSMALLINT(avgWidth);             /* avgWidth   -> (data at:7) */
+        __ArrayInstPtr(rawData)->a_element[7] = __MKSMALLINT(tmet.tmFirstChar);     /* min        -> (data at:8) */
+        __ArrayInstPtr(rawData)->a_element[8] = __MKSMALLINT(tmet.tmLastChar);      /* max        -> (data at:9) */
+        __ArrayInstPtr(rawData)->a_element[9] = __MKSMALLINT(tmet.tmDefaultChar);   /* default    -> (data at:10) */
 #if 0
-	t = __charSetSymbolFor(tmet.tmCharSet);
-	__ArrayInstPtr(rawData)->a_element[10]= t; __STORE(rawData, t);             /* charSet    -> (data at:11) */
+        t = __charSetSymbolFor(tmet.tmCharSet);
+        __ArrayInstPtr(rawData)->a_element[10]= t; __STORE(rawData, t);             /* charSet    -> (data at:11) */
 #endif
 
-	DPRINTF(("textMetrics h=%x  avgAsc=%d avgDesc=%d minW=%d maxW=%d avgW=%d\n",
-		    hFont, tmet.tmAscent, tmet.tmDescent, avgWidth, tmet.tmMaxCharWidth,
-		    tmet.tmAveCharWidth));
-
-	SelectObject(hDC, prevFont);
-	RETURN (self);
+        DPRINTF(("textMetrics h=%x  avgAsc=%d avgDesc=%d minW=%d maxW=%d avgW=%d\n",
+                    hFont, tmet.tmAscent, tmet.tmDescent, avgWidth, tmet.tmMaxCharWidth,
+                    tmet.tmAveCharWidth));
+
+        SelectObject(hDC, prevFont);
+        RETURN (self);
     }
     RETURN (nil);
 %}
@@ -4156,12 +4503,12 @@
 
 %{  /* NOCONTEXT */
     if (__isExternalAddress(aFontId)) {
-	HGDIOBJ hFont = _HGDIOBJVal(aFontId);
-
-	if (hFont) {
-	   DPRINTF(("ReleaseFont: %x\n", hFont));
-	   DeleteObject(hFont);
-	}
+        HGDIOBJ hFont = _HGDIOBJVal(aFontId);
+
+        if (hFont) {
+           DPRINTF(("ReleaseFont: %x\n", hFont));
+           DeleteObject(hFont);
+        }
     }
 %}
 !
@@ -4174,13 +4521,13 @@
     if (__isExternalAddressLike(aDC)
      && __isExternalAddress(aFontId))
     {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	HGDIOBJ prevFont, hFont;
-
-	hFont = _HGDIOBJVal(aFontId);
-	prevFont = SelectObject(hDC, hFont);
-
-	RETURN ( self );
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        HGDIOBJ prevFont, hFont;
+
+        hFont = _HGDIOBJVal(aFontId);
+        prevFont = SelectObject(hDC, hFont);
+
+        RETURN ( self );
     }
 %}.
     self primitiveFailed
@@ -4200,94 +4547,94 @@
      && __isExternalAddress(aFontId)
      && __isExternalAddressLike(__INST(gcId))
      && __isNonNilObject(aString)) {
-	HGDIOBJ hFont,prevFont;
-	HANDLE hDC;
-	SIZE tsize;
+        HGDIOBJ hFont,prevFont;
+        HANDLE hDC;
+        SIZE tsize;
 
 #ifndef PRE_22_FEP_2007
 #       define N_QUICK_CHARS    1024
-	unsigned short quickWchars[N_QUICK_CHARS];
-	unsigned short *wcharPtr;
-	int mustFree = 0;
-	int i;
+        unsigned short quickWchars[N_QUICK_CHARS];
+        unsigned short *wcharPtr;
+        int mustFree = 0;
+        int i;
 #endif
 
-	hFont = _HGDIOBJVal(aFontId);
-	hDC = (HANDLE)(__externalAddressVal(__INST(gcId)));
-
-	prevFont = SelectObject(hDC, hFont);
-
-	i1 = __intVal(index1) - 1;
-	cls = __qClass(aString);
-
-	if (i1 >= 0) {
-	    i2 = __intVal(index2) - 1;
-	    if (i2 < i1) {
-		RETURN ( __MKSMALLINT( 0 ) );
-	    }
-
-	    cp = (char *) _stringVal(aString);
-	    l = i2 - i1 + 1;
-
-	    if ((cls == @global(String)) || (cls == @global(Symbol))) {
-		n = _stringSize(aString);
+        hFont = _HGDIOBJVal(aFontId);
+        hDC = (HANDLE)(__externalAddressVal(__INST(gcId)));
+
+        prevFont = SelectObject(hDC, hFont);
+
+        i1 = __intVal(index1) - 1;
+        cls = __qClass(aString);
+
+        if (i1 >= 0) {
+            i2 = __intVal(index2) - 1;
+            if (i2 < i1) {
+                RETURN ( __MKSMALLINT( 0 ) );
+            }
+
+            cp = (char *) _stringVal(aString);
+            l = i2 - i1 + 1;
+
+            if ((cls == @global(String)) || (cls == @global(Symbol))) {
+                n = _stringSize(aString);
     commonWidthChars:
-		if (i2 < n) {
-		    cp += i1;
+                if (i2 < n) {
+                    cp += i1;
 
 #ifdef PRE_22_FEP_2007
-		    GetTextExtentPoint32(hDC, cp, l, &tsize);
+                    GetTextExtentPoint32(hDC, cp, l, &tsize);
 #else
-		    if (l <= N_QUICK_CHARS) {
-			wcharPtr = quickWchars;
-			mustFree = 0;
-		    } else {
-			wcharPtr = malloc(sizeof(short)*l);
-			if (! wcharPtr) RETURN (__MKSMALLINT(0));
-			mustFree = 1;
-		    }
-		    for (i=0; i<l; i++) wcharPtr[i] = ((unsigned char *)cp)[i];
-		    GetTextExtentPoint32W(hDC, wcharPtr, l, &tsize);
-		    if (mustFree) free(wcharPtr);
+                    if (l <= N_QUICK_CHARS) {
+                        wcharPtr = quickWchars;
+                        mustFree = 0;
+                    } else {
+                        wcharPtr = malloc(sizeof(short)*l);
+                        if (! wcharPtr) RETURN (__MKSMALLINT(0));
+                        mustFree = 1;
+                    }
+                    for (i=0; i<l; i++) wcharPtr[i] = ((unsigned char *)cp)[i];
+                    GetTextExtentPoint32W(hDC, wcharPtr, l, &tsize);
+                    if (mustFree) free(wcharPtr);
 #endif
 
 #ifdef SUPERDEBUG
-		    if (__debug__) {
-			char buf[80];
-
-			GetTextFace(hDC,80,buf);
-			console_printf("font1 %x %s >%s< l=%d dx=%d\n",hFont,buf,cp,l,tsize.cx);
-		    }
+                    if (__debug__) {
+                        char buf[80];
+
+                        GetTextFace(hDC,80,buf);
+                        console_printf("font1 %x %s >%s< l=%d dx=%d\n",hFont,buf,cp,l,tsize.cx);
+                    }
 #endif
-		    SelectObject(hDC, prevFont);
-		    RETURN ( __MKSMALLINT(tsize.cx) );
-		}
-		RETURN (__MKSMALLINT(0));
-	    }
-
-	    nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
-	    cp += nInstBytes;
-	    n = __byteArraySize(aString) - nInstBytes;
-
-	    if (__isBytes(aString)) {
-		goto commonWidthChars;
-	    }
-
-	    /* Unicode */
-	    if (__isWords(aString)) {
-		n = n / 2;
-		if (i2 < n) {
-		    WIDECHAR *w_cp = (WIDECHAR *)cp;
-
-		    w_cp += i1;
-
-		    GetTextExtentPoint32W(hDC, w_cp, l, &tsize);
-		    SelectObject(hDC, prevFont);
-		    RETURN ( __MKSMALLINT(tsize.cx) );
-		}
-		RETURN (__MKSMALLINT(0));
-	    }
-	}
+                    SelectObject(hDC, prevFont);
+                    RETURN ( __MKSMALLINT(tsize.cx) );
+                }
+                RETURN (__MKSMALLINT(0));
+            }
+
+            nInstBytes = __OBJS2BYTES__(__intVal(__ClassInstPtr(cls)->c_ninstvars));
+            cp += nInstBytes;
+            n = __byteArraySize(aString) - nInstBytes;
+
+            if (__isBytes(aString)) {
+                goto commonWidthChars;
+            }
+
+            /* Unicode */
+            if (__isWords(aString)) {
+                n = n / 2;
+                if (i2 < n) {
+                    WIDECHAR *w_cp = (WIDECHAR *)cp;
+
+                    w_cp += i1;
+
+                    GetTextExtentPoint32W(hDC, w_cp, l, &tsize);
+                    SelectObject(hDC, prevFont);
+                    RETURN ( __MKSMALLINT(tsize.cx) );
+                }
+                RETURN (__MKSMALLINT(0));
+            }
+        }
     }
 %}.
     self primitiveFailed.
@@ -4325,8 +4672,8 @@
 
     id := gcId.
     id notNil ifTrue:[
-	gcId := nil.
-	self deleteDC.
+        gcId := nil.
+        self deleteDC.
     ].
 "/    Lobby unregister:self.
 !
@@ -4334,15 +4681,15 @@
 destroyGC:aDC
 %{
     if (__isExternalAddressLike(aDC)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-
-	DeleteDC(hDC);
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+
+        DeleteDC(hDC);
 
 /*
 #ifdef CACHE_LAST_DC
-	if (lastGcData == gcData) {
-	    _releaseDC(gcData);
-	}
+        if (lastGcData == gcData) {
+            _releaseDC(gcData);
+        }
 #endif
 */
 
@@ -4378,9 +4725,9 @@
 
 releaseDeviceFonts
     deviceFonts isEmptyOrNil ifFalse:[
-	deviceFonts do:[:afont |
-	    afont releaseFromDevice.
-	].
+        deviceFonts do:[:afont |
+            afont releaseFromDevice.
+        ].
     ].
     deviceFonts := CachingRegistry new cacheSize:10.
 ! !
@@ -4397,23 +4744,23 @@
     index <= 0 ifTrue:[ ^ 0 ].
     str := index >= aString size ifTrue:[ aString ] ifFalse:[ aString copyFrom:1 to:index ].
     true "self font isNil" ifTrue:[
-	"if font not set yet, calculate based on default font"
-	"/            extString := str asExternalString.
-	size := Win32OperatingSystem::WinPointStructure new.
-	(OperatingSystem
-	    getTextExtentPoint:gcId
-	    string:str
-	    size:size) ifFalse:[ ^ self error ].
-	answer := size x.
+        "if font not set yet, calculate based on default font"
+        "/            extString := str asExternalString.
+        size := Win32OperatingSystem::WinPointStructure new.
+        (OperatingSystem
+            getTextExtentPoint:gcId
+            string:str
+            size:size) ifFalse:[ ^ self error ].
+        answer := size x.
 "/        Transcript showCR: 'FROM PRIM ******* ', str, '   ',  answer printString.
 "/        Transcript showCR: 'FROM DEVICE ***** ', str, '   ',(self font widthOf:str on:self device) printString.
-	#TODO.
+        #TODO.
     ] ifFalse:[
-	answer := self font widthOf:str on:self device
+        answer := self font widthOf:str on:self device
     ].
     index > aString size ifTrue:[
-	spaceWidth := self font widthOf:Character space on:self device.
-	answer := answer + ((index - aString size) * spaceWidth)
+        spaceWidth := self font widthOf:Character space on:self device.
+        answer := answer + ((index - aString size) * spaceWidth)
     ].
     ^ answer.
 
@@ -4428,7 +4775,7 @@
     "draw a line"
 
     self displayAdvanceLineFromX:(point1 x) y:(point1 y)
-		      toX:(point2 x) y:(point2 y)
+                      toX:(point2 x) y:(point2 y)
 !
 
 displayAdvanceLineFromX:x0 y:y0 toX:x1 y:y1
@@ -4437,52 +4784,52 @@
     |pX0 pY0 pX1 pY1 easy fgId bgId|
 
     gcId isNil ifTrue:[
-	self initGC
+        self initGC
     ].
 
     lineStyle == #doubleDashed ifTrue:[
-	"
-	 if bgPaint or paint is not a real color, we have to do it the hard way ...
-	"
-	easy := true.
-	paint isColor ifFalse:[
-	    easy := false
-	] ifTrue:[
-	    fgId := paint colorId.
-	    fgId isNil ifTrue:[
-		easy := false
-	    ]
-	].
-	bgPaint isColor ifFalse:[
-	    easy := false
-	] ifTrue:[
-	    bgId := bgPaint colorId.
-	    bgId isNil ifTrue:[
-		easy := false
-	    ]
-	].
-
-	easy ifTrue:[
-	    ((foreground ~~ paint) or:[background ~~ bgPaint]) ifTrue:[
-		device setForeground:fgId background:bgId in:gcId.
-		foreground := paint.
-		background := bgPaint.
-	    ].
-	] ifFalse:[
-	    'DeviceGraphicsContext [warning]: cannot draw dashes with dithered colors' errorPrintCR
-	].
+        "
+         if bgPaint or paint is not a real color, we have to do it the hard way ...
+        "
+        easy := true.
+        paint isColor ifFalse:[
+            easy := false
+        ] ifTrue:[
+            fgId := paint colorId.
+            fgId isNil ifTrue:[
+                easy := false
+            ]
+        ].
+        bgPaint isColor ifFalse:[
+            easy := false
+        ] ifTrue:[
+            bgId := bgPaint colorId.
+            bgId isNil ifTrue:[
+                easy := false
+            ]
+        ].
+
+        easy ifTrue:[
+            ((foreground ~~ paint) or:[background ~~ bgPaint]) ifTrue:[
+                device setForeground:fgId background:bgId in:gcId.
+                foreground := paint.
+                background := bgPaint.
+            ].
+        ] ifFalse:[
+            'DeviceGraphicsContext [warning]: cannot draw dashes with dithered colors' errorPrintCR
+        ].
     ].
 
     transformation notNil ifTrue:[
-	pX0 := transformation applyToX:x0.
-	pY0 := transformation applyToY:y0.
-	pX1 := transformation applyToX:x1.
-	pY1 := transformation applyToY:y1.
+        pX0 := transformation applyToX:x0.
+        pY0 := transformation applyToY:y0.
+        pX1 := transformation applyToX:x1.
+        pY1 := transformation applyToY:y1.
     ] ifFalse:[
-	pX0 := x0.
-	pY0 := y0.
-	pX1 := x1.
-	pY1 := y1
+        pX0 := x0.
+        pY0 := y0.
+        pX1 := x1.
+        pY1 := y1
     ].
 
     pX0 := pX0 rounded.
@@ -4504,32 +4851,32 @@
     if (__isExternalAddressLike(aDC)
      && __bothSmallInteger(x0, y0)
      && __bothSmallInteger(x1, y1)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	COLORREF fgColor;
-	int __x1 = __intVal(x1), __y1 = __intVal(y1);
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        COLORREF fgColor;
+        int __x1 = __intVal(x1), __y1 = __intVal(y1);
 
 
 /*      DPRINTF(("displayLine: %d/%d -> %d/%d\n",
-		    __intVal(x0), __intVal(y0),
-		    __x1, __y1));
+                    __intVal(x0), __intVal(y0),
+                    __x1, __y1));
 */
 
 /*        fgColor = GetTextColor(hDC);
  *        hPen = CreatePen(PS_SOLID, 1, fgColor);
  */
 
-	MoveToEx(hDC, __intVal(x0), __intVal(y0), NULL);
-
-	LineTo(hDC, __x1, __y1);
-
-	/*
-	 * end-point ...
-	 */
-	LineTo(hDC, __x1+1, __y1);
-
-
-
-	RETURN ( self );
+        MoveToEx(hDC, __intVal(x0), __intVal(y0), NULL);
+
+        LineTo(hDC, __x1, __y1);
+
+        /*
+         * end-point ...
+         */
+        LineTo(hDC, __x1+1, __y1);
+
+
+
+        RETURN ( self );
     }
 %}
 !
@@ -4593,8 +4940,8 @@
     |maskOriginX maskOriginY|
 
     self maskOrigin isNil ifFalse:[
-	maskOriginX := self maskOrigin x.
-	maskOriginY := self maskOrigin y.
+        maskOriginX := self maskOrigin x.
+        maskOriginY := self maskOrigin y.
     ].
 
 %{
@@ -4622,40 +4969,40 @@
     maskOrgY=__intVal(maskOriginY);
 
     if (lineStyle == @symbol(solid)) {
-	style = PS_SOLID;
+        style = PS_SOLID;
     } else if (lineStyle == @symbol(dashed)) {
-	style= PS_DASH;
+        style= PS_DASH;
     } else if (lineStyle == @symbol(dotted)) {
-	style= PS_DOT;
+        style= PS_DOT;
     } else if (lineStyle == @symbol(dashDot)) {
-	style= PS_DASHDOT;
+        style= PS_DASHDOT;
     } else if (lineStyle == @symbol(dashDotDot)) {
-	style= PS_DASHDOTDOT;
+        style= PS_DASHDOTDOT;
     } else
-	style= PS_SOLID;
+        style= PS_SOLID;
     lStyle &= ~PS_STYLE_MASK;
     lStyle |= style;
 
 
     if (capStyle == @symbol(round)) {
-	style = PS_ENDCAP_ROUND;
+        style = PS_ENDCAP_ROUND;
     } else if (capStyle == @symbol(square)) {
-	style = PS_ENDCAP_SQUARE;
+        style = PS_ENDCAP_SQUARE;
     } else if (capStyle == @symbol(flat)) {
-	style = PS_ENDCAP_FLAT;
+        style = PS_ENDCAP_FLAT;
     } else
-	style = PS_ENDCAP_FLAT;
+        style = PS_ENDCAP_FLAT;
     lStyle &= ~PS_ENDCAP_MASK;
     lStyle |= style;
 
     if (joinStyle == @symbol(bevel)) {
-	style = PS_JOIN_BEVEL;
+        style = PS_JOIN_BEVEL;
     } else if (joinStyle == @symbol(miter)) {
-	style = PS_JOIN_MITER;
+        style = PS_JOIN_MITER;
     } else if (joinStyle == @symbol(round)) {
-	style = PS_JOIN_ROUND;
+        style = PS_JOIN_ROUND;
     } else
-	style = PS_JOIN_MITER;
+        style = PS_JOIN_MITER;
     lStyle &= ~PS_JOIN_MASK;
     lStyle |= style;
 
@@ -4663,38 +5010,38 @@
     if (((lStyle & PS_STYLE_MASK) == PS_SOLID)
      && (hMask == 0)
      && (lw /* lineWidth */ <= 1)) {
-	if (fgColor == 0 /* BlackPixel */ ) {
-	    hPen = GetStockObject(BLACK_PEN);
-	    prevPen = SelectObject(hDC, hPen);
-	    RETURN( hPen );
-	}
-	if (fgColor == 1 /* WhitePixel */) {
-	    hPen = GetStockObject(WHITE_PEN);
-	    prevPen = SelectObject(hDC, hPen);
-	    RETURN( hPen );
-	}
+        if (fgColor == 0 /* BlackPixel */ ) {
+            hPen = GetStockObject(BLACK_PEN);
+            prevPen = SelectObject(hDC, hPen);
+            RETURN( hPen );
+        }
+        if (fgColor == 1 /* WhitePixel */) {
+            hPen = GetStockObject(WHITE_PEN);
+            prevPen = SelectObject(hDC, hPen);
+            RETURN( hPen );
+        }
     }
 
     hPen = (HPEN) 0;
 
     if (0 /* __isWinNT */) {
 
-	if (lw == 0) {
-	    lw = 1;
-	}
-	/*
-	 * NT supports masked drawing with any lineStyle,
-	 * and also non-solid lines with any lineWidth.
-	 */
-	if (hMask) {
-	    Brush.lbStyle = BS_PATTERN;
-	    Brush.lbHatch = (DWORD)hMask;
-	    Brush.lbColor = fgColor;
-	} else {
+        if (lw == 0) {
+            lw = 1;
+        }
+        /*
+         * NT supports masked drawing with any lineStyle,
+         * and also non-solid lines with any lineWidth.
+         */
+        if (hMask) {
+            Brush.lbStyle = BS_PATTERN;
+            Brush.lbHatch = (DWORD)hMask;
+            Brush.lbColor = fgColor;
+        } else {
 
 #ifndef PRE_07_APR_04
 
-	    hPen = CreatePen((lStyle & PS_STYLE_MASK), lw, fgColor);
+            hPen = CreatePen((lStyle & PS_STYLE_MASK), lw, fgColor);
 
 /*            RESPRINTF(("CreatePen %x %d(%d) %x %x\n",
  *                       lStyle,
@@ -4702,92 +5049,92 @@
  *                       fgColor, hMask));
  */
 
-	    SetBkMode(hDC, TRANSPARENT);
-	    bkMode = BK_TRANSPARENT;
+            SetBkMode(hDC, TRANSPARENT);
+            bkMode = BK_TRANSPARENT;
 
 #else
-	    Brush.lbStyle = BS_SOLID;
-	    Brush.lbHatch = 0;
-	    Brush.lbColor = fgColor;
+            Brush.lbStyle = BS_SOLID;
+            Brush.lbHatch = 0;
+            Brush.lbColor = fgColor;
 #endif
-	}
-
-	if (! hPen)
-	{
-	    hPen = ExtCreatePen(PS_GEOMETRIC | lStyle,
-			    lw, /* lineWidth, */
-			    &Brush,
-			    0, 0);
+        }
+
+        if (! hPen)
+        {
+            hPen = ExtCreatePen(PS_GEOMETRIC | lStyle,
+                            lw, /* lineWidth, */
+                            &Brush,
+                            0, 0);
 
 /*            RESPRINTF(("ExtCreatePen1 %x %d(%d) %x %x\n",
  *                       lStyle,
  *                       lw, __INST(lineWidth),
  *                       fgColor, hMask));
  */
-	    if (hMask) {
-		SetBrushOrgEx(hDC, maskOrgX, maskOrgY, 0);
-	    }
-	}
+            if (hMask) {
+                SetBrushOrgEx(hDC, maskOrgX, maskOrgY, 0);
+            }
+        }
     } else {
-	/*
-	 * W95 only supports masked drawing with SOLID lines
-	 * also, we should use COSMETIC pens if possible
-	 * with non-solid lineStyles.
-	 */
-	if ((lStyle & PS_STYLE_MASK) == PS_SOLID) {
-	    int ps = PS_GEOMETRIC;
-
-	    if (hMask) {
-		Brush.lbStyle = BS_PATTERN;
-		Brush.lbHatch = (DWORD)hMask;
-		Brush.lbColor = fgColor;
-	    } else {
-		Brush.lbStyle = BS_SOLID;
-		Brush.lbHatch = 0;
-		Brush.lbColor = fgColor;
-		if (lw /* lineWidth */ <= 1) {
-		    ps = PS_COSMETIC;
-		}
-	    }
-
-	    hPen = ExtCreatePen(ps | lStyle,
-				lw, /* lineWidth */
-				&Brush,
-				0, 0);
+        /*
+         * W95 only supports masked drawing with SOLID lines
+         * also, we should use COSMETIC pens if possible
+         * with non-solid lineStyles.
+         */
+        if ((lStyle & PS_STYLE_MASK) == PS_SOLID) {
+            int ps = PS_GEOMETRIC;
+
+            if (hMask) {
+                Brush.lbStyle = BS_PATTERN;
+                Brush.lbHatch = (DWORD)hMask;
+                Brush.lbColor = fgColor;
+            } else {
+                Brush.lbStyle = BS_SOLID;
+                Brush.lbHatch = 0;
+                Brush.lbColor = fgColor;
+                if (lw /* lineWidth */ <= 1) {
+                    ps = PS_COSMETIC;
+                }
+            }
+
+            hPen = ExtCreatePen(ps | lStyle,
+                                lw, /* lineWidth */
+                                &Brush,
+                                0, 0);
 
 /*            RESPRINTF(("ExtCreatePen1 %x %d %x %x\n",
  *                           lStyle,
  *                           lw,
  *                           fgColor, hMask));
  */
-	    if (hMask) {
-		SetBrushOrgEx(hDC, maskOrgX, maskOrgY, 0);
-	    }
-	} else {
-
-	    if (lw == 1) {
-		lw = 0;
-	    }
-
-	    /*
-	     * dashes only supported with lineWidth 0
-	     */
-
-	    hPen = CreatePen((lStyle & PS_STYLE_MASK),
-			     lw,
-			     fgColor);
+            if (hMask) {
+                SetBrushOrgEx(hDC, maskOrgX, maskOrgY, 0);
+            }
+        } else {
+
+            if (lw == 1) {
+                lw = 0;
+            }
+
+            /*
+             * dashes only supported with lineWidth 0
+             */
+
+            hPen = CreatePen((lStyle & PS_STYLE_MASK),
+                             lw,
+                             fgColor);
 
 /*            RESPRINTF(("CreatePen %x %d %x\n",
  *                               (lStyle & PS_STYLE_MASK),
  *                               lw,
  *                               fgColor));
  */
-	    //
-	    // CG: wrong; must set to opaque, if doubleDashed
-	    //
-	    SetBkMode(hDC, TRANSPARENT);
-	    bkMode = BK_TRANSPARENT;
-	}
+            //
+            // CG: wrong; must set to opaque, if doubleDashed
+            //
+            SetBkMode(hDC, TRANSPARENT);
+            bkMode = BK_TRANSPARENT;
+        }
     }
 
     prevPen = SelectObject(hDC, hPen);
@@ -4798,11 +5145,11 @@
 !
 
 xprimDrawBits:imageBits bitsPerPixel:bitsPerPixel depth:imageDepth padding:padd width:imageWidth height:imageHeight
-				  x:srcx y:srcy
-			       into:ignoredDrawableId
-				  x:dstx y:dsty
-			      width:w height:h
-			       with:aDC
+                                  x:srcx y:srcy
+                               into:ignoredDrawableId
+                                  x:dstx y:dsty
+                              width:w height:h
+                               with:aDC
 
     "since XPutImage may allocate huge amount of stack space
      (some implementations use alloca), this must run with unlimited stack."
@@ -4814,9 +5161,9 @@
     unsigned char *__imageBits = 0;
 
     if (__isByteArray(imageBits)) {
-	__imageBits = __ByteArrayInstPtr(imageBits)->ba_element;
+        __imageBits = __ByteArrayInstPtr(imageBits)->ba_element;
     } else if (__isExternalBytesLike(imageBits)) {
-	__imageBits = (unsigned char *)(__externalBytesAddress(imageBits));
+        __imageBits = (unsigned char *)(__externalBytesAddress(imageBits));
     }
 
     if (/* ISCONNECTED
@@ -4829,90 +5176,90 @@
      && __isSmallInteger(padd)
      && __imageBits)
      {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	struct
-	{
-	  BITMAPINFOHEADER bmiHeader;
-	  DWORD r;
-	  DWORD g;
-	  DWORD b;
-	} bitmap;
-
-	if (__intVal(padd) != WIN32PADDING) {
-	    int row, col;
-	    unsigned char *cp;
-	    unsigned char *pBits;
-	    int b_width, b_height, bytesPerRowST, bytesPerRowWN, padding, nBytes;
-	    int bi = __intVal(bitsPerPixel);
-
-	    b_width = __intVal(w);
-	    b_height = __intVal(h);
-	    bytesPerRowST = (b_width * bi + (__intVal(padd)-1)) / __intVal(padd);
-	    bytesPerRowWN = (b_width * bi + (WIN32PADDING-1)) / WIN32PADDING * (WIN32PADDING/8);
-	    padding = bytesPerRowWN - bytesPerRowST;
-	    nBytes = b_height * bytesPerRowWN;
-	    /*console_printf("padd %d bs %d bw %d p %d\n",__intVal(padd),bytesPerRowST,bytesPerRowWN,padding);*/
-	    if (padding) {
-		if (nBytes < sizeof(fastBits)) {
-		    cp = b_bits = fastBits;
-		} else {
-		    cp = b_bits = allocatedBits = (unsigned char *) malloc(nBytes);
-		}
-		if (cp) {
-		    pBits = __imageBits;
-		    for (row = b_height; row; row--) {
-			for (col = bytesPerRowST; col; col--) {
-			    *cp++ = *pBits++;
-			}
-			cp += padding;
-		    }
-		} else
-		    goto fail;
-	    }
-	}
-
-	if (b_bits == 0) {
-	    b_bits = __imageBits;
-	}
-
-	bitmap.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
-	bitmap.bmiHeader.biPlanes = 1;
-	if (__intVal(imageDepth) == 24) {
-	    /*bitmap.bmiHeader.biCompression = BI_BITFIELDS;
-	    bitmap.r = 0xff0000;
-	    bitmap.g = 0x00ff00;
-	    bitmap.b = 0x0000ff;*/
-	    bitmap.bmiHeader.biCompression = BI_RGB;
-	} else if (__intVal(imageDepth) == 16) {
-	    /*bitmap.bmiHeader.biCompression = BI_RGB;
-	    bitmap.bmiHeader.biCompression = BI_BITFIELDS;
-	    bitmap.b = 0x001f;
-	    bitmap.g = 0x07e0;
-	    bitmap.r = 0xf800;*/
-	    bitmap.b = 0;
-	    bitmap.g = 0;
-	    bitmap.r = 0;
-	    bitmap.bmiHeader.biCompression = BI_RGB;
-	}
-	bitmap.bmiHeader.biSizeImage = 0;
-	bitmap.bmiHeader.biXPelsPerMeter = 0;
-	bitmap.bmiHeader.biYPelsPerMeter = 0;
-	bitmap.bmiHeader.biClrUsed = 0;
-	bitmap.bmiHeader.biClrImportant = 0;
-	bitmap.bmiHeader.biWidth = __intVal(imageWidth);
-	bitmap.bmiHeader.biHeight = -(__intVal(imageHeight));
-	bitmap.bmiHeader.biBitCount = __intVal(bitsPerPixel);
-	/*console_printf("drawBits depth:%d bitsPerPixel:%d IW%d W:%d H:%d\n",__intVal(imageDepth),bitmap.bmiHeader.biBitCount,bitmap.bmiHeader.biWidth,__intVal(w),bitmap.bmiHeader.biHeight);*/
-	SetDIBitsToDevice(hDC,__intVal(dstx),__intVal(dsty),
-			      __intVal(w), __intVal(h),
-			      __intVal(srcx), __intVal(srcy),
-			      0,__intVal(h),
-			      (void *)b_bits,
-			      (BITMAPINFO*)&bitmap,DIB_RGB_COLORS);
-	if (allocatedBits) {
-	    free(allocatedBits);
-	}
-	RETURN ( true );
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        struct
+        {
+          BITMAPINFOHEADER bmiHeader;
+          DWORD r;
+          DWORD g;
+          DWORD b;
+        } bitmap;
+
+        if (__intVal(padd) != WIN32PADDING) {
+            int row, col;
+            unsigned char *cp;
+            unsigned char *pBits;
+            int b_width, b_height, bytesPerRowST, bytesPerRowWN, padding, nBytes;
+            int bi = __intVal(bitsPerPixel);
+
+            b_width = __intVal(w);
+            b_height = __intVal(h);
+            bytesPerRowST = (b_width * bi + (__intVal(padd)-1)) / __intVal(padd);
+            bytesPerRowWN = (b_width * bi + (WIN32PADDING-1)) / WIN32PADDING * (WIN32PADDING/8);
+            padding = bytesPerRowWN - bytesPerRowST;
+            nBytes = b_height * bytesPerRowWN;
+            /*console_printf("padd %d bs %d bw %d p %d\n",__intVal(padd),bytesPerRowST,bytesPerRowWN,padding);*/
+            if (padding) {
+                if (nBytes < sizeof(fastBits)) {
+                    cp = b_bits = fastBits;
+                } else {
+                    cp = b_bits = allocatedBits = (unsigned char *) malloc(nBytes);
+                }
+                if (cp) {
+                    pBits = __imageBits;
+                    for (row = b_height; row; row--) {
+                        for (col = bytesPerRowST; col; col--) {
+                            *cp++ = *pBits++;
+                        }
+                        cp += padding;
+                    }
+                } else
+                    goto fail;
+            }
+        }
+
+        if (b_bits == 0) {
+            b_bits = __imageBits;
+        }
+
+        bitmap.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+        bitmap.bmiHeader.biPlanes = 1;
+        if (__intVal(imageDepth) == 24) {
+            /*bitmap.bmiHeader.biCompression = BI_BITFIELDS;
+            bitmap.r = 0xff0000;
+            bitmap.g = 0x00ff00;
+            bitmap.b = 0x0000ff;*/
+            bitmap.bmiHeader.biCompression = BI_RGB;
+        } else if (__intVal(imageDepth) == 16) {
+            /*bitmap.bmiHeader.biCompression = BI_RGB;
+            bitmap.bmiHeader.biCompression = BI_BITFIELDS;
+            bitmap.b = 0x001f;
+            bitmap.g = 0x07e0;
+            bitmap.r = 0xf800;*/
+            bitmap.b = 0;
+            bitmap.g = 0;
+            bitmap.r = 0;
+            bitmap.bmiHeader.biCompression = BI_RGB;
+        }
+        bitmap.bmiHeader.biSizeImage = 0;
+        bitmap.bmiHeader.biXPelsPerMeter = 0;
+        bitmap.bmiHeader.biYPelsPerMeter = 0;
+        bitmap.bmiHeader.biClrUsed = 0;
+        bitmap.bmiHeader.biClrImportant = 0;
+        bitmap.bmiHeader.biWidth = __intVal(imageWidth);
+        bitmap.bmiHeader.biHeight = -(__intVal(imageHeight));
+        bitmap.bmiHeader.biBitCount = __intVal(bitsPerPixel);
+        /*console_printf("drawBits depth:%d bitsPerPixel:%d IW%d W:%d H:%d\n",__intVal(imageDepth),bitmap.bmiHeader.biBitCount,bitmap.bmiHeader.biWidth,__intVal(w),bitmap.bmiHeader.biHeight);*/
+        SetDIBitsToDevice(hDC,__intVal(dstx),__intVal(dsty),
+                              __intVal(w), __intVal(h),
+                              __intVal(srcx), __intVal(srcy),
+                              0,__intVal(h),
+                              (void *)b_bits,
+                              (BITMAPINFO*)&bitmap,DIB_RGB_COLORS);
+        if (allocatedBits) {
+            free(allocatedBits);
+        }
+        RETURN ( true );
     }
 
 fail: ;
@@ -4921,105 +5268,15 @@
 */
     if (allocatedBits) {
 /*
-	PRINTF(("freeing up temp bitmap bits ...\n"));
+        PRINTF(("freeing up temp bitmap bits ...\n"));
 */
-	free(allocatedBits);
+        free(allocatedBits);
     }
 %}
 .
     ^ false
 !
 
-xxdisplayLineFromX:x0 y:y0 toX:x1 y:y1 in:ignoredDrawableId with:aDC
-    "draw a line. If the coordinates are not integers, an error is triggered."
-
-    |pen|
-
-    pen := self getPenForMyContext.
-
-%{  /* NOCONTEXT */
-    if (__isExternalAddressLike(aDC)
-     && __bothSmallInteger(x0, y0)
-     && __bothSmallInteger(x1, y1)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	COLORREF fgColor;
-	HANDLE prevPen, hPen;
-	int __x1 = __intVal(x1), __y1 = __intVal(y1);
-									  /*  Obtaining Pen  */
-	int style, styleInt, lineWidth;
-
-	lineWidth= __INST(lineWidth);
-
-	if (__INST(lineStyle) == @symbol(solid)) {
-	    style= PS_SOLID;
-	} else if (__INST(lineStyle) == @symbol(dashed)) {
-	    style= PS_DASH;
-	} else if (__INST(lineStyle) == @symbol(dotted)) {
-	    style= PS_DOT;
-	} else if (__INST(lineStyle) == @symbol(dashDot)) {
-	    style= PS_DASHDOT;
-	} else if (__INST(lineStyle) == @symbol(dashDotDot)) {
-	    style= PS_DASHDOTDOT;
-	} else
-	    style= PS_SOLID;
-	styleInt &= ~PS_STYLE_MASK;
-	styleInt |= style;
-
-
-	if (__INST(capStyle) == @symbol(round)) {
-	    style= PS_ENDCAP_ROUND;
-	} else if (__INST(capStyle) == @symbol(square)) {
-	    style= PS_ENDCAP_SQUARE;
-	} else if (__INST(capStyle) == @symbol(flat)) {
-	    style= PS_ENDCAP_FLAT;
-	} else
-	    style= PS_ENDCAP_FLAT;
-	styleInt &= ~PS_ENDCAP_MASK;
-	styleInt |= style;
-
-
-	if (__INST(joinStyle) == @symbol(bevel)) {
-	    style= PS_JOIN_BEVEL;
-	} else if (__INST(joinStyle) == @symbol(miter)) {
-	    style= PS_JOIN_MITER;
-	} else if (__INST(joinStyle) == @symbol(round)) {
-	    style= PS_JOIN_ROUND;
-	} else
-	    style= PS_JOIN_MITER;
-	styleInt &= ~PS_JOIN_MASK;
-	styleInt |= style;
-
-
-	fgColor = GetTextColor(hDC);
-	hPen = CreatePen((styleInt & PS_STYLE_MASK), lineWidth, fgColor);
-
-									     /*  Finish Obtaining Pen  */
-
-
-/*      DPRINTF(("displayLine: %d/%d -> %d/%d\n",
-		    __intVal(x0), __intVal(y0),
-		    __x1, __y1));
-*/
-
-	prevPen = SelectObject(hDC, hPen);
-
-	MoveToEx(hDC, __intVal(x0), __intVal(y0), NULL);
-
-	LineTo(hDC, __x1, __y1);
-
-	/*
-	 * end-point ...
-	 */
-	LineTo(hDC, __x1+1, __y1);
-
-	SelectObject(hDC, prevPen);
-
-
-	RETURN ( self );
-    }
-%}
-!
-
 xxxdisplayLineFromX:x0 y:y0 toX:x1 y:y1 in:ignoredDrawableId with:aDC
     "draw a line. If the coordinates are not integers, an error is triggered."
 
@@ -5032,37 +5289,37 @@
      && __isExternalAddressLike(penHandle)
      && __bothSmallInteger(x0, y0)
      && __bothSmallInteger(x1, y1)) {
-	HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
-	HANDLE hPen = (HANDLE)(__externalAddressVal(penHandle));
-	COLORREF fgColor;
-	HANDLE prevPen;
-	int __x1 = __intVal(x1), __y1 = __intVal(y1);
+        HANDLE hDC = (HANDLE)(__externalAddressVal(aDC));
+        HANDLE hPen = (HANDLE)(__externalAddressVal(penHandle));
+        COLORREF fgColor;
+        HANDLE prevPen;
+        int __x1 = __intVal(x1), __y1 = __intVal(y1);
 
 
 /*      DPRINTF(("displayLine: %d/%d -> %d/%d\n",
-		    __intVal(x0), __intVal(y0),
-		    __x1, __y1));
+                    __intVal(x0), __intVal(y0),
+                    __x1, __y1));
 */
 
 /*        fgColor = GetTextColor(hDC);
  *        hPen = CreatePen(PS_SOLID, 1, fgColor);
  */
 
-	prevPen = SelectObject(hDC, hPen);
-
-	MoveToEx(hDC, __intVal(x0), __intVal(y0), NULL);
-
-	LineTo(hDC, __x1, __y1);
-
-	/*
-	 * end-point ...
-	 */
-	LineTo(hDC, __x1+1, __y1);
-
-	SelectObject(hDC, prevPen);
-
-
-	RETURN ( self );
+        prevPen = SelectObject(hDC, hPen);
+
+        MoveToEx(hDC, __intVal(x0), __intVal(y0), NULL);
+
+        LineTo(hDC, __x1, __y1);
+
+        /*
+         * end-point ...
+         */
+        LineTo(hDC, __x1+1, __y1);
+
+        SelectObject(hDC, prevPen);
+
+
+        RETURN ( self );
     }
 %}
 ! !
@@ -5073,7 +5330,7 @@
     "Informs device that we are finished writing to a page."
 
     (OperatingSystem endPage:gcId) > 0 ifFalse:[
-	self error
+        self error
     ]
 
     "Created: / 27-07-2006 / 18:20:48 / fm"
@@ -5119,7 +5376,7 @@
     "Starts a page."
 
     (OperatingSystem startPage:gcId) > 0 ifFalse:[
-	^ self error
+        ^ self error
     ].
 
     "Created: / 27-07-2006 / 18:25:55 / fm"
@@ -5135,28 +5392,28 @@
     |docInfoStruct nameAddress title fileNameAddress|
 
     gcId isNil ifTrue:[
-	self buildPrinter
+        self buildPrinter
     ].
     abort := false.
     title := aString ? 'Smalltalk/X'.
     nameAddress := title asExternalBytes unprotectFromGC.
     aFileName isNil ifFalse:[
-	fileNameAddress := aFileName pathName asExternalBytes unprotectFromGC
+        fileNameAddress := aFileName pathName asExternalBytes unprotectFromGC
     ].
     docInfoStruct := Win32OperatingSystem::DocInfoStructure new.
     docInfoStruct
-	cbSize:docInfoStruct sizeInBytes;
-	lpszDocName:nameAddress address.
+        cbSize:docInfoStruct sizeInBytes;
+        lpszDocName:nameAddress address.
     fileNameAddress isNil ifFalse:[
-	docInfoStruct lpszOutput:fileNameAddress address
+        docInfoStruct lpszOutput:fileNameAddress address
     ].
     jobid := OperatingSystem startDoc:gcId docInfo:docInfoStruct.
     jobid > 0 ifFalse:[
-	jobid = -1 ifTrue:[
-	    abort := true.
-	    ^ nil
-	].
-	^ self error
+        jobid = -1 ifTrue:[
+            abort := true.
+            ^ nil
+        ].
+        ^ self error
     ].
     self startPage
 
@@ -5212,5 +5469,5 @@
 !WinPrinterContext class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview2/WinPrinterContext.st,v 1.20 2007-10-23 05:08:45 ca Exp $'
+    ^ '$Header: /cvs/stx/stx/libview2/WinPrinterContext.st,v 1.21 2007-10-23 08:56:21 fm Exp $'
 ! !