(**************************************************************************

     $RCSfile: KeyMapLib.mod $
  Description: Keymap library definitions

   Created by: fjc (Frank Copeland)
    $Revision: 3.2 $
      $Author: fjc $
        $Date: 1994/08/08 01:10:01 $

  $VER: keymap_protos.h 36.4 (19.7.90)
  Includes Release 40.15

  (C) Copyright 1985-1993 Commodore-Amiga, Inc.
      All Rights Reserved

  Oberon-A interface Copyright © 1994, Frank Copeland.
  This file is part of the Oberon-A Interface.
  See Oberon-A.doc for conditions of use and distribution.

***************************************************************************)

MODULE KeyMapLib;

(*
** $C- CaseChk       $I- IndexChk  $L+ LongAdr   $N- NilChk
** $P- PortableCode  $R- RangeChk  $S- StackChk  $T- TypeChk
** $V- OvflChk       $Z- ZeroVars
*)

IMPORT E := Exec, IE := InputEvent, KM := KeyMap, SYS := SYSTEM;

(*-- KeyMap Base variable --------------------------------------------*)

TYPE

  KeyMapBasePtr = CPOINTER TO KeyMapBase;
  KeyMapBase = RECORD (E.Library) END;

CONST

  name * = "keymap.library";

VAR

  base * : KeyMapBasePtr;


(*-- Library Functions ------------------------------------------------*)

(*--- functions in V36 or higher (Release 2.0) ---*)

LIBCALL (base : KeyMapBasePtr) SetKeyMapDefault*
  ( keyMap [8] : KM.KeyMapPtr );
  -30;

LIBCALL (base : KeyMapBasePtr) AskKeyMapDefault* ()
  : KM.KeyMapPtr;
  -36;

LIBCALL (base : KeyMapBasePtr) MapRawKey*
  ( event      [8] : IE.InputEventBasePtr;
    VAR buffer [9] : ARRAY OF CHAR;
    length     [1] : LONGINT;
    keyMap    [10] : KM.KeyMapPtr )
  : INTEGER;
  -42;

LIBCALL (base : KeyMapBasePtr) MapANSI*
  ( string     [8] : ARRAY OF CHAR;
    count      [0] : LONGINT;
    VAR buffer [9] : ARRAY OF CHAR;
    length     [1] : LONGINT;
    keyMap    [10] : KM.KeyMapPtr )
  : LONGINT;
  -48;

(*-- Library Base variable --------------------------------------------*)
(* $L- Address globals through A4 *)

(*-----------------------------------*)
PROCEDURE* CloseLib ();

BEGIN (* CloseLib *)
  IF base # NIL THEN E.base.CloseLibrary (base) END
END CloseLib;

(*-----------------------------------*)
PROCEDURE OpenLib * (mustOpen : BOOLEAN);

BEGIN (* OpenLib *)
  IF base = NIL THEN
    base :=
      SYS.VAL
        ( KeyMapBasePtr,
          E.base.OpenLibrary (name, E.libraryMinimum) );
    IF base # NIL THEN SYS.SETCLEANUP (CloseLib)
    ELSIF mustOpen THEN HALT (100)
    END;
  END;
END OpenLib;

BEGIN
  base := NIL
END KeyMapLib.
