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