DEFINITION Input;
(*Access to keyboard, mouse and clock

Implements the basic library module from "The Oakwood Guidelines for Oberon-2 Compiler Developers". This module is implemented to be used in tandem with basic module XYplane. For a console application, use module Input0 instead.*)

	VAR TimeUnit: INTEGER; (*clock ticks per second*)

	PROCEDURE Available(): INTEGER;
(*returns the number of characters in the keyboard buffer*)

	PROCEDURE Read(VAR ch: CHAR);
(*returns (and removes) the next character from the keyboard buffer. If the buffer is empty, Read waits until a key is pressed.*)

	PROCEDURE Mouse(VAR keys: SET; VAR x, y: INTEGER);
(*returns the current mouse position (x, y) in pixels relative to the lower left corner of the screen. keys is the set of the currently pressed mouse keys (left = 2, middle = 1, right = 0).*)

	PROCEDURE SetMouseLimits(w, h: INTEGER);
(*defines the rectangle where the mouse moves (in pixels). Subsequent calls to the operation Mouse will return coordinates for x in the range 0 .. w - 1 and y in the range 0 .. h - 1.*)

	PROCEDURE Time(): INTEGER;
(*returns the time elapsed since system startup in units of size 1 / TimeUnit seconds*)

END Input.
