kbdax2.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
#include <windows.h>
00010
#include <ime.h>
00011
#include "vkoem.h"
00012
#include "kbdjpn.h"
00013
#include "kbdax2.h"
00014
00015
#if defined(_M_IA64)
00016
#pragma section(".data")
00017
#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
00018
#else
00019
#pragma data_seg(".data")
00020 #define ALLOC_SECTION_LDATA
00021
#endif
00022
00023
00024
00025
00026
00027 static ALLOC_SECTION_LDATA USHORT ausVK[] = {
00028 T00, T01, T02, T03, T04, T05, T06, T07,
00029 T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
00030 T10, T11, T12, T13, T14, T15, T16, T17,
00031 T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
00032 T20, T21, T22, T23, T24, T25, T26, T27,
00033 T28, T29, T2A, T2B, T2C, T2D, T2E, T2F,
00034 T30, T31, T32, T33, T34, T35,
00035
00036
00037
00038
00039 T36 | KBDEXT,
00040
00041
00042
00043
00044 T37 | KBDMULTIVK,
00045
00046 T38, T39, T3A, T3B, T3C, T3D, T3E, T3F,
00047 T40, T41, T42, T43, T44,
00048
00049
00050
00051
00052
00053
00054 T45 | KBDEXT | KBDMULTIVK,
00055
00056 T46 | KBDMULTIVK,
00057
00058
00059
00060
00061
00062
00063 T47 | KBDNUMPAD | KBDSPECIAL,
00064 T48 | KBDNUMPAD | KBDSPECIAL,
00065 T49 | KBDNUMPAD | KBDSPECIAL,
00066 T4A,
00067 T4B | KBDNUMPAD | KBDSPECIAL,
00068 T4C | KBDNUMPAD | KBDSPECIAL,
00069 T4D | KBDNUMPAD | KBDSPECIAL,
00070 T4E,
00071 T4F | KBDNUMPAD | KBDSPECIAL,
00072 T50 | KBDNUMPAD | KBDSPECIAL,
00073 T51 | KBDNUMPAD | KBDSPECIAL,
00074 T52 | KBDNUMPAD | KBDSPECIAL,
00075 T53 | KBDNUMPAD | KBDSPECIAL,
00076
00077 T54, T55, T56, T57, T58, T59,
00078
00079
00080
00081
00082 T5A | KBDSPECIAL,
00083
00084
00085
00086
00087 T5B | KBDSPECIAL,
00088
00089
00090
00091
00092 T5C,
00093
00094 T5D, T5E, T5F,
00095 T60, T61, T62, T63, T64, T65, T66, T67,
00096 T68, T69, T6A, T6B, T6C, T6D, T6E, T6F,
00097 T70, T71, T72, T73, T74, T75, T76, T77,
00098 T78, T79, T7A, T7B, T7C, T7D, T7E, T7F
00099 };
00100
00101 static ALLOC_SECTION_LDATA VSC_VK
aE0VscToVk[] = {
00102 { 0x1C, X1C | KBDEXT },
00103 { 0x1D, X1D | KBDEXT | KBDSPECIAL },
00104 { 0x35, X35 | KBDEXT },
00105 { 0x37, X37 | KBDEXT },
00106 { 0x38, X38 | KBDEXT | KBDSPECIAL },
00107 { 0x46, X46 | KBDEXT },
00108 { 0x47, X47 | KBDEXT },
00109 { 0x48, X48 | KBDEXT },
00110 { 0x49, X49 | KBDEXT },
00111 { 0x4B, X4B | KBDEXT },
00112 { 0x4D, X4D | KBDEXT },
00113 { 0x4F, X4F | KBDEXT },
00114 { 0x50, X50 | KBDEXT },
00115 { 0x51, X51 | KBDEXT },
00116 { 0x52, X52 | KBDEXT },
00117 { 0x53, X53 | KBDEXT },
00118 { 0x5B, X5B | KBDEXT },
00119 { 0x5C, X5C | KBDEXT },
00120 { 0x5D, X5D | KBDEXT },
00121 { 0, 0 }
00122 };
00123
00124 static ALLOC_SECTION_LDATA VSC_VK
aE1VscToVk[] = {
00125 { 0x1D, Y1D },
00126 { 0 , 0 }
00127 };
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140 static ALLOC_SECTION_LDATA VK_TO_BIT
aVkToBits[] = {
00141 { VK_SHIFT, KBDSHIFT },
00142 { VK_CONTROL, KBDCTRL },
00143 { VK_MENU, KBDALT },
00144 { VK_KANA, KBDKANA },
00145 { 0, 0 }
00146 };
00147
00148
00149
00150
00151
00152
00153
00154
00155 static ALLOC_SECTION_LDATA MODIFIERS
CharModifiers = {
00156 &
aVkToBits[0],
00157 11,
00158 {
00159
00160
00161 0,
00162 1,
00163 4,
00164 6,
00165 SHFT_INVALID,
00166 SHFT_INVALID,
00167 SHFT_INVALID,
00168 SHFT_INVALID,
00169 2,
00170 3,
00171 5,
00172 7
00173 }
00174 };
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201 static ALLOC_SECTION_LDATA VK_TO_WCHARS4
aVkToWch4[] = {
00202
00203
00204 {
'0' , KANALOK ,
'0' ,
')' ,
WCH_WA ,
WCH_WO },
00205 {
'1' , KANALOK ,
'1' ,
'!' ,
WCH_NU ,
WCH_NU },
00206 {
'3' , KANALOK ,
'3' ,
'#' ,
WCH_A ,
WCH_AA },
00207 {
'4' , KANALOK ,
'4' ,
'$' ,
WCH_U ,
WCH_UU },
00208 {
'5' , KANALOK ,
'5' ,
'%' ,
WCH_E ,
WCH_EE },
00209 {
'7' , KANALOK ,
'7' ,
'&' ,
WCH_YA ,
WCH_YAA },
00210 {
'8' , KANALOK ,
'8' ,
'*' ,
WCH_YU ,
WCH_YUU },
00211 {
'9' , KANALOK ,
'9' ,
'(' ,
WCH_YO ,
WCH_YOO },
00212 {
'A' , CAPLOK | KANALOK ,
'a' ,
'A' ,
WCH_TI ,
WCH_TI },
00213 {
'B' , CAPLOK | KANALOK ,
'b' ,
'B' ,
WCH_KO ,
WCH_KO },
00214 {
'C' , CAPLOK | KANALOK ,
'c' ,
'C' ,
WCH_SO ,
WCH_SO },
00215 {
'D' , CAPLOK | KANALOK ,
'd' ,
'D' ,
WCH_SI ,
WCH_SI },
00216 {
'E' , CAPLOK | KANALOK ,
'e' ,
'E' ,
WCH_I ,
WCH_II },
00217 {
'F' , CAPLOK | KANALOK ,
'f' ,
'F' ,
WCH_HA ,
WCH_HA },
00218 {
'G' , CAPLOK | KANALOK ,
'g' ,
'G' ,
WCH_KI ,
WCH_KI },
00219 {
'H' , CAPLOK | KANALOK ,
'h' ,
'H' ,
WCH_KU ,
WCH_KU },
00220 {
'I' , CAPLOK | KANALOK ,
'i' ,
'I' ,
WCH_NI ,
WCH_NI },
00221 {
'J' , CAPLOK | KANALOK ,
'j' ,
'J' ,
WCH_MA ,
WCH_MA },
00222 {
'K' , CAPLOK | KANALOK ,
'k' ,
'K' ,
WCH_NO ,
WCH_NO },
00223 {
'L' , CAPLOK | KANALOK ,
'l' ,
'L' ,
WCH_RI ,
WCH_RI },
00224 {
'M' , CAPLOK | KANALOK ,
'm' ,
'M' ,
WCH_MO ,
WCH_MO },
00225 {
'N' , CAPLOK | KANALOK ,
'n' ,
'N' ,
WCH_MI ,
WCH_MI },
00226 {
'O' , CAPLOK | KANALOK ,
'o' ,
'O' ,
WCH_RA ,
WCH_RA },
00227 {
'P' , CAPLOK | KANALOK ,
'p' ,
'P' ,
WCH_SE ,
WCH_SE },
00228 {
'Q' , CAPLOK | KANALOK ,
'q' ,
'Q' ,
WCH_TA ,
WCH_TA },
00229 {
'R' , CAPLOK | KANALOK ,
'r' ,
'R' ,
WCH_SU ,
WCH_SU },
00230 {
'S' , CAPLOK | KANALOK ,
's' ,
'S' ,
WCH_TO ,
WCH_TO },
00231 {
'T' , CAPLOK | KANALOK ,
't' ,
'T' ,
WCH_KA ,
WCH_KA },
00232 {
'U' , CAPLOK | KANALOK ,
'u' ,
'U' ,
WCH_NA ,
WCH_NA },
00233 {
'V' , CAPLOK | KANALOK ,
'v' ,
'V' ,
WCH_HI ,
WCH_HI },
00234 {
'W' , CAPLOK | KANALOK ,
'w' ,
'W' ,
WCH_TE ,
WCH_TE },
00235 {
'X' , CAPLOK | KANALOK ,
'x' ,
'X' ,
WCH_SA ,
WCH_SA },
00236 {
'Y' , CAPLOK | KANALOK ,
'y' ,
'Y' ,
WCH_NN ,
WCH_NN },
00237 {
'Z' , CAPLOK | KANALOK ,
'z' ,
'Z' ,
WCH_TU ,
WCH_TUU },
00238 {VK_OEM_1 , KANALOK ,
';' ,
':' ,
WCH_RE ,
WCH_RE },
00239 {VK_OEM_2 , KANALOK ,
'/' ,
'?' ,
WCH_ME ,
WCH_MD },
00240 {VK_OEM_3 , KANALOK ,
'`' ,
'~' ,
WCH_MU ,
WCH_CB },
00241 {VK_OEM_7 , KANALOK ,0x27 ,
'"' ,
WCH_KE ,
WCH_KE },
00242 {VK_OEM_8 , 0 ,WCH_NONE ,WCH_NONE ,WCH_NONE,WCH_NONE},
00243 {VK_OEM_COMMA , KANALOK ,
',' ,
'<' ,
WCH_NE ,
WCH_IC },
00244 {VK_OEM_PERIOD, KANALOK ,
'.' ,
'>' ,
WCH_RU ,
WCH_IP },
00245 {VK_OEM_PLUS , KANALOK ,
'=' ,
'+' ,
WCH_HE ,
WCH_HE },
00246 {VK_TAB , 0 ,
'\t' ,
'\t' ,
'\t' ,
'\t' },
00247 {VK_ADD , 0 ,
'+' ,
'+' ,
'+' ,
'+' },
00248 {VK_DECIMAL , 0 ,
'.' ,
'.' ,
'.' ,
'.' },
00249 {VK_DIVIDE , 0 ,
'/' ,
'/' ,
'/' ,
'/' },
00250 {VK_MULTIPLY , 0 ,
'*' ,
'*' ,
'*' ,
'*' },
00251 {VK_SUBTRACT , 0 ,
'-' ,
'-' ,
'-' ,
'-' },
00252 {0 , 0 ,0 ,0 ,0 ,0 }
00253 };
00254
00255 static ALLOC_SECTION_LDATA VK_TO_WCHARS6
aVkToWch6[] = {
00256
00257
00258 {VK_BACK , 0 ,
'\b' ,
'\b' ,
'\b' ,
'\b' , 0x7f , 0x7f },
00259 {VK_CANCEL , 0 ,0x03 ,0x03 ,0x03 ,0x03 , 0x03 , 0x03 },
00260 {VK_ESCAPE , 0 ,0x1b ,0x1b ,0x1b ,0x1b , 0x1b , 0x1b },
00261 {VK_OEM_4 , KANALOK ,
'[' ,
'{' ,
WCH_VS ,
WCH_VS , 0x1b , 0x1b },
00262 {VK_OEM_5 , KANALOK ,
'\\' ,
'|' ,
WCH_PS ,
WCH_PS , 0x1c , 0x1c },
00263 {VK_OEM_102 , KANALOK ,
'\\' ,
'|' ,
WCH_RO ,
WCH_RO , 0x1c , 0x1c },
00264 {VK_OEM_6 , KANALOK ,
']' ,
'}' ,
WCH_SVS ,
WCH_OB , 0x1d , 0x1d },
00265 {VK_RETURN , 0 ,
'\r' ,
'\r' ,
'\r' ,
'\r' ,
'\n' ,
'\n' },
00266 {VK_SPACE , 0 ,
' ' ,
' ' ,
' ' ,
' ' , 0x20 , 0x20 },
00267 {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 }
00268 };
00269
00270 static ALLOC_SECTION_LDATA VK_TO_WCHARS8
aVkToWch8[] = {
00271
00272
00273 {
'2' , KANALOK ,
'2' ,
'@' ,
WCH_HU ,
WCH_HU , WCH_NONE , WCH_NONE , 0x00 , 0x00 },
00274 {
'6' , KANALOK ,
'6' ,
'^' ,
WCH_O ,
WCH_OO , WCH_NONE , WCH_NONE , 0x1e , 0x1e },
00275 {VK_OEM_MINUS , KANALOK ,
'-' ,
'_' ,
WCH_HO ,
WCH_HO , WCH_NONE , WCH_NONE , 0x1f , 0x1f },
00276 {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 , 0 , 0 }
00277 };
00278
00279
00280
00281
00282
00283 static ALLOC_SECTION_LDATA VK_TO_WCHARS4
aVkToWch1[] = {
00284
00285
00286 { VK_NUMPAD0 , 0 ,
'0' , WCH_NONE ,
'0' ,WCH_NONE},
00287 { VK_NUMPAD1 , 0 ,
'1' , WCH_NONE ,
'1' ,WCH_NONE},
00288 { VK_NUMPAD2 , 0 ,
'2' , WCH_NONE ,
'2' ,WCH_NONE},
00289 { VK_NUMPAD3 , 0 ,
'3' , WCH_NONE ,
'3' ,WCH_NONE},
00290 { VK_NUMPAD4 , 0 ,
'4' , WCH_NONE ,
'4' ,WCH_NONE},
00291 { VK_NUMPAD5 , 0 ,
'5' , WCH_NONE ,
'5' ,WCH_NONE},
00292 { VK_NUMPAD6 , 0 ,
'6' , WCH_NONE ,
'6' ,WCH_NONE},
00293 { VK_NUMPAD7 , 0 ,
'7' , WCH_NONE ,
'7' ,WCH_NONE},
00294 { VK_NUMPAD8 , 0 ,
'8' , WCH_NONE ,
'8' ,WCH_NONE},
00295 { VK_NUMPAD9 , 0 ,
'9' , WCH_NONE ,
'9' ,WCH_NONE},
00296 { 0 , 0 ,
'\0' , 0 , 0 ,0 }
00297 };
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312 static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE
aVkToWcharTable[] = {
00313 { (PVK_TO_WCHARS1)
aVkToWch6, 6,
sizeof(
aVkToWch6[0]) },
00314 { (PVK_TO_WCHARS1)
aVkToWch8, 8,
sizeof(
aVkToWch8[0]) },
00315 { (PVK_TO_WCHARS1)
aVkToWch4, 4,
sizeof(
aVkToWch4[0]) },
00316 { (PVK_TO_WCHARS1)
aVkToWch1, 4,
sizeof(
aVkToWch1[0]) },
00317 {
NULL, 0, 0 }
00318 };
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329 static ALLOC_SECTION_LDATA VSC_LPWSTR
aKeyNames[] = {
00330 0x01,
L"Esc",
00331 0x0e,
L"Backspace",
00332 0x0f,
L"Tab",
00333 0x1c,
L"Enter",
00334 0x1d,
L"Ctrl",
00335 0x2a,
L"Shift",
00336 0x36,
L"Right Shift",
00337 0x37,
L"Num *",
00338 0x38,
L"Alt",
00339 0x39,
L"Space",
00340 0x3a,
L"Caps Lock",
00341 0x3b,
L"F1",
00342 0x3c,
L"F2",
00343 0x3d,
L"F3",
00344 0x3e,
L"F4",
00345 0x3f,
L"F5",
00346 0x40,
L"F6",
00347 0x41,
L"F7",
00348 0x42,
L"F8",
00349 0x43,
L"F9",
00350 0x44,
L"F10",
00351 0x45,
L"Pause",
00352 0x46,
L"Scroll Lock",
00353 0x47,
L"Num 7",
00354 0x48,
L"Num 8",
00355 0x49,
L"Num 9",
00356 0x4a,
L"Num -",
00357 0x4b,
L"Num 4",
00358 0x4c,
L"Num 5",
00359 0x4d,
L"Num 6",
00360 0x4e,
L"Num +",
00361 0x4f,
L"Num 1",
00362 0x50,
L"Num 2",
00363 0x51,
L"Num 3",
00364 0x52,
L"Num 0",
00365 0x53,
L"Num Del",
00366 0x54,
L"Sys Req",
00367 0x57,
L"F11",
00368 0x58,
L"F12",
00369 0x5a, (LPWSTR)
SZ_KEY_NAME_MUHENKAN,
00370 0x5b, (LPWSTR)
SZ_KEY_NAME_HENKAN,
00371 0x5c,
L"AX",
00372 0x7C,
L"F13",
00373 0x7D,
L"F14",
00374 0x7E,
L"F15",
00375 0x7F,
L"F16",
00376 0x80,
L"F17",
00377 0x81,
L"F18",
00378 0x82,
L"F19",
00379 0x83,
L"F20",
00380 0x84,
L"F21",
00381 0x85,
L"F22",
00382 0x86,
L"F23",
00383 0x87,
L"F24",
00384 0 ,
NULL
00385 };
00386
00387 static ALLOC_SECTION_LDATA VSC_LPWSTR
aKeyNamesExt[] = {
00388 0x1c,
L"Num Enter",
00389 0x1d, (LPWSTR)
SZ_KEY_NAME_EISU_KANA,
00390 0x35,
L"Num /",
00391 0x37,
L"Prnt Scrn",
00392 0x38, (LPWSTR)
SZ_KEY_NAME_KANJI,
00393 0x45,
L"Num Lock",
00394 0x46,
L"Break",
00395 0x47,
L"Home",
00396 0x48,
L"Up",
00397 0x49,
L"Page Up",
00398 0x4b,
L"Left",
00399 0x4d,
L"Right",
00400 0x4f,
L"End",
00401 0x50,
L"Down",
00402 0x51,
L"Page Down",
00403 0x52,
L"Insert",
00404 0x53,
L"Delete",
00405 0x54,
L"<00>",
00406 0x56,
L"Help",
00407 0x5B,
L"Left Windows",
00408 0x5C,
L"Right Windows",
00409 0x5D,
L"Application",
00410 0 ,
NULL
00411 };
00412
00413 static ALLOC_SECTION_LDATA KBDTABLES
KbdTables = {
00414
00415
00416
00417 &
CharModifiers,
00418
00419
00420
00421
00422
aVkToWcharTable,
00423
00424
00425
00426
00427
NULL,
00428
00429
00430
00431
00432
aKeyNames,
00433
aKeyNamesExt,
00434
NULL,
00435
00436
00437
00438
00439
ausVK,
00440
sizeof(
ausVK) /
sizeof(
ausVK[0]),
00441
aE0VscToVk,
00442
aE1VscToVk,
00443
00444
00445
00446
00447 0
00448 };
00449
00450 PKBDTABLES
KbdLayerDescriptor(VOID)
00451 {
00452
return &
KbdTables;
00453 }
00454
00455
00456
00457
00458
00459
00460 static ALLOC_SECTION_LDATA VK_F
VkToFuncTable_ax2[] = {
00461 {
00462 VK_DBE_KATAKANA,
00463 KBDNLS_TYPE_TOGGLE,
00464 KBDNLS_INDEX_NORMAL,
00465 0x8,
00466 {
00467 {KBDNLS_KATAKANA,0},
00468 {KBDNLS_HIRAGANA,0},
00469 {KBDNLS_ROMAN,0},
00470 {KBDNLS_SEND_PARAM_VK,VK_KANA},
00471 {KBDNLS_ALPHANUM,0},
00472 {KBDNLS_ALPHANUM,0},
00473 {KBDNLS_ALPHANUM,0},
00474 {KBDNLS_ALPHANUM,0}
00475 },
00476 {
00477 {KBDNLS_SEND_PARAM_VK,VK_KANA},
00478 {KBDNLS_SEND_PARAM_VK,VK_KANA},
00479 {KBDNLS_SEND_PARAM_VK,VK_KANA},
00480 {KBDNLS_SEND_PARAM_VK,VK_KANA},
00481 {KBDNLS_NOEVENT,0},
00482 {KBDNLS_NOEVENT,0},
00483 {KBDNLS_NOEVENT,0},
00484 {KBDNLS_NOEVENT,0}
00485 }
00486 },
00487 {
00488 VK_NONCONVERT,
00489 KBDNLS_TYPE_NORMAL,
00490 KBDNLS_INDEX_NORMAL,
00491 0x0,
00492 {
00493 {KBDNLS_SEND_BASE_VK,0},
00494 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE},
00495 {KBDNLS_CODEINPUT,0},
00496 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE},
00497 {KBDNLS_SEND_BASE_VK,0},
00498 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE},
00499 {KBDNLS_CODEINPUT,0},
00500 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE}
00501 },
00502 {
00503 {KBDNLS_NULL,0},
00504 {KBDNLS_NULL,0},
00505 {KBDNLS_NULL,0},
00506 {KBDNLS_NULL,0},
00507 {KBDNLS_NULL,0},
00508 {KBDNLS_NULL,0},
00509 {KBDNLS_NULL,0},
00510 {KBDNLS_NULL,0}
00511 }
00512 },
00513 {
00514 VK_KANJI,
00515 KBDNLS_TYPE_NORMAL,
00516 KBDNLS_INDEX_NORMAL,
00517 0x0,
00518 {
00519 {KBDNLS_SEND_BASE_VK,0},
00520 {KBDNLS_SBCSDBCS,0},
00521 {KBDNLS_SEND_BASE_VK,0},
00522 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE},
00523 {KBDNLS_SEND_BASE_VK,0},
00524 {KBDNLS_SBCSDBCS,0},
00525 {KBDNLS_SEND_BASE_VK,0},
00526 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE}
00527 },
00528 {
00529 {KBDNLS_NULL,0},
00530 {KBDNLS_NULL,0},
00531 {KBDNLS_NULL,0},
00532 {KBDNLS_NULL,0},
00533 {KBDNLS_NULL,0},
00534 {KBDNLS_NULL,0},
00535 {KBDNLS_NULL,0},
00536 {KBDNLS_NULL,0}
00537 }
00538 }
00539 };
00540
00541
00542
00543
00544
00545
00546 static ALLOC_SECTION_LDATA KBDNLSTABLES
KbdNlsTables = {
00547 0,
00548 0,
00549 3,
00550
VkToFuncTable_ax2,
00551 0,
00552
NULL
00553 };
00554
00555 PKBDNLSTABLES
KbdNlsLayerDescriptor(VOID)
00556 {
00557
return &
KbdNlsTables;
00558 }
00559
Generated on Sat May 15 19:40:32 2004 for test by
1.3.7