<<>> <> <> <> <> <<>> DIRECTORY FakeCirio, TargetArchitecture, BreakWorldArchitecture, IncrementalLoad, Rope, UXStrings; FakeCirioImpl: CEDAR PROGRAM IMPORTS FakeCirio, TargetArchitecture, BreakWorldArchitecture, IncrementalLoad, Rope, UXStrings EXPORTS FakeCirio ~ { PeekContents: PUBLIC BreakWorldArchitecture.PeekContentsProc ~ TRUSTED { <> contents: TargetArchitecture.Contents _ TargetArchitecture.nullContents; IF address.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "PeekContents[nullAddress]"]; }; { targetAddress: TargetArchitecture.Address ~ BreakWorldArchitecture.TargetAddressFromBreakWorldAddress[address: address]; IF targetAddress.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "PeekContents[nullTargetAddress]"]; }; { contentsAddress: POINTER TO TargetArchitecture.Contents ~ LOOPHOLE[targetAddress]; contents _ contentsAddress^; }; }; RETURN [contents]; }; PokeContents: PUBLIC BreakWorldArchitecture.PokeContentsProc ~ TRUSTED { <> IF address.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "PokeContents[nullAddress]"]; }; { targetAddress: TargetArchitecture.Address ~ BreakWorldArchitecture.TargetAddressFromBreakWorldAddress[address: address]; IF targetAddress.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "PokeContents[nullTargetAddress]"]; }; { contentsAddress: POINTER TO TargetArchitecture.Contents ~ LOOPHOLE[targetAddress]; contentsAddress^ _ contents; }; }; RETURN; }; GetProcAddress: PUBLIC BreakWorldArchitecture.GetProcAddressProc ~ TRUSTED { <> procAddress: BreakWorldArchitecture.Address _ BreakWorldArchitecture.nullAddress; IF breakWorld.IsNullBreakWorld[] THEN { ERROR FakeCirio.Cant[message: "GetProcAddress[nullBreakWorld]"]; }; IF procName.IsEmpty[] THEN { ERROR FakeCirio.Cant[message: "GetProcAddress[nullProcName]"]; }; { procString: IncrementalLoad.charStar ~ UXStrings.Create[from: procName]; symEntry: IncrementalLoad.XRILSymEntry ~ IncrementalLoad.XRILLookupSymEntry[ sym: procString, externOnly: FALSE]; IF symEntry = IncrementalLoad.nullXRILSymEntry THEN { ERROR FakeCirio.Cant[message: "GetProcAddress[nullSymEntry]"]; }; { procTargetAddress: TargetArchitecture.Address ~ LOOPHOLE[symEntry.ilsevalue]; IF procTargetAddress.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "GetProcAddress[nullProcTargetAddress]"]; }; procAddress _ BreakWorldArchitecture.NewAddress[ breakWorld: breakWorld, address: procTargetAddress]; }; }; RETURN [procAddress]; }; GetProcDataSegment: PUBLIC BreakWorldArchitecture.GetProcDataSegmentProc ~ TRUSTED { <> procDataSegment: BreakWorldArchitecture.Address _ BreakWorldArchitecture.nullAddress; symEntry: IncrementalLoad.XRILSymEntry; IF breakWorld.IsNullBreakWorld[] THEN { ERROR FakeCirio.Cant[message: "GetProcDataSegment[nullBreakWorld]"]; }; IF address.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "GetProcDataSegment[nullAddress]"]; }; { symEntry _ IncrementalLoad.XRILLookupSymEntryByValue[val: LOOPHOLE[address.address]]; IF symEntry = IncrementalLoad.nullXRILSymEntry THEN { ERROR FakeCirio.Cant[message: "GetProcDataSegment[nullSymEntry]"]; }; }; RETURN [BreakWorldArchitecture.NewAddress[breakWorld, LOOPHOLE[symEntry.ilseilfe.ilfedAddr]]]; }; GetPatchArea: PUBLIC BreakWorldArchitecture.GetPatchAreaProc ~ TRUSTED { <> patchAreaRep: BreakWorldArchitecture.PatchAreaRep _ BreakWorldArchitecture.nullPatchAreaRep; IF address.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "GetPatchArea[nullAddress]"]; }; { breakWorld: BreakWorldArchitecture.BreakWorld ~ BreakWorldArchitecture.BreakWorldFromBreakWorldAddress[address: address]; targetAddress: TargetArchitecture.Address ~ BreakWorldArchitecture.TargetAddressFromBreakWorldAddress[address: address]; IF breakWorld.IsNullBreakWorld[] THEN { ERROR FakeCirio.Cant[message: "GetPatchArea[nullBreakWorld]"]; }; IF targetAddress.IsNullAddress[] THEN { ERROR FakeCirio.Cant[message: "GetPatchArea[nullTargetAddress]"]; }; { symEntry: IncrementalLoad.XRILSymEntry ~ IncrementalLoad.XRILLookupSymEntryByValue[val: LOOPHOLE[targetAddress]]; IF symEntry = IncrementalLoad.nullXRILSymEntry THEN { ERROR FakeCirio.Cant[message: "GetProcAddress[nullSymEntry]"]; }; { fileEntry: IncrementalLoad.XRILFileEntry ~ symEntry.ilseilfe; IF fileEntry = IncrementalLoad.nullXRILFileEntry THEN { ERROR FakeCirio.Cant[message: "GetPatchArea[nullFileEntry]"]; }; patchAreaRep.address _ BreakWorldArchitecture.NewAddress[ breakWorld: breakWorld, address: LOOPHOLE[fileEntry.ilfepAddr]]; patchAreaRep.byteSize _ fileEntry.ilfepBytes; }; }; }; RETURN [patchAreaRep]; }; Cant: PUBLIC ERROR [message: Rope.ROPE] ~ CODE; }.