/*++

Copyright (c) 1995-1999 Microsoft Corporation, All Rights Reserved

Module Name:

    DATA.C
    
++*/

#include <windows.h>
#include <immdev.h>
#include "imedefs.h"

#pragma data_seg(".ShareDate")
IMEG      sImeG = {0};
MBINDEX   MBIndex = {0};

#ifdef UNICODE
TCHAR SKLayout[NumsSK][MAXSOFTKEYS] = {
#ifdef KEYSTICKER
#ifdef CHAJEI
        0x3000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x65E5, 0x6708, 0x91D1, 0x6728, 0x6C34,
        0x706B, 0x571F, 0x7AF9, 0x6208, 0x5341, 0x5927, 0x4E2D, 0x4E00,
        0x5F13, 0x4EBA, 0x5FC3, 0x624B, 0x53E3, 0x5C38, 0x5EFF, 0x5C71,
        0x5973, 0x7530, 0x96E3, 0x535C, 0xFF3A, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 
#else //if PHON
        0x3000, 0x3122, 0x3105, 0x3109, 0x02C7, 0x02CB, 0x3113, 0x02CA,
        0x02D9, 0x311A, 0x311E, 0x3107, 0x3116, 0x310F, 0x310E, 0x310D,
        0x3111, 0x3115, 0x3118, 0x311B, 0x3128, 0x311C, 0x3120, 0x3129,
        0x3119, 0x311F, 0x3123, 0x3106, 0x3110, 0x310B, 0x3114, 0x3127,
        0x3112, 0x310A, 0x310C, 0x3117, 0x3108, 0x3124, 0x0020, 0x311D,
        0x3126, 0x3121, 0x3125, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 
#endif //CHAJEI
#else //KEYSTICKER
        0x3000, 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16,
        0xFF17, 0xFF18, 0xFF19, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45,
        0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D,
        0xFF4E, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55,
        0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0xFF1B, 0xFF1D, 0xFF0C,
        0xFF0D, 0xFF0E, 0xFF0F, 0xFF40, 0xFF3B, 0xFF3C, 0xFF3D, 0xFF07, 
#endif //KEYSTICKER
        0x3000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x03BA, 0x03C7, 0x03C5, 0x03BC, 0x03B3,
        0x03BD, 0x03BE, 0x03BF, 0x03B8, 0x03C0, 0x03C1, 0x0020, 0x03C9,
        0x03C8, 0x03B9, 0x0020, 0x03B1, 0x03B4, 0x03BB, 0x03B5, 0x03B7,
        0x03C6, 0x03B2, 0x03C4, 0x03B6, 0x03C3, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 

        0x3000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x043B, 0x044A, 0x0448, 0x043D, 0x0432,
        0x043E, 0x043F, 0x0440, 0x0436, 0x0441, 0x0442, 0x0443, 0x044C,
        0x044B, 0x0437, 0x0438, 0x0430, 0x0433, 0x043C, 0x0434, 0x0451,
        0x0449, 0x0431, 0x0447, 0x0435, 0x0446, 0x0444, 0x0020, 0x044D,
        0x0020, 0x044E, 0x044F, 0x0020, 0x0439, 0x0020, 0x043A, 0x0445, 

        0x3000, 0x3122, 0x3105, 0x3109, 0x02C7, 0x02CB, 0x3113, 0x02CA,
        0x02D9, 0x311A, 0x311E, 0x3107, 0x3116, 0x310F, 0x310E, 0x310D,
        0x3111, 0x3115, 0x3118, 0x311B, 0x3128, 0x311C, 0x3120, 0x3129,
        0x3119, 0x311F, 0x3123, 0x3106, 0x3110, 0x310B, 0x3114, 0x3127,
        0x3112, 0x310A, 0x310C, 0x3117, 0x3108, 0x3124, 0x0020, 0x311D,
        0x3126, 0x3121, 0x3125, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 

        0x3000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0113, 0x0020, 0x01D4, 0x011B, 0x01CE,
        0x00E8, 0x0020, 0x012B, 0x01D2, 0x00ED, 0x01D0, 0x00EC, 0x01D8,
        0x01D6, 0x00F2, 0x0020, 0x0101, 0x00E0, 0x00E9, 0x0020, 0x00F3,
        0x00F9, 0x00E1, 0x00FA, 0x014D, 0x016B, 0x0020, 0x0020, 0x01DA,
        0x0020, 0x01DC, 0x00FC, 0x0020, 0x00EA, 0x0020, 0x0020, 0x0020, 

        0x3000, 0x0020, 0x3043, 0x3045, 0x3047, 0x3049, 0x304B, 0x304D,
        0x304F, 0x3051, 0x3053, 0x306A, 0x3082, 0x3080, 0x306C, 0x3059,
        0x306D, 0x306E, 0x306F, 0x3064, 0x3072, 0x3075, 0x3078, 0x3085,
        0x3083, 0x3063, 0x3066, 0x3055, 0x305B, 0x306B, 0x305D, 0x3061,
        0x3081, 0x3057, 0x307F, 0x305F, 0x307E, 0x307B, 0x0020, 0x3087,
        0x3093, 0x308E, 0x3092, 0x3041, 0x3068, 0x0020, 0x3090, 0x3091, 

        0x3000, 0x30B1, 0x30A3, 0x30A5, 0x30F4, 0x30A7, 0x30A9, 0x30AB,
        0x30F5, 0x30AD, 0x30AF, 0x30CA, 0x30E2, 0x30E0, 0x30CC, 0x30B9,
        0x30CD, 0x30CE, 0x30CF, 0x30C4, 0x30D2, 0x30D5, 0x30D8, 0x30E5,
        0x30E3, 0x30C3, 0x30C6, 0x30B5, 0x30BB, 0x30CB, 0x30BD, 0x30C1,
        0x30E1, 0x30B7, 0x30DF, 0x30BF, 0x30DE, 0x30DB, 0x30B3, 0x30E7,
        0x30F6, 0x30EE, 0x30F2, 0x30A1, 0x30C8, 0x30F3, 0x30F0, 0x30F1, 

        0x3000, 0x02C9, 0xFF0C, 0x3001, 0xFF1B, 0xFF1A, 0xFF1F, 0xFF01,
        0x2026, 0x2014, 0x00B7, 0x3014, 0xFF08, 0x3010, 0x3008, 0x201C,
        0x3009, 0x300A, 0x300B, 0x2236, 0x300C, 0x300D, 0x300E, 0xFF3B,
        0xFF09, 0xFF02, 0xFF07, 0x2018, 0x201D, 0x3015, 0x3005, 0x2016,
        0x3011, 0x2019, 0x3017, 0xFF5E, 0x3016, 0x300F, 0x00A8, 0xFF3D,
        0x02C7, 0xFF5B, 0xFF5D, 0x3002, 0xFF40, 0x3003, 0xFF5C, 0xFF0E, 

        0x3000, 0x216A, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166,
        0x2167, 0x2168, 0x2169, 0x3220, 0x2478, 0x2476, 0x3222, 0x248A,
        0x3223, 0x3224, 0x3225, 0x248F, 0x3226, 0x3227, 0x3228, 0x247A,
        0x2479, 0x2490, 0x2491, 0x2488, 0x248B, 0x3221, 0x248C, 0x248E,
        0x2477, 0x2489, 0x2475, 0x248D, 0x2474, 0x3229, 0x0020, 0x247B,
        0x216B, 0x247C, 0x247D, 0x2160, 0x0020, 0x0020, 0x0020, 0x0020, 

        0x3000, 0x0020, 0x2261, 0x2260, 0xFF1D, 0x2264, 0x2265, 0xFF1C,
        0xFF1E, 0x226E, 0x226F, 0x2227, 0x2299, 0x2220, 0x2211, 0xFF0D,
        0x220F, 0x222A, 0x2229, 0x222B, 0x2208, 0x0020, 0x2235, 0x223D,
        0x224C, 0x222E, 0x221D, 0x00B1, 0x00D7, 0x2228, 0x00F7, 0x0020,
        0x2312, 0xFF0B, 0x2225, 0xFF0F, 0x22A5, 0x2234, 0x0020, 0x0020,
        0x2237, 0x221A, 0x0020, 0x2248, 0x221E, 0x0020, 0x0020, 0x0020, 

        0x3000, 0x00A4, 0x00B0, 0x2032, 0x2033, 0xFF04, 0xFFE1, 0xFFE5,
        0x2030, 0xFF05, 0x2103, 0x767E, 0x0020, 0x6BEB, 0x4E07, 0x4E8C,
        0x4EBF, 0x5146, 0x5409, 0x4E03, 0x592A, 0x62CD, 0x827E, 0x0020,
        0x0020, 0x516B, 0x4E5D, 0x25CB, 0x4E09, 0x5343, 0x56DB, 0x516D,
        0x5FAE, 0x4E00, 0x5398, 0x4E94, 0x5206, 0x0020, 0x0020, 0x0020,
        0xFFE0, 0x0020, 0x0020, 0x0020, 0x5341, 0x0020, 0x0020, 0x0020, 

        0x3000, 0x2504, 0x250D, 0x250E, 0x250F, 0x2510, 0x2511, 0x2512,
        0x2513, 0x0020, 0x2500, 0x252C, 0x2540, 0x253E, 0x252E, 0x251E,
        0x252F, 0x2530, 0x2531, 0x2523, 0x2532, 0x2533, 0x0020, 0x2542,
        0x2541, 0x0020, 0x2502, 0x251C, 0x251F, 0x252D, 0x2520, 0x2522,
        0x253F, 0x251D, 0x253D, 0x2521, 0x253C, 0x0020, 0x0020, 0x2543,
        0x2508, 0x0020, 0x0020, 0x250C, 0x2506, 0x0020, 0x250A, 0x0020, 

        0x3000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x25A0, 0xFF3E, 0xFF20, 0x25B2, 0x2606,
        0x203B, 0x2192, 0x2190, 0x25C7, 0x2191, 0x2193, 0x3013, 0xFFE3,
        0xFF3F, 0x25C6, 0x25A1, 0x00A7, 0x2605, 0x25B3, 0x25CB, 0x25CE,
        0xFF3C, 0x2116, 0xFF06, 0x25CF, 0xFF03, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 
    };

