sl@0: // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // wins\specific\keymap.cpp sl@0: // The lookup tables giving the function to be carried out sl@0: // and the new state of the keyboard sl@0: // sl@0: // sl@0: sl@0: sl@0: #include sl@0: sl@0: // the "array" parameter must be a true array and not a pointer sl@0: #define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0])) sl@0: sl@0: #define TABLE_ENTRY_ANOTHER_CTRL_DIGIT \ sl@0: { \ sl@0: { \ sl@0: EModifierKeyUp|EModifierFunc, \ sl@0: 0 \ sl@0: }, \ sl@0: { \ sl@0: EKeyNull, \ sl@0: EAnyDigitGivenRadix \ sl@0: }, \ sl@0: { \ sl@0: EStateCtrlDigits, \ sl@0: EAddOnCtrlDigit, \ sl@0: 0 \ sl@0: } \ sl@0: } sl@0: sl@0: // This table is searched for a match if a match has not been sl@0: // found in the current state's table sl@0: sl@0: LOCAL_D const SFuncTableEntry defaultTable[]= sl@0: { sl@0: { // prevent key up events generating keycodes sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyNull, sl@0: EAnyKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: EDoNothing, sl@0: 0 sl@0: } sl@0: }, sl@0: { // prevent any modifer key from changing state sl@0: { sl@0: 0, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyNull, sl@0: EAnyModifierKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: EDoNothing, sl@0: 0 sl@0: } sl@0: }, sl@0: { // filter out any unprocessed codes??? sl@0: { sl@0: 0, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyNull, sl@0: EAnyKey sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EDoNothing, sl@0: 0 sl@0: } sl@0: } sl@0: }; sl@0: sl@0: // The table indicating which keys change which modifiers; sl@0: // the state field in this table is ignored sl@0: LOCAL_D const SFuncTableEntry modifierTable[]= sl@0: { sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyCapsLock, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: EToggleModifier, sl@0: EModifierCapsLock sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyNumLock, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: EToggleModifier, sl@0: EModifierNumLock sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyScrollLock, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: EToggleModifier, sl@0: EModifierScrollLock sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyLeftAlt, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOnModifier, sl@0: EModifierAlt|EModifierLeftAlt sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyLeftAlt, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOffModifier, sl@0: EModifierLeftAlt sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyLeftFunc, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOnModifier, sl@0: EModifierFunc|EModifierLeftFunc sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyLeftFunc, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOffModifier, sl@0: EModifierLeftFunc sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyLeftShift, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOnModifier, sl@0: EModifierShift|EModifierLeftShift sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyLeftShift, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOffModifier, sl@0: EModifierLeftShift sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyLeftCtrl, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOnModifier, sl@0: EModifierCtrl|EModifierLeftCtrl sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyLeftCtrl, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOffModifier, sl@0: EModifierLeftCtrl sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyRightAlt, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOnModifier, sl@0: EModifierAlt|EModifierRightAlt sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyRightAlt, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOffModifier, sl@0: EModifierRightAlt sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyRightFunc, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOnModifier, sl@0: EModifierFunc|EModifierRightFunc sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyRightFunc, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOffModifier, sl@0: EModifierRightFunc sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyRightShift, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOnModifier, sl@0: EModifierShift|EModifierRightShift sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyRightShift, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOffModifier, sl@0: EModifierRightShift sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyRightCtrl, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOnModifier, sl@0: EModifierCtrl|EModifierRightCtrl sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyRightCtrl, sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: ETurnOffModifier, sl@0: EModifierRightCtrl sl@0: } sl@0: } sl@0: }; sl@0: sl@0: // table0 to table12 are the tables corresponding to states sl@0: // 0 to 12 respectively sl@0: sl@0: LOCAL_D const SFuncTableEntry table0[]= sl@0: { sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table1[]= sl@0: { sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'e', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcAe sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'c', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcCcedilla sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 's', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1EsTset sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'o', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcOslash sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'd', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcThorn sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 't', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcSoftTh sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'l', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LeftChevron sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'r', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1RightChevron sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'x', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1InvExclam sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'q', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1InvQuest sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'a', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcAo sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'p', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1Pound sl@0: } sl@0: }, sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table2[]= sl@0: { sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'a', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcAumlaut sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'e', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcEumlaut sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'i', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcIumlaut sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'o', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcOumlaut sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'u', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcUumlaut sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'y', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcYumlaut sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: ' ', sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1SpaceUmlaut sl@0: } sl@0: }, sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table3[]= sl@0: { sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'a', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcAgrave sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'e', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcEgrave sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'i', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcIgrave sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'o', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcOgrave sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'u', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcUgrave sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: ' ', sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1SpaceGrave sl@0: } sl@0: }, sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table4[]= sl@0: { sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'a', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcAacute sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'e', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcEacute sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'i', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcIacute sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'o', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcOacute sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'u', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcUacute sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'y', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcYacute sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: ' ', sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcSpaceAcute sl@0: } sl@0: }, sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table5[]= sl@0: { sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'a', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcAtilde sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'n', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcNtilde sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'o', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcOtilde sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: ' ', sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcSpaceTilde sl@0: } sl@0: }, sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table6[]= sl@0: { sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'a', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcAcirc sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'e', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcEcirc sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'i', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcIcirc sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'o', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcOcirc sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: 'u', sl@0: EMatchKeyCaseInsens sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcUcirc sl@0: } sl@0: }, sl@0: { sl@0: { sl@0: EModifierFunc|EModifierKeyUp, sl@0: 0 sl@0: }, sl@0: { sl@0: ' ', sl@0: EMatchKey sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassSpecialKeyThru, sl@0: ELatin1LcSpaceCirc sl@0: } sl@0: }, sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table7[]= sl@0: { sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table8[]= sl@0: { sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table9[]= sl@0: { sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table10[]= sl@0: { sl@0: { // check for ctrl-number presses sl@0: { sl@0: EModifierCtrl|EModifierFunc|EModifierKeyUp, sl@0: EModifierCtrl sl@0: }, sl@0: { sl@0: EKeyNull, sl@0: EAnyDecimalDigit sl@0: }, sl@0: { sl@0: EStateDerivedFromDigitEntered, sl@0: EAddOnCtrlDigit, sl@0: 0 sl@0: } sl@0: }, sl@0: { // filter out up key strokes sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyNull, sl@0: EAnyKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: EDoNothing, sl@0: 0 sl@0: } sl@0: }, sl@0: { // pass thru any non-processed keys sl@0: { sl@0: 0, sl@0: 0 sl@0: }, sl@0: { sl@0: EKeyNull, sl@0: EAnyKey sl@0: }, sl@0: { sl@0: EStateUnchanged, sl@0: EPassKeyThru, sl@0: 0 sl@0: } sl@0: } sl@0: }; sl@0: sl@0: //LOCAL_D const SFuncTableEntry table11[]= sl@0: // { sl@0: // TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: // }; sl@0: sl@0: LOCAL_D const SFuncTableEntry table12[]= sl@0: { sl@0: { sl@0: { sl@0: EModifierKeyUp, sl@0: EModifierKeyUp sl@0: }, sl@0: { sl@0: EKeyLeftCtrl, sl@0: EMatchLeftOrRight sl@0: }, sl@0: { sl@0: EStateNormal, sl@0: EPassCtrlDigitsThru, sl@0: 0 sl@0: } sl@0: }, sl@0: TABLE_ENTRY_ANOTHER_CTRL_DIGIT sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTable genFuncTables[]= sl@0: { sl@0: { sl@0: ARRAY_LENGTH(table0), sl@0: &table0[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table1), sl@0: &table1[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table2), sl@0: &table2[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table3), sl@0: &table3[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table4), sl@0: &table4[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table5), sl@0: &table5[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table6), sl@0: &table6[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table7), sl@0: &table7[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table8), sl@0: &table8[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table9), sl@0: &table9[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table10), sl@0: &table10[0] sl@0: }, sl@0: { sl@0: 0, sl@0: NULL sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(table12), sl@0: &table12[0] sl@0: } sl@0: }; sl@0: sl@0: LOCAL_D const SFuncTables FuncTables= sl@0: { sl@0: { sl@0: ARRAY_LENGTH(defaultTable), sl@0: &defaultTable[0] sl@0: }, sl@0: { sl@0: ARRAY_LENGTH(modifierTable), sl@0: &modifierTable[0] sl@0: }, sl@0: ARRAY_LENGTH(genFuncTables), sl@0: &genFuncTables[0] sl@0: }; sl@0: sl@0: LOCAL_D const SScanCodeBlock scanCodeBlock_unmodifiable[]= sl@0: { sl@0: {EStdKeyLeftShift, EStdKeyScrollLock} sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 convKeyCodes_unmodifiable[]= sl@0: { sl@0: EKeyLeftShift, sl@0: EKeyRightShift, sl@0: EKeyLeftAlt, sl@0: EKeyRightAlt, sl@0: EKeyLeftCtrl, sl@0: EKeyRightCtrl, sl@0: EKeyLeftFunc, sl@0: EKeyRightFunc, sl@0: EKeyCapsLock, sl@0: EKeyNumLock, sl@0: EKeyScrollLock sl@0: }; sl@0: sl@0: // base: this table traps all of the keyboard's scanCodes except those in convKeyCodes_unmodifiable sl@0: LOCAL_D const SScanCodeBlock scanCodeBlock_base[]= sl@0: { sl@0: {EStdKeyNull, EStdKeyDownArrow}, sl@0: {'0', '9'}, sl@0: {'A', 'Z'}, sl@0: {EStdKeyF1, EStdKeyDial}, sl@0: {EStdKeyIncVolume, EStdKeyDecVolume}, sl@0: {EStdKeyDevice0,EStdKeyDeviceF}, sl@0: {EStdKeyApplication0, EStdKeyApplicationF}, sl@0: {EStdKeyYes, EStdKeyDecBrightness}, sl@0: {EStdKeyDevice10,EStdKeyDevice1F}, sl@0: {EStdKeyApplication10, EStdKeyApplication1F}, sl@0: {EStdKeyDevice20,EStdKeyDevice27}, sl@0: {EStdKeyApplication20, EStdKeyApplication27} sl@0: }; sl@0: sl@0: // sl@0: // This table is internatioalizable sl@0: // sl@0: LOCAL_D const TUint16 convKeyCodes_base[]= sl@0: { sl@0: EKeyNull, sl@0: EKeyBackspace, sl@0: EKeyTab, sl@0: EKeyEnter, sl@0: EKeyEscape, sl@0: ' ', sl@0: EKeyPrintScreen, sl@0: EKeyPause, sl@0: EKeyHome, sl@0: EKeyEnd, sl@0: EKeyPageUp, sl@0: EKeyPageDown, sl@0: EKeyInsert, sl@0: EKeyDelete, sl@0: EKeyLeftArrow, sl@0: EKeyRightArrow, sl@0: EKeyUpArrow, sl@0: EKeyDownArrow, sl@0: '0', sl@0: '1', sl@0: '2', sl@0: '3', sl@0: '4', sl@0: '5', sl@0: '6', sl@0: '7', sl@0: '8', sl@0: '9', sl@0: 'a', sl@0: 'b', sl@0: 'c', sl@0: 'd', sl@0: 'e', sl@0: 'f', sl@0: 'g', sl@0: 'h', sl@0: 'i', sl@0: 'j', sl@0: 'k', sl@0: 'l', sl@0: 'm', sl@0: 'n', sl@0: 'o', sl@0: 'p', sl@0: 'q', sl@0: 'r', sl@0: 's', sl@0: 't', sl@0: 'u', sl@0: 'v', sl@0: 'w', sl@0: 'x', sl@0: 'y', sl@0: 'z', sl@0: EKeyF1, sl@0: EKeyF2, sl@0: EKeyF3, sl@0: EKeyF4, sl@0: EKeyF5, // Media change emulation sl@0: EKeyF6, sl@0: EKeyF7, sl@0: EKeyF8, // Case close sl@0: EKeyF9, // KeyOff sl@0: EKeyF10, // SwitchOff sl@0: EKeyF11, // Case open sl@0: EKeyF12, sl@0: EKeyF13, sl@0: EKeyF14, sl@0: EKeyF15, sl@0: EKeyF16, sl@0: EKeyF17, sl@0: EKeyF18, sl@0: EKeyF19, sl@0: EKeyF20, sl@0: EKeyF21, sl@0: EKeyF22, sl@0: EKeyF23, sl@0: EKeyF24, sl@0: '`', sl@0: ',', sl@0: '.', sl@0: '/', sl@0: '\\', sl@0: ';', sl@0: '\'', sl@0: '#', sl@0: '[', sl@0: ']', sl@0: '-', sl@0: '=', sl@0: '/', sl@0: '*', sl@0: '-', sl@0: '+', sl@0: EKeyEnter, sl@0: EKeyEnd, sl@0: EKeyDownArrow, sl@0: EKeyPageDown, sl@0: EKeyLeftArrow, sl@0: EKeyNull, // numeric keypad '5' sl@0: EKeyRightArrow, sl@0: EKeyHome, sl@0: EKeyUpArrow, sl@0: EKeyPageUp, sl@0: EKeyInsert, sl@0: EKeyDelete, sl@0: EKeyMenu, sl@0: EKeyBacklightOn, sl@0: EKeyBacklightOff, sl@0: EKeyBacklightToggle, sl@0: EKeyIncContrast, sl@0: EKeyDecContrast, sl@0: EKeySliderDown, sl@0: EKeySliderUp, sl@0: EKeyDictaphonePlay, sl@0: EKeyDictaphoneStop, sl@0: EKeyDictaphoneRecord, sl@0: EKeyHelp, sl@0: EKeyOff, sl@0: EKeyDial, sl@0: EKeyIncVolume, sl@0: EKeyDecVolume, sl@0: EKeyDevice0, sl@0: EKeyDevice1, sl@0: EKeyDevice2, sl@0: EKeyDevice3, sl@0: EKeyDevice4, sl@0: EKeyDevice5, sl@0: EKeyDevice6, sl@0: EKeyDevice7, sl@0: EKeyDevice8, sl@0: EKeyDevice9, sl@0: EKeyDeviceA, sl@0: EKeyDeviceB, sl@0: EKeyDeviceC, sl@0: EKeyDeviceD, sl@0: EKeyDeviceE, sl@0: EKeyDeviceF, sl@0: EKeyApplication0, sl@0: EKeyApplication1, sl@0: EKeyApplication2, sl@0: EKeyApplication3, sl@0: EKeyApplication4, sl@0: EKeyApplication5, sl@0: EKeyApplication6, sl@0: EKeyApplication7, sl@0: EKeyApplication8, sl@0: EKeyApplication9, sl@0: EKeyApplicationA, sl@0: EKeyApplicationB, sl@0: EKeyApplicationC, sl@0: EKeyApplicationD, sl@0: EKeyApplicationE, sl@0: EKeyApplicationF, sl@0: EKeyYes, sl@0: EKeyNo, sl@0: EKeyIncBrightness, sl@0: EKeyDecBrightness, sl@0: EKeyDevice10, sl@0: EKeyDevice11, sl@0: EKeyDevice12, sl@0: EKeyDevice13, sl@0: EKeyDevice14, sl@0: EKeyDevice15, sl@0: EKeyDevice16, sl@0: EKeyDevice17, sl@0: EKeyDevice18, sl@0: EKeyDevice19, sl@0: EKeyDevice1A, sl@0: EKeyDevice1B, sl@0: EKeyDevice1C, sl@0: EKeyDevice1D, sl@0: EKeyDevice1E, sl@0: EKeyDevice1F, sl@0: EKeyApplication10, sl@0: EKeyApplication11, sl@0: EKeyApplication12, sl@0: EKeyApplication13, sl@0: EKeyApplication14, sl@0: EKeyApplication15, sl@0: EKeyApplication16, sl@0: EKeyApplication17, sl@0: EKeyApplication18, sl@0: EKeyApplication19, sl@0: EKeyApplication1A, sl@0: EKeyApplication1B, sl@0: EKeyApplication1C, sl@0: EKeyApplication1D, sl@0: EKeyApplication1E, sl@0: EKeyApplication1F, sl@0: EKeyDevice20, sl@0: EKeyDevice21, sl@0: EKeyDevice22, sl@0: EKeyDevice23, sl@0: EKeyDevice24, sl@0: EKeyDevice25, sl@0: EKeyDevice26, sl@0: EKeyDevice27, sl@0: EKeyApplication20, sl@0: EKeyApplication21, sl@0: EKeyApplication22, sl@0: EKeyApplication23, sl@0: EKeyApplication24, sl@0: EKeyApplication25, sl@0: EKeyApplication26, sl@0: EKeyApplication27 sl@0: }; sl@0: sl@0: // caps-lock: this table traps those scanCodes which are affected by caps-lock sl@0: LOCAL_D const SScanCodeBlock scanCodeBlock_capsLock[]= sl@0: { sl@0: {'A', 'Z'} sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 convKeyCodes_capsLock[]= sl@0: { sl@0: 'A', sl@0: 'B', sl@0: 'C', sl@0: 'D', sl@0: 'E', sl@0: 'F', sl@0: 'G', sl@0: 'H', sl@0: 'I', sl@0: 'J', sl@0: 'K', sl@0: 'L', sl@0: 'M', sl@0: 'N', sl@0: 'O', sl@0: 'P', sl@0: 'Q', sl@0: 'R', sl@0: 'S', sl@0: 'T', sl@0: 'U', sl@0: 'V', sl@0: 'W', sl@0: 'X', sl@0: 'Y', sl@0: 'Z' sl@0: }; sl@0: sl@0: // shift: this table traps those scanCodes which are affected sl@0: // by shift EXCEPT for those scanCodes affected by caps-lock sl@0: LOCAL_D const SScanCodeBlock scanCodeBlock_shift[]= sl@0: { sl@0: {'0', '9'}, sl@0: {EStdKeyXXX, EStdKeyEquals}, sl@0: }; sl@0: sl@0: // sl@0: // This table is internatioalizable sl@0: // sl@0: LOCAL_D const TUint16 convKeyCodes_shift[]= sl@0: { sl@0: ')', sl@0: '!', sl@0: '"', sl@0: ELatin1Pound, sl@0: '$', sl@0: '%', sl@0: '^', sl@0: '&', sl@0: '*', sl@0: '(', sl@0: ELatin1LogicNot, sl@0: '<', sl@0: '>', sl@0: '?', sl@0: '|', sl@0: ':', sl@0: '@', sl@0: '~', sl@0: '{', sl@0: '}', sl@0: '_', sl@0: '+' sl@0: }; sl@0: sl@0: // numlock: this table traps those scanCodes which are affected by numlock sl@0: LOCAL_D const SScanCodeBlock scanCodeBlock_numLock[]= sl@0: { sl@0: {EStdKeyNkpForwardSlash, EStdKeyNkpFullStop} sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 convKeyCodes_numLock[]= sl@0: { sl@0: '/', sl@0: '*', sl@0: '-', sl@0: '+', sl@0: EKeyEnter, sl@0: '1', sl@0: '2', sl@0: '3', sl@0: '4', sl@0: '5', sl@0: '6', sl@0: '7', sl@0: '8', sl@0: '9', sl@0: '0', sl@0: '.' sl@0: }; sl@0: sl@0: // ctrl: this table traps those scanCodes which are affected by ctrl sl@0: LOCAL_D const SScanCodeBlock scanCodeBlock_ctrl[]= sl@0: { sl@0: // The space key gets handled else where, otherwise it gets sl@0: // thrown away as a NULL key sl@0: // {EStdKeySpace, EStdKeySpace}, sl@0: sl@0: {'A', 'Z'} sl@0: }; sl@0: sl@0: LOCAL_D const TUint16 convKeyCodes_ctrl[]= sl@0: { sl@0: // 0, sl@0: 1, sl@0: 2, sl@0: 3, sl@0: 4, sl@0: 5, sl@0: 6, sl@0: 7, sl@0: 8, sl@0: 9, sl@0: 10, sl@0: 11, sl@0: 12, sl@0: 13, sl@0: 14, sl@0: 15, sl@0: 16, sl@0: 17, sl@0: 18, sl@0: 19, sl@0: 20, sl@0: 21, sl@0: 22, sl@0: 23, sl@0: 24, sl@0: 25, sl@0: 26 sl@0: }; sl@0: sl@0: // Rotate by 90: this table traps those scancodes which are affected by the RotateBy90 modifier sl@0: LOCAL_D const SScanCodeBlock scanCodeBlock_rotate[]= sl@0: { sl@0: {'Q', 'Q'}, sl@0: {'W', 'W'}, sl@0: {'E', 'E'}, sl@0: {'A', 'A'}, sl@0: {'S', 'S'}, sl@0: {'D', 'D'}, sl@0: {'Z', 'Z'}, sl@0: {'X', 'X'}, sl@0: {'C', 'C'}, sl@0: }; sl@0: sl@0: //rotate this 3x3 block of keys 90 degrees clockwise sl@0: LOCAL_D const TUint16 convKeyCodes_rot90[]= sl@0: { sl@0: 'z', sl@0: 'a', sl@0: 'q', sl@0: 'x', sl@0: 's', sl@0: 'w', sl@0: 'c', sl@0: 'd', sl@0: 'e', sl@0: }; sl@0: sl@0: //rotate this 3x3 block of keys 180 degrees clockwise sl@0: LOCAL_D const TUint16 convKeyCodes_rot180[]= sl@0: { sl@0: 'c', sl@0: 'x', sl@0: 'z', sl@0: 'd', sl@0: 's', sl@0: 'a', sl@0: 'e', sl@0: 'w', sl@0: 'q', sl@0: }; sl@0: sl@0: //rotate this 3x3 block of keys 90 degrees clockwise sl@0: LOCAL_D const TUint16 convKeyCodes_rot270[]= sl@0: { sl@0: 'e', sl@0: 'd', sl@0: 'c', sl@0: 'w', sl@0: 's', sl@0: 'x', sl@0: 'q', sl@0: 'a', sl@0: 'z', sl@0: }; sl@0: sl@0: LOCAL_D const SConvSubTable sl@0: convSubTable_unmodifiable= sl@0: { sl@0: &convKeyCodes_unmodifiable[0], sl@0: { sl@0: ARRAY_LENGTH(scanCodeBlock_unmodifiable), sl@0: &scanCodeBlock_unmodifiable[0] sl@0: } sl@0: }, sl@0: convSubTable_base= sl@0: { sl@0: &convKeyCodes_base[0], sl@0: { sl@0: ARRAY_LENGTH(scanCodeBlock_base), sl@0: &scanCodeBlock_base[0] sl@0: } sl@0: }, sl@0: convSubTable_capsLock= sl@0: { sl@0: &convKeyCodes_capsLock[0], sl@0: { sl@0: ARRAY_LENGTH(scanCodeBlock_capsLock), sl@0: &scanCodeBlock_capsLock[0] sl@0: } sl@0: }, sl@0: convSubTable_shift= sl@0: { sl@0: &convKeyCodes_shift[0], sl@0: { sl@0: ARRAY_LENGTH(scanCodeBlock_shift), sl@0: &scanCodeBlock_shift[0] sl@0: } sl@0: }, sl@0: convSubTable_numLock= sl@0: { sl@0: &convKeyCodes_numLock[0], sl@0: { sl@0: ARRAY_LENGTH(scanCodeBlock_numLock), sl@0: &scanCodeBlock_numLock[0] sl@0: } sl@0: }, sl@0: convSubTable_ctrl= sl@0: { sl@0: &convKeyCodes_ctrl[0], sl@0: { sl@0: ARRAY_LENGTH(scanCodeBlock_ctrl), sl@0: &scanCodeBlock_ctrl[0] sl@0: } sl@0: }, sl@0: convSubTable_rot90= sl@0: { sl@0: &convKeyCodes_rot90[0], sl@0: { sl@0: ARRAY_LENGTH(scanCodeBlock_rotate), sl@0: &scanCodeBlock_rotate[0] sl@0: } sl@0: }, sl@0: convSubTable_rot180= sl@0: { sl@0: &convKeyCodes_rot180[0], sl@0: { sl@0: ARRAY_LENGTH(scanCodeBlock_rotate), sl@0: &scanCodeBlock_rotate[0] sl@0: } sl@0: }, sl@0: convSubTable_rot270= sl@0: { sl@0: &convKeyCodes_rot270[0], sl@0: { sl@0: ARRAY_LENGTH(scanCodeBlock_rotate), sl@0: &scanCodeBlock_rotate[0] sl@0: } sl@0: }; sl@0: sl@0: // Some modifiers, e.g. shift, may required more than one table (other than "base") sl@0: // to be searched; therefore arrays of tables are required sl@0: LOCAL_D const SConvSubTable sl@0: * const convSubTableArray_unmodifiable[]={&convSubTable_unmodifiable}, sl@0: * const convSubTableArray_base[]={&convSubTable_base}, sl@0: * const convSubTableArray_capsLock[]={&convSubTable_capsLock}, sl@0: * const convSubTableArray_shift[]={&convSubTable_capsLock, &convSubTable_shift}, sl@0: * const convSubTableArray_capsLockShift[]={&convSubTable_shift}, sl@0: * const convSubTableArray_numLock[]={&convSubTable_numLock}, sl@0: * const convSubTableArray_ctrl[]={&convSubTable_ctrl}, sl@0: * const convSubTableArray_rot90[]={&convSubTable_rot90}, sl@0: * const convSubTableArray_rot180[]={&convSubTable_rot180}, sl@0: * const convSubTableArray_rot270[]={&convSubTable_rot270}; sl@0: sl@0: // The order of these nodes is VITAL, as the scanCode/modifiers are sl@0: // searched for a match in this order sl@0: LOCAL_D const SConvTableNode convTableNodes[]= sl@0: { sl@0: { sl@0: { sl@0: 0, /* iMask */ sl@0: 0 /* iValue */ sl@0: }, /* maskedModifiers */ sl@0: ARRAY_LENGTH(convSubTableArray_unmodifiable), /* numSubTables */ sl@0: &convSubTableArray_unmodifiable[0] sl@0: }, /* pnodes[i] */ sl@0: { sl@0: { sl@0: EModifierCtrl, sl@0: EModifierCtrl sl@0: }, sl@0: ARRAY_LENGTH(convSubTableArray_ctrl), sl@0: &convSubTableArray_ctrl[0] sl@0: }, sl@0: { sl@0: { sl@0: EModifierNumLock, sl@0: EModifierNumLock sl@0: }, sl@0: ARRAY_LENGTH(convSubTableArray_numLock), sl@0: &convSubTableArray_numLock[0] sl@0: }, sl@0: { sl@0: { sl@0: EModifierCapsLock|EModifierShift, sl@0: EModifierCapsLock sl@0: }, sl@0: ARRAY_LENGTH(convSubTableArray_capsLock), sl@0: &convSubTableArray_capsLock[0] sl@0: }, sl@0: { sl@0: { sl@0: EModifierShift|EModifierCapsLock, sl@0: EModifierShift sl@0: }, sl@0: ARRAY_LENGTH(convSubTableArray_shift), sl@0: &convSubTableArray_shift[0] sl@0: }, sl@0: { sl@0: { sl@0: EModifierCapsLock|EModifierShift, sl@0: EModifierCapsLock|EModifierShift sl@0: }, sl@0: ARRAY_LENGTH(convSubTableArray_capsLockShift), sl@0: &convSubTableArray_capsLockShift[0] sl@0: }, sl@0: { sl@0: { sl@0: EModifierRotateBy90, sl@0: EModifierRotateBy90 sl@0: }, sl@0: ARRAY_LENGTH(convSubTableArray_rot90), sl@0: &convSubTableArray_rot90[0] sl@0: }, sl@0: { sl@0: { sl@0: EModifierRotateBy180, sl@0: EModifierRotateBy180 sl@0: }, sl@0: ARRAY_LENGTH(convSubTableArray_rot180), sl@0: &convSubTableArray_rot180[0] sl@0: }, sl@0: { sl@0: { sl@0: EModifierRotateBy270, sl@0: EModifierRotateBy270 sl@0: }, sl@0: ARRAY_LENGTH(convSubTableArray_rot270), sl@0: &convSubTableArray_rot270[0] sl@0: }, sl@0: { sl@0: { sl@0: 0, sl@0: 0 sl@0: }, sl@0: ARRAY_LENGTH(convSubTableArray_base), sl@0: &convSubTableArray_base[0] sl@0: } sl@0: }; sl@0: sl@0: // The top-level exported data structure of all the conversion tables sl@0: LOCAL_D const SConvTable ConvTable= sl@0: { sl@0: ARRAY_LENGTH(convTableNodes), sl@0: &convTableNodes[0] sl@0: }; sl@0: sl@0: // The list of scan-codes on the numeric keypad sl@0: LOCAL_D const SScanCodeBlock keypadScanCodeBlockArray[]= sl@0: { sl@0: {EStdKeyNumLock, EStdKeyNumLock}, sl@0: {EStdKeyNkpForwardSlash, EStdKeyNkpFullStop} sl@0: }; sl@0: sl@0: LOCAL_D const SScanCodeBlockList ConvTableKeypadScanCodes= sl@0: { sl@0: ARRAY_LENGTH(keypadScanCodeBlockArray), sl@0: &keypadScanCodeBlockArray[0] sl@0: }; sl@0: sl@0: // The list of non-autorepeating key-codes sl@0: LOCAL_D const TUint16 nonAutorepKeyCodeArray[]= sl@0: { sl@0: EKeyEscape, sl@0: EKeyPrintScreen, sl@0: EKeyPause, sl@0: EKeyInsert, sl@0: EKeyLeftShift, sl@0: EKeyRightShift, sl@0: EKeyLeftAlt, sl@0: EKeyRightAlt, sl@0: EKeyLeftCtrl, sl@0: EKeyRightCtrl, sl@0: EKeyLeftFunc, sl@0: EKeyRightFunc, sl@0: EKeyCapsLock, sl@0: EKeyNumLock, sl@0: EKeyScrollLock, sl@0: EKeyMenu, sl@0: EKeyDictaphonePlay, sl@0: EKeyDictaphoneStop, sl@0: EKeyDictaphoneRecord sl@0: }; sl@0: sl@0: LOCAL_D const SKeyCodeList ConvTableNonAutorepKeyCodes= sl@0: { sl@0: ARRAY_LENGTH(nonAutorepKeyCodeArray), sl@0: &nonAutorepKeyCodeArray[0] sl@0: }; sl@0: sl@0: EXPORT_C void KeyDataSettings(TRadix &aRadix,TCtrlDigitsTermination &aCtrlDigitsTermination,TInt &aDefaultCtrlDigitsMaxCount, sl@0: TInt &aMaximumCtrlDigitsMaxCount) sl@0: { sl@0: aRadix=EDecimal; sl@0: aCtrlDigitsTermination=ETerminationByCtrlUp; sl@0: aDefaultCtrlDigitsMaxCount=3; sl@0: aMaximumCtrlDigitsMaxCount=10; sl@0: } sl@0: sl@0: EXPORT_C void KeyDataFuncTable(SFuncTables &aFuncTables) sl@0: { sl@0: aFuncTables=FuncTables; sl@0: } sl@0: sl@0: EXPORT_C void KeyDataConvTable(SConvTable &aConvTable, TUint &aConvTableFirstScanCode,TUint &aConvTableLastScanCode, sl@0: SScanCodeBlockList &aKeypadScanCode,SKeyCodeList &aNonAutorepKeyCodes) sl@0: { sl@0: aConvTable=ConvTable; sl@0: aConvTableFirstScanCode=scanCodeBlock_base[0].firstScanCode; sl@0: aConvTableLastScanCode=scanCodeBlock_base[ARRAY_LENGTH(scanCodeBlock_base)-1].lastScanCode; sl@0: aKeypadScanCode=ConvTableKeypadScanCodes; sl@0: aNonAutorepKeyCodes=ConvTableNonAutorepKeyCodes; sl@0: }