unit Keymap; INTERFACE uses Exec, Input; type pKeyMapResource = ^tKeyMapResource; tKeyMapResource = record kr_Node: tNode; kr_List: tList; end; pKeyMap = ^tKeyMap; tKeyMap = record km_LoKeyMapTypes: pbyte; km_LoKeyMap: plong; km_LoCapsable: pbyte; km_LoRepeatable: pbyte; km_HiKeyMapTypes: pbyte; km_HiKeyMap: plong; km_HiCapsable: pbyte; km_HiRepeatable: pbyte; end; pKeyMapNode = ^tKeyMapNode; tKeyMapNode = record kn_Node: tNode; kn_KeyMap: tKeyMap; end; var KeymapBase: pLibrary; const KCB_ALT = 1; KCF_ALT = 2; DP_2DINDEXMASK = $F; DPB_MOD = 0; DPF_MOD = 1; KCB_NOP = 7; DP_2DFACSHIFT = 4; KCF_NOP = $80; KCB_CONTROL = 2; KCF_CONTROL = 4; KC_VANILLA = 7; KCB_STRING = 6; KCB_DEAD = 5; KCF_STRING = $40; KCF_DEAD = $20; KCB_DOWNUP = 3; DPB_DEAD = 3; KCF_DOWNUP = 8; DPF_DEAD = 8; KCB_SHIFT = 0; KCF_SHIFT = 1; KC_NOQUAL = 0; procedure SetKeyMapDefault (keyMap: pKeyMap); function AskKeyMapDefault: pKeyMap; function MapRawKey (event: pInputEvent; buffer: STRPTR; length: integer; keyMap: pKeymap): integer; function MapANSI (string_: STRPTR; count: longint; buffer: STRPTR; length: longint; keyMap: pKeyMap): longint; IMPLEMENTATION procedure SetKeyMapDefault; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l KeymapBase,a6 jsr -$1E(a6) move.l (sp)+,a6 end; function AskKeyMapDefault; xassembler; asm move.l a6,-(sp) move.l KeymapBase,a6 jsr -$24(a6) move.l d0,8(sp) move.l (sp)+,a6 end; function MapRawKey; xassembler; asm movem.l a2/a6,-(sp) lea $C(sp),a6 move.l (a6)+,a2 move.w (a6)+,d1 move.l (a6)+,a1 move.l (a6)+,a0 move.l KeymapBase,a6 jsr -$2A(a6) move.w d0,$1A(sp) movem.l (sp)+,a2/a6 end; function MapANSI; xassembler; asm movem.l a2/a6,-(sp) lea $C(sp),a6 move.l (a6)+,a2 move.l (a6)+,d1 move.l (a6)+,a1 move.l (a6)+,d0 move.l (a6)+,a0 move.l KeymapBase,a6 jsr -$30(a6) move.l d0,$20(sp) movem.l (sp)+,a2/a6 end; end.