DIRECTORY FakeCirio, TargetArchitecture, BreakWorldArchitecture; FakeLocalCirioImpl: CEDAR MONITOR LOCKS monitoredRecordPointer USING monitoredRecordPointer: MonitoredRecordPointer IMPORTS FakeCirio, BreakWorldArchitecture, TargetArchitecture EXPORTS FakeCirio ~ { MonitoredRecordPointer: TYPE ~ LONG POINTER TO MonitoredRecord; MonitoredRecord: TYPE ~ MONITORED RECORD []; MonitoredCall: PUBLIC BreakWorldArchitecture.MonitoredCallProc ~ { IF address.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "MonitoredCall[nullAddress]"]; }; IF proc = NIL THEN { ERROR FakeCirio.Cant[message: "MonitoredCall[nullProc]"]; }; { monitoredRecordPointer: LONG POINTER TO MonitoredRecord ~ MonitoredRecordPointerFromAddress[address: address]; MonitoredRecordPointerFromAddress: PROCEDURE [ address: BreakWorldArchitecture.Address] RETURNS [LONG POINTER TO MonitoredRecord] ~ TRUSTED { targetAddress: TargetArchitecture.Address ~ BreakWorldArchitecture.TargetAddressFromBreakWorldAddress[address: address]; monitoredRecordPointer: LONG POINTER TO MonitoredRecord ~ LOOPHOLE[targetAddress]; IF targetAddress.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "MonitoredRecordPointerFromAddress[nullAddress]"]; }; RETURN [monitoredRecordPointer]; }; MonitoredCallEntry: ENTRY PROCEDURE [ monitoredRecordPointer: MonitoredRecordPointer, proc: PROCEDURE [] RETURNS []] RETURNS [] ~ { ENABLE UNWIND => NULL; proc[] }; MonitoredCallEntry[monitoredRecordPointer: monitoredRecordPointer, proc: proc]; }; }; }. ά FakeLocalCirioImpl.mesa Copyright Σ 1990, 1991 by Xerox Corporation. All rights reserved. Peter B. Kessler, April 18, 1990 10:08:08 pm PDT PROCEDURE [address: Address, proc: PROCEDURE [] RETURNS []] RETURNS [] Κ2•NewlineDelimiter –(cedarcode) style™codešœ™Kšœ Οeœ7™BK™0K™šΟk ˜ Kšœ ˜ Kšœ˜Kšœ˜K˜——unitšΠlnœžœžœ˜"Lšžœžœ/˜QKšžœ6˜=Kšžœ ˜Kšœ˜K˜š œžœžœžœžœ˜?Kšœžœž œžœ˜,K˜—šΟn œžœ-˜BKšž œž œžœžœ™FK˜šžœžœ˜!Kšžœ7˜