/*  @(#)win_keymap.h 20.12 93/06/28 SMI */

/*
 *  (c) Copyright 1989 Sun Microsystems, Inc. Sun design patents
 *  pending in the U.S. and foreign countries. See LEGAL NOTICE
 *  file for terms of the license.
 */

/*
 * SunView related input definitions.
 */
#ifndef win_keymap_DEFINED
#define win_keymap_DEFINED

/*
 * This is for building the xv_map and sem_map table,
 * and look up the convert from X keycode to SunView event.
 */
#define     MAX_KEYCODE_TABLE       2048

#define MAX_MASK            8
#define No_Index_Mask           ((unsigned short)0)
#define Shift_Index_Mask        ((unsigned short)(1<<8))
#define Control_Index_Mask      ((unsigned short)(1<<9))
#define Meta_Index_Mask         ((unsigned short)(1<<10))
#define Shift_and_Control_Mask      (Shift_Index_Mask | Control_Index_Mask)
#define Shift_and_Meta_Mask     (Shift_Index_Mask | Meta_Index_Mask)
#define Control_and_Meta_Mask       (Control_Index_Mask | Meta_Index_Mask)
#define All_Index_Masks     (Shift_Index_Mask | Control_Index_Mask | Meta_Index_Mask)

extern unsigned short   state_to_index_mask[];

#define KEYCODE_TO_KEY_INDEX(_keycode, _index_mask) \
    ((unsigned short)((_index_mask ) |  ((unsigned short)(_keycode))))

#define KEY_INDEX_TO_MASKS(_index) \
    ((unsigned short)((_index) &  (All_Index_Masks)))

#define KEY_INDEX_TO_KEYCODE(_index) \
    ((unsigned short)((_index) &  ~(All_Index_Masks)))

#define KEYCODE_STATE_TO_KEY_INDEX(_keycode, _state) \
    KEYCODE_TO_KEY_INDEX(_keycode, state_to_index_mask[(_state & 0xf)])

typedef enum
{
    KEYMAP_FUNCT_KEYS,
    KEYMAP_EDIT_KEYS,
    KEYMAP_MOTION_KEYS,
    KEYMAP_TEXT_KEYS
} Event_class;

#endif  /* win_keymap_DEFINED */
