home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / M2V11-1.LHA / modula / amiga / KeyMap.def < prev    next >
Encoding:
Text File  |  1993-11-10  |  2.4 KB  |  86 lines

  1. DEFINITION FOR LIBRARY MODULE KeyMap ;
  2.  
  3. FROM SYSTEM    IMPORT ADDRESS, SHORTSET, LONGSET, STRING ;
  4. FROM InputEvent IMPORT InputEventPtr ;
  5. IMPORT Exec ;
  6.  
  7. TYPE
  8.   KeyMapPtr    = POINTER TO KeyMap           ;
  9.   KeyMapNodePtr = POINTER TO KeyMapNodePtr     ;
  10.   KeyMapTypePtr = POINTER TO ARRAY OF SHORTSET ;
  11.   BitArrayPtr    = POINTER TO ARRAY OF LONGSET  ;
  12.   KeyMapInfoPtr = POINTER TO ARRAY OF RECORD
  13.                 CASE :BOOLEAN OF
  14.                 | TRUE  : string : ADDRESS ;
  15.                 | FALSE : chars  : ARRAY [0..3] OF CHAR ;
  16.                 END ;
  17.               END ;
  18.  
  19.   KeyMap = RECORD
  20.     km_LoKeyMapTypes : KeyMapTypePtr    ;
  21.     km_LoKeyMap      : KeyMapInfoPtr    ;
  22.     km_LoCapsable    : BitArrayPtr    ;
  23.     km_LoRepeatable  : BitArrayPtr    ;
  24.     km_HiKeyMapTypes : KeyMapTypePtr    ;
  25.     km_HiKeyMap      : KeyMapInfoPtr    ;
  26.     km_HiCapsable    : BitArrayPtr    ;
  27.     km_HiRepeatable  : BitArrayPtr    ;
  28.   END ;
  29.  
  30.   KeyMapNode = RECORD
  31.     kn_Node   : Exec.Node ;    (* including name of keymap *)
  32.     kn_KeyMap : KeyMap    ;
  33.   END ;
  34.  
  35. (* the structure of keymap.resource *)
  36.  
  37. TYPE
  38.   KeyMapResource = RECORD
  39.     kr_Node : Exec.Node ;
  40.     kr_List : Exec.List ; (* a list of KeyMapNodes *)
  41.   END ;
  42.   KeyMapResourcePtr = POINTER TO KeyMapResource ;
  43.  
  44. (* Key Map Types *)
  45. CONST
  46.   KCB_SHIFT   = 0 ; KCF_SHIFT   = {KCB_SHIFT}   ;
  47.   KCB_ALT     = 1 ; KCF_ALT     = {KCB_ALT}     ;
  48.   KCB_CONTROL = 2 ; KCF_CONTROL = {KCB_CONTROL} ;
  49.   KCB_DOWNUP  = 3 ; KCF_DOWNUP  = {KCB_DOWNUP}  ;
  50.  
  51.   KCB_DEAD = 5 ;      (* may be dead or modified by dead key: *)
  52.   KCF_DEAD = {KCB_DEAD} ; (* use dead prefix bytes          *)
  53.  
  54.   KCB_STRING = 6 ; KCF_STRING = {KCB_STRING} ;
  55.   KCB_NOP    = 7 ; KCF_NOP    = {KCB_NOP}    ;
  56.  
  57.   KC_NOQUAL   = { } ;
  58.   KC_VANILLA  = KCF_SHIFT+KCF_ALT+KCF_CONTROL ;
  59.  
  60. (* Dead Prefix Bytes *)
  61.   DPB_MOD  =  0  ; DPF_MOD  = {DPB_MOD}  ;
  62.   DPB_DEAD =  3  ; DPF_DEAD = {DPB_DEAD} ;
  63.  
  64.   DP_2DINDEXMASK = 00FH ; (* mask for index for 1st of two dead keys   *)
  65.   DP_2DFACSHIFT     = 4 ;      (* shift for factor for 1st of two dead keys *)
  66.  
  67. VAR
  68.   KeymapBase : ADDRESS ;
  69.  
  70. (*--- functions in V36 or higher (Release 2.0) ---*)
  71. PROCEDURE SetKeyMapDefault( skeyMap : KeyMapPtr ) ;
  72. PROCEDURE AskKeyMapDefault( ) : KeyMapPtr ;
  73.  
  74. PROCEDURE MapRawKey( event  : InputEventPtr ;
  75.              buffer : STRING ;
  76.              length : LONGINT ;
  77.              keyMap : KeyMapPtr ) : INTEGER ;
  78.  
  79. PROCEDURE MapANSI( string : STRING  ;
  80.            count  : LONGINT ;
  81.            buffer : STRING  ;
  82.            length : LONGINT ;
  83.            keyMap : KeyMapPtr ) : LONGINT ;
  84.  
  85. END KeyMap.
  86.