DIRECTORY CD USING [Level, NewLevel, Rect, Design, Technology, RegisterTechnology, lambda], CornerStitching USING [Tesselation, EnumerateArea, Region, PerTileProc, Area, Value], CDOps USING [CreateDesign, AddAnObject, Redraw], CDCommands USING [SelectAll, DeleteSelected], CDTechnology USING [TeachColor, SetTipTable, Brick4, Brick8], CDViewer USING [CreateViewer], CDProperties USING [RegisterProperty, GetProp, PutProp], CDSequencer USING [ImplementCommand, Command], CDInline USING [Intersection, SizeOfRect, BaseOfRect], CDRects USING [CreateBareRect], TerminalIO USING [WriteRope], Rope USING [ROPE], PrintTV USING [Print], AMTypes USING [TV], AMBridge USING [TVForATOM, TVForROPE, TVForReferent], IO USING [STREAM, Put, PutRope, PutF, PutFR, int, rope, char, ROS, RopeFromROS], CSMonitor ; CSMonitorImpl: CEDAR PROGRAM IMPORTS CD, CornerStitching, CDOps, CDCommands, CDProperties, CDInline, CDRects, CDTechnology, CDViewer, CDSequencer, TerminalIO, PrintTV, AMBridge, IO EXPORTS CSMonitor ~ BEGIN Monitor: PUBLIC PROCEDURE [plane: REF CornerStitching.Tesselation, name: Rope.ROPE _ NIL, paintDark: CSMonitor.PaintPredicate _ NIL] ~ { design: CD.Design _ CDOps.CreateDesign[csMonitor]; design.name _ IF name # NIL THEN name ELSE "Tile World"; IF paintDark = NIL THEN paintDark _ DefaultPaintDark; [] _ CDViewer.CreateViewer[design]; CDProperties.PutProp[onto: design, prop: $Tesselation, val: plane]; CDProperties.PutProp[onto: design, prop: $PaintDark, val: NEW[ CSMonitor.PaintPredicate _ paintDark]]; Display[ design] }; DefaultPaintDark: CSMonitor.PaintPredicate -- [tileVal: REF ANY] RETURNS [BOOLEAN] -- ~ { RETURN [ISTYPE[tileVal, ATOM]] }; Display: PROCEDURE [d: CD.Design] ~ { ChooseColour: PROCEDURE [val: REF ANY] RETURNS [CD.Level] ~ { IF val = NIL THEN RETURN [space] ELSE IF paintDark^[val] THEN RETURN [solidDark] ELSE RETURN [solid]; }; windowBound: INT ~ 100000; displayRegion: CD.Rect ~ [-windowBound,-windowBound, windowBound, windowBound]; r: CD.Rect; plane: REF CornerStitching.Tesselation ~ NARROW [ CDProperties.GetProp[from: d, prop: $Tesselation] ]; paintDark: REF CSMonitor.PaintPredicate ~ NARROW [ CDProperties.GetProp[from: d, prop: $PaintDark] ]; CDCommands.SelectAll[d]; CDCommands.DeleteSelected[d]; FOR t: LIST OF REF CornerStitching.Region _ NARROW[ plane.EnumerateArea[rect~displayRegion, backgroundValue~$Nothing] ], t.rest WHILE t # NIL DO r _ CDInline.Intersection[t.first.rect, displayRegion]; CDOps.AddAnObject[design: d, ob ~ CDRects.CreateBareRect[size ~ CDInline.SizeOfRect[r], l ~ ChooseColour[t.first.value]], location ~ CDInline.BaseOfRect[r], orientation ~ 0] ENDLOOP; CDCommands.SelectAll[d]; CDOps.Redraw[d] }; csMonitor: CD.Technology; solid: CD.Level; solidDark: CD.Level; space: CD.Level; FindTile: PROCEDURE [comm: CDSequencer.Command] RETURNS [REF CornerStitching.Region] ~ { NoteTile: CornerStitching.PerTileProc ~ { tileAtPoint^ _ [tile.Area, tile.Value] }; plane: REF CornerStitching.Tesselation ~ NARROW [ CDProperties.GetProp[from: comm.design, prop: $Tesselation] ]; tileAtPoint: REF CornerStitching.Region ~ NEW[ CornerStitching.Region]; [] _ plane.EnumerateArea[ rect~[x1~comm.pos.x, y1~comm.pos.y, x2~comm.pos.x, y2~comm.pos.y], perTile~NoteTile, backgroundValue~$Nothing]; RETURN [tileAtPoint] }; depth: INT _ 4; width: INT _ 32; PrintingDepth: PROCEDURE [comm: CDSequencer.Command] ~ { SELECT comm.a FROM $SuccPrintingDepth => depth _ depth.SUCC; $PredPrintingDepth => IF depth > 1 THEN depth _ depth.PRED; ENDCASE; TerminalIO.WriteRope[ IO.PutFR[ "%g CS Monitor printing depth = %d\n", IO.rope[ comm.design.name], IO.int[ depth]] ]; }; PrintingWidth: PROCEDURE [comm: CDSequencer.Command] ~ { SELECT comm.a FROM $SuccPrintingWidth => width _ width.SUCC; $PredPrintingWidth => IF depth > 1 THEN width _ width.PRED; ENDCASE; TerminalIO.WriteRope[IO.PutFR["%g CS Monitor printing width = %d\n", IO.rope[ comm.design.name], IO.int[width]]]; }; GetTV: PROCEDURE [ra: REF ANY] RETURNS [tv: AMTypes.TV] ~ { WITH ra SELECT FROM a: ATOM => TRUSTED {tv _ AMBridge.TVForATOM[a]}; r: Rope.ROPE => TRUSTED {tv _ AMBridge.TVForROPE[r]}; ENDCASE => TRUSTED {tv _ AMBridge.TVForReferent[ra]}; }; PrintTileValue: PROCEDURE [comm: CDSequencer.Command] ~ { ropeStream: IO.STREAM _ IO.ROS[]; WriteWhere[ropeStream, comm]; IO.PutRope[ropeStream, "Tile Value =\n"]; PrintTV.Print[tv~ GetTV[FindTile[comm].value], put~ ropeStream, depth~ depth, width~ width]; IO.Put[ropeStream, IO.char['\n]]; TerminalIO.WriteRope[IO.RopeFromROS[ropeStream]]; }; PrintTile: PROCEDURE [comm: CDSequencer.Command] ~ { ropeStream: IO.STREAM _ IO.ROS[]; WriteWhere[ropeStream, comm]; IO.PutRope[ropeStream, "Tile =\n"]; PrintTV.Print[tv~ GetTV[FindTile[comm]], put~ ropeStream, depth~ depth, width~ width]; IO.Put[ropeStream, IO.char['\n]]; TerminalIO.WriteRope[IO.RopeFromROS[ropeStream]]; }; Redisplay: PROCEDURE [comm: CDSequencer.Command] ~ { Display[comm.design] }; WriteWhere: PROCEDURE [strm: IO.STREAM, comm: CDSequencer.Command] ~ { IO.PutF[strm, " In %g At (%d,%d) ", IO.rope[ comm.design.name], IO.int[comm.pos.x/CD.lambda], IO.int[comm.pos.y/CD.lambda]]; }; Init: PROCEDURE ~ { red: CARDINAL ~ 4; yellow: CARDINAL ~ 14; blue: CARDINAL ~ 2; csMonitor _ CD.RegisterTechnology[key~$CSMonitor, name~"Corner Stitching Monitor"]; solid _ CD.NewLevel[technology~csMonitor, uniqueKey~$SOLID]; solidDark _ CD.NewLevel[technology~csMonitor, uniqueKey~$SOLIDATOM]; space _ CD.NewLevel[technology~csMonitor, uniqueKey~$SP]; IF ~ CDProperties.RegisterProperty[$Tesselation] THEN TerminalIO.WriteRope["$Tesselation Redefined\n"]; CDTechnology.SetTipTable[csMonitor, "ChipNDaleCSMonitor.TIP"]; CDTechnology.TeachColor[lev~ solid, bpp~ 1, brick~ [125252B, 0, 52525B, 0]]; CDTechnology.TeachColor[lev~ solidDark, bpp~ 1, brick~ [52525B, 125252B, 52525B, 125252B]]; CDTechnology.TeachColor[lev~ space, bpp~ 1, brick~ [0,0,0,0]]; CDTechnology.TeachColor[lev~ solid, bpp~ 4, brick~ CDTechnology.Brick4[red]]; CDTechnology.TeachColor[lev~ solidDark, bpp~ 4, brick~ CDTechnology.Brick4[blue]]; CDTechnology.TeachColor[lev~ space, bpp~ 4, brick~ CDTechnology.Brick4[yellow]]; CDTechnology.TeachColor[lev~ solid, bpp~ 8, brick~ CDTechnology.Brick8[red]]; CDTechnology.TeachColor[lev~ solidDark, bpp~ 8, brick~ CDTechnology.Brick8[blue]]; CDTechnology.TeachColor[lev~ space, bpp~ 8, brick~ CDTechnology.Brick8[yellow]]; CDSequencer.ImplementCommand[$PrintTileValue, PrintTileValue, csMonitor, doQueue]; CDSequencer.ImplementCommand[$PrintTile, PrintTile, csMonitor, doQueue]; CDSequencer.ImplementCommand[$SuccPrintingDepth, PrintingDepth, csMonitor, doQueue]; CDSequencer.ImplementCommand[$PredPrintingDepth, PrintingDepth, csMonitor, doQueue]; CDSequencer.ImplementCommand[$SuccPrintingWidth, PrintingWidth, csMonitor, doQueue]; CDSequencer.ImplementCommand[$PredPrintingWidth, PrintingWidth, csMonitor, doQueue]; CDSequencer.ImplementCommand[$Redisplay, Redisplay, csMonitor, doQueue]; TerminalIO.WriteRope["Corner Stitching Monitor loaded\n"]; }; Init[]; END. ςCSMonitorImpl.mesa Copyright c 1984 by Xerox Corporation. All rights reserved. Written by Shand, September 20, 1983 11:40 pm Last Edited by: Shand, July 28, 1984 7:56:25 pm PDT -- Fix so it keeps trying names until chipndale gives in. Κ :˜™Icodešœ Οmœ1™˜OKšœžœ˜ Lšœžœžœ7˜fLšœ žœžœ5˜eL˜K˜šžœžœžœžœžœNžœžœž˜Kšœ7˜7K–c[design: CD.Design, ob: CD.ObPtr, location: CD.DesignPosition, orientation: CD.Orientation]šœ­˜­Kšžœ˜—Kšœ˜Kšœ˜K˜—Lšœ žœ ˜Lšœžœ˜Kšœ žœ˜Kšœžœ˜š œž œžœžœ˜X–,[propList: Atom.PropList, prop: REF ANY]šœ)˜)Kšœ&˜&K˜—KšœžœžœA˜pKšœ žœžœ˜GKšœ‰˜‰Kšžœ˜K˜—Lšœžœ˜Kšœžœ˜š  œž œ ˜8šžœž˜Kšœ$žœ˜)Kšœžœ žœžœ˜;Kšžœ˜—Kšœžœ/žœžœ˜uK˜—š  œž œ ˜8šžœž˜Kšœ$žœ˜)Kšœžœ žœžœ˜;Kšžœ˜—Kšœžœ.žœžœ˜qK˜—š  œž œžœžœžœžœ˜;šžœžœž˜Kšœžœžœ˜0Kšœžœžœ˜5Kšžœžœ#˜5—K˜—š œž œ ˜9Kš œ žœžœžœžœ˜!Kšœ˜Kšžœ'˜)K–W[tv: TV, put: STREAM, depth: INT _ 4, width: INT _ 32, verbose: BOOL _ FALSE]šœ\˜\Kšžœžœ ˜!Kšœžœ˜1K˜—š  œž œ ˜4Kš œ žœžœžœžœ˜!Kšœ˜Kšžœ!˜#K–W[tv: TV, put: STREAM, depth: INT _ 4, width: INT _ 32, verbose: BOOL _ FALSE]šœV˜VKšžœžœ ˜!Kšœžœ˜1K˜—š  œž œ ˜4Kšœ˜K˜—š  œž œžœžœ ˜FKšžœ}˜K˜—š œž œ˜K–![key: ATOM, name: ROPE _ NIL]šœ9™9Kšœžœ˜Jšœžœ˜Jšœžœ˜Kšœ žœE˜SKšœžœ2˜˜>K–?[lev: CD.Level, bpp: CARDINAL, brick: CDTechnology.Brick]šœL˜LKšœ[˜[Kšœ>˜>K–?[lev: CD.Level, bpp: CARDINAL, brick: CDTechnology.Brick]šœM˜MKšœR˜RKšœP˜PK–?[lev: CD.Level, bpp: CARDINAL, brick: CDTechnology.Brick]šœM˜MKšœR˜RKšœP˜PLšœR˜RKšœH˜HKšœT˜TKšœT˜TKšœT˜TKšœT˜TKšœH˜HKšœ:˜:K˜—L˜Kšžœ˜—…—H%t