#ifndef __INC_POS_DEVICE_KEYMAP_H
#define __INC_POS_DEVICE_KEYMAP_H
/*******************************************************************
 Includes Release 24
 (C) Copyright 1995-1997 proDAD
     All Rights Reserved

 $AUT Holger Burkarth
 $DAT >>Keymap.h<<   19 Nov 1996    11:22:05 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PEXEC_LIST_H
#include <pExec/List.h>
#endif


/*----------------------------------
-----------------------------------*/
struct pOS_KeyMap
{
  UBYTE *km_LoKeyMapTypes;  /* (enum pOS_KeyMapTypes) */
  ULONG *km_LoKeyMap;
  UBYTE *km_LoCapsable;
  UBYTE *km_LoRepeatable;

  UBYTE *km_HiKeyMapTypes;  /* (enum pOS_KeyMapTypes) */
  ULONG *km_HiKeyMap;
  UBYTE *km_HiCapsable;
  UBYTE *km_HiRepeatable;

  UWORD  km_Reserved;
  SWORD  km_LoMapOffset;    /* normal =0x00 */
  SWORD  km_HiMapOffset;    /* normal =0x40 */
  UWORD  km_LoMapLen;       /* normal =0x40 */
  UWORD  km_HiMapLen;       /* normal =0x28 */
};



/*----------------------------------
-----------------------------------*/
struct pOS_KeyMapStrHeader
{
  UBYTE  kmsh_StrLen;    /* Len of string */
  SBYTE  kmsh_Offset;    /* Offset to string */
};

/*----------------------------------
-----------------------------------*/
struct pOS_KeyMapDeadHeader
{
  UBYTE  kmdh_Type;      /* 0 | DPF_MOD | DPF_DEAD  */
  union {
    UBYTE  kmdh_Char;    /* Type==0  */
    SBYTE  kmdh_ModData; /* Type==DPF_MOD  */
  } kmdh_U;
};



/*----------------------------------
-----------------------------------*/
struct pOS_KeyMapNode
{
  struct pOS_ExNode kn_Node;    /* ln_Name => name of keymap */
  struct pOS_KeyMap kn_KeyMap;
};



enum pOS_KeyMapTypes
{
  KC_NOQUAL=      0x00,
  KC_VANILLA=     0x07,  /* note that SHIFT+ALT+CTRL is VANILLA */

  KCF_SHIFT=      0x01,
  KCF_ALT=        0x02,
  KCF_CONTROL=    0x04,
  KCF_DOWNUP=     0x08,

  KCF_DEAD=       0x20,  /* use dead prefix bytes */
  KCF_STRING=     0x40,
  KCF_NOP=        0x80,


/* Dead Prefix Bytes */
  DPF_MOD=        0x01,
  DPF_DEAD=       0x08,

  DP_2DINDEXMASK= 0x0f,  /* mask for index for 1st of two dead keys */
  DP_2DFACSHIFT=  0x04   /* shift for factor for 1st of two dead keys */
};

#endif
