DIRECTORY MesaRuntimeInit USING [], PrincOps USING [ ControlLink, EPRange, GFT, GFTItem, GlobalFrameHandle, NullGlobalFrame, SD, sGFTLength, UnboundLink], PrincOpsUtils USING [], RuntimeError USING [UnboundProcedure]; FrameImpl: PROGRAM IMPORTS RuntimeError EXPORTS MesaRuntimeInit, PrincOpsUtils = BEGIN GlobalFrame: PUBLIC SAFE PROC [link: --ControlLink--UNSPECIFIED] RETURNS [PrincOps.GlobalFrameHandle] = TRUSTED { DO OPEN l: LOOPHOLE[link, PrincOps.ControlLink]; SELECT TRUE FROM l = PrincOps.UnboundLink => link _ SIGNAL RuntimeError.UnboundProcedure[link]; l.proc => IF l.gfi IN [1..PrincOps.SD[PrincOps.sGFTLength]) THEN { gftItem: PrincOps.GFTItem _ PrincOps.GFT[l.gfi]; gftItem.epbias _ 0; RETURN[gftItem.framePtr] } ELSE RETURN[PrincOps.NullGlobalFrame]; l.indirect => link _ l.link^; link = 0 => RETURN[PrincOps.NullGlobalFrame]; ENDCASE => RETURN[l.frame.accesslink] ENDLOOP; }; GlobalFrameAndEntryPoint: PUBLIC SAFE PROC [link: --ControlLink--UNSPECIFIED] RETURNS [gf: PrincOps.GlobalFrameHandle, ep: CARDINAL] = TRUSTED { DO OPEN l: LOOPHOLE[link, PrincOps.ControlLink]; SELECT TRUE FROM l = PrincOps.UnboundLink => link _ SIGNAL RuntimeError.UnboundProcedure[link]; l.proc => IF l.gfi IN [1..PrincOps.SD[PrincOps.sGFTLength]) THEN { gftItem: PrincOps.GFTItem _ PrincOps.GFT[l.gfi]; ep _ gftItem.epbias*PrincOps.EPRange+l.ep; gftItem.epbias _ 0; gf _ gftItem.framePtr; RETURN } ELSE ERROR; l.indirect => link _ l.link^; ENDCASE => ERROR; -- not meaningful for type-0 control links ENDLOOP; }; END. zFrameImpl.mesa last modified by Levin on September 20, 1983 11:05 am Exported to PrincOpsUtils (Global Frame stuff) ΚV– "Cedar" style˜Jšœ™Jšœ5™5J˜šΟk ˜ Jšœœ˜šœ œ˜Jšœœ/œ˜e—Jšœœ˜Jšœ œ˜&J˜—šœ ˜Jšœ ˜Jšœ!˜(J˜—Jš˜J˜Jšœ.™.J˜šΟn œœΟc œ˜@Jšœ œ˜0š˜Jšœœ˜-šœœ˜Jšœ#œ%˜Nšœ ˜ šœœœœ˜8Jšœ%œ˜0J˜Jšœ˜J˜—Jšœœ˜&—Jšœ˜Jšœ œ˜-Jšœœ˜%—Jšœ˜—J˜—J˜šžœœŸ œ˜MJšœ&œœ˜Bš˜Jšœœ˜-šœœ˜Jšœ#œ%˜Nšœ ˜ šœœœœ˜8Jšœ%œ˜0Jšœ*˜*Jšœ˜Jšœ˜Jš˜J˜—Jšœœ˜ —Jšœ˜JšœœŸ*˜=—Jšœ˜—J˜J˜—Jšœ˜J˜—…—τΔ