DIRECTORY Icons, Imager, Process, Rope, ViewerEvents, ViewerLocks, ViewerOps, ViewerPrivate, ViewerSpecs; BugsImpl: CEDAR MONITOR IMPORTS Icons, Imager, Process, ViewerEvents, ViewerLocks, ViewerOps, ViewerPrivate, ViewerSpecs ~ BEGIN IconFlavor: TYPE ~ Icons.IconFlavor; ROPE: TYPE ~ Rope.ROPE; fileName: ROPE ~ "Bugs.icons"; rightGoing: LIST OF IconFlavor ~ LIST [ Icons.NewIconFromFile[file: fileName, n: 0], Icons.NewIconFromFile[file: fileName, n: 1] ]; DrawBug: PROC [x0, y0, x1: INTEGER, dx: NAT] ~ { pictures: LIST OF IconFlavor ~ rightGoing; current: LIST OF IconFlavor _ pictures; NextPicture: PROC RETURNS [i: IconFlavor] ~ { current _ current.rest; IF current=NIL THEN current _ pictures; RETURN [current.first]; }; FOR x: INTEGER _ x0, x+dx UNTIL x>x1 DO Clip: PROC ~ { Imager.ClipRectangleI[context: context, x: 0, y: 0, w: ViewerSpecs.openLeftWidth-1, h: 1024]; }; context: Imager.Context ~ ViewerPrivate.CreateContext[screen: bw]; THROUGH [0 .. 3000) DO ENDLOOP; IF x+64 > ViewerSpecs.openLeftWidth THEN Clip[]; Icons.DrawIcon[flavor: NextPicture[], context: context, x: x, y: y0]; ENDLOOP; }; MakeBugsCrawl: ViewerEvents.EventProc = { tryIt: BOOL ~ SELECT event FROM changeColumn => ~viewer.iconic, destroy => viewer.column=left AND ~viewer.iconic, close => viewer.column=left, ENDCASE => ERROR; IF tryIt THEN TRUSTED {Process.Detach[FORK ViewerLocks.CallUnderColumnLock[proc: MakeBugsCrawlInternal, column: left]]}; }; MakeBugsCrawlInternal: PROC ~ { CountLeftHandViewers: PROC RETURNS [count: CARDINAL _ 0] ~ { Enum: ViewerOps.EnumProc = { IF v.column=left AND ~v.iconic THEN count _ count+1; }; ViewerOps.EnumerateViewers[enum: Enum]; }; IF CountLeftHandViewers[]=0 THEN DrawBug[x0: 16, y0: 300, x1: ViewerSpecs.openLeftWidth, dx: 4]; }; [] _ ViewerEvents.RegisterEventProc[proc: MakeBugsCrawl, event: close, before: FALSE]; [] _ ViewerEvents.RegisterEventProc[proc: MakeBugsCrawl, event: destroy, before: FALSE]; [] _ ViewerEvents.RegisterEventProc[proc: MakeBugsCrawl, event: changeColumn, before: FALSE]; END. ~BugsImpl.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Eric Nickell, March 19, 1986 11:08:26 am PST Bertrand Serlet April 21, 1988 7:18:52 pm PDT Icons.NewIconFromFile[file: ROPE, n: CARDINAL], [viewer: ViewerClasses.Viewer, event: ViewerEvents.ViewerEvent, before: BOOL] RETURNS [abort: BOOL _ FALSE] [v: ViewerClasses.Viewer] RETURNS [BOOL _ TRUE] Κ˜™ Icodešœ Οmœ1™