<> <> <> <> DIRECTORY Rope, TimeStamp; RoseBehavior: CEDAR DEFINITIONS = BEGIN <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<>> <> <> <> <> <> <<>> <> <> <> <> <> <> <> <> <> ROPE: TYPE = Rope.ROPE; VersionStamp: TYPE = TimeStamp.Stamp; Details: TYPE = REF DetailsRec; DetailsRec: TYPE = RECORD [ EvalSimple, ValsChanged, InitQ, PropQ, InitUD, PropUD, FinalUD: EvalProc _ NIL, <> <> <> EnumerateVicinity: VicinityEnumerator _ NIL, CreateState: StateCreator _ NIL]; EvalProc: TYPE = PROC [argsAny, switchAny, simpleAny, strengthAny, stateAny: REF ANY, perturb: PROC [portPath: PortPath]]; VicinityEnumerator: TYPE = PROC [ argsAny, stateAny: REF ANY, portPath: PortPath, evenIfInput: BOOL _ FALSE, consume: PROC [PortPath] ]; PortPath: TYPE = LIST OF StructureIndex; <> StructureIndex: TYPE = CARDINAL; RegisterDetails: PROC [behaviorClassName: ROPE, details: Details, versionStamp: VersionStamp]; StateCreator: TYPE = PROC [argsAny: REF ANY _ NIL] RETURNS [stateAny: REF ANY _ NIL]; SwitchVal: TYPE = MACHINE DEPENDENT RECORD [ s: PACKED ARRAY StrengthIndex OF Strength _ ALL[none], val: Level _ X, pad: [0 .. 4) _ 0]; Level: TYPE = {L, H, X}; Strength: TYPE = Drive[none .. input]; StrengthIndex: TYPE = {q, u, d}; Drive: TYPE = { test,--for TestProcs to say "test it for me" see,--for TestProcs to say "I'll test it" none,--from a TestProc it means neither driven nor tested; in simulation it means no strength at all chargeWeak, chargeMediumWeak, charge, chargeMediumStrong, chargeStrong, chargeVeryStrong, driveWeak, driveMediumWeak, drive, driveMediumStrong, driveStrong, driveVeryStrong, input--the strongest drive level: how circuit inputs are driven }; Stop: SIGNAL [msg: ROPE, data: REF ANY _ NIL]; <> END.