TCHAR SKLayoutS[NumsSK][MAXSOFTKEYS] = {
#ifdef KEYSTICKER
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
#else
        0x3000, 0xFF09, 0xFF01, 0xFF20, 0xFF03, 0xFF04, 0xFF05, 0xFF3E,
        0xFF06, 0xFF0A, 0xFF08, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25,
        0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D,
        0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35,
        0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF1A, 0xFF0B, 0xFF1C,
        0xFF3F, 0xFF1E, 0xFF1F, 0xFF5E, 0xFF5B, 0xFF5C, 0xFF5D, 0xFF02, 
#endif //KEYSTICKER
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x039A, 0x03A7, 0x03A5, 0x039C, 0x0393,
        0x039D, 0x039E, 0x039F, 0x0398, 0x03A0, 0x03A1, 0x0020, 0x03A9,
        0x03A8, 0x0399, 0x0020, 0x0391, 0x0394, 0x039B, 0x0395, 0x0397,
        0x03A6, 0x0392, 0x03A4, 0x0396, 0x03A3, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 

        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x041B, 0x042A, 0x0428, 0x041D, 0x0412,
        0x041E, 0x041F, 0x0420, 0x0416, 0x0421, 0x0422, 0x0423, 0x042C,
        0x042B, 0x0417, 0x0418, 0x0410, 0x0413, 0x041C, 0x0414, 0x0401,
        0x0429, 0x0411, 0x0427, 0x0415, 0x0426, 0x0424, 0x0020, 0x042D,
        0x0020, 0x042E, 0x042F, 0x0020, 0x0419, 0x0020, 0x041A, 0x0425, 

        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,

        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,

        0x0020, 0x0020, 0x3044, 0x3046, 0x3048, 0x304A, 0x304C, 0x304E,
        0x3050, 0x3052, 0x3054, 0x3071, 0x308D, 0x308B, 0x3077, 0x305A,
        0x307A, 0x307D, 0x3070, 0x3065, 0x3073, 0x3076, 0x3079, 0x3086,
        0x3084, 0x0020, 0x3067, 0x3056, 0x305C, 0x3074, 0x305E, 0x3062,
        0x308C, 0x3058, 0x308A, 0x3060, 0x3089, 0x307C, 0x0020, 0x3088,
        0x0020, 0x308F, 0x0020, 0x3042, 0x3069, 0x0020, 0x0020, 0x0020, 

        0x0020, 0x30B2, 0x30A4, 0x30A6, 0x0020, 0x30A8, 0x30AA, 0x30AC,
        0x0020, 0x30AE, 0x30B0, 0x30D1, 0x30ED, 0x30EB, 0x30D7, 0x30BA,
        0x30DA, 0x30DD, 0x30D0, 0x30C5, 0x30D3, 0x30D6, 0x30D9, 0x30E6,
        0x30E4, 0x0020, 0x30C7, 0x30B6, 0x30BC, 0x30D4, 0x30BE, 0x30C2,
        0x30EC, 0x30B8, 0x30EA, 0x30C0, 0x30E9, 0x30DC, 0x30B4, 0x30E8,
        0x0020, 0x30EF, 0x0020, 0x30A2, 0x30C9, 0x0020, 0x0020, 0x0020, 

        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,

        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x2460, 0x2482, 0x2480, 0x2462, 0x2494,
        0x2463, 0x2464, 0x2465, 0x2499, 0x2466, 0x2467, 0x2468, 0x2484,
        0x2483, 0x249A, 0x249B, 0x2492, 0x2495, 0x2461, 0x2496, 0x2498,
        0x2481, 0x2493, 0x247F, 0x2497, 0x247E, 0x2469, 0x0020, 0x2485,
        0x0020, 0x2486, 0x2487, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 

        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,

        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x4F70, 0x0020, 0x0020, 0x0020, 0x8D30,
        0x0020, 0x0020, 0x0020, 0x67D2, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x634C, 0x7396, 0x96F6, 0x53C1, 0x4EDF, 0x8086, 0x9646,
        0x0020, 0x58F9, 0x0020, 0x4F0D, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x62FE, 0x0020, 0x0020, 0x0020, 

        0x0020, 0x2505, 0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251A,
        0x251B, 0x0020, 0x2501, 0x2534, 0x2548, 0x2546, 0x2536, 0x2526,
        0x2537, 0x2538, 0x2539, 0x252B, 0x253A, 0x253B, 0x0020, 0x254A,
        0x2549, 0x0020, 0x2503, 0x2524, 0x2527, 0x2535, 0x2528, 0x252A,
        0x2547, 0x2525, 0x2545, 0x2529, 0x2544, 0x0020, 0x0020, 0x254B,
        0x2509, 0x0020, 0x0020, 0x2514, 0x2507, 0x0020, 0x250B, 0x0020, 

        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
    };
