<HTML><BODY><p>Hi guys,<br><br>I faced with some strange behaviour in A2.<br><br>After drawing 32-bit bitmap with alpha set to 0 into img field of WMWindowManager.BufferWindow instance, the window stops to handle mouse events.<br>I've made small code based on WMScribble application to illustrate this.<br><br>Just open instance of window. Draw something. Window will work as expected. Then press "b" key. The precomputed picture will be drawn on img field. Then try to draw something using mouse... Now you should see that when mouse positioned on black parts of picture the cursor changed to cursor that currently set for underlaying window. Even mouse clicks handled by underlaying window. And after clicking the WMScribble losts focus! It looks like you may see the window, but, for system it absent.<br>Situation changes when you point mouse exactly on some yellow part of picture. The mouse pointer changes to cross-hair, window can receive mouse click again and drawing works also.<br>Is it known feature in A2 or a bug?<br><br><br><br><br><br><br><br>MODULE WMScribble;&nbsp;&nbsp; &nbsp;(** AUTHOR "TF"; PURPOSE "Example program"; *)<br><br>IMPORT SYSTEM, Raster, WMWindowManager, Strings, WMGraphics, WMRectangles, Modules, WMDialogs;<br><br>CONST<br><br>&nbsp;&nbsp; &nbsp;MAP =<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 6, 4, 4, 6, 4, 6, 4, 4, 4, 6, 4],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[8, 0, 3, 3, 0, 0, 0, 0, 0, 8, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[8, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[8, 0, 3, 3, 0, 0, 0, 0, 0, 8, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 6, 6, 6, 0, 6, 4, 6],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[8, 8, 8, 8, 0, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 4, 6, 0, 0, 0, 0, 0, 6],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[7, 7, 7, 7, 0, 7, 7, 7, 7, 0, 8, 0, 8, 0, 8, 0, 8, 4, 0, 4, 0, 6, 0, 6],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 0, 8, 0, 8, 0, 8, 8, 6, 0, 0, 0, 0, 0, 6],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 0, 0, 0, 0, 0, 4],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 0, 6, 0, 6, 0, 6],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 0, 8, 0, 8, 0, 8, 8, 6, 4, 6, 0, 6, 6, 6],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[7, 7, 7, 7, 0, 7, 7, 7, 7, 8, 8, 4, 0, 6, 8, 4, 8, 3, 3, 3, 0, 3, 3, 3],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[2, 2, 2, 2, 0, 2, 2, 2, 2, 4, 6, 4, 0, 0, 6, 0, 6, 3, 0, 0, 0, 0, 0, 3],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[2, 2, 0, 0, 0, 0, 0, 2, 2, 4, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 3],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[2, 0, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 0, 0, 0, 3],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[1, 0, 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 4, 4, 6, 0, 6, 3, 3, 0, 0, 0, 3, 3],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 2, 2, 6, 6, 0, 0, 5, 0, 5, 0, 5],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 0, 5, 0, 5, 0, 0, 0, 5, 5],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 5, 0, 5, 0, 5, 0, 5, 0, 5],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 5, 0, 5, 0, 5, 0, 5, 0, 5],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, 0, 5, 0, 5, 0, 0, 0, 5, 5],<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;[2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5]<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;];<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;MAP_HEIGHT = LEN(MAP, 0);<br>&nbsp;&nbsp; &nbsp;MAP_WIDTH = LEN(MAP, 1);<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;CELL_WIDTH&nbsp;&nbsp; &nbsp;= 20;<br><br>TYPE<br>&nbsp;&nbsp; &nbsp;ScribbleWindow = OBJECT (WMWindowManager.BufferWindow);<br>&nbsp;&nbsp; &nbsp;VAR lx, ly : LONGINT;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;mode: Raster.Mode;<br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;PROCEDURE &amp;New*;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;BEGIN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Init(nMapPixelsWidth, nMapPixelsHeight, FALSE);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WMWindowManager.AddWindow(SELF, 200, 200);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SetTitle(Strings.NewString("Scribble Example"));<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SetIcon(WMGraphics.LoadImage("WMIcons.tar://WMScribble.png", TRUE));<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;canvas.Fill(WMRectangles.MakeRect(0, 0, GetWidth(), GetHeight()), WMGraphics.White, WMGraphics.ModeCopy);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Invalidate(WMRectangles.MakeRect(0, 0, GetWidth(), GetHeight()));<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SetPointerInfo(manager.pointerCrosshair)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END New;<br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;PROCEDURE PointerMove(x, y : LONGINT; keys : SET);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;BEGIN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;IF 0 IN keys THEN canvas.Line(lx, ly, x, y, WMGraphics.Blue, WMGraphics.ModeSrcOverDst);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Invalidate(<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WMRectangles.MakeRect(Strings.Min(lx, x), Strings.Min(ly, y), Strings.Max(lx, x) + 1, Strings.Max(ly, y) + 1)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; END;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;lx := x; ly := y<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END PointerMove;<br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;PROCEDURE PointerDown(x, y : LONGINT; keys : SET);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;BEGIN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;lx := x; ly := y;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;IF 2 IN keys THEN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;canvas.Fill(WMRectangles.MakeRect(0, 0, GetWidth(), GetHeight()), WMGraphics.White, WMGraphics.ModeCopy);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Invalidate(WMRectangles.MakeRect(0, 0, GetWidth(), GetHeight()))<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END PointerDown;<br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;PROCEDURE KeyEvent(ucs : LONGINT; flags : SET; keySym : LONGINT);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;VAR res, y: LONGINT; filename : ARRAY 128 OF CHAR;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;BEGIN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;IF ucs = ORD("s") THEN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;filename := "scribble.bmp";<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;IF WMDialogs.QueryString("Save as :", filename) = WMDialogs.ResOk THEN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WMGraphics.StoreImage(img, filename, res);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;IF res # 0 THEN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WMDialogs.Error("Sorry", "The image could not be stored. Try another file name.");<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;ELSIF ucs = ORD("b") THEN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Raster.InitMode(mode, Raster.srcCopy);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FOR y := 0 TO nMapPixelsHeight - 1 DO<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Raster.PutPixels(img, 0, y, nMapPixelsWidth, Raster.BGRA8888,<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bufMapPixels^, y * nMapPixelsWidth * 4, mode)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Invalidate(WMRectangles.MakeRect(0, 0, GetWidth(), GetHeight()));<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END KeyEvent;<br>&nbsp;&nbsp; &nbsp;END ScribbleWindow;<br><br>VAR s : ScribbleWindow;<br><br>&nbsp;&nbsp; &nbsp;bufMapPixels: POINTER TO ARRAY OF CHAR;<br>&nbsp;&nbsp; &nbsp;nMapPixelsWidth, nMapPixelsHeight: LONGINT;<br><br>&nbsp;&nbsp; &nbsp;PROCEDURE InitMapPixels;<br>&nbsp;&nbsp; &nbsp;VAR<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;x, y, tileX, tileY, x2, y2: LONGINT;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixelWall, pixelFloor: Raster.Pixel;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bTop, bBottom, bLeft, bRight: BOOLEAN;<br>&nbsp;&nbsp; &nbsp;BEGIN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;NEW(bufMapPixels, nMapPixelsWidth * nMapPixelsHeight * 4);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixelWall[Raster.r] := 080X;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixelWall[Raster.g] := 050X;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixelWall[Raster.b] := 0X;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixelWall[Raster.a] := 020X;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixelFloor[Raster.r] := 0X;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixelFloor[Raster.g] := 0X;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixelFloor[Raster.b] := 0X;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;pixelFloor[Raster.a] := 0X;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;(* draw border *)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FOR y := 0 TO nMapPixelsHeight - 1 DO<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FOR x := 0 TO nMapPixelsWidth - 1 DO<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;IF (x = 0) OR (x = nMapPixelsWidth - 1) OR<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;(y = 0) OR (y = nMapPixelsHeight - 1)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;THEN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SYSTEM.PUT32(SYSTEM.ADR(bufMapPixels^[0]) + nMapPixelsWidth * 4 * y + 4 * x,<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SYSTEM.VAL(LONGINT, pixelWall))<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;ELSE<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SYSTEM.PUT32(SYSTEM.ADR(bufMapPixels^[0]) + nMapPixelsWidth * 4 * y + 4 * x,<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SYSTEM.VAL(LONGINT, pixelFloor))<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tileY := 1;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FOR y := 1 TO MAP_HEIGHT - 2 DO<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tileX := 1;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FOR x := 1 TO MAP_WIDTH - 2 DO<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;IF MAP[y, x] &gt; 0 THEN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bBottom := (y + 1 &lt;= MAP_HEIGHT - 2) &amp; (MAP[y + 1, x] = 0);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bTop := (y - 1 &gt;= 1) &amp; (MAP[y - 1, x] = 0);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bLeft := (x - 1 &gt;= 1) &amp; (MAP[y, x - 1] = 0);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;bRight := (x + 1 &lt;= MAP_WIDTH - 2) &amp; (MAP[y, x + 1] = 0);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FOR y2 := 0 TO CELL_WIDTH - 1 DO<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FOR x2 := 0 TO CELL_WIDTH - 1 DO<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;IF ((x2 = 0) &amp; bLeft) OR ((y2 = 0) &amp; bTop) OR<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;((x2 = CELL_WIDTH - 1) &amp; bRight) OR<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;((y2 = CELL_WIDTH - 1) &amp; bBottom) OR<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;((x2 + y2) MOD 5 = 0)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;THEN<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SYSTEM.PUT32(SYSTEM.ADR(bufMapPixels^[0]) +<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;nMapPixelsWidth * 4 * (tileY + y2) + 4 * (tileX + x2),<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SYSTEM.VAL(LONGINT, pixelWall))<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;INC(tileX, CELL_WIDTH)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;INC(tileY, CELL_WIDTH)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;END<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;END InitMapPixels;<br><br>PROCEDURE Open*;<br>BEGIN {EXCLUSIVE}<br>&nbsp;&nbsp; &nbsp;IF s # NIL THEN s.Close END;<br>&nbsp;&nbsp; &nbsp;nMapPixelsWidth := CELL_WIDTH * (MAP_WIDTH - 2) + 2;<br>&nbsp;&nbsp; &nbsp;nMapPixelsHeight := CELL_WIDTH * (MAP_HEIGHT - 2) + 2;<br>&nbsp;&nbsp; &nbsp;InitMapPixels;<br>&nbsp;&nbsp; &nbsp;NEW(s);<br>END Open;<br><br>PROCEDURE Cleanup;<br>BEGIN<br>&nbsp;&nbsp; &nbsp;IF s # NIL THEN s.Close END<br>END Cleanup;<br><br>BEGIN<br>&nbsp;&nbsp; &nbsp;Modules.InstallTermHandler(Cleanup)<br>END WMScribble.<br><br>SystemTools.Free WMScribble ~<br>WMScribble.Open ~<br>WMPicView.Open scribble.bmp ~<br><br><br><br><br><br>---<br>Cheers, SAGE<br>http://sage.com.ua/</p></BODY></HTML>