DIRECTORY Basics, BitOps, SwitchTypes; BitSwOps: CEDAR DEFINITIONS = BEGIN StrengthIndex: TYPE = SwitchTypes.StrengthIndex; BoolStrengths: TYPE = ARRAY BOOLEAN OF SwitchTypes.Strength; BoolSwitches: TYPE = ARRAY BOOLEAN OF StrengthenedLevel; StrengthenedLevel: TYPE = RECORD [strength: SwitchTypes.Strength, level: SwitchTypes.Level]; BitWord: TYPE = BitOps.BitWord; BitDWord: TYPE = BitOps.BitDWord; BitMWord: TYPE = BitOps.BitMWord; Switch: TYPE = SwitchTypes.SwitchVal; SwitchMWord: TYPE = LONG DESCRIPTOR FOR PACKED ARRAY CARDINAL OF Switch; Long: TYPE = BitOps.Long; ExtractBoolFSwitch, EBFS: PROC [container: SwitchMWord, containerWidth, bitPosition: CARDINAL] RETURNS [result: BOOL]; InsertBoolInSwitch, IBIS: PROC [source: BOOL, container: SwitchMWord, containerWidth, bitPosition: CARDINAL, si: StrengthIndex, how: BoolStrengths]; SpecialInsertBoolInSwitch, SIBIS: PROC [source: BOOL, container: SwitchMWord, containerWidth, bitPosition: CARDINAL, how: BoolSwitches]; ExtractBoolFSingleSwitch, EBFSS: PROC [container: Switch] RETURNS [result: BOOL]; InsertBoolInSingleSwitch, IBISS: PROC [source: BOOL, container: Switch, si: StrengthIndex, how: BoolStrengths] RETURNS [newContainer: Switch]; SpecialInsertBoolInSingleSwitch, SIBISS: PROC [source: BOOL, container: Switch, how: BoolSwitches] RETURNS [newContainer: Switch]; ExtractCardinalFSwitch, ECFS: PROC [container: SwitchMWord, containerWidth, fieldPosition, fieldWidth: CARDINAL] RETURNS [result: CARDINAL]; InsertCardinalInSwitch, ICIS: PROC [source: CARDINAL, container: SwitchMWord, containerWidth, fieldPosition, fieldWidth: CARDINAL, si: StrengthIndex, how: BoolStrengths]; SpecialInsertCardinalInSwitch, SICIS: PROC [source: CARDINAL, container: SwitchMWord, containerWidth, fieldPosition, fieldWidth: CARDINAL, how: BoolSwitches]; ExtractLongFSwitch, ELFS: PROC [container: SwitchMWord, containerWidth, fieldPosition, fieldWidth: CARDINAL] RETURNS [result: Long]; InsertLongInSwitch, ILIS: PROC [source: Long, container: SwitchMWord, containerWidth, fieldPosition, fieldWidth: CARDINAL, si: StrengthIndex, how: BoolStrengths]; SpecialInsertLongInSwitch, SILIS: PROC [source: Long, container: SwitchMWord, containerWidth, fieldPosition, fieldWidth: CARDINAL, how: BoolSwitches]; ConvertWordToSwitch, CWTS: PROC [sourceContainer: BitWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: SwitchMWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL, si: StrengthIndex, how: BoolStrengths]; SpecialConvertWordToSwitch, SCWTS: PROC [sourceContainer: BitWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: SwitchMWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL, how: BoolSwitches]; ConvertDoubleToSwitch, CDTS: PROC [sourceContainer: BitDWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: SwitchMWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL, si: StrengthIndex, how: BoolStrengths]; SpecialConvertDoubleToSwitch, SCDTS: PROC [sourceContainer: BitDWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: SwitchMWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL, how: BoolSwitches]; ConvertMultipleToSwitch, CMTS: PROC [sourceContainer: BitMWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: SwitchMWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL, si: StrengthIndex, how: BoolStrengths]; SpecialConvertMultipleToSwitch, SCMTS: PROC [sourceContainer: BitMWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: SwitchMWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL, how: BoolSwitches]; ConvertSwitchToWord, CSTW: PROC [sourceContainer: SwitchMWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: BitWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL] RETURNS [newContainer: BitWord]; ConvertSwitchToDouble, CSTD: PROC [sourceContainer: SwitchMWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: BitDWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL] RETURNS [newContainer: BitDWord]; ConvertSwitchToMultiple, CSTM: PROC [sourceContainer: SwitchMWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: BitMWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL]; MoveSwitchToSwitch, MSTS: PROC [sourceContainer: SwitchMWord, sourceContainerWidth, sourcePosition, sourceWidth: CARDINAL, destinationContainer: SwitchMWord, destinationContainerWidth, destinationPosition, destinationWidth: CARDINAL]; END. "BitSwOps.mesa Last edited by: Barth, April 12, 1984 2:19:16 pm PST Last Edited by: Spreitzer, April 12, 1984 7:59:43 pm PST This is companion interface to BitOps that is used for dealing with MOSSIM style values. The containers The externals BOOL and CARDINAL already exist! Extraction and Insertion procedures Bools Cardinals ExtractCardinalFSingleSwitch, ECFSS: PROC [container: Switch] RETURNS [result: [0..1]]; InsertCardinalInSingleSwitch, ICISS: PROC [source: [0..1], container: Switch, si: StrengthIndex, how: BoolStrengths] RETURNS [newContainer: Switch]; SpecialInsertCardinalInSingleSwitch, SICISS: PROC [source: [0..1], container: Switch, how: BoolSwitches] RETURNS [newContainer: Switch]; Longs Moving bit fields Word as source Double as source Multiple as source Switch as source Κ}˜Icodešœ ™ K™4K™8K˜KšΟk œ˜&K˜KšΠbxœœ œ˜K˜Kšœ˜K˜KšœX™XK˜Kšœœ˜0Kš œœœœœ˜