#else

BYTE SKLayout[NumsSK][MAXSOFTKEYS*2] = {
#ifdef KEYSTICKER
#ifdef CHAJEI
    "　                    日月金木水火土竹戈十大中一弓人心手口尸廿山女田難卜Ｚ                      "),
#else //if PHON
    "　ㄢㄅㄉˇˋㄓˊ˙ㄚㄞㄇㄖㄏㄎㄍㄑㄕㄘㄛㄨㄜㄠㄩㄙㄟㄣㄆㄐㄋㄔㄧㄒㄊㄌㄗㄈㄤ  ㄝㄦㄡㄥ          ",
#endif //CHAJEI
#else //KEYSTICKER
    "　０１２３４５６７８９ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ；＝，－．／｀［＼］＇",
#endif //KEYSTICKER
    "　                    κχυμγνξοθπρ  ωψι  αδλεηφβτζσ                      ",
    "　                    лъшнвопржстуьызиагмдёщбчецф  э  юя  й  кх",
    "　ㄢㄅㄉˇˋㄓˊ˙ㄚㄞㄇㄖㄏㄎㄍㄑㄕㄘㄛㄨㄜㄠㄩㄙㄟㄣㄆㄐㄋㄔㄧㄒㄊㄌㄗㄈㄤ  ㄝㄦㄡㄥ          ",
