-- KeyPrivate.Mesa  Edited by Sandman on June 30, 1980  4:57 PM
-- Copyright  Xerox Corporation 1979, 1980

  AltoDisplay USING [Coordinate],
  KeyDefs USING [KeyArray, KeyItem],
  StreamDefs USING [KeyboardHandle, StreamHandle, StreamObject];

  BEGIN OPEN KeyDefs, StreamDefs;

  monitor: MONITORLOCK;
  wakeup: CONDITION;
  charactersAvailable: CONDITION;
  halt: BOOLEAN;

  ks: KeyboardHandle;

  KeyTable: POINTER TO ARRAY [0..80) OF KeyItem;

  -- fixed addresses for keyboard and mouse

  keys: POINTER TO KeyArray;

  mouse: POINTER TO AltoDisplay.Coordinate;
  cursor: POINTER TO AltoDisplay.Coordinate;

  Xmax: CARDINAL = 608;
  Ymax: CARDINAL = 808;

  oldState, newState: POINTER TO KeyArray;

  ProcessKeyboard: PROCEDURE;

  ReadChar: PROCEDURE [stream: StreamHandle] RETURNS [char: UNSPECIFIED];
  InputBufferEmpty: PROCEDURE [stream: StreamHandle] RETURNS [empty: BOOLEAN];

  KeyboardData: TYPE = RECORD [
    new, old: KeyArray,
    stream: Keyboard StreamObject,
    process: PROCESS,
    table: ARRAY [0..80) OF KeyItem];