test: kbdnec95.c Source File

Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

# kbdnec95.c

Go to the documentation of this file.

    00001 #if defined(JAPAN) && defined(_PC98_)
    00002 /***************************************************************************\
    00003 * Module Name: kbdnec95.c
    00004 *
    00005 * Copyright (c) 1985-97, NEC Corporation
    00006 *
    00007 * History:
    00008 \***************************************************************************/
    00009 #else  // _PC98_
    00010 /***************************************************************************\
    00011 * Module Name: kbd106.c
    00012 *
    00013 * Copyright (c) 1985-92, Microsoft Corporation
    00014 *
    00015 * History:
    00016 \***************************************************************************/
    00017 #endif // _PC98_
    00018
    00019 #include <windows.h>
    00020 #include <ime.h>
    00021 #include "vkoem.h"
    00022 #include "kbdjpn.h"
    00023 #if defined(JAPAN) && defined(_PC98_)
    00024 #include "kbdnec95.h"
    00025 #else  // _PC98_
    00026 #include "kbd106.h"
    00027 #endif // _PC98_
    00028
    00029 #if defined(_M_IA64)
    00030 #pragma section(".data")
    00031 #define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
    00032 #else
    00033 #pragma data_seg(".data")
    00034 #define ALLOC_SECTION_LDATA
    00035 #endif
    00036
    00037 #if defined(JAPAN) && defined(_PC98_)
    00038 /***************************************************************************\
    00039 * ausVK[] - Virtual Scan Code to Virtual Key conversion table for NEC 106
    00040 \***************************************************************************/
    00041 #else // _PC98_
    00042 /***************************************************************************\
    00043 * ausVK[] - Virtual Scan Code to Virtual Key conversion table for 106
    00044 \***************************************************************************/
    00045 #endif // _PC98_
    00046
    00047 static ALLOC_SECTION_LDATA USHORT ausVK[] = {
    00048     T00, T01, T02, T03, T04, T05, T06, T07,
    00049     T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
    00050     T10, T11, T12, T13, T14, T15, T16, T17,
    00051     T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
    00052     T20, T21, T22, T23, T24, T25, T26, T27,
    00053 #if defined(JAPAN) && defined(_PC98_)
    00054     T28, T29, T2A, T2B, T2C, T2D, T2E, T2F,
    00055     T30, T31, T32, T33, T34,
    00056
    00057     /*
    00058      * Conversion key must have KBDSPECIAL bit set (NLS key)
    00059      */
    00060     T35 | KBDSPECIAL,
    00061 #else // _PC98_
    00062     T28,
    00063
    00064     /*
    00065      * Hankaku/Zenkaku/Kanji key must have KBDSPECIAL bit set (NLS key)
    00066      */
    00067     T29 | KBDSPECIAL,
    00068
    00069               T2A, T2B, T2C, T2D, T2E, T2F,
    00070     T30, T31, T32, T33, T34, T35,
    00071 #endif // _PC98_
    00072
    00073 #if defined(JAPAN) && defined(_PC98_)
    00074     T36, T37,
    00075 #else //_PC98_
    00076     /*
    00077      * Right-hand Shift key must have KBDEXT bit set.
    00078      */
    00079     T36 | KBDEXT,
    00080
    00081     /*
    00082      * numpad_* + Shift/Alt -> SnapShot
    00083      */
    00084     T37 | KBDMULTIVK,
    00085 #endif // _PC98_
    00086
    00087     T38, T39,
    00088
    00089 #if defined(JAPAN) && defined(_PC98_)
    00090     T3A,
    00091 #else //_PC98_
    00092     /*
    00093      * Alphanumeric/CapsLock key must have KBDSPECIAL bit set (NLS key)
    00094      */
    00095     T3A | KBDSPECIAL,
    00096 #endif // _PC98_
    00097
    00098                    T3B, T3C, T3D, T3E, T3F,
    00099
    00100 #if defined(JAPAN) && defined(_PC98_)
    00101     /*
    00102      * Number Pad keys:
    00103      *     KBDNUMPAD  - digits 0-9 and decimal point.
    00104      *     KBDSPECIAL - require special processing by Windows
    00105      */
    00106
    00107     T40,                            // Numpad -
    00108     T41,                            // Numpad /
    00109     T42 | KBDNUMPAD | KBDSPECIAL,   // Numpad 7 (Home)
    00110     T43 | KBDNUMPAD | KBDSPECIAL,   // Numpad 8 (Up)
    00111     T44 | KBDNUMPAD | KBDSPECIAL,   // Numpad 9 (PgUp)
    00112     T45,                            // Numpad *
    00113     T46 | KBDNUMPAD | KBDSPECIAL,   // Numpad 4 (Left)
    00114     T47 | KBDNUMPAD | KBDSPECIAL,   // Numpad 5 (Clear)
    00115     T48 | KBDNUMPAD | KBDSPECIAL,   // Numpad 6 (Right)
    00116     T49,                            // Numpad +
    00117     T4A | KBDNUMPAD | KBDSPECIAL,   // Numpad 1 (End)
    00118     T4B | KBDNUMPAD | KBDSPECIAL,   // Numpad 2 (Down)
    00119     T4C | KBDNUMPAD | KBDSPECIAL,   // Numpad 3 (PgDn)
    00120     T4D | KBDNUMPAD | KBDSPECIAL,   // Numpad =
    00121     T4E | KBDNUMPAD | KBDSPECIAL,   // Numpad 0 (Ins)
    00122     T4F,                            // Numpad ,
    00123     T50 | KBDNUMPAD | KBDSPECIAL,   // Numpad . (Del)
    00124
    00125     /*
    00126      * Non-Conversion key must have KBDSPECIAL bit set (NLS key)
    00127      */
    00128     T51 | KBDSPECIAL,
    00129
    00130         T52, T53,
    00131 #else //_PC98_
    00132     T40, T41, T42, T43, T44,
    00133
    00134     /*
    00135      * NumLock Key:
    00136      *     KBDEXT     - VK_NUMLOCK is an Extended key
    00137      *     KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
    00138      */
    00139     T45 | KBDEXT | KBDMULTIVK,
    00140
    00141     T46 | KBDMULTIVK,
    00142
    00143     /*
    00144      * Number Pad keys:
    00145      *     KBDNUMPAD  - digits 0-9 and decimal point.
    00146      *     KBDSPECIAL - require special processing by Windows
    00147      */
    00148     T47 | KBDNUMPAD | KBDSPECIAL,   // Numpad 7 (Home)
    00149     T48 | KBDNUMPAD | KBDSPECIAL,   // Numpad 8 (Up),
    00150     T49 | KBDNUMPAD | KBDSPECIAL,   // Numpad 9 (PgUp),
    00151     T4A,
    00152     T4B | KBDNUMPAD | KBDSPECIAL,   // Numpad 4 (Left),
    00153     T4C | KBDNUMPAD | KBDSPECIAL,   // Numpad 5 (Clear),
    00154     T4D | KBDNUMPAD | KBDSPECIAL,   // Numpad 6 (Right),
    00155     T4E,
    00156     T4F | KBDNUMPAD | KBDSPECIAL,   // Numpad 1 (End),
    00157     T50 | KBDNUMPAD | KBDSPECIAL,   // Numpad 2 (Down),
    00158     T51 | KBDNUMPAD | KBDSPECIAL,   // Numpad 3 (PgDn),
    00159     T52 | KBDNUMPAD | KBDSPECIAL,   // Numpad 0 (Ins),
    00160     T53 | KBDNUMPAD | KBDSPECIAL,   // Numpad . (Del),
    00161 #endif // _PC98_
    00162
    00163     T54, T55, T56, T57, T58, T59, T5A, T5B,
    00164     T5C, T5D, T5E, T5F, T60, T61, T62, T63,
    00165     T64, T65, T66, T67, T68, T69, T6A, T6B,
    00166     T6C, T6D, T6E, T6F,
    00167
    00168 #if defined(JAPAN) && defined(_PC98_)
    00169     T70,
    00170 #else //_PC98_
    00171     /*
    00172      * Hiragana/Katakana/Roman key must have KBDSPECIAL bit set (NLS key)
    00173      */
    00174     T70 | KBDSPECIAL,
    00175 #endif // _PC98_
    00176
    00177                              T71, T72, T73,
    00178     T74, T75, T76, T77, T78,
    00179
    00180 #if defined(JAPAN) && defined(_PC98_)
    00181     T79,
    00182 #else //_PC98_
    00183     /*
    00184      * Conversion key must have KBDSPECIAL bit set (NLS key)
    00185      */
    00186     T79 | KBDSPECIAL,
    00187 #endif // _PC98_
    00188
    00189                                   T7A,
    00190
    00191 #if defined(JAPAN) && defined(_PC98_)
    00192     T7B,
    00193 #else //_PC98_
    00194     /*
    00195      * Non-Conversion key must have KBDSPECIAL bit set (NLS key)
    00196      */
    00197     T7B | KBDSPECIAL,
    00198 #endif // _PC98_
    00199
    00200     T7C, T7D, T7E, T7F
    00201
    00202 };
    00203
    00204 static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
    00205 #if defined(JAPAN) && defined(_PC98_)
    00206 #else //_PC98_
    00207         { 0x1C, X1C | KBDEXT              },  // Numpad Enter
    00208         { 0x1D, X1D | KBDEXT              },  // RControl
    00209         { 0x35, X35 | KBDEXT              },  // Numpad Divide
    00210         { 0x37, X37 | KBDEXT              },  // Snapshot
    00211         { 0x38, X38 | KBDEXT              },  // RMenu
    00212         { 0x46, X46 | KBDEXT              },  // Break (Ctrl + Pause)
    00213         { 0x47, X47 | KBDEXT              },  // Home
    00214         { 0x48, X48 | KBDEXT              },  // Up
    00215         { 0x49, X49 | KBDEXT              },  // Prior
    00216         { 0x4B, X4B | KBDEXT              },  // Left
    00217         { 0x4D, X4D | KBDEXT              },  // Right
    00218         { 0x4F, X4F | KBDEXT              },  // End
    00219         { 0x50, X50 | KBDEXT              },  // Down
    00220         { 0x51, X51 | KBDEXT              },  // Next
    00221         { 0x52, X52 | KBDEXT              },  // Insert
    00222         { 0x53, X53 | KBDEXT              },  // Delete
    00223         { 0x5B, X5B | KBDEXT              },  // Left Win
    00224         { 0x5C, X5C | KBDEXT              },  // Right Win
    00225         { 0x5D, X5D | KBDEXT              },  // Application
    00226 #endif // _PC98_
    00227         { 0,      0                       }
    00228 };
    00229
    00230 static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
    00231 #if defined(JAPAN) && defined(_PC98_)
    00232 #else //_PC98_
    00233         { 0x1D, Y1D                       },  // Pause
    00234 #endif // _PC98_
    00235         { 0   ,   0                       }
    00236 };
    00237
    00238 /***************************************************************************\
    00239 * aVkToBits[]  - map Virtual Keys to Modifier Bits
    00240 *
    00241 * See kbd.h for a full description.
    00242 *
    00243 * US Keyboard has only three shifter keys:
    00244 *     SHIFT (L & R) affects alphabnumeric keys,
    00245 *     CTRL  (L & R) is used to generate control characters
    00246 *     ALT   (L & R) used for generating characters by number with numpad
    00247 \***************************************************************************/
    00248
    00249 static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
    00250     { VK_SHIFT,   KBDSHIFT },
    00251     { VK_CONTROL, KBDCTRL  },
    00252     { VK_MENU,    KBDALT   },
    00253     { VK_KANA,    KBDKANA  },
    00254     { 0,          0        }
    00255 };
    00256
    00257 /***************************************************************************\
    00258 * aModification[]  - map character modifier bits to modification number
    00259 *
    00260 * See kbd.h for a full description.
    00261 *
    00262 \***************************************************************************/
    00263
    00264 static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
    00265     &aVkToBits[0],
    00266     11,
    00267     {
    00268     //  Modification# //  Keys Pressed  : Explanation
    00269     //  ============= // ============== : =============================
    00270         0,            //                : unshifted characters
    00271         1,            //          SHIFT : capitals, ~!@#$%^&*()_+{}:"<>? etc.
    00272         4,            //     CTRL       : control characters
    00273         6,            //     CTRL SHIFT :
    00274         SHFT_INVALID, // ALT            : invalid
    00275         SHFT_INVALID, // ALT      SHIFT : invalid
    00276         SHFT_INVALID, // ALT CTRL       : invalid
    00277         SHFT_INVALID, // ALT CTRL SHIFT : invalid
    00278         2,            //KANA
    00279         3,            //KANA      SHIFT
    00280         5,            //KANA CTRL
    00281         7             //KANA CTRL SHIFT
    00282     }
    00283 };
    00284
    00285 /***************************************************************************\
    00286 *
    00287 * aVkToWch2[]  - Virtual Key to WCHAR translation for 2 shift states
    00288 * aVkToWch3[]  - Virtual Key to WCHAR translation for 3 shift states
    00289 * aVkToWch4[]  - Virtual Key to WCHAR translation for 4 shift states
    00290 *
    00291 * Table attributes: Unordered Scan, null-terminated
    00292 *
    00293 * Search this table for an entry with a matching Virtual Key to find the
    00294 * corresponding unshifted and shifted WCHAR characters.
    00295 *
    00296 * Reserved VirtualKey values (first column)
    00297 *     -1            - this line contains dead characters (diacritic)
    00298 *     0             - terminator
    00299 *
    00300 * Reserved Attribute values (second column)
    00301 *     CAPLOK        - CapsLock affects this key like Shift
    00302 *     KANALOK       - The KANA-LOCK key affects this key like KANA
    00303 *
    00304 * Reserved character values (third through last column)
    00305 *     WCH_NONE      - No character
    00306 *     WCH_DEAD      - Dead character (diacritic) value is in next line
    00307 *
    00308 \***************************************************************************/
    00309
    00310 static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = {
    00311     //                               |          |   SHIFT  |  KANA  | K+SHFT |
    00312     //                               |          |==========|========|========|
    00313 #if defined(JAPAN) && defined(_PC98_)
    00314     {'0'          ,          KANALOK ,'0'       ,'0'       ,WCH_WA  ,WCH_WO  }, //_PC98_
    00315 #else //_PC98_
    00316     {'0'          ,          KANALOK ,'0'       ,WCH_NONE  ,WCH_WA  ,WCH_WO  },
    00317 #endif // _PC98_
    00318     {'1'          ,          KANALOK ,'1'       ,'!'       ,WCH_NU  ,WCH_NU  },
    00319     {'3'          ,          KANALOK ,'3'       ,'#'       ,WCH_A   ,WCH_AA  },
    00320     {'4'          ,          KANALOK ,'4'       ,'$'       ,WCH_U   ,WCH_UU  },
    00321     {'5'          ,          KANALOK ,'5'       ,'%'       ,WCH_E   ,WCH_EE  },
    00322     {'7'          ,          KANALOK ,'7'       ,0x27      ,WCH_YA  ,WCH_YAA },
    00323     {'8'          ,          KANALOK ,'8'       ,'('       ,WCH_YU  ,WCH_YUU },
    00324     {'9'          ,          KANALOK ,'9'       ,')'       ,WCH_YO  ,WCH_YOO },
    00325     {'A'          , CAPLOK | KANALOK ,'a'       ,'A'       ,WCH_TI  ,WCH_TI  },
    00326     {'B'          , CAPLOK | KANALOK ,'b'       ,'B'       ,WCH_KO  ,WCH_KO  },
    00327     {'C'          , CAPLOK | KANALOK ,'c'       ,'C'       ,WCH_SO  ,WCH_SO  },
    00328     {'D'          , CAPLOK | KANALOK ,'d'       ,'D'       ,WCH_SI  ,WCH_SI  },
    00329     {'E'          , CAPLOK | KANALOK ,'e'       ,'E'       ,WCH_I   ,WCH_II  },
    00330     {'F'          , CAPLOK | KANALOK ,'f'       ,'F'       ,WCH_HA  ,WCH_HA  },
    00331     {'G'          , CAPLOK | KANALOK ,'g'       ,'G'       ,WCH_KI  ,WCH_KI  },
    00332     {'H'          , CAPLOK | KANALOK ,'h'       ,'H'       ,WCH_KU  ,WCH_KU  },
    00333     {'I'          , CAPLOK | KANALOK ,'i'       ,'I'       ,WCH_NI  ,WCH_NI  },
    00334     {'J'          , CAPLOK | KANALOK ,'j'       ,'J'       ,WCH_MA  ,WCH_MA  },
    00335     {'K'          , CAPLOK | KANALOK ,'k'       ,'K'       ,WCH_NO  ,WCH_NO  },
    00336     {'L'          , CAPLOK | KANALOK ,'l'       ,'L'       ,WCH_RI  ,WCH_RI  },
    00337     {'M'          , CAPLOK | KANALOK ,'m'       ,'M'       ,WCH_MO  ,WCH_MO  },
    00338     {'N'          , CAPLOK | KANALOK ,'n'       ,'N'       ,WCH_MI  ,WCH_MI  },
    00339     {'O'          , CAPLOK | KANALOK ,'o'       ,'O'       ,WCH_RA  ,WCH_RA  },
    00340     {'P'          , CAPLOK | KANALOK ,'p'       ,'P'       ,WCH_SE  ,WCH_SE  },
    00341     {'Q'          , CAPLOK | KANALOK ,'q'       ,'Q'       ,WCH_TA  ,WCH_TA  },
    00342     {'R'          , CAPLOK | KANALOK ,'r'       ,'R'       ,WCH_SU  ,WCH_SU  },
    00343     {'S'          , CAPLOK | KANALOK ,'s'       ,'S'       ,WCH_TO  ,WCH_TO  },
    00344     {'T'          , CAPLOK | KANALOK ,'t'       ,'T'       ,WCH_KA  ,WCH_KA  },
    00345     {'U'          , CAPLOK | KANALOK ,'u'       ,'U'       ,WCH_NA  ,WCH_NA  },
    00346     {'V'          , CAPLOK | KANALOK ,'v'       ,'V'       ,WCH_HI  ,WCH_HI  },
    00347     {'W'          , CAPLOK | KANALOK ,'w'       ,'W'       ,WCH_TE  ,WCH_TE  },
    00348     {'X'          , CAPLOK | KANALOK ,'x'       ,'X'       ,WCH_SA  ,WCH_SA  },
    00349     {'Y'          , CAPLOK | KANALOK ,'y'       ,'Y'       ,WCH_NN  ,WCH_NN  },
    00350     {'Z'          , CAPLOK | KANALOK ,'z'       ,'Z'       ,WCH_TU  ,WCH_TUU },
    00351     {VK_OEM_1     ,          KANALOK ,':'       ,'*'       ,WCH_KE  ,WCH_KE  },
    00352     {VK_OEM_2     ,          KANALOK ,'/'       ,'?'       ,WCH_ME  ,WCH_MD  },
    00353 #if defined(JAPAN) && defined(_PC98_)
    00354 #else //_PC98_
    00355     {VK_OEM_3     ,          KANALOK ,'@'       ,'`'       ,WCH_VS  ,WCH_VS  },
    00356     {VK_OEM_7     ,          KANALOK ,'^'       ,'~'       ,WCH_HE  ,WCH_HE  },
    00357     {VK_OEM_8     , 0                ,WCH_NONE  ,WCH_NONE  ,WCH_NONE,WCH_NONE},
    00358 #endif // _PC98_
    00359     {VK_OEM_COMMA ,          KANALOK ,','       ,'<'       ,WCH_NE  ,WCH_IC  },
    00360     {VK_OEM_PERIOD,          KANALOK ,'.'       ,'>'       ,WCH_RU  ,WCH_IP  },
    00361     {VK_OEM_PLUS  ,          KANALOK ,';'       ,'+'       ,WCH_RE  ,WCH_RE  },
    00362     {VK_TAB       , 0                ,'\t'      ,'\t'      ,'\t'    ,'\t'    },
    00363     {VK_ADD       , 0                ,'+'       ,'+'       ,'+'     ,'+'     },
    00364     {VK_DECIMAL   , 0                ,'.'       ,'.'       ,'.'     ,'.'     },
    00365     {VK_DIVIDE    , 0                ,'/'       ,'/'       ,'/'     ,'/'     },
    00366     {VK_MULTIPLY  , 0                ,'*'       ,'*'       ,'*'     ,'*'     },
    00367     {VK_SUBTRACT  , 0                ,'-'       ,'-'       ,'-'     ,'-'     },
    00368 #if defined(JAPAN) && defined(_PC98_)
    00369     {VK_SEPARATOR , 0                ,','       ,','       ,','     ,','     }, //<NEC_OCDE OEM
    00370     {VK_OEM_NEC_EQUAL,    0          ,'='       ,'='       ,'='     ,'='     }, //<_PC98_ OEM
    00371 #endif // _PC98_
    00372     {0            , 0                ,0         ,0         ,0       ,0       }
    00373 };
    00374
    00375 static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = {
    00376     //                      |          |   SHIFT  |  KANA  | K+SHFT |  CONTROL  |  K+CTRL   |
    00377     //                      |          |==========|========|========|===========|===========|
    00378     {VK_BACK      , 0       ,'\b'      ,'\b'      ,'\b'    ,'\b'    , 0x7f      , 0x7f      },
    00379     {VK_CANCEL    , 0       ,0x03      ,0x03      ,0x03    ,0x03    , 0x03      , 0x03      },
    00380     {VK_ESCAPE    , 0       ,0x1b      ,0x1b      ,0x1b    ,0x1b    , 0x1b      , 0x1b      },
    00381 #if defined(JAPAN) && defined(_PC98_)
    00382     {VK_OEM_3     , KANALOK ,'@'       ,'~'       ,WCH_VS  ,WCH_VS  , 0x00      , 0x00      },//_PC98_ #931208
    00383     {VK_OEM_4     , KANALOK ,'['       ,'{'       ,WCH_SVS ,WCH_OB  , 0x1b      , 0x1b      },//_PC98_
    00384     {VK_OEM_5     , KANALOK ,'\\'      ,'|'       ,WCH_PS  ,WCH_PS  , 0x1c      , 0x1c      },//_PC98_
    00385     {VK_OEM_6     , KANALOK ,']'       ,'}'       ,WCH_MU  ,WCH_CB  , 0x1d      , 0x1d      },//_PC98_
    00386     {VK_OEM_7     , KANALOK ,'^'       ,'`'       ,WCH_HE  ,WCH_HE  , 0x1e      , 0x1e      },//_PC98_ #931208
    00387     {VK_OEM_8     , KANALOK ,WCH_NONE  ,'_'       ,WCH_RO  ,WCH_RO  , 0x1f      , 0x1f      },//_PC98_ #931208
    00388 #else //_PC98_
    00389     {VK_OEM_4     , KANALOK ,'['       ,'{'       ,WCH_SVS ,WCH_OB  , 0x1b      , 0x1b      },
    00390     {VK_OEM_5     , KANALOK ,'\\'      ,'|'       ,WCH_PS  ,WCH_PS  , 0x1c      , 0x1c      },
    00391     {VK_OEM_102   , KANALOK ,'\\'      ,'_'       ,WCH_RO  ,WCH_RO  , 0x1c      , 0x1c      },
    00392     {VK_OEM_6     , KANALOK ,']'       ,'}'       ,WCH_MU  ,WCH_CB  , 0x1d      , 0x1d      },
    00393 #endif // _PC98_
    00394     {VK_RETURN    , 0       ,'\r'      ,'\r'      ,'\r'    ,'\r'    , '\n'      , '\n'      },
    00395     {VK_SPACE     , 0       ,' '       ,' '       ,' '     ,' '     , 0x20      , 0x20      },
    00396     {0            , 0       ,0         ,0         ,0       ,0       , 0         , 0         }
    00397 };
    00398
    00399 static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = {
    00400     //                      |          |   SHIFT  |  KANA  | K+SHFT |  CONTROL  |  K+CTRL   | SHFT+CTRL |K+SHFT+CTRL|
    00401     //                      |          |==========|========|========|===========|===========|===========|===========|
    00402     {'2'          , KANALOK ,'2'       ,'"'       ,WCH_HU  ,WCH_HU  , WCH_NONE  , WCH_NONE  , 0x00      , 0x00      },
    00403     {'6'          , KANALOK ,'6'       ,'&'       ,WCH_O   ,WCH_OO  , WCH_NONE  , WCH_NONE  , 0x1e      , 0x1e      },
    00404     {VK_OEM_MINUS , KANALOK ,'-'       ,'='       ,WCH_HO  ,WCH_HO  , WCH_NONE  , WCH_NONE  , 0x1f      , 0x1f      },
    00405     {0            , 0       ,0         ,0         ,0       ,0       , 0         , 0         , 0         , 0         }
    00406 };
    00407
    00408 // Put this last so that VkKeyScan interprets number characters
    00409 // as coming from the main section of the kbd (aVkToWch2 and
    00410 // aVkToWch4) before considering the numpad (aVkToWch1).
    00411
    00412 static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch1[] = {
    00413     //                     |          |   SHIFT  |  KANA  | K+SHFT |
    00414     //                     |          |==========|========|========|
    00415     { VK_NUMPAD0   , 0      ,  '0'    , WCH_NONE ,   '0'  ,WCH_NONE},
    00416     { VK_NUMPAD1   , 0      ,  '1'    , WCH_NONE ,   '1'  ,WCH_NONE},
    00417     { VK_NUMPAD2   , 0      ,  '2'    , WCH_NONE ,   '2'  ,WCH_NONE},
    00418     { VK_NUMPAD3   , 0      ,  '3'    , WCH_NONE ,   '3'  ,WCH_NONE},
    00419     { VK_NUMPAD4   , 0      ,  '4'    , WCH_NONE ,   '4'  ,WCH_NONE},
    00420     { VK_NUMPAD5   , 0      ,  '5'    , WCH_NONE ,   '5'  ,WCH_NONE},
    00421     { VK_NUMPAD6   , 0      ,  '6'    , WCH_NONE ,   '6'  ,WCH_NONE},
    00422     { VK_NUMPAD7   , 0      ,  '7'    , WCH_NONE ,   '7'  ,WCH_NONE},
    00423     { VK_NUMPAD8   , 0      ,  '8'    , WCH_NONE ,   '8'  ,WCH_NONE},
    00424     { VK_NUMPAD9   , 0      ,  '9'    , WCH_NONE ,   '9'  ,WCH_NONE},
    00425     { 0            , 0      ,  '\0'   , 0        ,   0    ,0       }   //null terminator
    00426 };
    00427
    00428 /***************************************************************************\
    00429 * aVkToWcharTable: table of pointers to Character Tables
    00430 *
    00431 * Describes the character tables and the order they should be searched.
    00432 *
    00433 * Note: the order determines the behavior of VkKeyScan() : this function
    00434 *       takes a character and attempts to find a Virtual Key and character-
    00435 *       modifier key combination that produces that character.  The table
    00436 *       containing the numeric keypad (aVkToWch1) must appear last so that
    00437 *       VkKeyScan('0') will be interpreted as one of keys from the main
    00438 *       section, not the numpad.  etc.
    00439 \***************************************************************************/
    00440
    00441 static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
    00442     {  (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) },
    00443     {  (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) },
    00444     {  (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) },
    00445     {  (PVK_TO_WCHARS1)aVkToWch1, 4, sizeof(aVkToWch1[0]) },  // must come last
    00446     {                       NULL, 0, 0                    }
    00447 };
    00448
    00449 /***************************************************************************\
    00450 * aKeyNames[], aKeyNamesExt[]  - Scan Code -> Key Name tables
    00451 *
    00452 * For the GetKeyNameText() API function
    00453 *
    00454 * Tables for non-extended and extended (KBDEXT) keys.
    00455 * (Keys producing printable characters are named by the character itself)
    00456 \***************************************************************************/
    00457
    00458 static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
    00459 #if defined(JAPAN) && defined(_PC98_)
    00460 //    0x00,    L"ESC",            // Esc
    00461     0x0e,    L"BS",             // Backspace
    00462     0x0f,    L"TAB",            // Tab
    00463     0x1c,    L"RETURN",         // Enter
    00464     0x34,    L"SPACE",          // Space
    00465     0x35,    L"XFER",           // NLS Key SZ_KEY_NAME_HIRAGANA
    00466     0x36,    L"ROLL UP",        // Page Down
    00467     0x37,    L"ROLL DOWN",      // Page Up
    00468     0x38,    L"INS",            // Insert
    00469     0x39,    L"DEL",            // Delete
    00470     0x3A,    L"UP",             // Up
    00471     0x3B,    L"LEFT",           // Left
    00472     0x3C,    L"RIGHT",          // Right
    00473     0x3D,    L"DOWN",           // Down
    00474     0x3E,    L"CLR",            // Home
    00475     0x3F,    L"HELP",           // End
    00476     0x40,    L"Num -",
    00477     0x41,    L"Num /",
    00478     0x42,    L"Num 7",
    00479     0x43,    L"Num 8",
    00480     0x44,    L"Num 9",
    00481     0x45,    L"Num *",
    00482     0x46,    L"Num 4",
    00483     0x47,    L"Num 5",
    00484     0x48,    L"Num 6",
    00485     0x49,    L"Num +",
    00486     0x4a,    L"Num 1",
    00487     0x4b,    L"Num 2",
    00488     0x4c,    L"Num 3",
    00489     0x4d,    L"Num =",
    00490     0x4e,    L"Num 0",
    00491     0x4f,    L"Num ,",
    00492     0x50,    L"Num .",
    00493     0x51,    L"NFER",                   //
    00494     0x52,    (LPWSTR)SZ_KEY_NAME_F11,   // vf1
    00495     0x53,    (LPWSTR)SZ_KEY_NAME_F12,   // vf2
    00496     0x54,    (LPWSTR)SZ_KEY_NAME_F13,   // vf3
    00497     0x55,    (LPWSTR)SZ_KEY_NAME_F14,   // vf4
    00498     0x56,    (LPWSTR)SZ_KEY_NAME_F15,   // vf5
    00499     0x60,    L"STOP",                   // Break
    00500     0x61,    L"COPY",                   // Prnt Scr
    00501     0x62,    (LPWSTR)SZ_KEY_NAME_F1,    // F1
    00502     0x63,    (LPWSTR)SZ_KEY_NAME_F2,    // F2
    00503     0x64,    (LPWSTR)SZ_KEY_NAME_F3,    // F3
    00504     0x65,    (LPWSTR)SZ_KEY_NAME_F4,    // F4
    00505     0x66,    (LPWSTR)SZ_KEY_NAME_F5,    // F5
    00506     0x67,    (LPWSTR)SZ_KEY_NAME_F6,    // F6
    00507     0x68,    (LPWSTR)SZ_KEY_NAME_F7,    // F7
    00508     0x69,    (LPWSTR)SZ_KEY_NAME_F8,    // F8
    00509     0x6A,    (LPWSTR)SZ_KEY_NAME_F9,    // F9
    00510     0x6B,    (LPWSTR)SZ_KEY_NAME_F10,   // F10
    00511     0x70,    L"SHIFT",                  // Shift
    00512     0x71,    L"CAPS",                   // Caps Lock
    00513     0x72,    (LPWSTR)SZ_KEY_NAME_KANA,  // NLS Key Katakana
    00514     0x73,    L"GRPH",                   // Alt
    00515     0x74,    L"CTRL",                   // Ctrl
    00516     0x77,    L"Left Windows",
    00517     0x78,    L"Right Windows",
    00518     0x79,    L"Application",
    00519     0x7d,    L"SHIFT",                  // Right Shift
    00520 #else //_PC98_
    00521     0x01,    L"Esc",
    00522     0x0e,    L"Backspace",
    00523     0x0f,    L"Tab",
    00524     0x1c,    L"Enter",
    00525     0x1d,    L"Ctrl",
    00526     0x29,    (LPWSTR)SZ_KEY_NAME_HANKAKU_ZENKAKU,  // NLS Key
    00527     0x2a,    L"Shift",
    00528     0x36,    L"Right Shift",
    00529     0x37,    L"Num *",
    00530     0x38,    L"Alt",
    00531     0x39,    L"Space",
    00532     0x3a,    L"Caps Lock",
    00533     0x3b,    L"F1",
    00534     0x3c,    L"F2",
    00535     0x3d,    L"F3",
    00536     0x3e,    L"F4",
    00537     0x3f,    L"F5",
    00538     0x40,    L"F6",
    00539     0x41,    L"F7",
    00540     0x42,    L"F8",
    00541     0x43,    L"F9",
    00542     0x44,    L"F10",
    00543     0x45,    L"Pause",
    00544     0x46,    L"Scroll Lock",
    00545     0x47,    L"Num 7",
    00546     0x48,    L"Num 8",
    00547     0x49,    L"Num 9",
    00548     0x4a,    L"Num -",
    00549     0x4b,    L"Num 4",
    00550     0x4c,    L"Num 5",
    00551     0x4d,    L"Num 6",
    00552     0x4e,    L"Num +",
    00553     0x4f,    L"Num 1",
    00554     0x50,    L"Num 2",
    00555     0x51,    L"Num 3",
    00556     0x52,    L"Num 0",
    00557     0x53,    L"Num Del",
    00558     0x54,    L"Sys Req",
    00559     0x57,    L"F11",
    00560     0x58,    L"F12",
    00561     0x70,    (LPWSTR)SZ_KEY_NAME_HIRAGANA,
    00562     0x79,    (LPWSTR)SZ_KEY_NAME_HENKAN,
    00563     0x7b,    (LPWSTR)SZ_KEY_NAME_MUHENKAN,
    00564     0x7C,    L"F13",
    00565 #endif // _PC98_
    00566     0   ,    NULL
    00567 };
    00568
    00569 static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
    00570 #if defined(JAPAN) && defined(_PC98_)
    00571 #else //_PC98_
    00572     0x1c,    L"Num Enter",
    00573     0x1d,    L"Right Control",
    00574     0x35,    L"Num /",
    00575     0x37,    L"Prnt Scrn",
    00576     0x38,    L"Right Alt",
    00577     0x45,    L"Num Lock",
    00578     0x46,    L"Break",
    00579     0x47,    L"Home",
    00580     0x48,    L"Up",
    00581     0x49,    L"Page Up",
    00582     0x4b,    L"Left",
    00583     0x4d,    L"Right",
    00584     0x4f,    L"End",
    00585     0x50,    L"Down",
    00586     0x51,    L"Page Down",
    00587     0x52,    L"Insert",
    00588     0x53,    L"Delete",
    00589     0x5B,    L"Left Windows",
    00590     0x5C,    L"Right Windows",
    00591     0x5D,    L"Application",
    00592 #endif // _PC98_
    00593     0   ,    NULL
    00594 };
    00595
    00596 static ALLOC_SECTION_LDATA KBDTABLES KbdTables = {
    00597     /*
    00598      * Modifier keys
    00599      */
    00600     &CharModifiers,
    00601
    00602     /*
    00603      * Characters tables
    00604      */
    00605     aVkToWcharTable,
    00606
    00607     /*
    00608      * Diacritics  (none for US English)
    00609      */
    00610     NULL,
    00611
    00612     /*
    00613      * Names of Keys  (no dead keys)
    00614      */
    00615     aKeyNames,
    00616     aKeyNamesExt,
    00617     NULL,
    00618
    00619     /*
    00620      * Scan codes to Virtual Keys
    00621      */
    00622     ausVK,
    00623     sizeof(ausVK) / sizeof(ausVK[0]),
    00624     aE0VscToVk,
    00625     aE1VscToVk,
    00626
    00627     /*
    00628      * No Locale-specific special processing
    00629      */
    00630     0
    00631 };
    00632
    00633 PKBDTABLES KbdLayerDescriptor(VOID)
    00634 {
    00635     return &KbdTables;
    00636 }
    00637
    00638 /***********************************************************************\
    00639 * VkToFuncTable_106[]
    00640 *
    00641 \***********************************************************************/
    00642
    00643 static ALLOC_SECTION_LDATA VK_F VkToFuncTable_106[] = {
    00644     {
    00645         VK_DBE_ALPHANUMERIC,  // Base Vk
    00646         KBDNLS_TYPE_TOGGLE,   // NLSFEProcType
    00647         KBDNLS_INDEX_NORMAL,  // NLSFEProcCurrent
    00648         0x02, /* 00000010 */  // NLSFEProcSwitch
    00649         {                     // NLSFEProc
    00650             {KBDNLS_ALPHANUM,0},               // Base
    00651             {KBDNLS_SEND_PARAM_VK,VK_CAPITAL}, // Shift
    00652             {KBDNLS_ALPHANUM,0},               // Control
    00653             {KBDNLS_ALPHANUM,0},               // Shift+Control
    00654             {KBDNLS_ALPHANUM,0},               // Alt
    00655             {KBDNLS_ALPHANUM,0},               // Shift+Alt
    00656             {KBDNLS_CODEINPUT,0},              // Control+Alt
    00657             {KBDNLS_CODEINPUT,0}               // Shift+Control+Alt
    00658         },
    00659         {                     // NLSFEProcAlt
    00660             {KBDNLS_SEND_PARAM_VK,VK_CAPITAL}, // Base
    00661             {KBDNLS_SEND_PARAM_VK,VK_CAPITAL}, // Shift
    00662             {KBDNLS_NOEVENT,0},                // Control
    00663             {KBDNLS_NOEVENT,0},                // Shift+Control
    00664             {KBDNLS_NOEVENT,0},                // Alt
    00665             {KBDNLS_NOEVENT,0},                // Shift+Alt
    00666             {KBDNLS_NOEVENT,0},                // Control+Alt
    00667             {KBDNLS_NOEVENT,0}                 // Shift+Control+Alt
    00668         }
    00669     },
    00670     {
    00671         VK_DBE_HIRAGANA,     // Base Vk
    00672         KBDNLS_TYPE_TOGGLE,  // NLSFEProcType
    00673         KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
    00674         0x08, /* 00001000 */ // NLSFEProcSwitch
    00675         {                    // NLSFEProc
    00676             {KBDNLS_HIRAGANA,0},             // Base
    00677             {KBDNLS_KATAKANA,0},             // Shift
    00678             {KBDNLS_HIRAGANA,0},             // Control
    00679             {KBDNLS_SEND_PARAM_VK,VK_KANA},  // Shift+Control
    00680             {KBDNLS_ROMAN,0},                // Alt
    00681             {KBDNLS_ROMAN,0},                // Shift+Alt
    00682             {KBDNLS_ROMAN,0},                // Control+Alt
    00683             {KBDNLS_NOEVENT,0}               // Shift+Control+Alt
    00684         },
    00685         {                    // NLSFEProcIndexAlt
    00686             {KBDNLS_SEND_PARAM_VK,VK_KANA},  // Base
    00687             {KBDNLS_SEND_PARAM_VK,VK_KANA},  // Shift
    00688             {KBDNLS_SEND_PARAM_VK,VK_KANA},  // Control
    00689             {KBDNLS_SEND_PARAM_VK,VK_KANA},  // Shift+Control
    00690             {KBDNLS_NOEVENT,0},              // Alt
    00691             {KBDNLS_NOEVENT,0},              // Shift+Alt
    00692             {KBDNLS_NOEVENT,0},              // Control+Alt
    00693             {KBDNLS_NOEVENT,0}               // Shift+Control+Alt
    00694         }
    00695     },
    00696     {
    00697         VK_DBE_SBCSCHAR,     // Base Vk
    00698         KBDNLS_TYPE_NORMAL,  // NLSFEProcType
    00699         KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
    00700         0x0,                 // NLSFEProcSwitch
    00701         {                    // NLSFEProc
    00702             {KBDNLS_SBCSDBCS,0},             // Base
    00703             {KBDNLS_SBCSDBCS,0},             // Shift
    00704             {KBDNLS_SBCSDBCS,0},             // Control
    00705             {KBDNLS_SBCSDBCS,0},             // Shift+Control
    00706             {KBDNLS_SEND_PARAM_VK,VK_KANJI}, // Alt
    00707             {KBDNLS_SBCSDBCS,0},             // Shift+Alt
    00708             {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE}, // Control+Alt
    00709             {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE}  // Shift+Control+Alt
    00710         },
    00711         {                    // NLSFEProcIndexAlt
    00712             {KBDNLS_NULL,0},  // Base
    00713             {KBDNLS_NULL,0},  // Shift
    00714             {KBDNLS_NULL,0},  // Control
    00715             {KBDNLS_NULL,0},  // Shift+Control
    00716             {KBDNLS_NULL,0},  // Alt
    00717             {KBDNLS_NULL,0},  // Shift+Alt
    00718             {KBDNLS_NULL,0},  // Control+Alt
    00719             {KBDNLS_NULL,0}   // Shift+Control+Alt
    00720         }
    00721     },
    00722     {
    00723         VK_NONCONVERT,       // Base Vk
    00724         KBDNLS_TYPE_NORMAL,  // NLSFEProcType
    00725         KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
    00726         0x0,                 // NLSFEProcSwitch
    00727         {                    // NLSFEProc
    00728             {KBDNLS_SEND_BASE_VK,0},         // Base
    00729             {KBDNLS_SEND_BASE_VK,0},         // Shift
    00730             {KBDNLS_SEND_BASE_VK,0},         // Control
    00731             {KBDNLS_SEND_BASE_VK,0},         // Shift+Control
    00732             {KBDNLS_SEND_BASE_VK,0},         // Alt
    00733             {KBDNLS_SEND_BASE_VK,0},         // Shift+Alt
    00734             {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE}, // Control+Alt
    00735             {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE}  // Shift+Control+Alt
    00736         },
    00737         {                         // NLSFEProcIndexAlt
    00738             {KBDNLS_NULL,0},  // Base
    00739             {KBDNLS_NULL,0},  // Shift
    00740             {KBDNLS_NULL,0},  // Control
    00741             {KBDNLS_NULL,0},  // Shift+Control
    00742             {KBDNLS_NULL,0},  // Alt
    00743             {KBDNLS_NULL,0},  // Shift+Alt
    00744             {KBDNLS_NULL,0},  // Control+Alt
    00745             {KBDNLS_NULL,0}   // Shift+Control+Alt
    00746         }
    00747     }
    00748 };
    00749
    00750 #if defined(JAPAN) && defined(_PC98_)
    00751 static ALLOC_SECTION_LDATA VK_F VkToFuncTable_NEC[] = {
    00752     {
    00753         VK_DBE_SBCSCHAR,     // Base Vk
    00754         KBDNLS_TYPE_NORMAL,  // NLSFEProcType
    00755         KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
    00756         0x0,                 // NLSFEProcSwitch
    00757         {                    // NLSFEProc
    00758             {KBDNLS_SBCSDBCS,0},             // Base
    00759             {KBDNLS_SBCSDBCS,0},             // Shift
    00760             {KBDNLS_SBCSDBCS,0},             // Control
    00761             {KBDNLS_SBCSDBCS,0},             // Shift+Control
    00762             {KBDNLS_SBCSDBCS,0},             // Alt
    00763 //            {KBDNLS_SEND_PARAM_VK,VK_KANJI}, // Alt
    00764             {KBDNLS_SBCSDBCS,0},             // Shift+Alt
    00765             {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE}, // Control+Alt
    00766             {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE}  // Shift+Control+Alt
    00767         },
    00768         {                     // NLSFEProcIndexAlt
    00769             {KBDNLS_NULL,0},  // Base
    00770             {KBDNLS_NULL,0},  // Shift
    00771             {KBDNLS_NULL,0},  // Control
    00772             {KBDNLS_NULL,0},  // Shift+Control
    00773             {KBDNLS_NULL,0},  // Alt
    00774             {KBDNLS_NULL,0},  // Shift+Alt
    00775             {KBDNLS_NULL,0},  // Control+Alt
    00776             {KBDNLS_NULL,0}   // Shift+Control+Alt
    00777         }
    00778     },
    00779     {
    00780         VK_NONCONVERT,       // Base Vk  PC98_NFER key
    00781         KBDNLS_TYPE_NORMAL,  // NLSFEProcType
    00782         KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
    00783         0x0,                 // NLSFEProcSwitch
    00784         {                    // NLSFEProc
    00785             {KBDNLS_SEND_BASE_VK,0},                             // Base
    00786             {KBDNLS_SEND_BASE_VK,0},                             // Shift
    00787             {KBDNLS_SEND_PARAM_VK,VK_DBE_ALPHANUMERIC},          // Control
    00788             {KBDNLS_SBCSDBCS,0},                                 // Shift+Control
    00789             {KBDNLS_SEND_PARAM_VK,VK_DBE_KATAKANA},              // Alt
    00790             {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE}, // Shift+Alt
    00791             {KBDNLS_SEND_PARAM_VK,VK_DBE_NOCODEINPUT},           // Control+Alt
    00792             {KBDNLS_SEND_PARAM_VK,VK_DBE_FLUSHSTRING}            // Shift+Control+Alt
    00793         },
    00794         {                     // NLSFEProcIndexAlt
    00795             {KBDNLS_NULL,0},  // Base
    00796             {KBDNLS_NULL,0},  // Shift
    00797             {KBDNLS_NULL,0},  // Control
    00798             {KBDNLS_NULL,0},  // Shift+Control
    00799             {KBDNLS_NULL,0},  // Alt
    00800             {KBDNLS_NULL,0},  // Shift+Alt
    00801             {KBDNLS_NULL,0},  // Control+Alt
    00802             {KBDNLS_NULL,0}   // Shift+Control+Alt
    00803         }
    00804     },
    00805     {
    00806         VK_CONVERT,            // Base Vk  PC98_XFER key
    00807         KBDNLS_TYPE_NORMAL,  // NLSFEProcType
    00808         KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
    00809         0x0,                 // NLSFEProcSwitch
    00810         {                    // NLSFEProc
    00811             {KBDNLS_SEND_BASE_VK,0},                          // Base
    00812             {KBDNLS_SEND_BASE_VK,0},                          // Shift
    00813             {KBDNLS_SEND_PARAM_VK,VK_KANJI},                  // Control
    00814             {KBDNLS_SEND_BASE_VK,0},                          // Shift+Control
    00815             {KBDNLS_ROMAN,0},                                 // Alt
    00816             {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE}, // Shift+Alt
    00817             {KBDNLS_SEND_PARAM_VK,VK_DBE_CODEINPUT},          // Control+Alt
    00818             {KBDNLS_SEND_PARAM_VK,VK_DBE_HIRAGANA}            // Shift+Control+Alt
    00819         },
    00820         {                     // NLSFEProcIndexAlt
    00821             {KBDNLS_NULL,0},  // Base
    00822             {KBDNLS_NULL,0},  // Shift
    00823             {KBDNLS_NULL,0},  // Control
    00824             {KBDNLS_NULL,0},  // Shift+Control
    00825             {KBDNLS_NULL,0},  // Alt
    00826             {KBDNLS_NULL,0},  // Shift+Alt
    00827             {KBDNLS_NULL,0},  // Control+Alt
    00828             {KBDNLS_NULL,0}   // Shift+Control+Alt
    00829         }
    00830     },
    00831     {
    00832         VK_OEM_NEC_EQUAL,    // Base Vk NEC98_"="  key
    00833         KBDNLS_TYPE_NORMAL,  // NLSFEProcType
    00834         KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
    00835         0x0,                 // NLSFEProcSwitch
    00836         {                    // NLSFEProc
    00837             {KBDNLS_SEND_BASE_VK,0},                  // Base
    00838             {KBDNLS_SEND_BASE_VK,0},                  // Shift
    00839             {KBDNLS_SEND_PARAM_VK,VK_SCROLL},         // Control
    00840             {KBDNLS_SEND_BASE_VK,0},                  // Shift+Control
    00841             {KBDNLS_SEND_BASE_VK,0},                  // Alt
    00842             {KBDNLS_SEND_BASE_VK,0},                  // Shift+Alt
    00843             {KBDNLS_SEND_BASE_VK,0},                  // Control+Alt
    00844             {KBDNLS_SEND_BASE_VK,0}                   // Shift+Control+Alt
    00845         },
    00846         {                     // NLSFEProcIndexAlt
    00847             {KBDNLS_NULL,0},  // Base
    00848             {KBDNLS_NULL,0},  // Shift
    00849             {KBDNLS_NULL,0},  // Control
    00850             {KBDNLS_NULL,0},  // Shift+Control
    00851             {KBDNLS_NULL,0},  // Alt
    00852             {KBDNLS_NULL,0},  // Shift+Alt
    00853             {KBDNLS_NULL,0},  // Control+Alt
    00854             {KBDNLS_NULL,0}   // Shift+Control+Alt
    00855         }
    00856     },
    00857     {
    00858         VK_HOME,             // Base Vk  PC98_HOME  key
    00859         KBDNLS_TYPE_NORMAL,  // NLSFEProcType
    00860         KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
    00861         0x0,                 // NLSFEProcSwitch
    00862         {                    // NLSFEProc
    00863             {KBDNLS_HOME_OR_CLEAR,0},         // Base
    00864             {KBDNLS_SEND_BASE_VK,0},          // Shift
    00865             {KBDNLS_HOME_OR_CLEAR,0},         // Control
    00866             {KBDNLS_HOME_OR_CLEAR,0},         // Shift+Control
    00867             {KBDNLS_HOME_OR_CLEAR,0},         // Alt
    00868             {KBDNLS_HOME_OR_CLEAR,0},         // Shift+Alt
    00869             {KBDNLS_HOME_OR_CLEAR,0},         // Control+Alt
    00870             {KBDNLS_HOME_OR_CLEAR,0}          // Shift+Control+Alt
    00871         },
    00872         {                     // NLSFEProcIndexAlt
    00873             {KBDNLS_NULL,0},  // Base
    00874             {KBDNLS_NULL,0},  // Shift
    00875             {KBDNLS_NULL,0},  // Control
    00876             {KBDNLS_NULL,0},  // Shift+Control
    00877             {KBDNLS_NULL,0},  // Alt
    00878             {KBDNLS_NULL,0},  // Shift+Alt
    00879             {KBDNLS_NULL,0},  // Control+Alt
    00880             {KBDNLS_NULL,0}   // Shift+Control+Alt
    00881         }
    00882     },
    00883     {
    00884         VK_END,              // Base Vk  PC98_HELP  key
    00885         KBDNLS_TYPE_NORMAL,  // NLSFEProcType
    00886         KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
    00887         0x0,                 // NLSFEProcSwitch
    00888         {                    // NLSFEProc
    00889             {KBDNLS_HELP_OR_END,0},         // Base
    00890             {KBDNLS_HELP_OR_END,0},         // Shift
    00891             {KBDNLS_HELP_OR_END,0},         // Control
    00892             {KBDNLS_HELP_OR_END,0},         // Shift+Control
    00893             {KBDNLS_HELP_OR_END,0},         // Alt
    00894             {KBDNLS_HELP_OR_END,0},         // Shift+Alt
    00895             {KBDNLS_HELP_OR_END,0},         // Control+Alt
    00896             {KBDNLS_HELP_OR_END,0}          // Shift+Control+Alt
    00897         },
    00898         {                     // NLSFEProcIndexAlt
    00899             {KBDNLS_NULL,0},  // Base
    00900             {KBDNLS_NULL,0},  // Shift
    00901             {KBDNLS_NULL,0},  // Control
    00902             {KBDNLS_NULL,0},  // Shift+Control
    00903             {KBDNLS_NULL,0},  // Alt
    00904             {KBDNLS_NULL,0},  // Shift+Alt
    00905             {KBDNLS_NULL,0},  // Control+Alt
    00906             {KBDNLS_NULL,0}   // Shift+Control+Alt
    00907         }
    00908     }
    00909 };
    00910
    00911 USHORT ausMouseVKey98[] = {
    00912                        VK_NUMPAD5,
    00913                        VK_NUMPAD9,
    00914                        VK_NUMPAD3,
    00915                        VK_NUMPAD1,
    00916                        VK_NUMPAD7,
    00917                        VK_NUMPAD4,
    00918                        VK_NUMPAD8,
    00919                        VK_NUMPAD6,
    00920                        VK_NUMPAD2,
    00921                        VK_NUMPAD0,
    00922                        VK_DECIMAL,
    00923                        VK_MULTIPLY,
    00924                        VK_ADD,
    00925                        VK_SUBTRACT,
    00926                        VK_DIVIDE | KBDEXT,
    00927                        VK_HOME | KBDEXT
    00928                       };
    00929
    00930 #else //_PC98_
    00931 #endif // _PC98_
    00932 /***********************************************************************\
    00933 * KbdNlsTables
    00934 *
    00935 \***********************************************************************/
    00936
    00937 static ALLOC_SECTION_LDATA KBDNLSTABLES KbdNlsTables = {
    00938 #if defined(JAPAN) && defined(_PC98_)
    00939     0x0d,                            // OEM ID (0x0d = NEC)
    00940     NLSKBD_INFO_ACCESSIBILITY_KEYMAP,// Information
    00941     6,                               // Number of VK_F entry
    00942     VkToFuncTable_NEC,               // Pointer to VK_F array
    00943     16,                              // Number of MouseVk entry
    00944     ausMouseVKey98                   // Pointer to MouseVk array
    00945 #else //_PC98_
    00946     0,                      // OEM ID (0 = Microsoft)
    00947     0,                      // Information
    00948     4,                      // Number of VK_F entry
    00949     VkToFuncTable_106,      // Pointer to VK_F array
    00950     0,                      // Number of MouseVk entry
    00951     NULL                    // Pointer to MouseVk array
    00952 #endif // _PC98_
    00953 };
    00954
    00955 PKBDNLSTABLES KbdNlsLayerDescriptor(VOID)
    00956 {
    00957     return &KbdNlsTables;
    00958 }