//    "　ㄦㄉ    ㄓ    ㄚㄞㄢㄇㄖㄏㄎㄍㄑㄕㄘㄛㄨㄜㄠㄩㄙㄟㄣㄆㄐㄋㄔㄧㄒㄊ  ㄗㄈㄤ  ㄝ  ㄡㄥㄅ        ",
    "　                    ē  ǔěǎè  īǒíǐìǘǖò  āàé  óùáúōū    ǚ  ǜü  ê      ",
    "　  ぃぅぇぉかきくけこなもむぬすねのはつひふへゅゃってさせにそちめしみたまほ  ょんゎをぁと  ゐゑ",
    "　ケィゥヴェォカヵキクナモムヌスネノハツヒフヘュャッテサセニソチメシミタマホコョヶヮヲァトンヰヱ",
    "　ˉ，、；：？！…—·〔（【〈“〉《》∶「」『［）＂＇‘”〕々‖】’〗～〖』¨］ˇ｛｝。｀〃｜．",
    "　ⅪⅡⅢⅣⅤⅥⅦⅧⅨⅩ㈠⑸⑶㈢⒊㈣㈤㈥⒏㈦㈧㈨⑺⑹⒐⒑⒈⒋㈡⒌⒎⑷⒉⑵⒍⑴㈩  ⑻Ⅻ⑼⑽Ⅰ        ",
    "　  ≡≠＝≤≥＜＞≮≯∧⊙∠∑－∏∪∩∫∈  ∵∽≌∮∝±×∨÷  ⌒＋∥／⊥∴    ∷√  ≈∞      ",
    "　¤°′″＄￡￥‰％℃百  毫万二亿兆吉七太拍艾    八九○三千四六微一厘五分      ￠      十      ",
    "　┄┍┎┏┐┑┒┓  ─┬╀┾┮┞┯┰┱┣┲┳  ╂╁  │├┟┭┠┢┿┝┽┡┼    ╃┈    ┌┆  ┊  ",
    "　                    ■＾＠▲☆※→←◇↑↓〓￣＿◆□§★△○◎＼№＆●＃                      ",
    };
BYTE SKLayoutS[NumsSK][MAXSOFTKEYS*2] = {
#ifdef KEYSTICKER
    "                                                                                                ",
#else
    "　）！＠＃＄％＾＆＊（ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ：＋＜＿＞？～｛｜｝＂",
#endif //KEYSTICKER
    "                      ΚΧΥΜΓΝΞΟΘΠΡ  ΩΨΙ  ΑΔΛΕΗΦΒΤΖΣ                      ",
    "                      ЛЪШНВОПРЖСТУЬЫЗИАГМДЁЩБЧЕЦФ  Э  ЮЯ  Й  КХ",
    "                                                                                                ",
    "                                                                                                ",
    "    いうえおがぎぐげごぱろるぷずぺぽぼづびぶべゆや  でざぜぴぞぢれじりだらぼ  よ  わ  あど      ",
    "  ゲイウ  エオガ  ギグパロルプズペポバヅビブベユヤ  デザゼピゾヂレジリダラボゴヨ  ワ  アド      ",
    "                                                                                                ",
    "                      ①⒂⒀③⒔④⑤⑥⒙⑦⑧⑨⒄⒃⒚⒛⒒⒕②⒖⒘⒁⒓⑿⒗⑾⑩  ⒅  ⒆⒇          ",
    "                                                                                                ",
    "                      佰      贰      柒          扒玖零叁仟肆陆  壹  伍                拾      ",
    "  ┅┕┖┗┘┙┚┛  ━┴╈╆┶┦┷┸┹┫┺┻  ╊╉  ┃┤┧┵┨┪╇┥╅┩╄    ╋┉    └┇  ┋  ",
    "                                                                                                ",
    };
