DIRECTORY CDProperties USING [RegisterProperty], Core USING [Wire], CoreProperties USING [RegisterProperty], CoreOps USING [GetShortWireName], DrcDebug, IO USING [card, noWhereStream, PutF, refAny, rope, STREAM], Rope USING [ROPE], UserProfile USING [Boolean, CallWhenProfileChanges, ProfileChangedProc], ViewerIO USING [CreateViewerStreams], ViewerTools USING [FindExistingViewer, Viewer]; DrcDebugImpl: CEDAR PROGRAM IMPORTS CDProperties, CoreOps, CoreProperties, IO, UserProfile, ViewerIO, ViewerTools EXPORTS DrcDebug ~ BEGIN OPEN DrcDebug; debug: PUBLIC BOOL _ UserProfile.Boolean [key: "Genista.Debug", default: FALSE]; trace: PUBLIC ATOM _ CoreProperties.RegisterProperty [$DrcTrace]; pause: PUBLIC ATOM _ CoreProperties.RegisterProperty [$break]; break: PUBLIC SIGNAL ~ CODE; dLog: PUBLIC IO.STREAM _ IO.noWhereStream; ActivateDebug: UserProfile.ProfileChangedProc ~ BEGIN profile: BOOL ~ UserProfile.Boolean [key: "Genista.Debug", default: FALSE]; IF debug THEN {IF (debug # profile) THEN debug _ FALSE} ELSE {IF (debug # profile) THEN Debug} END; -- ActivateDebug Debug: PUBLIC PROC ~ BEGIN viewerName: Rope.ROPE ~ "Genista debug"; viewer: ViewerTools.Viewer _ ViewerTools.FindExistingViewer [viewerName]; debug _ TRUE; -- Get all in one dLog _ ViewerIO.CreateViewerStreams [viewerName, viewer].out END; -- Debug PrintWire: PUBLIC PROC [w: Core.Wire] ~ BEGIN dLog.PutF ["%g %g %g\n", IO.rope [CoreOps.GetShortWireName[w]], IO.card [LOOPHOLE[w]], IO.refAny [w]]; FOR i: NAT IN [0 .. w.size) DO dLog.PutF ["\t(%g) %g %g %g\n", IO.card [i], IO.rope [CoreOps.GetShortWireName[w[i]]], IO.card [LOOPHOLE[w[i]]], IO.refAny [w[i]]] ENDLOOP END; -- PrintWire [] _ CDProperties.RegisterProperty [trace, $gbb]; [] _ CDProperties.RegisterProperty [pause, $gbb]; IF debug THEN Debug[]; UserProfile.CallWhenProfileChanges [ActivateDebug] END. <DrcDebugImpl.mesa Copyright Σ 1987 by Xerox Corporation. All rights reserved. Written by gbb, January 12, 1987 11:47:17 am PST gbb March 8, 1987 12:54:13 pm PST Note: Output to noWhereStream passes all I/O code, and hence is very slow ! For convenience in debugging. Call this procedure in the Interpreter. ΚŠ˜codešœ™Kšœ=™=Kšœ0™0K™!K™—code2šΟk ˜ Kšœ œ˜&Kšœœ˜Kšœœ˜(Kšœœ˜!Kšœ ˜ Kšœœ+œ˜;Kšœœœ˜Kšœ œ7˜HKšœ œ˜%Kšœ œ˜/—LšΠblΠlnœ ˜Lšœ(œ$˜ULšœ ˜šœœœ ˜Lšœœœ7œ˜PKšœœœ/˜AKšœœœ,˜>Kšœœœœ˜šœœœ œ˜*KšœΟe œ.™K—šΟn œ#˜5Lšœ œ7œ˜KKš œœœœ œ˜7Kšœœœ˜&LšœΟc˜—š‘œœœ˜K™EKšœœ˜(KšœI˜IKšœœ’˜Kšœ<˜