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]; 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. D[Indigo]r>Rosemary.DF=>SwitchTypes.Mesa Last Edited by: Spreitzer, May 2, 1985 4:26:59 pm PDT X means completely unknown level (as opposed to meaning something between low and high). 480 is LCM [Floor[32/1], Floor[32/2], Floor[32/3], ... Floor[32/32]]. fill(0:0..bitsPerSwitchValFiller-1): SwitchValFiller, Κα– "cedar" style˜JšœΟmœ™1J™5J˜IcodešΟk œ!˜*K˜KšΠbx œžœž œ˜ K˜Kšžœžœ˜K˜Kšœ žœ˜$Kšœ žœ˜$K˜K˜K˜KšΟnœžœžœžœ ˜1K˜Kš  œžœ žœžœ˜0K˜š œ žœžœž œžœ˜,Kš œžœžœžœ žœ˜6Kšœ žœ˜Kšœ˜—K˜Kšœžœ ˜ K˜K˜š œžœžœžœžœ˜K™X—K˜Kšœfžœ ˜sK˜š œžœžœžœžœ žœ ˜LK™E—K˜Kšœžœ˜Kšœžœ)˜HK˜KšœžœD˜bK˜š œžœžœž œžœ˜2Kšœ5™5KšœN˜N—K˜Kšœžœ)˜>K˜Kš œžœžœ˜3K˜Kšžœ˜—…—šΏ