#endif //UNICODE

#pragma data_seg()

//
TCHAR  CWCodeStr[13] = {0};
TCHAR  CWDBCSStr[41] = {0};
HWND  hCrtDlg = NULL;
UINT  uStartComp = 0;
UINT  uOpenCand = 0;
UINT  uCaps = 0;
DWORD SaTC_Trace;
UINT  UI_CANDSTR = 300;

HINSTANCE hInst;
IMEL      sImeL;
LPIMEL    lpImeL = NULL;
TCHAR      szImeMBFileName[MAX_PATH] = TEXT("");
TCHAR      szUIClassName[CLASS_LEN] = TEXT("");
TCHAR      szCompClassName[CLASS_LEN] = TEXT("");
TCHAR      szCandClassName[CLASS_LEN] = TEXT("");
TCHAR      szStatusClassName[CLASS_LEN] = TEXT("");
TCHAR      szCMenuClassName[CLASS_LEN];            
TCHAR      szSoftkeyMenuClassName[CLASS_LEN];    
TCHAR      szOrgName[NAMESIZE/2] = TEXT("");
TCHAR      szVerInfo[NAMESIZE] = TEXT("");
TCHAR      szHandCursor[] = TEXT("Hand");
TCHAR      szChinese[] = TEXT("Chinese");
TCHAR      szCZ[] = TEXT("CZ");
#ifdef UNICODE
WCHAR      szCandInf1[] = {
        0x0020, 0x0020, 0x0053, 0x0068, 0x0069, 0x0066, 0x0074, 0x0020,
        0x002B, 0x0020, 0x6570, 0x5B57, 0x952E, 0x0000
    };

WCHAR      szCandInf2[] = {
        0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x6570, 0x5B57,
        0x952E, 0x0000
    };
#else
TCHAR      szCandInf1[] = TEXT("  Shift + 数字键");
TCHAR      szCandInf2[] = TEXT("      数字键");
#endif
TCHAR      szEnglish[] = TEXT("English");
TCHAR      szImeName[] = TEXT("ImeName");
TCHAR      szCode[] = TEXT("Code");
TCHAR      szEudc[] = TEXT("Eudc");
TCHAR      szFullShape[] = TEXT("FullShape");
TCHAR      szHalfShape[] = TEXT("HalfShape");
TCHAR      szSymbol[] = TEXT("Symbol");
TCHAR      szNoSymbol[] = TEXT("NoSymbol");
TCHAR      szNone[] = TEXT("None");
TCHAR      szSoftKBD[] = TEXT("SoftKBD");
TCHAR      szNoSoftKBD[] = TEXT("NoSoftKBD");
TCHAR      szDigit[] = TEXT("01234567890");
#ifdef UNICODE
WCHAR      szTrace[] = { 0x5149, 0x6807, 0x8DDF, 0x968F, 0x0000 };
WCHAR     szWarnTitle[] = { 0x8B66, 0x544A, 0x0000 };
WCHAR      szErrorTitle[] = { 0x9519, 0x8BEF, 0x0000 };
#else
TCHAR      szTrace[]= TEXT("光标跟随");
TCHAR      szWarnTitle[]=TEXT("警告");    
TCHAR      szErrorTitle[]=TEXT("错误");
#endif

// convert char to upper case
BYTE bUpper[] = {
    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
    0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
    0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
    0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
    0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
    '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
    'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
    'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
    'X', 'Y', 'Z'
};

TCHAR szRegIMESetting[] = TEXT("Control Panel\\Input Method");
TCHAR szPara[] = TEXT("Parallel Distance");
TCHAR szPerp[] = TEXT("Perpendicular Distance");
TCHAR szParaTol[] = TEXT("Parallel Tolerance");
TCHAR szPerpTol[] = TEXT("Perpendicular Tolerance");

#if defined(CROSSREF)
#ifdef UNICODE
WCHAR szRegRevKL[] = { 0x7F16, 0x7801, 0x67E5, 0x8BE2, 0x0000 };
WCHAR szRegRevMaxKey[] = { 0x7F16, 0x7801, 0x67E5, 0x8BE2, 0x7801, 0x957F, 0x0000 };
#else
TCHAR szRegRevKL[] = TEXT("编码查询");
TCHAR szRegRevMaxKey[] = TEXT("编码查询码长");
#endif
#endif //CROSSREF

