<<>> <> <> <> <> <<>> DIRECTORY Rope USING [ROPE], TargetArchitecture USING [Address, Displacement, nullDisplacement, Contents, Instruction]; BreakWorldArchitecture: CEDAR DEFINITIONS ~ { <> BreakWorld: TYPE ~ REF BreakWorldRep _ nullBreakWorld; nullBreakWorld: BreakWorld ~ NIL; BreakWorldRep: TYPE; WorldAccess: TYPE ~ REF WorldAccessRep _ nullWorldAccess; nullWorldAccess: WorldAccess ~ NIL; WorldAccessRep: TYPE ~ RECORD [ name: Rope.ROPE, procs: WorldAccessProcs, data: WorldAccessData ]; WorldAccessProcs: TYPE ~ REF WorldAccessProcsRep _ nullWorldAccessProcs; nullWorldAccessProcs: WorldAccessProcs ~ NIL; WorldAccessProcsRep: TYPE ~ RECORD [ peekContents: PeekContentsProc, pokeContents: PokeContentsProc, getProcAddress: GetProcAddressProc, getProcDataSegment: GetProcDataSegmentProc, getPatchArea: GetPatchAreaProc, monitoredCall: MonitoredCallProc ]; PeekContentsProc: TYPE ~ PROCEDURE [address: Address] RETURNS [TargetArchitecture.Contents]; <> PokeContentsProc: TYPE ~ PROCEDURE [address: Address, contents: TargetArchitecture.Contents] RETURNS []; <> GetProcAddressProc: TYPE ~ PROCEDURE [breakWorld: BreakWorld, procName: Rope.ROPE] RETURNS [Address]; <> GetProcDataSegmentProc: TYPE ~ PROCEDURE [breakWorld: BreakWorld, address: Address] RETURNS [Address]; <> GetPatchAreaProc: TYPE ~ PROCEDURE [address: Address] RETURNS [PatchAreaRep]; <> PatchAreaRep: TYPE ~ RECORD [ address: Address, byteSize: ByteSize ] _ nullPatchAreaRep; nullPatchAreaRep: PatchAreaRep ~ [ address: nullAddress, byteSize: 0]; PatchArea: TYPE ~ REF PatchAreaRep _ nullPatchArea; nullPatchArea: PatchArea ~ NIL; MonitoredCallProc: TYPE ~ PROCEDURE [address: Address, proc: PROCEDURE [] RETURNS []] RETURNS []; <> <> <> WorldAccessData: TYPE ~ REF ANY _ nullWorldAccessData; nullWorldAccessData: WorldAccessData ~ NIL; BreakAccess: TYPE ~ REF BreakAccessRep _ nullBreakAccess; nullBreakAccess: BreakAccess ~ NIL; BreakAccessRep: TYPE; Address: TYPE ~ REF AddressRep _ nullAddress; nullAddress: Address ~ NIL; AddressRep: TYPE ~ RECORD [ breakWorld: BreakWorld, address: TargetArchitecture.Address ]; ByteSize: TYPE ~ CARD32; <> <> CreateBreakWorld: PROCEDURE [ name: Rope.ROPE, peekContents: PeekContentsProc, pokeContents: PokeContentsProc, getProcAddress: GetProcAddressProc, getProcDataSegment: GetProcDataSegmentProc, getPatchArea: GetPatchAreaProc, monitoredCall: MonitoredCallProc, worldAccessData: WorldAccessData] RETURNS [BreakWorld]; <> CreateWorldAccess: PROCEDURE [ name: Rope.ROPE, peekContents: PeekContentsProc, pokeContents: PokeContentsProc, getProcAddress: GetProcAddressProc, getProcDataSegment: GetProcDataSegmentProc, getPatchArea: GetPatchAreaProc, monitoredCall: MonitoredCallProc, worldAccessData: WorldAccessData] RETURNS [WorldAccess]; BreakWorldFromWorldAccess: PROCEDURE [worldAccess: WorldAccess] RETURNS [BreakWorld]; <> <<>> IsNullBreakWorld: PROCEDURE [breakWorld: BreakWorld] RETURNS [BOOLEAN]; WorldAccessFromBreakWorld: PROCEDURE [breakWorld: BreakWorld] RETURNS [WorldAccess]; BreakAccessFromBreakWorld: PROCEDURE [breakWorld: BreakWorld] RETURNS [BreakAccess]; <> PeekContents: PROCEDURE [ address: Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement] RETURNS [TargetArchitecture.Contents]; PokeContents: PROCEDURE [ address: Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement, contents: TargetArchitecture.Contents] RETURNS []; <> GetProcAddress: PROCEDURE [breakWorld: BreakWorld, procName: Rope.ROPE] RETURNS [Address]; GetProcDataSegment: PROCEDURE [breakWorld: BreakWorld, address: Address] RETURNS [Address]; GetPatchArea: PROCEDURE [address: Address] RETURNS [PatchArea]; MonitoredCall: PROCEDURE [address: Address, proc: PROCEDURE [] RETURNS []] RETURNS []; <> NewAddress: PROCEDURE [breakWorld: BreakWorld, address: TargetArchitecture.Address] RETURNS [Address]; TargetAddressFromBreakWorldAddress: PROCEDURE [address: Address] RETURNS [TargetArchitecture.Address]; BreakWorldFromBreakWorldAddress: PROCEDURE [address: Address] RETURNS [BreakWorld]; IsNullAddress: PROCEDURE [address: Address] RETURNS [BOOLEAN]; AddressEqual: PROCEDURE [this: Address, that: Address] RETURNS [BOOLEAN]; AddressFromDisplacement: PROCEDURE [ address: Address, displacement: TargetArchitecture.Displacement] RETURNS [Address]; NextInstruction: PROCEDURE [pc: Address] RETURNS [Address]; PrevInstruction: PROCEDURE [pc: Address] RETURNS [Address]; PeekInstruction: PROCEDURE [ pc: Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement] RETURNS [TargetArchitecture.Instruction]; PokeInstruction: PROCEDURE [ pc: Address, displacement: TargetArchitecture.Displacement _ TargetArchitecture.nullDisplacement, instruction: TargetArchitecture.Instruction] RETURNS []; <> IsNullPatchArea: PROCEDURE [patchArea: PatchArea] RETURNS [BOOLEAN]; <> ErrorCode: TYPE ~ ATOM _ nullErrorCode; nullErrorCode: ErrorCode ~ NIL; ErrorMessage: TYPE ~ Rope.ROPE _ nullErrorMessage; nullErrorMessage: ErrorMessage ~ NIL; Cant: ERROR [code: ErrorCode, message: ErrorMessage]; WouldBlock: ERROR [message: ErrorMessage]; <> }.