[Oberon] Keyboard substituting for mouse.

eas lab lab.eas at gmail.com
Sat Jan 16 17:26:10 CET 2016


It looks interesting.
How easy is it to disable the damned <capslock> or move it to
a 'remote' key: eg. Pause/Break ?

== Chris Glur.


On 1/14/16, peter at easthope.ca <peter at easthope.ca> wrote:
> From: joerg.straube at iaeth.ch (Joerg), Tue, 12 Jan 2016 11:31:53 +0100
>> ... unfortunate that Project Oberon has no standardized definitions of the
>>
>> key codes for the up, left, right and down keys. As I like to move around
>> the caret
>> with my keyboard instead of the mouse ...
>
> A general solution which simplifies Mouse* and facilitates support for
> other input hardware.
>
> MODULE Input;
>   ...
> < 	ELSIF c = 046X THEN	(* Scroll make *)
> < 		LedKey(flags, ScrollLock, c, k);
> < 		state := DisableInterrupts();
> < 		IF ScrollLock IN flags THEN
> < 			IF Kernel.timer = NIL THEN Kernel.timer := timerproc END
> < 		ELSE
> < 			IF Kernel.timer = timerproc THEN Kernel.timer := NIL END
> < 		END;
> < 		RestoreInterrupts(state)
>
>> 	ELSIF c = 046X THEN	(* Scroll make *)
>> 		LedKey(flags, ScrollLock, c, k);
>> 		state := DisableInterrupts();
>> 		IF ScrollLock IN flags THEN (* Keypad input extant. *)
>> 			RemoveMouse(GetKeypadEvent);
>> 			AddMouse(GetMouseEvent);
>> 			IF Kernel.timer = NIL THEN Kernel.timer := timerproc END
>> 		ELSE  (*  Mouse input extant. *)
>> 			RemoveMouse(GetMouseEvent);
>> 			AddMouse(GetKeypadEvent);
>> 			IF Kernel.timer = timerproc THEN Kernel.timer := NIL END
>> 		END;
>> 		RestoreInterrupts(state)
>
> < PROCEDURE Mouse*(ind: SHORTINT; VAR keys: SET; VAR x, y: INTEGER);
> < 	...
> < 	IF ScrollLock IN flags THEN
> < 		keys := {};
> < 		IF 11 IN kpmap THEN INCL(keys, 2) END;
> < 		IF 5 IN kpmap THEN INCL(keys, 1) END;
> < 		IF 12 IN kpmap THEN INCL(keys, 0) END;
> < 		state := DisableInterrupts();
> < 		INC(m.mouseX, LONG(kdx));
> < 		INC(m.mouseY, LONG(kdy));
> < 		kdx := 0;  kdy := 0;
> < 		RestoreInterrupts(state)
> < 	ELSE
>
>> PROCEDURE GetKeypadEvent(VAR keys: SET;  VAR dx, dy, dz: INTEGER):
>> BOOLEAN;
>>   ...
>> 		keys := {};
>> 		IF 11 IN kpmap THEN INCL(keys, 2) END;
>> 		IF 5 IN kpmap THEN INCL(keys, 1) END;
>> 		IF 12 IN kpmap THEN INCL(keys, 0) END;
>> 		state := DisableInterrupts();
>> 		INC(m.mouseX, LONG(kdx));
>> 		INC(m.mouseY, LONG(kdy));
>> 		kdx := 0;  kdy := 0;
>> 		RestoreInterrupts(state)
>>   ...
>
> A week or more until I can test it.
>
> Regards,                     ... Lyall E.
>
> --
> 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12
> Tel +1 360 639 0202
> http://easthope.ca/Peter.html Bcc: peter at easthope. ca
>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon
>


More information about the Oberon mailing list