#if defined(EUDC)
TCHAR szRegEudcDictName[] = TEXT("EUDCDictName");
TCHAR szRegEudcMapFileName[] = TEXT("EUDCMapFileName");
#endif


// decide UI offset base on escapement
const NEARCARET ncUIEsc[] = {
   // LogFontX  LogFontY  ParaX   PerpX   ParaY   PerpY
    { 0,        1,        1,      0,      0,      1},       // 0
    { 1,        0,        0,      1,      1,      0},       // 900
    { 0,        0,       -1,      0,      0,      1},       // 1800
    {-1,        0,        0,     -1,     -1,      0}        // 2700
};
// decide another UI offset base on escapement
const NEARCARET ncAltUIEsc[] = {
   // LogFontX  LogFontY  ParaX   PerpX   ParaY   PerpY
    { 0,        0,        1,      0,      0,     -1},       // 0
    { 0,        0,        0,     -1,      1,      0},       // 900
    { 0,        0,       -1,      0,      0,     -1},       // 1800
    { 0,        0,        0,      1,     -1,      0}        // 2700
};
// decide input rectangle base on escapement
const POINT ptInputEsc[] = {
    // LogFontWi   LogFontHi
    {1,            1},                                  // 0
    {1,           -1},                                  // 900
    {1,            1},                                  // 1800
    {-1,           1}                                   // 2700
};

// decide another input rectangle base on escapement
const POINT ptAltInputEsc[] = {
    // LogFontWi   LogFontHi
    {1,           -1},                                  // 0
    {-1,          -1},                                  // 900
    {1,           -1},                                  // 1800
    {1,            1}                                   // 2700
};

BYTE VirtKey48Map[MAXSOFTKEYS] = {
    0x20, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
    0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
    0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53,
    0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0xba, 0xbb, 0xbc,
    0xbd, 0xbe, 0xbf, 0xc0, 0xdb, 0xdc, 0xdd, 0xde
};

#ifdef KEYSTICKER

#ifdef CHAJEI
TCHAR KeyIndexTbl[INDEXNUM] = {
    TEXT('a'), TEXT('b'), TEXT('c'), TEXT('d'),
    TEXT('e'), TEXT('f'), TEXT('g'), TEXT('h'),
    TEXT('i'), TEXT('j'), TEXT('k'), TEXT('l'),
    TEXT('m'), TEXT('n'), TEXT('o'), TEXT('p'),
    TEXT('q'), TEXT('r'), TEXT('s'), TEXT('t'),
    TEXT('u'), TEXT('v'), TEXT('w'), TEXT('x'),
    TEXT('y'), TEXT('z')};

#ifdef UNICODE
WCHAR  MapKeySticker_a[] = { 0x65E5, 0x0000 };
WCHAR  MapKeySticker_b[] = { 0x6708, 0x0000 };
WCHAR  MapKeySticker_c[] = { 0x91D1, 0x0000 };
WCHAR  MapKeySticker_d[] = { 0x6728, 0x0000 };
WCHAR  MapKeySticker_e[] = { 0x6C34, 0x0000 };
WCHAR  MapKeySticker_f[] = { 0x706B, 0x0000 };
WCHAR  MapKeySticker_g[] = { 0x571F, 0x0000 };
WCHAR  MapKeySticker_h[] = { 0x7AF9, 0x0000 };
WCHAR  MapKeySticker_i[] = { 0x6208, 0x0000 };
WCHAR  MapKeySticker_j[] = { 0x5341, 0x0000 };
WCHAR  MapKeySticker_k[] = { 0x5927, 0x0000 };
WCHAR  MapKeySticker_l[] = { 0x4E2D, 0x0000 };
WCHAR  MapKeySticker_m[] = { 0x4E00, 0x0000 };
WCHAR  MapKeySticker_n[] = { 0x5F13, 0x0000 };
WCHAR  MapKeySticker_o[] = { 0x4EBA, 0x0000 };
WCHAR  MapKeySticker_p[] = { 0x5FC3, 0x0000 };
WCHAR  MapKeySticker_q[] = { 0x624B, 0x0000 };
WCHAR  MapKeySticker_r[] = { 0x53E3, 0x0000 };
WCHAR  MapKeySticker_s[] = { 0x5C38, 0x0000 };
WCHAR  MapKeySticker_t[] = { 0x5EFF, 0x0000 };
WCHAR  MapKeySticker_u[] = { 0x5C71, 0x0000 };
WCHAR  MapKeySticker_v[] = { 0x5973, 0x0000 };
WCHAR  MapKeySticker_w[] = { 0x7530, 0x0000 };
WCHAR  MapKeySticker_x[] = { 0x96E3, 0x0000 };
WCHAR  MapKeySticker_y[] = { 0x535C, 0x0000 };
WCHAR  MapKeySticker_z[] = { 0xFF3A, 0x0000 };

