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; }. Ž FakeCirioImpl.mesa Copyright Σ 1989, 1990, 1991, 1992 by Xerox Corporation. All rights reserved. Peter B. Kessler, April 18, 1990 5:17 pm PDT Philip James, March 6, 1992 1:22 pm PST PROCEDURE [address: BreakWorldArchitecture.Address] RETURNS [TargetArchitecture.Contents] PROCEDURE [address: BreakWorldArchitecture.Address, contents: TargetArchitecture.Contents] RETURNS [] PROCEDURE [breakWorld: breakWorld, procName: Rope.ROPE] RETURNS [BreakWorldArchitecture.Address] PROCEDURE [breakWorld: BreakWorld, address: Address] RETURNS [Address]; PROCEDURE [address: BreakWorldArchitecture.Address] RETURNS [BreakWorldArchitecture.PatchAreaRep] ΚL•NewlineDelimiter – "cedar" style™codešœ™Kšœ ΟrœC™NK™,K™'—™šΟk ˜ K˜ Kšœ˜Kšœ˜Kšœ˜K˜Kšœ ˜ —K˜—unitšΠln œžœž˜šžœ˜KšœW˜W—Kšžœ ˜Kšœ˜K˜šΟn œžœ+žœ˜HKšž œ+žœ™ZKšœH˜HK˜šžœžœ˜!Kšžœ6˜;Kšœ˜—˜šœ,˜,KšœL˜L—K˜šžœžœ˜'Kšžœ<˜AKšœ˜—˜Kšœžœžœžœ˜RK˜Kšœ˜K˜—K˜—K˜Kšžœ ˜Kšœ˜K˜—š  œžœ+žœ˜HKšž œRžœ™ešžœžœ˜!Kšžœ6˜;Kšœ˜—˜šœ,˜,KšœL˜L—K˜šžœžœ˜'Kšžœ<˜AKšœ˜—˜Kšœžœžœžœ˜RK˜Kšœ˜K˜—K˜—Kšžœ˜Kšœ˜K˜—š œžœ-žœ˜LKšž œ)žœžœ!™aKšœQ˜QK˜šžœžœ˜'Kšžœ;˜@Kšœ˜—šžœžœ˜Kšžœ9˜>Kšœ˜—˜KšœH˜HšœL˜LKšœžœ˜$—J˜šžœ-žœ˜5Kšžœ9˜>Kšœ˜—˜Kšœ0žœ˜MK˜šžœ#žœ˜+KšžœB˜GKšœ˜—šœ0˜0Kšœ4˜4—K˜—K˜—Kšžœ˜Kšœ˜K˜—š œžœ1žœ˜TKšž œ,žœ ™GKšœU˜UKšœ'˜'K˜šžœžœ˜'Kšžœ?˜DKšœ˜—šžœžœ˜!Kšžœ<˜AKšœ˜—˜Kšœ:žœ˜UJ˜šžœ-žœ˜5Kšžœ=˜BKšœ˜—K˜—Kšžœ0žœ ˜^Kšœ˜K˜—š  œžœ+žœ˜HKšž œ+žœ&™bKšœ\˜\K˜šžœžœ˜!Kšžœ6˜;Kšœ˜—˜šœ0˜0KšœI˜I—šœ,˜,KšœL˜L—K˜šžœžœ˜'Kšžœ9˜>Kšœ˜—šžœžœ˜'Kšžœ<˜AKšœ˜—šœ˜šœ)˜)Kšœ/žœ˜H—K˜šžœ-žœ˜5Kšžœ9˜>Kšœ˜—˜Kšœ=˜=K˜šžœ/žœ˜7Kšžœ8˜=Kšœ˜—šœ9˜9Kšœ!žœ˜@—Kšœ-˜-K˜—Kšœ˜—K˜—Kšžœ˜Kšœ˜K˜—Kš  œžœžœžœžœ˜/L˜—J˜—…—Ψ²