<<[Indigo]®>Rosemary.DF=>SwitchTypes.Mesa>> <> DIRECTORY Basics, BitTwiddling, RoseTypes; SwitchTypes: CEDAR DEFINITIONS = BEGIN OPEN BitTwiddling; Strength: TYPE = RoseTypes.Strength; NodeType: TYPE = RoseTypes.NodeType; bitType: NodeType; Bundle: PROC [bits: CARDINAL] RETURNS [NodeType]; IsSwitchType: PROC [NodeType] RETURNS [BOOLEAN]; SwitchVal: TYPE = MACHINE DEPENDENT RECORD [ s: PACKED ARRAY StrengthIndex OF Strength _ ALL[none], val: Level _ X, pad: [0 .. 4) _ 0]; StrengthIndex: TYPE = {q, u, d}; none: Strength = ignore; Level: TYPE = {L, H, X}; <> refInput, refDriveStrong, refDrive, refDriveWeak, refChargeStrong, refCharge, refChargeWeak, refNone: REF Strength; switchValsPerWord: INTEGER = 480/SIZE[PACKED ARRAY [0 .. 480) OF SwitchVal]; <<480 is LCM [Floor[32/1], Floor[32/2], Floor[32/3], ... Floor[32/32]].>> bitsPerSwitchVal: INTEGER = 16; bitsPerSwitchValFiller: INTEGER = Basics.bitsPerWord - bitsPerSwitchVal; wordsPerSwitchValPort: INTEGER = (bitsPerSwitchVal + bitsPerSwitchValFiller) / Basics.bitsPerWord; SwitchValHolder: TYPE = MACHINE DEPENDENT RECORD [ <> held(0:Basics.bitsPerWord-bitsPerSwitchVal..Basics.bitsPerWord-1): SwitchVal]; SwitchValFiller: TYPE = [0..TwoToThe[bitsPerSwitchValFiller]); Block: PROC [a, b: Strength] RETURNS [c: Strength]; END.