GetMeImpl.Mesa
Last Edited by: Spreitzer, August 17, 1985 8:26:07 pm PDT
DIRECTORY AMBridge, AMModel, AMModelBridge, AMTypes, BcdDefs, GetMe, LoadState, PrincOps, PrincOpsUtils, RefText, Rope, TimeStamp;
GetMeImpl: CEDAR PROGRAM
IMPORTS AMBridge, AMModel, AMModelBridge, AMTypes, LoadState, PrincOpsUtils, RefText, Rope
EXPORTS GetMe =
{
ROPE: TYPE = Rope.ROPE;
TV: TYPE = AMTypes.TV;
GetVersion: PUBLIC PROC RETURNS [ts: TimeStamp.Stamp] = TRUSTED {
myLocalFrame: PrincOps.FrameHandle ← PrincOpsUtils.MyLocalFrame[];
myLF: TV ← AMBridge.TVForFrame[myLocalFrame];
callersLF: TV ← AMTypes.DynamicParent[myLF];
callersGF: TV ← AMTypes.GlobalParent[callersLF];
context: AMModel.Context ← AMModelBridge.ContextForFrame[callersGF];
section: AMModel.Section ← AMModel.ContextSection[context];
ts ← AMModel.SectionVersion[section];
};
GetAncestorVersion: PUBLIC PROC [moduleName: ROPE] RETURNS [ts: TimeStamp.Stamp] = TRUSTED {
myLocalFrame: PrincOps.FrameHandle ← PrincOpsUtils.MyLocalFrame[];
myLF: TV ← AMBridge.TVForFrame[myLocalFrame];
callersLF: TV ← AMTypes.DynamicParent[myLF];
callersGF: TV ← AMTypes.GlobalParent[callersLF];
context: AMModel.Context ← AMModelBridge.ContextForFrame[callersGF];
section: AMModel.Section ← AMModel.ContextSection[context];
WHILE NOT AMModel.SectionName[section].Equal[moduleName] DO
context ← AMModel.ParentContext[context];
IF context = NIL OR AMModel.ContextClass[context] = world THEN ERROR --no such containing module--;
section ← AMModel.ContextSection[context];
ENDLOOP;
ts ← AMModel.SectionVersion[section];
};
StandardScrewyEncoding: PUBLIC PROC [ts: TimeStamp.Stamp] RETURNS [Rope.ROPE] = {
fooey: PACKED ARRAY [0 .. 12) OF [0 .. 16) ← LOOPHOLE[ts];
rt: REF TEXT ← RefText.New[12];
FOR i: NAT IN [0 .. 12) DO
rt ← RefText.AppendChar[rt,
IF fooey[i] IN [0 .. 9] THEN '0 + fooey[i] ELSE 'a + fooey[i] - 10];
ENDLOOP;
RETURN [Rope.FromRefText[rt]];
};
GetBCD: PUBLIC PROC RETURNS [bb: BcdDefs.BcdBase] = TRUSTED {
myLocalFrame: PrincOps.FrameHandle ← PrincOpsUtils.MyLocalFrame[];
myLF: TV ← AMBridge.TVForFrame[myLocalFrame];
callersLF: TV ← AMTypes.DynamicParent[myLF];
callersGF: TV ← AMTypes.GlobalParent[callersLF];
callersGlobalFrame: PrincOps.GlobalFrameHandle ← AMBridge.GFHFromTV[callersGF];
cid: LoadState.ConfigID;
mi: LoadState.ModuleIndex;
LoadState.Acquire[LoadState.local, shared];
[cid, mi] ← LoadState.GlobalFrameToModule[LoadState.local, callersGlobalFrame];
bb ← LoadState.ConfigInfo[LoadState.local, cid].bcd;
LoadState.Release[LoadState.local];
};
}.