XlBMWTestsImpl2.mesa
Copyright Ó 1988, 1991 by Xerox Corporation. All rights reserved.
Christian Jacobi, April 13, 1988 3:02:13 pm PDT
Christian Jacobi, October 8, 1992 10:19 pm PDT
DIRECTORY IO, Rope, Imager, ImagerBackdoor, ImagerSample, Random, Process, SF, X11, XlBitmapWindow;
XlBMWTestsImpl2: CEDAR PROGRAM
IMPORTS Imager, ImagerSample, ImagerBackdoor, Random, Process, X11, XlBitmapWindow
~ BEGIN
ROPE: TYPE ~ Rope.ROPE;
DetachStart: PROC [] = {
TRUSTED{Process.Detach[FORK Start[]]}
};
DetachStop: PROC [] = {
TRUSTED{Process.Detach[FORK Stop[]]}
};
sm: ImagerSample.SampleMap ¬ NIL;
handle: XlBitmapWindow.Handle ¬ NIL;
sz: INT ¬ 15;
fork: INT ¬ 3;
connection: X11.Connection ¬ NIL;
Run: PROC [] = {
h1: XlBitmapWindow.Handle ¬ handle;
ct: Imager.Context ¬ XlBitmapWindow.CreateContext[handle];
dx: REAL ¬ Random.ChooseInt[min: -100, max: 100]/20.0;
dy: REAL ¬ Random.ChooseInt[min: -100, max: 100]/20.0;
IF ct#NIL THEN {
oldBox, newBox: Imager.Box ¬ [1, 1, 0, 0];
r: Imager.Rectangle ¬ ImagerBackdoor.GetBounds[ct];
x: REAL ¬ r.x+ r.w/2;
y: REAL ¬ r.y+ r.h/2;
Imager.MaskBox[ct, oldBox];
WHILE h1=handle DO
x ¬ x+dx;
IF dx>0
THEN {IF x>r.x+r.w THEN {dx¬-dx; x ¬ x+2*dx}}
ELSE {IF x<r.x THEN {dx¬-dx; x ¬ x+2*dx}};
y ¬ y+dy;
IF dy>0
THEN {IF y>r.y+r.h THEN {dy¬-dy; y ¬ y+2*dy}}
ELSE {IF y<r.y THEN {dy¬-dy; y ¬ y+2*dy}};
newBox ¬ [xmin: x-sz, ymin: y-sz, xmax: x+sz, ymax: y+sz];
Imager.SetColor[ct, Imager.white];
Imager.MaskBox[ct, oldBox];
Imager.SetColor[ct, Imager.black];
Imager.MaskBox[ct, newBox];
oldBox ¬ newBox;
XlBitmapWindow.Wait[handle];
Process.Yield[];
ENDLOOP
};
};
CreateConnection: PROC [] = {
IF connection=NIL THEN {
connection ¬ X11.CreateConnection[debugHelp: $bmwTest];
};
};
Start: PROC ~ {
CreateConnection[];
IF handle=NIL THEN handle ¬ XlBitmapWindow.CreateHandle[];
IF sm=NIL THEN sm ¬ ImagerSample.NewSampleMap[box: [[0, 0], [320, 320]], bitsPerSample: 1];
XlBitmapWindow.SetBitmap[handle, sm, SF.maxBox, FALSE, FALSE];
XlBitmapWindow.SetWindow[handle, connection];
FOR i: INT IN [0..fork) DO
TRUSTED {Process.Detach[FORK Run[]]}
ENDLOOP;
};
Stop: PROC ~ {
h: XlBitmapWindow.Handle ¬ handle;
handle ¬ NIL;
sm ¬ NIL;
IF h#NIL THEN XlBitmapWindow.DestroyHandle[h, TRUE];
};
END.