LPWSTR MapKeyStickerTbl[INDEXNUM] = {
        MapKeySticker_a, MapKeySticker_b, MapKeySticker_c, 
        MapKeySticker_d, MapKeySticker_e, MapKeySticker_f, 
        MapKeySticker_g, MapKeySticker_h, MapKeySticker_i, 
        MapKeySticker_j, MapKeySticker_k, MapKeySticker_l, 
        MapKeySticker_m, MapKeySticker_n, MapKeySticker_o, 
        MapKeySticker_p, MapKeySticker_q, MapKeySticker_r, 
        MapKeySticker_s, MapKeySticker_t, MapKeySticker_u, 
        MapKeySticker_v, MapKeySticker_w, MapKeySticker_x, 
        MapKeySticker_y, MapKeySticker_z
    };
#else
LPTSTR MapKeyStickerTbl[INDEXNUM] = {
    TEXT("日"), TEXT("月"), TEXT("金"),
    TEXT("木"), TEXT("水"), TEXT("火"),
    TEXT("土"), TEXT("竹"), TEXT("戈"),
    TEXT("十"), TEXT("大"), TEXT("中"),
    TEXT("一"), TEXT("弓"), TEXT("人"),
    TEXT("心"), TEXT("手"), TEXT("口"),
    TEXT("尸"), TEXT("廿"), TEXT("山"),
    TEXT("女"), TEXT("田"), TEXT("難"),
    TEXT("卜"), TEXT("Ｚ")};
#endif // UNICODE

#endif // CHAJEI

#ifdef PHON
TCHAR KeyIndexTbl[INDEXNUM] = {
    TEXT('a'), TEXT('b'), TEXT('c'), TEXT('d'),
    TEXT('e'), TEXT('f'), TEXT('g'), TEXT('h'),
    TEXT('i'), TEXT('j'), TEXT('k'), TEXT('l'),
    TEXT('m'), TEXT('n'), TEXT('o'), TEXT('p'),
    TEXT('q'), TEXT('r'), TEXT('s'), TEXT('t'),
    TEXT('u'), TEXT('v'), TEXT('w'), TEXT('x'),
    TEXT('y'), TEXT('z'), TEXT('1'), TEXT('2'),
    TEXT('3'), TEXT('4'), TEXT('5'), TEXT('6'),
    TEXT('7'), TEXT('8'), TEXT('9'), TEXT('0'),
    TEXT('-'), TEXT('='), TEXT('\\'),TEXT('['),
    TEXT(']'), TEXT(';'), TEXT('\''),TEXT(','),
    TEXT('.'), TEXT('/')};

#ifdef UNICODE
WCHAR  MapKeySticker_a[] = { 0x3107, 0x0000 };
WCHAR  MapKeySticker_b[] = { 0x3116, 0x0000 };
WCHAR  MapKeySticker_c[] = { 0x310F, 0x0000 };
WCHAR  MapKeySticker_d[] = { 0x310E, 0x0000 };
WCHAR  MapKeySticker_e[] = { 0x310D, 0x0000 };
WCHAR  MapKeySticker_f[] = { 0x3111, 0x0000 };
WCHAR  MapKeySticker_g[] = { 0x3115, 0x0000 };
WCHAR  MapKeySticker_h[] = { 0x3118, 0x0000 };
WCHAR  MapKeySticker_i[] = { 0x311B, 0x0000 };
WCHAR  MapKeySticker_j[] = { 0x3128, 0x0000 };
WCHAR  MapKeySticker_k[] = { 0x311C, 0x0000 };
WCHAR  MapKeySticker_l[] = { 0x3120, 0x0000 };
WCHAR  MapKeySticker_m[] = { 0x3129, 0x0000 };
WCHAR  MapKeySticker_n[] = { 0x3119, 0x0000 };
WCHAR  MapKeySticker_o[] = { 0x311F, 0x0000 };
WCHAR  MapKeySticker_p[] = { 0x3123, 0x0000 };
WCHAR  MapKeySticker_q[] = { 0x3106, 0x0000 };
WCHAR  MapKeySticker_r[] = { 0x3110, 0x0000 };
WCHAR  MapKeySticker_s[] = { 0x310B, 0x0000 };
WCHAR  MapKeySticker_t[] = { 0x3114, 0x0000 };
WCHAR  MapKeySticker_u[] = { 0x3127, 0x0000 };
WCHAR  MapKeySticker_v[] = { 0x3112, 0x0000 };
WCHAR  MapKeySticker_w[] = { 0x310A, 0x0000 };
WCHAR  MapKeySticker_x[] = { 0x310C, 0x0000 };
WCHAR  MapKeySticker_y[] = { 0x3117, 0x0000 };
WCHAR  MapKeySticker_z[] = { 0x3108, 0x0000 };
WCHAR  MapKeySticker_1[] = { 0x3105, 0x0000 };
WCHAR  MapKeySticker_2[] = { 0x3109, 0x0000 };
WCHAR  MapKeySticker_3[] = { 0x02C7, 0x0000 };
WCHAR  MapKeySticker_4[] = { 0x02CB, 0x0000 };
WCHAR  MapKeySticker_5[] = { 0x3113, 0x0000 };
WCHAR  MapKeySticker_6[] = { 0x02CA, 0x0000 };
WCHAR  MapKeySticker_7[] = { 0x02D9, 0x0000 };
WCHAR  MapKeySticker_8[] = { 0x311A, 0x0000 };
WCHAR  MapKeySticker_9[] = { 0x311E, 0x0000 };
WCHAR  MapKeySticker_0[] = { 0x3122, 0x0000 };
WCHAR  MapKeySticker_MINUS[]    = { 0x3126, 0x0000 };
WCHAR  MapKeySticker_EQUAL[]    = { 0x0000, 0x0000 };
WCHAR  MapKeySticker_BSLASH[]   = { 0x0000, 0x0000 };
WCHAR  MapKeySticker_LBRACKET[] = { 0x0000 };
WCHAR  MapKeySticker_RBRACKET[] = { 0x0000 };
WCHAR  MapKeySticker_SEMICLN[]  = { 0x3124, 0x0000 };
WCHAR  MapKeySticker_QUOTE[]    = { 0x0000 };
WCHAR  MapKeySticker_COMMA[]    = { 0x311D, 0x0000 };
WCHAR  MapKeySticker_DOT[]      = { 0x3121, 0x0000 };
WCHAR  MapKeySticker_SLASH[]    = { 0x3125, 0x0000 };

