DEFINITION MODULE Keyboard;
(*******************************************************************************
Name         : Keyboard.DEF
Version      : 1.0
Purpose      : Enables access to RAWKEY events via Intuition.
Author       : PGE
Date Started : 12/MAR/90.
Date Complete: 18/MAR/90.
Modified     : 25/MAR/90.added further comments
*******************************************************************************)

FROM ConsoleDevice IMPORT KeyMapPtr;
FROM Intuition     IMPORT IntuiMessagePtr;

CONST
  NullChar  = 0C;
  bs        = 10C;    (* back space *)
  lf        = 12C;    (* line feed *)
  vt        = 13C;    (* vertical tab *) (* RETURN key or ENTER key on
                                         the Amiga *)
  ff        = 14C;    (* form feed *)
  cr        = 15C;    (* carriage return *)
  esc       = 33C;    (* escape *)
  space     = 40C;
  asterix   = 52C;
  comma     = ",";
  minus     = 55C;    (* - *)
  dot       = 56C;    (* . *)
  colon     = 72C;    (* : *)
  underscore= "_";
  vert      = 174C;   (* | *)
  del       = 177C;   (* delete *)
  CSI       = 233C;

(* KeyID may be one of the following *)
  KUP       = 301;   (* Arrow keys *)
  KDOWN     = 302;
  KRIGHT    = 303;
  KLEFT     = 304;
  KSUP      = 305;   (* Shifted arrow keys *)
  KSDOWN    = 306;
  KSRIGHT   = 307;
  KSLEFT    = 308;
  KHELP     = 309;   (* Help key *)
  KF1       = 331;   (* Function keys F1-F10 *)
  KF2       = 332;
  KF3       = 333;
  KF4       = 334;
  KF5       = 335;
  KF6       = 336;
  KF7       = 337;
  KF8       = 338;
  KF9       = 339;
  KF10      = 340;
  KSF1      = 341;   (* Shifted function keys F1-F10 *)
  KSF2      = 342;
  KSF3      = 343;
  KSF4      = 344;
  KSF5      = 345;
  KSF6      = 346;
  KSF7      = 347;
  KSF8      = 348;
  KSF9      = 349;
  KSF10     = 350;

PROCEDURE OpenKey() : INTEGER;
(* Before reading RAWKEYs from Intuition we have to do some housekeeping.
   This procedure gets a pointer to the Console Device by opening a
Console Device without attaching it to any window. Its purpose is to
make the Console Device function RawKeyConvert available.
   The procedure returns 0 if it succeeds, -1 if it failed. *)

PROCEDURE CloseKey;
(* After doing all our key reading we have to do some final housekeeping.
   This procedure closes the Console Device opened by RawOpen.
   If the Console Device was not successfully opened RawClose will
return without doing anything. *)

PROCEDURE ReadKey(VAR KeyMessage : IntuiMessagePtr; (* in  *)
                  VAR KeyID      : INTEGER;         (* out *)
                  VAR KeyMap     : KeyMapPtr        (* in  *) ) : INTEGER;
(* This routine will return the key that was pressed on the keyboard
taking into account so called deadkeys and the key map being used, such
as a German keyboard.

   Pass it KeyMessage - obtained from a GetMsg
           KeyID      - not passed anything
           KeyMap     - when set to NULL the routine will do its
                        translation on the default key map. (The routine
                        has not been tested for non NULL values.)
   When it has returned
           KeyMessage         - not used
           KeyID              - only used when the function procedure is 0.
                                See constant definitions for values.
           KeyMap             - not used
           function procedure -  0     A special key was pressed, so look
                                       at KeyID for its value
                                -1     routine has failed
                                -2     either a key up message or it was
                                       not a raw key
                                1,2..  ASCII character      *)

END Keyboard.
