The proper parent for metTempNew in vmSuperExecute is
	metParent(context->last->last)

*****************

The $keyDown and $buttonDown selectors are now misnamed.
They should be changed to $key and $mouse repectively.
This would force people to recognize the changes as
well. 

The keyCodes need to be revised so they agree on unix
and windows...

The mouse wheel could work on some unix systems as well.

The new $mouse message will let controls handle the
button up event so they can do the revert logic more
reliably.

UPDATE: I put the $buttonDown and $keyDown back the
way they were. The new methods will be $key and $button.
This will keep more old code working in the mean time.

**********************

	Modules unixGraph and mswGraph call hmemLength. 
	This is unacceptable. FIXED.

	Module unixSystem calls lisWriteln. 
	This is unacceptable.

The key modifiers don't work in Linux.
This makes the icon editor nearly useless...
	(FIXED)

*************************

The byte codes can be compressed quite a bit:
Codes are 8 bits.
Offsets are 16 bit.
Integers and floats are 32 bit.

To format the instructions, we must occasionally
insert a nop instruction to get us alligned properly.

****************************

Alltalk III

Issues:
	Debugger interaction with source code.
	Recursion elimination.

Classes probably need a reference to a file.
Methods probably need a reference to a file.

When methods are compiled 'one off' we retain
the reference to their position in the current
browser file?

When the 'save' item is picked, we can update
all the method locations if we know they have
all been compiled.

Recursion:
	In the compiler, raw expressions can
	be compiled and deferred to the stack.
	They will execute later in order.

	For OF expressions, we can't begin
	the compilation until we have the class
	so we write the entire method to a file
	and push back a completion?

	Idea: Each class, method, var and expression
	is collected and pushed back. Now we have 
	no need for a recursive vm call because
	we can handle eash element as an expression.

	The command to compile a file will first
	parse the file into a set of separate
	lexical streams, each stored in a buffer.
	It pushes back the compiler for each buffer.

	When compiling a METHOD with an OF clause,
	we push back the compilation and push back
	a patch to replace the expression with a
	reference to the proper class.

****************************8

METHOD $key[isDown, asciiCode, keyCode] IS
	Each time a key is pressed or released, a $key event is
	generated. The isDown flag is TRUE when the key is
	pressed down and NIL when the key is released.
	The asciiCode is non-zero for characters that generate
	ascii codes. Other keys will be zero. The keyCode is
	never zero. It returns the keyboard scan code for each
	unique key.

METHOD $mouse[isDown, x, y, whichButton, wheelParam] IS
	Each time the mouse is pressed or released,
	a $mouse event is generated. The buttons are
	identifed by the integers 1,2,3 for left, right, middle
	buttons. The wheelParam is non-zero when the wheel
	is turned.
	
METHOD track OF Window IS
	Returns the bitmask for the modifier state
	Updates the internal values for xPoint and yPoint
BEGIN
	X Windows recognizes 8 modifiers
	0	Shift
	1	Lock
	2	Control
	3..7	Others...
	8..12	Button1..5
		
	
Control tracking.
When the mouse goes down with any button,
we find the innermost item that wantsControl.
We then pass this item a takeControl[x, y].
The control loop can look at the button and modifier
states in the tracking loop.  The message window.track returns
the bit mask for all the modifiers. While window.track.and[button1] 
would be TRUE as long is the left button is down for example.
The Control loop records all the modifiers after each call to
track in the global gwModifiers. By default wantsControl uses
the button1 to decide when to release the control.

METHOD track IS

END METHOD