LPWSTR MapKeyStickerTbl[INDEXNUM] = {
        MapKeySticker_a, MapKeySticker_b, MapKeySticker_c, 
        MapKeySticker_d, MapKeySticker_e, MapKeySticker_f, 
        MapKeySticker_g, MapKeySticker_h, MapKeySticker_i, 
        MapKeySticker_j, MapKeySticker_k, MapKeySticker_l, 
        MapKeySticker_m, MapKeySticker_n, MapKeySticker_o, 
        MapKeySticker_p, MapKeySticker_q, MapKeySticker_r, 
        MapKeySticker_s, MapKeySticker_t, MapKeySticker_u, 
        MapKeySticker_v, MapKeySticker_w, MapKeySticker_x, 
        MapKeySticker_y, MapKeySticker_z, MapKeySticker_1,
        MapKeySticker_2, MapKeySticker_3, MapKeySticker_4,
        MapKeySticker_5, MapKeySticker_6, MapKeySticker_7,
        MapKeySticker_8, MapKeySticker_9, MapKeySticker_0,
        MapKeySticker_MINUS, MapKeySticker_EQUAL, MapKeySticker_BSLASH,
        MapKeySticker_LBRACKET, MapKeySticker_RBRACKET, MapKeySticker_SEMICLN,
        MapKeySticker_QUOTE, MapKeySticker_COMMA, MapKeySticker_DOT,
        MapKeySticker_SLASH
    };

#else

LPTSTR MapKeyStickerTbl[INDEXNUM] = {
    TEXT("ㄇ"), TEXT("ㄖ"), TEXT("ㄏ"),
    TEXT("ㄎ"), TEXT("ㄍ"), TEXT("ㄑ"),
    TEXT("ㄕ"), TEXT("ㄘ"), TEXT("ㄛ"),
    TEXT("ㄨ"), TEXT("ㄜ"), TEXT("ㄠ"),
    TEXT("ㄩ"), TEXT("ㄙ"), TEXT("ㄟ"),
    TEXT("ㄣ"), TEXT("ㄆ"), TEXT("ㄐ"),
    TEXT("ㄋ"), TEXT("ㄔ"), TEXT("ㄧ"),
    TEXT("ㄒ"), TEXT("ㄊ"), TEXT("ㄌ"),
    TEXT("ㄗ"), TEXT("ㄈ"), TEXT("ㄅ"),
    TEXT("ㄉ"), TEXT("ˇ"), TEXT("ˋ"),
    TEXT("ㄓ"), TEXT("ˊ"), TEXT("˙"),
    TEXT("ㄚ"), TEXT("ㄞ"), TEXT("ㄢ"),
    TEXT("ㄦ"), TEXT(""),   TEXT(""),
    TEXT(""),   TEXT(""),   TEXT("ㄤ"),
    TEXT(""),   TEXT("ㄝ"), TEXT("ㄡ"),
    TEXT("ㄥ")};
#endif  // UNICODE 
#endif  // PHON

#endif    //KEYSTICKER
