<> <> <> <> DIRECTORY Core, RoseBehavior, RoseWireTypes; RoseControl: CEDAR DEFINITIONS = BEGIN <> <> <> ROPE: TYPE = Core.ROPE; RoseWireType: TYPE = RoseWireTypes.RoseWireType; Ptr: TYPE = RoseWireTypes.Ptr; <> Error: ERROR [msg: ROPE, data: REF ANY _ NIL]; Warning: SIGNAL [msg: ROPE, data: REF ANY _ NIL]; Stop: SIGNAL [msg: ROPE, data: REF ANY _ NIL]; <> Simulation: TYPE = REF SimulationRec; SimulationRec: TYPE; Instantiate: PROC [cellType: Core.CellType] RETURNS [simulation: Simulation]; <> Initialize: PROC [simulation: Simulation, steady: BOOL _ TRUE]; <> Settle: PROC [simulation: Simulation]; <> <> CellTestHandle: TYPE = REF CellTestHandleRep; CellTestHandleRep: TYPE; InstantiateForTest: PROC [cellType: Core.CellType, expand: BOOL _ TRUE] RETURNS [cth: CellTestHandle]; <> <> <> Test: PROC [cth: CellTestHandle, testProc: TestProc, testData: REF ANY _ NIL, stateToo: BOOL _ FALSE, steady: BOOL _ TRUE]; <> TestProc: TYPE = PROC [ testeeType: Core.CellType, testData, switchInstructions, simpleInstructions, driveInstructions, stateAny: REF ANY, Eval: PROC ]; GetTestSimulation: PROC [cth: CellTestHandle] RETURNS [simulation: Simulation]; <> <> RoseWire: TYPE = REF RoseWireRep; RoseWireRep: TYPE; LookupRoseWire: PROC [sim: Simulation, w: Core.Wire] RETURNS [rw: RoseWire]; RoseWireSource: PROC [rw: RoseWire] RETURNS [sim: Simulation, w: Core.Wire]; ExhibitValue: PROC [rw: RoseWire, to: PROC [rwt: RoseWireType, ptr: Ptr]]; ConsumeValue: PROC [rw: RoseWire, produce: PROC [rwt: RoseWireType, ptr: Ptr]]; SetForce: PROC [rw: RoseWire, fs: ForceScope]; ForceScope: TYPE = {notForced, tillSettle, forever}; boolType, bitType: RoseWireType; ReadBool: PROC [p: Ptr] RETURNS [b: BOOL]; WriteBool: PROC [p: Ptr, b: BOOL]; ReadSwitch: PROC [p: Ptr] RETURNS [s: RoseBehavior.SwitchVal]; WriteSwitch: PROC [p: Ptr, s: RoseBehavior.SwitchVal]; AddNotification: PROC [ event: Event, on: RoseWire, notify: EventConsumerProc, data: REF ANY _ NIL] RETURNS [registration: NotificationRegistration]; Event: TYPE = {Perturbed, Found, NewQ, NewUD, NewVal}; EventConsumerProc: TYPE = PROC [ event: Event, on: RoseWire, type: RoseWireType, ptr: Ptr, <> data: REF ANY]; NotificationRegistration: TYPE = REF NotificationRegistrationPrivate; NotificationRegistrationPrivate: TYPE; RemoveNotification: PROC [registration: NotificationRegistration]; END.