[squeak-dev] for the operation MAP := B bitOr:( M bitShift:3) given MAP how do I derive B and M?

David T. Lewis lewis at mail.msen.com
Wed Feb 12 03:23:05 UTC 2014


On Tue, Feb 11, 2014 at 06:05:30PM -0800, gettimothy wrote:
> To reverse a MorphicEvent into an primitive event I need to unmap the buttons and modifiers.
> In a primitive event, the fifth element (buttons) can be 1,2 or 4 and the sixth element (modifiers)  1,2,4 or 8.
> 
> HandMorph >> generateMouseEvent combines them into one field as such:
> 
> 
>     buttons := evtBuf fifth.
>     modifiers := evtBuf sixth.
>     buttons := buttons bitOr: (modifiers bitShift: 3).
> 
>  
> I need to reverse that   "buttons bitOr: (modifiers bitShift: 3)" back into the original values to recreate the primitive event.
> Here are the possible values of B(uttons) and M(odifiers) under that operation:
> 
> 
> B           M                 MAP
> 1 bitOr:(1 bitShift:3 ) 9
> 1 bitOr:(2 bitShift:3 ) 17
> 1 bitOr:(4 bitShift:3 ) 33
> 1 bitOr:(8 bitShift:3 ) 65
> 
> 
> 2 bitOr:(1 bitShift:3 )  10
> 2 bitOr:(2 bitShift:3 )  18
> 2 bitOr:(4 bitShift:3 )  34
> 2 bitOr:(8 bitShift:3 )  66
> 
> 
> 4 bitOr:(1 bitShift:3 )   12
> 4 bitOr:(2 bitShift:3 )   20
> 4 bitOr:(4 bitShift:3 )   36
> 4 bitOr:(8 bitShift:3 )   68
> 
> So, given a MAP on the right, I need to derive a B and a M.
> 
> I can figure something out, but it will probably be ugly. Hence, this email to the list.
> Any bit-fiddlers on the board who know an elegant method?
> 

M is (MAP >> 3) and B is (MAP bitAnd: 7).


MAP		M := MAP >> 3			B := MAP bitAnd: 7
9		1				1
17		2				1
33		4				1
65		8				1

10		1				2
18		2				2
34		4				2
66		8				2

12		1				4
20		2				4
36		4				4
68		8				4




More information about the Squeak-dev mailing list