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