author | sl@SLION-WIN7.fritz.box |
Fri, 15 Jun 2012 03:10:57 +0200 | |
changeset 0 | bde4ae8d615e |
permissions | -rw-r--r-- |
1 // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
7 //
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
10 //
11 // Contributors:
12 //
13 // Description:
14 // wins\specific\keymap.cpp
15 // The lookup tables giving the function to be carried out
16 // and the new state of the keyboard
17 //
18 //
21 #include <k32keys.h>
23 // the "array" parameter must be a true array and not a pointer
24 #define ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0]))
26 #define TABLE_ENTRY_ANOTHER_CTRL_DIGIT \
27 { \
28 { \
29 EModifierKeyUp|EModifierFunc, \
30 0 \
31 }, \
32 { \
33 EKeyNull, \
34 EAnyDigitGivenRadix \
35 }, \
36 { \
37 EStateCtrlDigits, \
38 EAddOnCtrlDigit, \
39 0 \
40 } \
41 }
43 // This table is searched for a match if a match has not been
44 // found in the current state's table
46 LOCAL_D const SFuncTableEntry defaultTable[]=
47 {
48 { // prevent key up events generating keycodes
49 {
50 EModifierKeyUp,
51 EModifierKeyUp
52 },
53 {
54 EKeyNull,
55 EAnyKey
56 },
57 {
58 EStateUnchanged,
59 EDoNothing,
60 0
61 }
62 },
63 { // prevent any modifer key from changing state
64 {
65 0,
66 0
67 },
68 {
69 EKeyNull,
70 EAnyModifierKey
71 },
72 {
73 EStateUnchanged,
74 EDoNothing,
75 0
76 }
77 },
78 { // filter out any unprocessed codes???
79 {
80 0,
81 0
82 },
83 {
84 EKeyNull,
85 EAnyKey
86 },
87 {
88 EStateNormal,
89 EDoNothing,
90 0
91 }
92 }
93 };
95 // The table indicating which keys change which modifiers;
96 // the state field in this table is ignored
97 LOCAL_D const SFuncTableEntry modifierTable[]=
98 {
99 {
100 {
101 EModifierKeyUp,
102 0
103 },
104 {
105 EKeyCapsLock,
106 EMatchKey
107 },
108 {
109 EStateUnchanged,
110 EToggleModifier,
111 EModifierCapsLock
112 }
113 },
114 {
115 {
116 EModifierKeyUp,
117 0
118 },
119 {
120 EKeyNumLock,
121 EMatchKey
122 },
123 {
124 EStateUnchanged,
125 EToggleModifier,
126 EModifierNumLock
127 }
128 },
129 {
130 {
131 EModifierKeyUp,
132 0
133 },
134 {
135 EKeyScrollLock,
136 EMatchKey
137 },
138 {
139 EStateUnchanged,
140 EToggleModifier,
141 EModifierScrollLock
142 }
143 },
144 {
145 {
146 EModifierKeyUp,
147 0
148 },
149 {
150 EKeyLeftAlt,
151 EMatchKey
152 },
153 {
154 EStateUnchanged,
155 ETurnOnModifier,
156 EModifierAlt|EModifierLeftAlt
157 }
158 },
159 {
160 {
161 EModifierKeyUp,
162 EModifierKeyUp
163 },
164 {
165 EKeyLeftAlt,
166 EMatchKey
167 },
168 {
169 EStateUnchanged,
170 ETurnOffModifier,
171 EModifierLeftAlt
172 }
173 },
174 {
175 {
176 EModifierKeyUp,
177 0
178 },
179 {
180 EKeyLeftFunc,
181 EMatchKey
182 },
183 {
184 EStateUnchanged,
185 ETurnOnModifier,
186 EModifierFunc|EModifierLeftFunc
187 }
188 },
189 {
190 {
191 EModifierKeyUp,
192 EModifierKeyUp
193 },
194 {
195 EKeyLeftFunc,
196 EMatchKey
197 },
198 {
199 EStateUnchanged,
200 ETurnOffModifier,
201 EModifierLeftFunc
202 }
203 },
204 {
205 {
206 EModifierKeyUp,
207 0
208 },
209 {
210 EKeyLeftShift,
211 EMatchKey
212 },
213 {
214 EStateUnchanged,
215 ETurnOnModifier,
216 EModifierShift|EModifierLeftShift
217 }
218 },
219 {
220 {
221 EModifierKeyUp,
222 EModifierKeyUp
223 },
224 {
225 EKeyLeftShift,
226 EMatchKey
227 },
228 {
229 EStateUnchanged,
230 ETurnOffModifier,
231 EModifierLeftShift
232 }
233 },
234 {
235 {
236 EModifierKeyUp,
237 0
238 },
239 {
240 EKeyLeftCtrl,
241 EMatchKey
242 },
243 {
244 EStateUnchanged,
245 ETurnOnModifier,
246 EModifierCtrl|EModifierLeftCtrl
247 }
248 },
249 {
250 {
251 EModifierKeyUp,
252 EModifierKeyUp
253 },
254 {
255 EKeyLeftCtrl,
256 EMatchKey
257 },
258 {
259 EStateUnchanged,
260 ETurnOffModifier,
261 EModifierLeftCtrl
262 }
263 },
264 {
265 {
266 EModifierKeyUp,
267 0
268 },
269 {
270 EKeyRightAlt,
271 EMatchKey
272 },
273 {
274 EStateUnchanged,
275 ETurnOnModifier,
276 EModifierAlt|EModifierRightAlt
277 }
278 },
279 {
280 {
281 EModifierKeyUp,
282 EModifierKeyUp
283 },
284 {
285 EKeyRightAlt,
286 EMatchKey
287 },
288 {
289 EStateUnchanged,
290 ETurnOffModifier,
291 EModifierRightAlt
292 }
293 },
294 {
295 {
296 EModifierKeyUp,
297 0
298 },
299 {
300 EKeyRightFunc,
301 EMatchKey
302 },
303 {
304 EStateUnchanged,
305 ETurnOnModifier,
306 EModifierFunc|EModifierRightFunc
307 }
308 },
309 {
310 {
311 EModifierKeyUp,
312 EModifierKeyUp
313 },
314 {
315 EKeyRightFunc,
316 EMatchKey
317 },
318 {
319 EStateUnchanged,
320 ETurnOffModifier,
321 EModifierRightFunc
322 }
323 },
324 {
325 {
326 EModifierKeyUp,
327 0
328 },
329 {
330 EKeyRightShift,
331 EMatchKey
332 },
333 {
334 EStateUnchanged,
335 ETurnOnModifier,
336 EModifierShift|EModifierRightShift
337 }
338 },
339 {
340 {
341 EModifierKeyUp,
342 EModifierKeyUp
343 },
344 {
345 EKeyRightShift,
346 EMatchKey
347 },
348 {
349 EStateUnchanged,
350 ETurnOffModifier,
351 EModifierRightShift
352 }
353 },
354 {
355 {
356 EModifierKeyUp,
357 0
358 },
359 {
360 EKeyRightCtrl,
361 EMatchKey
362 },
363 {
364 EStateUnchanged,
365 ETurnOnModifier,
366 EModifierCtrl|EModifierRightCtrl
367 }
368 },
369 {
370 {
371 EModifierKeyUp,
372 EModifierKeyUp
373 },
374 {
375 EKeyRightCtrl,
376 EMatchKey
377 },
378 {
379 EStateUnchanged,
380 ETurnOffModifier,
381 EModifierRightCtrl
382 }
383 }
384 };
386 // table0 to table12 are the tables corresponding to states
387 // 0 to 12 respectively
389 LOCAL_D const SFuncTableEntry table0[]=
390 {
391 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
392 };
394 LOCAL_D const SFuncTableEntry table1[]=
395 {
396 {
397 {
398 EModifierFunc|EModifierKeyUp,
399 0
400 },
401 {
402 'e',
403 EMatchKeyCaseInsens
404 },
405 {
406 EStateNormal,
407 EPassSpecialKeyThru,
408 ELatin1LcAe
409 }
410 },
411 {
412 {
413 EModifierFunc|EModifierKeyUp,
414 0
415 },
416 {
417 'c',
418 EMatchKeyCaseInsens
419 },
420 {
421 EStateNormal,
422 EPassSpecialKeyThru,
423 ELatin1LcCcedilla
424 }
425 },
426 {
427 {
428 EModifierFunc|EModifierKeyUp,
429 0
430 },
431 {
432 's',
433 EMatchKeyCaseInsens
434 },
435 {
436 EStateNormal,
437 EPassSpecialKeyThru,
438 ELatin1EsTset
439 }
440 },
441 {
442 {
443 EModifierFunc|EModifierKeyUp,
444 0
445 },
446 {
447 'o',
448 EMatchKeyCaseInsens
449 },
450 {
451 EStateNormal,
452 EPassSpecialKeyThru,
453 ELatin1LcOslash
454 }
455 },
456 {
457 {
458 EModifierFunc|EModifierKeyUp,
459 0
460 },
461 {
462 'd',
463 EMatchKeyCaseInsens
464 },
465 {
466 EStateNormal,
467 EPassSpecialKeyThru,
468 ELatin1LcThorn
469 }
470 },
471 {
472 {
473 EModifierFunc|EModifierKeyUp,
474 0
475 },
476 {
477 't',
478 EMatchKeyCaseInsens
479 },
480 {
481 EStateNormal,
482 EPassSpecialKeyThru,
483 ELatin1LcSoftTh
484 }
485 },
486 {
487 {
488 EModifierFunc|EModifierKeyUp,
489 0
490 },
491 {
492 'l',
493 EMatchKeyCaseInsens
494 },
495 {
496 EStateNormal,
497 EPassSpecialKeyThru,
498 ELatin1LeftChevron
499 }
500 },
501 {
502 {
503 EModifierFunc|EModifierKeyUp,
504 0
505 },
506 {
507 'r',
508 EMatchKeyCaseInsens
509 },
510 {
511 EStateNormal,
512 EPassSpecialKeyThru,
513 ELatin1RightChevron
514 }
515 },
516 {
517 {
518 EModifierFunc|EModifierKeyUp,
519 0
520 },
521 {
522 'x',
523 EMatchKeyCaseInsens
524 },
525 {
526 EStateNormal,
527 EPassSpecialKeyThru,
528 ELatin1InvExclam
529 }
530 },
531 {
532 {
533 EModifierFunc|EModifierKeyUp,
534 0
535 },
536 {
537 'q',
538 EMatchKeyCaseInsens
539 },
540 {
541 EStateNormal,
542 EPassSpecialKeyThru,
543 ELatin1InvQuest
544 }
545 },
546 {
547 {
548 EModifierFunc|EModifierKeyUp,
549 0
550 },
551 {
552 'a',
553 EMatchKeyCaseInsens
554 },
555 {
556 EStateNormal,
557 EPassSpecialKeyThru,
558 ELatin1LcAo
559 }
560 },
561 {
562 {
563 EModifierFunc|EModifierKeyUp,
564 0
565 },
566 {
567 'p',
568 EMatchKeyCaseInsens
569 },
570 {
571 EStateNormal,
572 EPassSpecialKeyThru,
573 ELatin1Pound
574 }
575 },
576 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
577 };
579 LOCAL_D const SFuncTableEntry table2[]=
580 {
581 {
582 {
583 EModifierFunc|EModifierKeyUp,
584 0
585 },
586 {
587 'a',
588 EMatchKeyCaseInsens
589 },
590 {
591 EStateNormal,
592 EPassSpecialKeyThru,
593 ELatin1LcAumlaut
594 }
595 },
596 {
597 {
598 EModifierFunc|EModifierKeyUp,
599 0
600 },
601 {
602 'e',
603 EMatchKeyCaseInsens
604 },
605 {
606 EStateNormal,
607 EPassSpecialKeyThru,
608 ELatin1LcEumlaut
609 }
610 },
611 {
612 {
613 EModifierFunc|EModifierKeyUp,
614 0
615 },
616 {
617 'i',
618 EMatchKeyCaseInsens
619 },
620 {
621 EStateNormal,
622 EPassSpecialKeyThru,
623 ELatin1LcIumlaut
624 }
625 },
626 {
627 {
628 EModifierFunc|EModifierKeyUp,
629 0
630 },
631 {
632 'o',
633 EMatchKeyCaseInsens
634 },
635 {
636 EStateNormal,
637 EPassSpecialKeyThru,
638 ELatin1LcOumlaut
639 }
640 },
641 {
642 {
643 EModifierFunc|EModifierKeyUp,
644 0
645 },
646 {
647 'u',
648 EMatchKeyCaseInsens
649 },
650 {
651 EStateNormal,
652 EPassSpecialKeyThru,
653 ELatin1LcUumlaut
654 }
655 },
656 {
657 {
658 EModifierFunc|EModifierKeyUp,
659 0
660 },
661 {
662 'y',
663 EMatchKeyCaseInsens
664 },
665 {
666 EStateNormal,
667 EPassSpecialKeyThru,
668 ELatin1LcYumlaut
669 }
670 },
671 {
672 {
673 EModifierFunc|EModifierKeyUp,
674 0
675 },
676 {
677 ' ',
678 EMatchKey
679 },
680 {
681 EStateNormal,
682 EPassSpecialKeyThru,
683 ELatin1SpaceUmlaut
684 }
685 },
686 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
687 };
689 LOCAL_D const SFuncTableEntry table3[]=
690 {
691 {
692 {
693 EModifierFunc|EModifierKeyUp,
694 0
695 },
696 {
697 'a',
698 EMatchKeyCaseInsens
699 },
700 {
701 EStateNormal,
702 EPassSpecialKeyThru,
703 ELatin1LcAgrave
704 }
705 },
706 {
707 {
708 EModifierFunc|EModifierKeyUp,
709 0
710 },
711 {
712 'e',
713 EMatchKeyCaseInsens
714 },
715 {
716 EStateNormal,
717 EPassSpecialKeyThru,
718 ELatin1LcEgrave
719 }
720 },
721 {
722 {
723 EModifierFunc|EModifierKeyUp,
724 0
725 },
726 {
727 'i',
728 EMatchKeyCaseInsens
729 },
730 {
731 EStateNormal,
732 EPassSpecialKeyThru,
733 ELatin1LcIgrave
734 }
735 },
736 {
737 {
738 EModifierFunc|EModifierKeyUp,
739 0
740 },
741 {
742 'o',
743 EMatchKeyCaseInsens
744 },
745 {
746 EStateNormal,
747 EPassSpecialKeyThru,
748 ELatin1LcOgrave
749 }
750 },
751 {
752 {
753 EModifierFunc|EModifierKeyUp,
754 0
755 },
756 {
757 'u',
758 EMatchKeyCaseInsens
759 },
760 {
761 EStateNormal,
762 EPassSpecialKeyThru,
763 ELatin1LcUgrave
764 }
765 },
766 {
767 {
768 EModifierFunc|EModifierKeyUp,
769 0
770 },
771 {
772 ' ',
773 EMatchKey
774 },
775 {
776 EStateNormal,
777 EPassSpecialKeyThru,
778 ELatin1SpaceGrave
779 }
780 },
781 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
782 };
784 LOCAL_D const SFuncTableEntry table4[]=
785 {
786 {
787 {
788 EModifierFunc|EModifierKeyUp,
789 0
790 },
791 {
792 'a',
793 EMatchKeyCaseInsens
794 },
795 {
796 EStateNormal,
797 EPassSpecialKeyThru,
798 ELatin1LcAacute
799 }
800 },
801 {
802 {
803 EModifierFunc|EModifierKeyUp,
804 0
805 },
806 {
807 'e',
808 EMatchKeyCaseInsens
809 },
810 {
811 EStateNormal,
812 EPassSpecialKeyThru,
813 ELatin1LcEacute
814 }
815 },
816 {
817 {
818 EModifierFunc|EModifierKeyUp,
819 0
820 },
821 {
822 'i',
823 EMatchKeyCaseInsens
824 },
825 {
826 EStateNormal,
827 EPassSpecialKeyThru,
828 ELatin1LcIacute
829 }
830 },
831 {
832 {
833 EModifierFunc|EModifierKeyUp,
834 0
835 },
836 {
837 'o',
838 EMatchKeyCaseInsens
839 },
840 {
841 EStateNormal,
842 EPassSpecialKeyThru,
843 ELatin1LcOacute
844 }
845 },
846 {
847 {
848 EModifierFunc|EModifierKeyUp,
849 0
850 },
851 {
852 'u',
853 EMatchKeyCaseInsens
854 },
855 {
856 EStateNormal,
857 EPassSpecialKeyThru,
858 ELatin1LcUacute
859 }
860 },
861 {
862 {
863 EModifierFunc|EModifierKeyUp,
864 0
865 },
866 {
867 'y',
868 EMatchKeyCaseInsens
869 },
870 {
871 EStateNormal,
872 EPassSpecialKeyThru,
873 ELatin1LcYacute
874 }
875 },
876 {
877 {
878 EModifierFunc|EModifierKeyUp,
879 0
880 },
881 {
882 ' ',
883 EMatchKey
884 },
885 {
886 EStateNormal,
887 EPassSpecialKeyThru,
888 ELatin1LcSpaceAcute
889 }
890 },
891 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
892 };
894 LOCAL_D const SFuncTableEntry table5[]=
895 {
896 {
897 {
898 EModifierFunc|EModifierKeyUp,
899 0
900 },
901 {
902 'a',
903 EMatchKeyCaseInsens
904 },
905 {
906 EStateNormal,
907 EPassSpecialKeyThru,
908 ELatin1LcAtilde
909 }
910 },
911 {
912 {
913 EModifierFunc|EModifierKeyUp,
914 0
915 },
916 {
917 'n',
918 EMatchKeyCaseInsens
919 },
920 {
921 EStateNormal,
922 EPassSpecialKeyThru,
923 ELatin1LcNtilde
924 }
925 },
926 {
927 {
928 EModifierFunc|EModifierKeyUp,
929 0
930 },
931 {
932 'o',
933 EMatchKeyCaseInsens
934 },
935 {
936 EStateNormal,
937 EPassSpecialKeyThru,
938 ELatin1LcOtilde
939 }
940 },
941 {
942 {
943 EModifierFunc|EModifierKeyUp,
944 0
945 },
946 {
947 ' ',
948 EMatchKey
949 },
950 {
951 EStateNormal,
952 EPassSpecialKeyThru,
953 ELatin1LcSpaceTilde
954 }
955 },
956 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
957 };
959 LOCAL_D const SFuncTableEntry table6[]=
960 {
961 {
962 {
963 EModifierFunc|EModifierKeyUp,
964 0
965 },
966 {
967 'a',
968 EMatchKeyCaseInsens
969 },
970 {
971 EStateNormal,
972 EPassSpecialKeyThru,
973 ELatin1LcAcirc
974 }
975 },
976 {
977 {
978 EModifierFunc|EModifierKeyUp,
979 0
980 },
981 {
982 'e',
983 EMatchKeyCaseInsens
984 },
985 {
986 EStateNormal,
987 EPassSpecialKeyThru,
988 ELatin1LcEcirc
989 }
990 },
991 {
992 {
993 EModifierFunc|EModifierKeyUp,
994 0
995 },
996 {
997 'i',
998 EMatchKeyCaseInsens
999 },
1000 {
1001 EStateNormal,
1002 EPassSpecialKeyThru,
1003 ELatin1LcIcirc
1004 }
1005 },
1006 {
1007 {
1008 EModifierFunc|EModifierKeyUp,
1009 0
1010 },
1011 {
1012 'o',
1013 EMatchKeyCaseInsens
1014 },
1015 {
1016 EStateNormal,
1017 EPassSpecialKeyThru,
1018 ELatin1LcOcirc
1019 }
1020 },
1021 {
1022 {
1023 EModifierFunc|EModifierKeyUp,
1024 0
1025 },
1026 {
1027 'u',
1028 EMatchKeyCaseInsens
1029 },
1030 {
1031 EStateNormal,
1032 EPassSpecialKeyThru,
1033 ELatin1LcUcirc
1034 }
1035 },
1036 {
1037 {
1038 EModifierFunc|EModifierKeyUp,
1039 0
1040 },
1041 {
1042 ' ',
1043 EMatchKey
1044 },
1045 {
1046 EStateNormal,
1047 EPassSpecialKeyThru,
1048 ELatin1LcSpaceCirc
1049 }
1050 },
1051 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
1052 };
1054 LOCAL_D const SFuncTableEntry table7[]=
1055 {
1056 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
1057 };
1059 LOCAL_D const SFuncTableEntry table8[]=
1060 {
1061 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
1062 };
1064 LOCAL_D const SFuncTableEntry table9[]=
1065 {
1066 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
1067 };
1069 LOCAL_D const SFuncTableEntry table10[]=
1070 {
1071 { // check for ctrl-number presses
1072 {
1073 EModifierCtrl|EModifierFunc|EModifierKeyUp,
1074 EModifierCtrl
1075 },
1076 {
1077 EKeyNull,
1078 EAnyDecimalDigit
1079 },
1080 {
1081 EStateDerivedFromDigitEntered,
1082 EAddOnCtrlDigit,
1083 0
1084 }
1085 },
1086 { // filter out up key strokes
1087 {
1088 EModifierKeyUp,
1089 EModifierKeyUp
1090 },
1091 {
1092 EKeyNull,
1093 EAnyKey
1094 },
1095 {
1096 EStateUnchanged,
1097 EDoNothing,
1098 0
1099 }
1100 },
1101 { // pass thru any non-processed keys
1102 {
1103 0,
1104 0
1105 },
1106 {
1107 EKeyNull,
1108 EAnyKey
1109 },
1110 {
1111 EStateUnchanged,
1112 EPassKeyThru,
1113 0
1114 }
1115 }
1116 };
1118 //LOCAL_D const SFuncTableEntry table11[]=
1119 // {
1120 // TABLE_ENTRY_ANOTHER_CTRL_DIGIT
1121 // };
1123 LOCAL_D const SFuncTableEntry table12[]=
1124 {
1125 {
1126 {
1127 EModifierKeyUp,
1128 EModifierKeyUp
1129 },
1130 {
1131 EKeyLeftCtrl,
1132 EMatchLeftOrRight
1133 },
1134 {
1135 EStateNormal,
1136 EPassCtrlDigitsThru,
1137 0
1138 }
1139 },
1140 TABLE_ENTRY_ANOTHER_CTRL_DIGIT
1141 };
1143 LOCAL_D const SFuncTable genFuncTables[]=
1144 {
1145 {
1146 ARRAY_LENGTH(table0),
1147 &table0[0]
1148 },
1149 {
1150 ARRAY_LENGTH(table1),
1151 &table1[0]
1152 },
1153 {
1154 ARRAY_LENGTH(table2),
1155 &table2[0]
1156 },
1157 {
1158 ARRAY_LENGTH(table3),
1159 &table3[0]
1160 },
1161 {
1162 ARRAY_LENGTH(table4),
1163 &table4[0]
1164 },
1165 {
1166 ARRAY_LENGTH(table5),
1167 &table5[0]
1168 },
1169 {
1170 ARRAY_LENGTH(table6),
1171 &table6[0]
1172 },
1173 {
1174 ARRAY_LENGTH(table7),
1175 &table7[0]
1176 },
1177 {
1178 ARRAY_LENGTH(table8),
1179 &table8[0]
1180 },
1181 {
1182 ARRAY_LENGTH(table9),
1183 &table9[0]
1184 },
1185 {
1186 ARRAY_LENGTH(table10),
1187 &table10[0]
1188 },
1189 {
1190 0,
1191 NULL
1192 },
1193 {
1194 ARRAY_LENGTH(table12),
1195 &table12[0]
1196 }
1197 };
1199 LOCAL_D const SFuncTables FuncTables=
1200 {
1201 {
1202 ARRAY_LENGTH(defaultTable),
1203 &defaultTable[0]
1204 },
1205 {
1206 ARRAY_LENGTH(modifierTable),
1207 &modifierTable[0]
1208 },
1209 ARRAY_LENGTH(genFuncTables),
1210 &genFuncTables[0]
1211 };
1213 LOCAL_D const SScanCodeBlock scanCodeBlock_unmodifiable[]=
1214 {
1215 {EStdKeyLeftShift, EStdKeyScrollLock}
1216 };
1218 LOCAL_D const TUint16 convKeyCodes_unmodifiable[]=
1219 {
1220 EKeyLeftShift,
1221 EKeyRightShift,
1222 EKeyLeftAlt,
1223 EKeyRightAlt,
1224 EKeyLeftCtrl,
1225 EKeyRightCtrl,
1226 EKeyLeftFunc,
1227 EKeyRightFunc,
1228 EKeyCapsLock,
1229 EKeyNumLock,
1230 EKeyScrollLock
1231 };
1233 // base: this table traps all of the keyboard's scanCodes except those in convKeyCodes_unmodifiable
1234 LOCAL_D const SScanCodeBlock scanCodeBlock_base[]=
1235 {
1236 {EStdKeyNull, EStdKeyDownArrow},
1237 {'0', '9'},
1238 {'A', 'Z'},
1239 {EStdKeyF1, EStdKeyDial},
1240 {EStdKeyIncVolume, EStdKeyDecVolume},
1241 {EStdKeyDevice0,EStdKeyDeviceF},
1242 {EStdKeyApplication0, EStdKeyApplicationF},
1243 {EStdKeyYes, EStdKeyDecBrightness},
1244 {EStdKeyDevice10,EStdKeyDevice1F},
1245 {EStdKeyApplication10, EStdKeyApplication1F},
1246 {EStdKeyDevice20,EStdKeyDevice27},
1247 {EStdKeyApplication20, EStdKeyApplication27}
1248 };
1250 //
1251 // This table is internatioalizable
1252 //
1253 LOCAL_D const TUint16 convKeyCodes_base[]=
1254 {
1255 EKeyNull,
1256 EKeyBackspace,
1257 EKeyTab,
1258 EKeyEnter,
1259 EKeyEscape,
1260 ' ',
1261 EKeyPrintScreen,
1262 EKeyPause,
1263 EKeyHome,
1264 EKeyEnd,
1265 EKeyPageUp,
1266 EKeyPageDown,
1267 EKeyInsert,
1268 EKeyDelete,
1269 EKeyLeftArrow,
1270 EKeyRightArrow,
1271 EKeyUpArrow,
1272 EKeyDownArrow,
1273 '0',
1274 '1',
1275 '2',
1276 '3',
1277 '4',
1278 '5',
1279 '6',
1280 '7',
1281 '8',
1282 '9',
1283 'a',
1284 'b',
1285 'c',
1286 'd',
1287 'e',
1288 'f',
1289 'g',
1290 'h',
1291 'i',
1292 'j',
1293 'k',
1294 'l',
1295 'm',
1296 'n',
1297 'o',
1298 'p',
1299 'q',
1300 'r',
1301 's',
1302 't',
1303 'u',
1304 'v',
1305 'w',
1306 'x',
1307 'y',
1308 'z',
1309 EKeyF1,
1310 EKeyF2,
1311 EKeyF3,
1312 EKeyF4,
1313 EKeyF5, // Media change emulation
1314 EKeyF6,
1315 EKeyF7,
1316 EKeyF8, // Case close
1317 EKeyF9, // KeyOff
1318 EKeyF10, // SwitchOff
1319 EKeyF11, // Case open
1320 EKeyF12,
1321 EKeyF13,
1322 EKeyF14,
1323 EKeyF15,
1324 EKeyF16,
1325 EKeyF17,
1326 EKeyF18,
1327 EKeyF19,
1328 EKeyF20,
1329 EKeyF21,
1330 EKeyF22,
1331 EKeyF23,
1332 EKeyF24,
1333 '`',
1334 ',',
1335 '.',
1336 '/',
1337 '\\',
1338 ';',
1339 '\'',
1340 '#',
1341 '[',
1342 ']',
1343 '-',
1344 '=',
1345 '/',
1346 '*',
1347 '-',
1348 '+',
1349 EKeyEnter,
1350 EKeyEnd,
1351 EKeyDownArrow,
1352 EKeyPageDown,
1353 EKeyLeftArrow,
1354 EKeyNull, // numeric keypad '5'
1355 EKeyRightArrow,
1356 EKeyHome,
1357 EKeyUpArrow,
1358 EKeyPageUp,
1359 EKeyInsert,
1360 EKeyDelete,
1361 EKeyMenu,
1362 EKeyBacklightOn,
1363 EKeyBacklightOff,
1364 EKeyBacklightToggle,
1365 EKeyIncContrast,
1366 EKeyDecContrast,
1367 EKeySliderDown,
1368 EKeySliderUp,
1369 EKeyDictaphonePlay,
1370 EKeyDictaphoneStop,
1371 EKeyDictaphoneRecord,
1372 EKeyHelp,
1373 EKeyOff,
1374 EKeyDial,
1375 EKeyIncVolume,
1376 EKeyDecVolume,
1377 EKeyDevice0,
1378 EKeyDevice1,
1379 EKeyDevice2,
1380 EKeyDevice3,
1381 EKeyDevice4,
1382 EKeyDevice5,
1383 EKeyDevice6,
1384 EKeyDevice7,
1385 EKeyDevice8,
1386 EKeyDevice9,
1387 EKeyDeviceA,
1388 EKeyDeviceB,
1389 EKeyDeviceC,
1390 EKeyDeviceD,
1391 EKeyDeviceE,
1392 EKeyDeviceF,
1393 EKeyApplication0,
1394 EKeyApplication1,
1395 EKeyApplication2,
1396 EKeyApplication3,
1397 EKeyApplication4,
1398 EKeyApplication5,
1399 EKeyApplication6,
1400 EKeyApplication7,
1401 EKeyApplication8,
1402 EKeyApplication9,
1403 EKeyApplicationA,
1404 EKeyApplicationB,
1405 EKeyApplicationC,
1406 EKeyApplicationD,
1407 EKeyApplicationE,
1408 EKeyApplicationF,
1409 EKeyYes,
1410 EKeyNo,
1411 EKeyIncBrightness,
1412 EKeyDecBrightness,
1413 EKeyDevice10,
1414 EKeyDevice11,
1415 EKeyDevice12,
1416 EKeyDevice13,
1417 EKeyDevice14,
1418 EKeyDevice15,
1419 EKeyDevice16,
1420 EKeyDevice17,
1421 EKeyDevice18,
1422 EKeyDevice19,
1423 EKeyDevice1A,
1424 EKeyDevice1B,
1425 EKeyDevice1C,
1426 EKeyDevice1D,
1427 EKeyDevice1E,
1428 EKeyDevice1F,
1429 EKeyApplication10,
1430 EKeyApplication11,
1431 EKeyApplication12,
1432 EKeyApplication13,
1433 EKeyApplication14,
1434 EKeyApplication15,
1435 EKeyApplication16,
1436 EKeyApplication17,
1437 EKeyApplication18,
1438 EKeyApplication19,
1439 EKeyApplication1A,
1440 EKeyApplication1B,
1441 EKeyApplication1C,
1442 EKeyApplication1D,
1443 EKeyApplication1E,
1444 EKeyApplication1F,
1445 EKeyDevice20,
1446 EKeyDevice21,
1447 EKeyDevice22,
1448 EKeyDevice23,
1449 EKeyDevice24,
1450 EKeyDevice25,
1451 EKeyDevice26,
1452 EKeyDevice27,
1453 EKeyApplication20,
1454 EKeyApplication21,
1455 EKeyApplication22,
1456 EKeyApplication23,
1457 EKeyApplication24,
1458 EKeyApplication25,
1459 EKeyApplication26,
1460 EKeyApplication27
1461 };
1463 // caps-lock: this table traps those scanCodes which are affected by caps-lock
1464 LOCAL_D const SScanCodeBlock scanCodeBlock_capsLock[]=
1465 {
1466 {'A', 'Z'}
1467 };
1469 LOCAL_D const TUint16 convKeyCodes_capsLock[]=
1470 {
1471 'A',
1472 'B',
1473 'C',
1474 'D',
1475 'E',
1476 'F',
1477 'G',
1478 'H',
1479 'I',
1480 'J',
1481 'K',
1482 'L',
1483 'M',
1484 'N',
1485 'O',
1486 'P',
1487 'Q',
1488 'R',
1489 'S',
1490 'T',
1491 'U',
1492 'V',
1493 'W',
1494 'X',
1495 'Y',
1496 'Z'
1497 };
1499 // shift: this table traps those scanCodes which are affected
1500 // by shift EXCEPT for those scanCodes affected by caps-lock
1501 LOCAL_D const SScanCodeBlock scanCodeBlock_shift[]=
1502 {
1503 {'0', '9'},
1504 {EStdKeyXXX, EStdKeyEquals},
1505 };
1507 //
1508 // This table is internatioalizable
1509 //
1510 LOCAL_D const TUint16 convKeyCodes_shift[]=
1511 {
1512 ')',
1513 '!',
1514 '"',
1515 ELatin1Pound,
1516 '$',
1517 '%',
1518 '^',
1519 '&',
1520 '*',
1521 '(',
1522 ELatin1LogicNot,
1523 '<',
1524 '>',
1525 '?',
1526 '|',
1527 ':',
1528 '@',
1529 '~',
1530 '{',
1531 '}',
1532 '_',
1533 '+'
1534 };
1536 // numlock: this table traps those scanCodes which are affected by numlock
1537 LOCAL_D const SScanCodeBlock scanCodeBlock_numLock[]=
1538 {
1539 {EStdKeyNkpForwardSlash, EStdKeyNkpFullStop}
1540 };
1542 LOCAL_D const TUint16 convKeyCodes_numLock[]=
1543 {
1544 '/',
1545 '*',
1546 '-',
1547 '+',
1548 EKeyEnter,
1549 '1',
1550 '2',
1551 '3',
1552 '4',
1553 '5',
1554 '6',
1555 '7',
1556 '8',
1557 '9',
1558 '0',
1559 '.'
1560 };
1562 // ctrl: this table traps those scanCodes which are affected by ctrl
1563 LOCAL_D const SScanCodeBlock scanCodeBlock_ctrl[]=
1564 {
1565 // The space key gets handled else where, otherwise it gets
1566 // thrown away as a NULL key
1567 // {EStdKeySpace, EStdKeySpace},
1569 {'A', 'Z'}
1570 };
1572 LOCAL_D const TUint16 convKeyCodes_ctrl[]=
1573 {
1574 // 0,
1575 1,
1576 2,
1577 3,
1578 4,
1579 5,
1580 6,
1581 7,
1582 8,
1583 9,
1584 10,
1585 11,
1586 12,
1587 13,
1588 14,
1589 15,
1590 16,
1591 17,
1592 18,
1593 19,
1594 20,
1595 21,
1596 22,
1597 23,
1598 24,
1599 25,
1600 26
1601 };
1603 // Rotate by 90: this table traps those scancodes which are affected by the RotateBy90 modifier
1604 LOCAL_D const SScanCodeBlock scanCodeBlock_rotate[]=
1605 {
1606 {'Q', 'Q'},
1607 {'W', 'W'},
1608 {'E', 'E'},
1609 {'A', 'A'},
1610 {'S', 'S'},
1611 {'D', 'D'},
1612 {'Z', 'Z'},
1613 {'X', 'X'},
1614 {'C', 'C'},
1615 };
1617 //rotate this 3x3 block of keys 90 degrees clockwise
1618 LOCAL_D const TUint16 convKeyCodes_rot90[]=
1619 {
1620 'z',
1621 'a',
1622 'q',
1623 'x',
1624 's',
1625 'w',
1626 'c',
1627 'd',
1628 'e',
1629 };
1631 //rotate this 3x3 block of keys 180 degrees clockwise
1632 LOCAL_D const TUint16 convKeyCodes_rot180[]=
1633 {
1634 'c',
1635 'x',
1636 'z',
1637 'd',
1638 's',
1639 'a',
1640 'e',
1641 'w',
1642 'q',
1643 };
1645 //rotate this 3x3 block of keys 90 degrees clockwise
1646 LOCAL_D const TUint16 convKeyCodes_rot270[]=
1647 {
1648 'e',
1649 'd',
1650 'c',
1651 'w',
1652 's',
1653 'x',
1654 'q',
1655 'a',
1656 'z',
1657 };
1659 LOCAL_D const SConvSubTable
1660 convSubTable_unmodifiable=
1661 {
1662 &convKeyCodes_unmodifiable[0],
1663 {
1664 ARRAY_LENGTH(scanCodeBlock_unmodifiable),
1665 &scanCodeBlock_unmodifiable[0]
1666 }
1667 },
1668 convSubTable_base=
1669 {
1670 &convKeyCodes_base[0],
1671 {
1672 ARRAY_LENGTH(scanCodeBlock_base),
1673 &scanCodeBlock_base[0]
1674 }
1675 },
1676 convSubTable_capsLock=
1677 {
1678 &convKeyCodes_capsLock[0],
1679 {
1680 ARRAY_LENGTH(scanCodeBlock_capsLock),
1681 &scanCodeBlock_capsLock[0]
1682 }
1683 },
1684 convSubTable_shift=
1685 {
1686 &convKeyCodes_shift[0],
1687 {
1688 ARRAY_LENGTH(scanCodeBlock_shift),
1689 &scanCodeBlock_shift[0]
1690 }
1691 },
1692 convSubTable_numLock=
1693 {
1694 &convKeyCodes_numLock[0],
1695 {
1696 ARRAY_LENGTH(scanCodeBlock_numLock),
1697 &scanCodeBlock_numLock[0]
1698 }
1699 },
1700 convSubTable_ctrl=
1701 {
1702 &convKeyCodes_ctrl[0],
1703 {
1704 ARRAY_LENGTH(scanCodeBlock_ctrl),
1705 &scanCodeBlock_ctrl[0]
1706 }
1707 },
1708 convSubTable_rot90=
1709 {
1710 &convKeyCodes_rot90[0],
1711 {
1712 ARRAY_LENGTH(scanCodeBlock_rotate),
1713 &scanCodeBlock_rotate[0]
1714 }
1715 },
1716 convSubTable_rot180=
1717 {
1718 &convKeyCodes_rot180[0],
1719 {
1720 ARRAY_LENGTH(scanCodeBlock_rotate),
1721 &scanCodeBlock_rotate[0]
1722 }
1723 },
1724 convSubTable_rot270=
1725 {
1726 &convKeyCodes_rot270[0],
1727 {
1728 ARRAY_LENGTH(scanCodeBlock_rotate),
1729 &scanCodeBlock_rotate[0]
1730 }
1731 };
1733 // Some modifiers, e.g. shift, may required more than one table (other than "base")
1734 // to be searched; therefore arrays of tables are required
1735 LOCAL_D const SConvSubTable
1736 * const convSubTableArray_unmodifiable[]={&convSubTable_unmodifiable},
1737 * const convSubTableArray_base[]={&convSubTable_base},
1738 * const convSubTableArray_capsLock[]={&convSubTable_capsLock},
1739 * const convSubTableArray_shift[]={&convSubTable_capsLock, &convSubTable_shift},
1740 * const convSubTableArray_capsLockShift[]={&convSubTable_shift},
1741 * const convSubTableArray_numLock[]={&convSubTable_numLock},
1742 * const convSubTableArray_ctrl[]={&convSubTable_ctrl},
1743 * const convSubTableArray_rot90[]={&convSubTable_rot90},
1744 * const convSubTableArray_rot180[]={&convSubTable_rot180},
1745 * const convSubTableArray_rot270[]={&convSubTable_rot270};
1747 // The order of these nodes is VITAL, as the scanCode/modifiers are
1748 // searched for a match in this order
1749 LOCAL_D const SConvTableNode convTableNodes[]=
1750 {
1751 {
1752 {
1753 0, /* iMask */
1754 0 /* iValue */
1755 }, /* maskedModifiers */
1756 ARRAY_LENGTH(convSubTableArray_unmodifiable), /* numSubTables */
1757 &convSubTableArray_unmodifiable[0]
1758 }, /* pnodes[i] */
1759 {
1760 {
1761 EModifierCtrl,
1762 EModifierCtrl
1763 },
1764 ARRAY_LENGTH(convSubTableArray_ctrl),
1765 &convSubTableArray_ctrl[0]
1766 },
1767 {
1768 {
1769 EModifierNumLock,
1770 EModifierNumLock
1771 },
1772 ARRAY_LENGTH(convSubTableArray_numLock),
1773 &convSubTableArray_numLock[0]
1774 },
1775 {
1776 {
1777 EModifierCapsLock|EModifierShift,
1778 EModifierCapsLock
1779 },
1780 ARRAY_LENGTH(convSubTableArray_capsLock),
1781 &convSubTableArray_capsLock[0]
1782 },
1783 {
1784 {
1785 EModifierShift|EModifierCapsLock,
1786 EModifierShift
1787 },
1788 ARRAY_LENGTH(convSubTableArray_shift),
1789 &convSubTableArray_shift[0]
1790 },
1791 {
1792 {
1793 EModifierCapsLock|EModifierShift,
1794 EModifierCapsLock|EModifierShift
1795 },
1796 ARRAY_LENGTH(convSubTableArray_capsLockShift),
1797 &convSubTableArray_capsLockShift[0]
1798 },
1799 {
1800 {
1801 EModifierRotateBy90,
1802 EModifierRotateBy90
1803 },
1804 ARRAY_LENGTH(convSubTableArray_rot90),
1805 &convSubTableArray_rot90[0]
1806 },
1807 {
1808 {
1809 EModifierRotateBy180,
1810 EModifierRotateBy180
1811 },
1812 ARRAY_LENGTH(convSubTableArray_rot180),
1813 &convSubTableArray_rot180[0]
1814 },
1815 {
1816 {
1817 EModifierRotateBy270,
1818 EModifierRotateBy270
1819 },
1820 ARRAY_LENGTH(convSubTableArray_rot270),
1821 &convSubTableArray_rot270[0]
1822 },
1823 {
1824 {
1825 0,
1826 0
1827 },
1828 ARRAY_LENGTH(convSubTableArray_base),
1829 &convSubTableArray_base[0]
1830 }
1831 };
1833 // The top-level exported data structure of all the conversion tables
1834 LOCAL_D const SConvTable ConvTable=
1835 {
1836 ARRAY_LENGTH(convTableNodes),
1837 &convTableNodes[0]
1838 };
1840 // The list of scan-codes on the numeric keypad
1841 LOCAL_D const SScanCodeBlock keypadScanCodeBlockArray[]=
1842 {
1843 {EStdKeyNumLock, EStdKeyNumLock},
1844 {EStdKeyNkpForwardSlash, EStdKeyNkpFullStop}
1845 };
1847 LOCAL_D const SScanCodeBlockList ConvTableKeypadScanCodes=
1848 {
1849 ARRAY_LENGTH(keypadScanCodeBlockArray),
1850 &keypadScanCodeBlockArray[0]
1851 };
1853 // The list of non-autorepeating key-codes
1854 LOCAL_D const TUint16 nonAutorepKeyCodeArray[]=
1855 {
1856 EKeyEscape,
1857 EKeyPrintScreen,
1858 EKeyPause,
1859 EKeyInsert,
1860 EKeyLeftShift,
1861 EKeyRightShift,
1862 EKeyLeftAlt,
1863 EKeyRightAlt,
1864 EKeyLeftCtrl,
1865 EKeyRightCtrl,
1866 EKeyLeftFunc,
1867 EKeyRightFunc,
1868 EKeyCapsLock,
1869 EKeyNumLock,
1870 EKeyScrollLock,
1871 EKeyMenu,
1872 EKeyDictaphonePlay,
1873 EKeyDictaphoneStop,
1874 EKeyDictaphoneRecord
1875 };
1877 LOCAL_D const SKeyCodeList ConvTableNonAutorepKeyCodes=
1878 {
1879 ARRAY_LENGTH(nonAutorepKeyCodeArray),
1880 &nonAutorepKeyCodeArray[0]
1881 };
1883 EXPORT_C void KeyDataSettings(TRadix &aRadix,TCtrlDigitsTermination &aCtrlDigitsTermination,TInt &aDefaultCtrlDigitsMaxCount,
1884 TInt &aMaximumCtrlDigitsMaxCount)
1885 {
1886 aRadix=EDecimal;
1887 aCtrlDigitsTermination=ETerminationByCtrlUp;
1888 aDefaultCtrlDigitsMaxCount=3;
1889 aMaximumCtrlDigitsMaxCount=10;
1890 }
1892 EXPORT_C void KeyDataFuncTable(SFuncTables &aFuncTables)
1893 {
1894 aFuncTables=FuncTables;
1895 }
1897 EXPORT_C void KeyDataConvTable(SConvTable &aConvTable, TUint &aConvTableFirstScanCode,TUint &aConvTableLastScanCode,
1898 SScanCodeBlockList &aKeypadScanCode,SKeyCodeList &aNonAutorepKeyCodes)
1899 {
1900 aConvTable=ConvTable;
1901 aConvTableFirstScanCode=scanCodeBlock_base[0].firstScanCode;
1902 aConvTableLastScanCode=scanCodeBlock_base[ARRAY_LENGTH(scanCodeBlock_base)-1].lastScanCode;
1903 aKeypadScanCode=ConvTableKeypadScanCodes;
1904 aNonAutorepKeyCodes=ConvTableNonAutorepKeyCodes;
1905 }