Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #include "std.h"
  2.  
  3. #include "emul.h"
  4. #include "vars.h"
  5. #include "inputpc.h"
  6.  
  7.  
  8. //=============================================================================
  9. // Таблица для конвертации обратно из виндового XT -> в ps/2 AT         thims zxevo_ps/2
  10. // [NS] сверка с педевикией + коменты + мультимедиа кнопки
  11.  
  12. #define NO_KEY 0x0000
  13.  
  14. const unsigned short dik_scan[256] =            // NEDOREPO            
  15. {                                               //                     
  16. //  & x1xx - добавляет к сканкоду E0 xx
  17.  
  18.                 // XT           AT              key             key
  19. // $00
  20.     NO_KEY,     // 00
  21.     0x0076,     // 01 81        76 F0,76        DIK_ESCAPE      Esc
  22.     0x0016,     // 02 82        16 F0,16        DIK_1           1 !
  23.     0x001E,     // 03 83        1E F0,1E        DIK_2           2 @  
  24.  
  25.     0x0026,     // 04 84        26 F0,26        DIK_3           3 #        
  26.     0x0025,     // 05 85        25 F0,25        DIK_4           4 $      
  27.     0x002E,     // 06 86        2E F0,2E        DIK_5           5 %          
  28.     0x0036,     // 07 87        36 F0,36        DIK_6           6 ^
  29. // $08
  30.     0x003D,     // 08 88        3D F0,3D        DIK_7           7 &          
  31.     0x003E,     // 09 89        3E F0,3E        DIK_8           8 *        
  32.     0x0046,     // 0A 8A        46 F0,46        DIK_9           9 (    
  33.     0x0045,     // 0B 8B        45 F0,45        DIK_0           0 )
  34.    
  35.     0x004E,     // 0C 8C        4E F0,4E        DIK_MINUS       - _
  36.     0x0055,     // 0D 82        55 F0,55        DIK_EQUALS      = +    
  37.     0x0066,     // 0E 8E        66 F0,66        DIK_BACK        Backspace
  38.     0x000D,     // 0F 8F        0D F0,0D        DIK_TAB         Tab    
  39. // $10
  40.     0x0015,     // 10 90        15 F0,15        DIK_Q           q Q      
  41.     0x001D,     // 11 91        1D F0,1D        DIK_W           w W
  42.     0x0024,     // 12 92        24 F0,24        DIK_E           e E    
  43.     0x002D,     // 13 93        2D F0,2D        DIK_R           r R
  44.    
  45.     0x002C,     // 14 94        2C F0,2C        DIK_T           t T      
  46.     0x0035,     // 15 95        35 F0,35        DIK_Y           y Y            
  47.     0x003C,     // 16 96        3C F0,3C        DIK_U           u U
  48.     0x0043,     // 17 97        43 F0,43        DIK_I           i I
  49. // $18
  50.     0x0044,     // 18 98        44 F0,44        DIK_O           o O
  51.     0x004D,     // 19 99        4D F0,4D        DIK_P           p P
  52.     0x0054,     // 1A 9A        54 F0,54        DIK_LBRACKET    [ {
  53.     0x005B,     // 1B 9B        5B F0,5B        DIK_RBRACKET    ] }
  54.    
  55.     0x005A,     // 1C 9C        5A F0,5A        DIK_RETURN      Enter
  56.     0x0014,     // 1D 9D        14 F0,14        DIK_LCONTROL    lCtrl
  57.     0x001C,     // 1E 9E        1C F0,1C        DIK_A           a A
  58.     0x001B,     // 1F 9F        1B F0,1B        DIK_S           s S
  59. // $20
  60.     0x0023,     // 20 A0        23 F0,23        DIK_D           d D
  61.     0x002B,     // 21 A1        2B F0,2B        DIK_F           f F      
  62.     0x0034,     // 22 A2        34 F0,34        DIK_G           g G
  63.     0x0033,     // 23 A3        33 F0,33        DIK_H           h H
  64.    
  65.     0x003B,     // 24 A4        3B F0,3B        DIK_J           j J
  66.     0x0042,     // 25 A5        42 F0,42        DIK_K           k K
  67.     0x004B,     // 26 A6        4B F0,4B        DIK_L           l L
  68.     0x004C,     // 27 A7        4C F0,4C        DIK_SEMICOLON   ; :
  69. // $28
  70.     0x0052,     // 28 A8        52 F0,52        DIK_APOSTROPHE  ' "
  71.     0x000E,     // 29 89        0E F0,0E        DIK_GRAVE       ` ~
  72.     0x0012,     // 2A AA        12 F0,12        DIK_LSHIFT      lShift
  73.     0x005D,     // 2B AB        5D F0,5D        DIK_BACKSLASH   \ |
  74.    
  75.     0x001A,     // 2C AC        1A F0,1A        DIK_Z           z Z
  76.     0x0022,     // 2D AD        22 F0,22        DIK_X           x X
  77.     0x0021,     // 2E AE        21 F0,21        DIK_C           c C
  78.     0x002A,     // 2F AF        2A F0,2A        DIK_V           v V
  79. // $30
  80.     0x0032,     // 30 B0        32 F0,32        DIK_B           b B
  81.     0x0031,     // 31 B1        31 F0,31        DIK_N           n N
  82.     0x003A,     // 32 B2        3A F0,3A        DIK_M           m M
  83.     0x0041,     // 33 B3        41 F0,41        DIK_COMMA       , <
  84.    
  85.     0x0049,     // 34 B4        49 F0,49        DIK_PERIOD      . >
  86.     0x004A,     // 35 B5        4A F0,4A        DIK_SLASH       / ?
  87.     0x0059,     // 36 B6        59 F0,59        DIK_RSHIFT      rShift
  88.     0x007C,     // 37 B7        7C F0,7C        DIK_MULTIPLY    Num *
  89. // $38
  90.     0x0011,     // 38 B8        11 F0,11        DIK_LMENU       lAlt
  91.     0x0029,     // 39 B9        29 F0,29        DIK_SPACE       Space
  92.     0x0058,     // 3A BA        58 F0,58        DIK_CAPITAL     CapsLock
  93.     0x0005,     // 3B BB        05 F0,05        DIK_F1          F1
  94.    
  95.     0x0006,     // 3C BC        06 F0,06        DIK_F2          F2
  96.     0x0004,     // 3D BD        04 F0,04        DIK_F3          F3
  97.     0x000C,     // 3E BE        0C F0,0C        DIK_F4          F4
  98.     0x0003,     // 3F BF        03 F0,03        DIK_F5          F5
  99. // $40
  100.     0x000B,     // 40 C0        0B F0,0B        DIK_F6          F6
  101.     0x0083,     // 41 C1        83 F0,83        DIK_F7          F7
  102.     0x000A,     // 42 C2        0A F0,0A        DIK_F8          F8
  103.     0x0001,     // 43 C3        01 F0,01        DIK_F9          F9
  104.    
  105.     0x0009,     // 44 C4        09 F0,09        DIK_F10         F10
  106.     0x0077,     // 45 C5        77 F0,77        DIK_NUMLOCK     NumLock
  107.     0x007E,     // 46 C6        7E F0,7E        DIK_SCROLL      ScrollLock
  108.     0x006C,     // 47 C7        6C F0,6C        DIK_NUMPAD7     Num 7
  109. // $48
  110.     0x0075,     // 48 C8        75 F0,75        DIK_NUMPAD8     Num 8
  111.     0x007D,     // 49 C9        7D F0,7D        DIK_NUMPAD9     Num 9    
  112.     0x007B,     // 4A CA        7B F0,7B        DIK_SUBTRACT    Num -
  113.     0x006B,     // 4B CB        6B F0,6B        DIK_NUMPAD4     Num 4
  114.    
  115.     0x0073,     // 4C CC        73 F0,73        DIK_NUMPAD5     Num 5
  116.     0x0074,     // 4D CD        74 F0,74        DIK_NUMPAD6     Num 6
  117.     0x0079,     // 4E CE        79 F0,79        DIK_ADD         Num +
  118.     0x0069,     // 4F CF        69 F0,69        DIK_NUMPAD1     Num 1
  119. // $50
  120.     0x0072,     // 50 D0        72 F0,72        DIK_NUMPAD2     Num 2
  121.     0x007A,     // 51 D1        7A F0,7A        DIK_NUMPAD3     Num 3
  122.     0x0070,     // 52 D2        70 F0,70        DIK_NUMPAD0     Num 0
  123.     0x0071,     // 53 D3        71 F0,71        DIK_DECIMAL     Num .
  124.    
  125.     NO_KEY,     // 54 - ALT + PrintScreen (код для клавиши Alt генерируется отдельно)
  126.     NO_KEY,     // 55 - hz
  127.     NO_KEY,     // 56 - hz - DIK_OEM_102        /* <> or \| on RT 102-key keyboard (Non-U.S.) */
  128.     0x0078,     // 57 D7        78 F0,78        DIK_F11         F11
  129. // $58
  130.     0x0007,     // 58 D8        07 F0,07        DIK_F12         F12
  131.     NO_KEY,     // 59 - hz
  132.     NO_KEY,     // 5A - hz
  133.     NO_KEY,     // 5B - hz              есть E0,5B E0,DB - lWin
  134.    
  135.     NO_KEY,     // 5C - hz              есть E0,5C E0,DC - rWin
  136.     NO_KEY,     // 5D - hz              есть E0,5D E0,DD - menu
  137.     NO_KEY,     // 5E - hz              есть E0,5E E0,DE - ACPI Power
  138.     NO_KEY,     // 5F - hz              есть E0,5F E0,DF - ACPI Sleep
  139. // $60
  140.     NO_KEY,     // 60 - hz
  141.     NO_KEY,     // 61 - hz
  142.     NO_KEY,     // 62 - hz
  143.     NO_KEY,     // 63 - hz              есть E0,63 E0,E3 - ACPI Wake
  144.    
  145.     NO_KEY,     // 64 - hz - DIK_F13    /* (NEC PC98) */
  146.     NO_KEY,     // 65 - hz - DIK_F14    /* (NEC PC98) */        есть E0,65 E0,E5 - Brwsr Search
  147.     NO_KEY,     // 66 - hz - DIK_F15    /* (NEC PC98) */        есть E0,66 E0,E6 - Brwsr Bookmarks
  148.     NO_KEY,     // 67 - hz                                      есть E0,67 E0,E7 - Brwsr Reflesh
  149. // $68
  150.     NO_KEY,     // 68 - hz              есть E0,68 E0,E8 - Brwsr Stop
  151.     NO_KEY,     // 69 - hz              есть E0,69 E0,E9 - Brwsr Forward
  152.     NO_KEY,     // 6A - hz              есть E0,6A E0,EA - Brwsr Backward
  153.     NO_KEY,     // 6B - hz              есть E0,6B E0,EB - Apps MyComputer
  154.    
  155.     NO_KEY,     // 6C - hz              есть E0,6C E0,EC - Apps EMail
  156.     NO_KEY,     // 6D - hz              есть E0,6D E0,ED - Apps Media Select
  157.     NO_KEY,     // 6E - hz
  158.     NO_KEY,     // 6F - hz
  159. // $70
  160.     NO_KEY,     // 70 - hz - DIK_KANA           /* (Japanese keyboard) */
  161.     NO_KEY,     // 71 - hz
  162.     NO_KEY,     // 72 - hz
  163.     NO_KEY,     // 73 - hz - DIK_ABNT_C1        /* /? on Brazilian keyboard */
  164.    
  165.     NO_KEY,     // 74 - hz
  166.     NO_KEY,     // 75 - hz
  167.     NO_KEY,     // 76 - hz
  168.     NO_KEY,     // 77 - hz
  169. // $78
  170.     NO_KEY,     // 78 - hz
  171.     NO_KEY,     // 79 - hz - DIK_CONVERT        /* (Japanese keyboard) */
  172.     NO_KEY,     // 7A - hz
  173.     NO_KEY,     // 7B - hz - DIK_NOCONVERT      /* (Japanese keyboard) */
  174.    
  175.     NO_KEY,     // 7C - hz
  176.     NO_KEY,     // 7D - hz - DIK_YEN            /* (Japanese keyboard) */
  177.     NO_KEY,     // 7E - hz - DIK_ABNT_C2        /* Numpad . on Brazilian keyboard */
  178.     NO_KEY,     // 7F - hz
  179.    
  180. // для XT это key off набор всех этих же клавишъ
  181. // а тут, судя по всему, это кнопки с E0 префиксом
  182.  
  183. // $80
  184.     NO_KEY,     // E0,00 - hz
  185.     NO_KEY,     // E0,01 - hz
  186.     NO_KEY,     // E0,02 - hz
  187.     NO_KEY,     // E0,03 - hz
  188.    
  189.     NO_KEY,     // E0,04 - hz
  190.     NO_KEY,     // E0,05 - hz
  191.     NO_KEY,     // E0,06 - hz
  192.     NO_KEY,     // E0,07 - hz
  193. // $88
  194.     NO_KEY,     // E0,08 - hz
  195.     NO_KEY,     // E0,09 - hz
  196.     NO_KEY,     // E0,0A - hz
  197.     NO_KEY,     // E0,0B - hz
  198.    
  199.     NO_KEY,     // E0,0C - hz
  200.     NO_KEY,     // E0,0D - hz - DIK_NUMPADEQUALS        /* = on numeric keypad (NEC PC98) */
  201.     NO_KEY,     // E0,0E - hz
  202.     NO_KEY,     // E0,0F - hz
  203. // $90
  204.     0x0115,//NS // E0,10 E0,90          E0,15 E0,F0,15          DIK_PREVTRACK           Player Previous Track   (DIK_CIRCUMFLEX on Japanese keyboard)
  205.     NO_KEY,     // E0,11 - hz - DIK_AT          /* (NEC PC98) */
  206.     NO_KEY,     // E0,12 - hz - DIK_COLON       /* (NEC PC98) */
  207.     NO_KEY,     // E0,13 - hz - DIK_UNDERLINE   /* (NEC PC98) */
  208.    
  209.     NO_KEY,     // E0,14 - hz - DIK_KANJI       /* (Japanese keyboard) */
  210.     NO_KEY,     // E0,15 - hz - DIK_STOP        /* (NEC PC98) */
  211.     NO_KEY,     // E0,16 - hz - DIK_AX          /* (Japan AX) */
  212.     NO_KEY,     // E0,17 - hz - DIK_UNLABELED   /* (J3100) */
  213. // $98
  214.     NO_KEY,     // E0,18 - hz
  215.     0x014D,//NS // E0,19 E0,99          E0,4D E0,F0,4D          DIK_NEXTTRACK           Player Next Track
  216.     NO_KEY,     // E0,1A - hz
  217.     NO_KEY,     // E0,1B - hz
  218.    
  219.     0x015A,     // E0,1C E0,9C          E0,5A E0,F0,5A          DIK_NUMPADENTER         Num Enter
  220.     0x0114,     // E0,1D E0,9D          E0,14 E0,F0,14          DIK_RCONTROL            rCtrl    
  221.     NO_KEY,     // E0,1E - hz
  222.     NO_KEY,     // E0,1F - hz
  223. // $A0
  224.     0x0123,//NS // E0,20 E0,A0          E0,23 E0,F0,23          DIK_MUTE                Player Mute
  225.     0x012B,//NS // E0,21 E0,A1          E0,2B E0,F0,2B          DIK_CALCULATOR          App Calculator
  226.     0x0134,//NS // E0,22 E0,A2          E0,34 E0,F0,34          DIK_PLAYPAUSE           Player Pause
  227.     NO_KEY,     // E0,23 - hz
  228.    
  229.     0x013B,//NS // E0,24 E0,A4          E0,3B E0,F0,3B          DIK_MEDIASTOP           Player Stop
  230.     NO_KEY,     // E0,25 - hz
  231.     NO_KEY,     // E0,26 - hz
  232.     NO_KEY,     // E0,27 - hz
  233. // $A8
  234.     NO_KEY,     // E0,28 - hz
  235.     NO_KEY,     // E0,29 - hz
  236.     NO_KEY,     // E0,2A,E0,37 E0,B7,E0,AA      E0,12,E0,7C E0,F0,7C,E0,F0,12           PrintScreen     !!!
  237.     NO_KEY,     // E0,2B - hz
  238.    
  239.     NO_KEY,     // E0,2C - hz
  240.     NO_KEY,     // E0,2D - hz
  241.     0x0121,//NS // E0,2E E0,AE          E0,21 E0,F0,21          DIK_VOLUMEDOWN          Player Volume -
  242.     NO_KEY,     // E0,2F - hz
  243. // $B0
  244.     0x0132,//NS // E0,30 E0,B0          E0,32 E0,F0,32          DIK_VOLUMEUP            Player Volume +
  245.     NO_KEY,     // E0,31 - hz
  246.     0x013A,//NS // E0,32 E0,B2          E0,3A E0,F0,3A          DIK_WEBHOME             Web Home
  247.     NO_KEY,     // E0,33 - hz - DIK_NUMPADCOMMA /* , on numeric keypad (NEC PC98) */
  248.    
  249.     NO_KEY,     // E0,34 - hz
  250.     0x014A,     // E0,35 E0,B5          E0,4A E0,F0,4A          DIK_DIVIDE              Num /
  251.     NO_KEY,     // E0,36 - hz
  252.     0x0112,//?? // E0,37 E0,B7 - DIK_SYSRQ - неизвестно что генерирует неизвестно что !!!! [NS]  
  253. // $B8
  254.     0x0111,     // E0,38 E0,B8          E0,11 E0,F0,11          DIK_RMENU               rAlt
  255.     NO_KEY,     // E0,39 - hz
  256.     NO_KEY,     // E0,3A - hz
  257.     NO_KEY,     // E0,3B - hz
  258.    
  259.     NO_KEY,     // E0,3C - hz
  260.     NO_KEY,     // E0,3D - hz
  261.     NO_KEY,     // E0,3E - hz
  262.     NO_KEY,     // E0,3F - hz
  263. // $C0
  264.     NO_KEY,     // E0,40 - hz
  265.     NO_KEY,     // E0,41 - hz
  266.     NO_KEY,     // E0,42 - hz
  267.     NO_KEY,     // E0,43 - hz
  268.    
  269.     NO_KEY,     // E0,44 - hz
  270.     NO_KEY,     // E1,1D,45, E1,9D,C5   E1,14,77, E1,F0,14,F0,77  DIK_PAUSE             Pause   !!!! [NS]
  271.     NO_KEY,     // E0,46 E0,C6          ctrl+break ctrl+pause
  272.     0x016C,     // E0,47 E0,C7          E0,6C E0,F0,6C          DIK_HOME                Home on arrow keypad ???
  273. // $C8
  274.     0x0175,     // E0,48 E0,C8          E0,75 E0,F0,75          DIK_UP                  Up on arrow keypad
  275.     0x017D,     // E0,49 E0,C9          E0,7D E0,F0,7D          DIK_PRIOR               PgUp on arrow keypad
  276.     NO_KEY,     // E0,4A - hz
  277.     0x016B,     // E0,4B E0,CB          E0,6B E0,F0,6B          DIK_LEFT                Left on arrow keypad
  278.    
  279.     NO_KEY,     // E0,4C - hz
  280.     0x0174,     // E0,4D E0,CD          E0,74 E0,F0,74          DIK_RIGHT               Right on arrow keypad
  281.     NO_KEY,     // E0,4E - hz
  282.     0x0169,     // E0,4F E0,CF          E0,69 E0,F0,69          DIK_END                 End on arrow keypad
  283. // $D0
  284.     0x0172,     // E0,50 E0,D0          E0,72 E0,F0,72          DIK_DOWN                Down on arrow keypad
  285.     0x017A,     // E0,51 E0,D1          E0,7A E0,F0,7A          DIK_NEXT                PgDn on arrow keypad
  286.     0x0170,     // E0,52 E0,D2          E0,70 E0,F0,70          DIK_INSERT              Insert on arrow keypad
  287.     0x0171,     // E0,53 E0,D3          E0,71 E0,F0,71          DIK_DELETE              Delete on arrow keypad
  288.    
  289.     NO_KEY,     // E0,54 - hz
  290.     NO_KEY,     // E0,55 - hz
  291.     NO_KEY,     // E0,56 - hz
  292.     NO_KEY,     // E0,57 - hz
  293. // $D8
  294.     NO_KEY,     // E0,58 - hz
  295.     NO_KEY,     // E0,59 - hz
  296.     NO_KEY,     // E0,5A - hz
  297.     0x011F,     // E0,5B E0,DB          E0,1F E0,F0,1F          DIK_LWIN                Left Windows key
  298.    
  299.     0x0127,     // E0,5C E0,DC          E0,27 E0,F0,27          DIK_RWIN                Right Windows key
  300.     0x012F,     // E0,5D E0,DD          E0,2F E0,F0,2F          DIK_APPS                AppMenu key
  301.     0x0137,     // E0,5E E0,DE          E0,37 E0,F0,37          DIK_POWER               ACPI Power
  302.     0x013F,     // E0,5F E0,DF          E0,3F E0,F0,3F          DIK_SLEEP               ACPI Sleep
  303. // $E0
  304.     NO_KEY,     // E0,60 - hz
  305.     NO_KEY,     // E0,61 - hz
  306.     NO_KEY,     // E0,62 - hz
  307.     0x015E,     // E0,63 E0,E3          E0,5E E0,F0,5E          DIK_WAKE                ACPI Wake
  308.    
  309.     NO_KEY,     // E0,64 - hz
  310.     0x0110,//NS // E0,65 E0,E5          E0,10 E0,F0,10          DIK_WEBSEARCH           Web Search
  311.     0x0118,//NS // E0,66 E0,E6          E0,18 E0,F0,18          DIK_WEBFAVORITES        Web Favorites bookmarks?
  312.     0x0120,//NS // E0,67 E0,E7          E0,20 E0,F0,20          DIK_WEBREFRESH          Web Refresh
  313. // $E8
  314.     0x0128,//NS // E0,68 E0,E8          E0,28 E0,F0,28          DIK_WEBSTOP             Web Stop
  315.     0x0130,//NS // E0,69 E0,E9          E0,30 E0,F0,30          DIK_WEBFORWARD          Web Forward
  316.     0x0138,//NS // E0,6A E0,EA          E0,38 E0,F0,38          DIK_WEBBACK             Web Backward
  317.     0x0140,//NS // E0,6B E0,EB          E0,40 E0,F0,40          DIK_MYCOMPUTER          App My Computer
  318.    
  319.     0x0148,//NS // E0,6C E0,EC          E0,48 E0,F0,48          DIK_MAIL                App Mail
  320.     0x0150,//NS // E0,6D E0,ED          E0,50 E0,F0,50          DIK_MEDIASELECT         App Media Select
  321.     NO_KEY,     // E0,6E - hz
  322.     NO_KEY,     // E0,6F - hz
  323. // $F0
  324.     NO_KEY,     // E0,70 - hz
  325.     NO_KEY,     // E0,71 - hz
  326.     NO_KEY,     // E0,72 - hz
  327.     NO_KEY,     // E0,73 - hz
  328.    
  329.     NO_KEY,     // E0,74 - hz
  330.     NO_KEY,     // E0,75 - hz
  331.     NO_KEY,     // E0,76 - hz
  332.     NO_KEY,     // E0,77 - hz
  333. // $F8
  334.     NO_KEY,     // E0,78 - hz
  335.     NO_KEY,     // E0,79 - hz
  336.     NO_KEY,     // E0,7A - hz
  337.     NO_KEY,     // E0,7B - hz
  338.    
  339.     NO_KEY,     // E0,7C - hz
  340.     NO_KEY,     // E0,7D - hz
  341.     NO_KEY,     // E0,7E - hz
  342.     NO_KEY      // E0,7F - hz
  343. };                      //NEDOREPO
  344. //=============================================================================
  345.  
  346.  
  347.  
  348. //=============================================================================
  349. // Таблица для конвертации из виндового XT -> ATM 6.20 XT               [NS]
  350. // В АТМ зачем то чтение через Ж (задом на перед)
  351. // d7...d0 -> d0...d7
  352. // в итоге скан коды вывернуты на изнанку
  353.  
  354. const unsigned short atm620_xt_keyb_dik_scan[256] =            
  355. {                                               //                     
  356. //  & x1xx - добавляет к сканкоду E0 xx
  357.  
  358.                 // XT           key             key
  359. // $00
  360.     NO_KEY,//0x0000,    // 00
  361.     0x0080,             // 01 81        DIK_ESCAPE      Esc
  362.     0x0040,             // 02 82        DIK_1           1 !
  363.     0x00C0,             // 03 83        DIK_2           2 @  
  364.    
  365.     0x0020,             // 04 84        DIK_3           3 #        
  366.     0x00A0,             // 05 85        DIK_4           4 $      
  367.     0x0060,             // 06 86        DIK_5           5 %          
  368.     0x00E0,             // 07 87        DIK_6           6 ^
  369. // $08 
  370.     0x0010,             // 08 88        DIK_7           7 &          
  371.     0x0090,             // 09 89        DIK_8           8 *        
  372.     0x0050,             // 0A 8A        DIK_9           9 (    
  373.     0x00D0,             // 0B 8B        DIK_0           0 )
  374.        
  375.     0x0030,             // 0C 8C        DIK_MINUS       - _
  376.     0x00B0,             // 0D 82        DIK_EQUALS      = +    
  377.     0x0070,             // 0E 8E        DIK_BACK        Backspace
  378.     0x00F0,             // 0F 8F        DIK_TAB         Tab    
  379. // $10 
  380.     0x0008,             // 10 90        DIK_Q           q Q      
  381.     0x0088,             // 11 91        DIK_W           w W
  382.     0x0048,             // 12 92        DIK_E           e E    
  383.     0x00C8,             // 13 93        DIK_R           r R
  384.        
  385.     0x0028,             // 14 94        DIK_T           t T      
  386.     0x00A8,             // 15 95        DIK_Y           y Y            
  387.     0x0068,             // 16 96        DIK_U           u U
  388.     0x00E8,             // 17 97        DIK_I           i I
  389. // $18 
  390.     0x0018,             // 18 98        DIK_O           o O
  391.     0x0098,             // 19 99        DIK_P           p P
  392.     0x0058,             // 1A 9A        DIK_LBRACKET    [ {
  393.     0x00D8,             // 1B 9B        DIK_RBRACKET    ] }
  394.    
  395.     0x0038,             // 1C 9C        DIK_RETURN      Enter
  396.     0x00B8,             // 1D 9D        DIK_LCONTROL    lCtrl
  397.     0x0078,             // 1E 9E        DIK_A           a A
  398.     0x00F8,             // 1F 9F        DIK_S           s S
  399. // $20 
  400.     0x0004,             // 20 A0        DIK_D           d D
  401.     0x0084,             // 21 A1        DIK_F           f F      
  402.     0x0044,             // 22 A2        DIK_G           g G
  403.     0x00C4,             // 23 A3        DIK_H           h H
  404.        
  405.     0x0024,             // 24 A4        DIK_J           j J
  406.     0x00A4,             // 25 A5        DIK_K           k K
  407.     0x0064,             // 26 A6        DIK_L           l L
  408.     0x00E4,             // 27 A7        DIK_SEMICOLON   ; :
  409. // $28 
  410.     0x0014,             // 28 A8        DIK_APOSTROPHE  ' "
  411.     0x0094,             // 29 89        DIK_GRAVE       ` ~
  412.     0x0054,             // 2A AA        DIK_LSHIFT      lShift
  413.     0x00D4,             // 2B AB        DIK_BACKSLASH   \ |
  414.        
  415.     0x0034,             // 2C AC        DIK_Z           z Z
  416.     0x00B4,             // 2D AD        DIK_X           x X
  417.     0x0074,             // 2E AE        DIK_C           c C
  418.     0x00F4,             // 2F AF        DIK_V           v V
  419. // $30 
  420.     0x000C,             // 30 B0        DIK_B           b B
  421.     0x008C,             // 31 B1        DIK_N           n N
  422.     0x004C,             // 32 B2        DIK_M           m M
  423.     0x00CC,             // 33 B3        DIK_COMMA       , <
  424.    
  425.     0x002C,             // 34 B4        DIK_PERIOD      . >
  426.     0x00AC,             // 35 B5        DIK_SLASH       / ?
  427.     0x006C,             // 36 B6        DIK_RSHIFT      rShift
  428.     0x00EC,             // 37 B7        DIK_MULTIPLY    Num *
  429. // $38 
  430.     0x001C,             // 38 B8        DIK_LMENU       lAlt
  431.     0x009C,             // 39 B9        DIK_SPACE       Space
  432.     0x005C,             // 3A BA        DIK_CAPITAL     CapsLock
  433.     0x00DC,             // 3B BB        DIK_F1          F1
  434.        
  435.     0x003C,             // 3C BC        DIK_F2          F2
  436.     0x00BC,             // 3D BD        DIK_F3          F3
  437.     0x007C,             // 3E BE        DIK_F4          F4
  438.     0x00FC,             // 3F BF        DIK_F5          F5
  439. // $40 
  440.     0x0002,             // 40 C0        DIK_F6          F6
  441.     0x0082,             // 41 C1        DIK_F7          F7
  442.     0x0042,             // 42 C2        DIK_F8          F8
  443.     0x00C2,             // 43 C3        DIK_F9          F9
  444.        
  445.     0x0022,             // 44 C4        DIK_F10         F10
  446.     0x00A2,             // 45 C5        DIK_NUMLOCK     NumLock
  447.     0x0062,             // 46 C6        DIK_SCROLL      ScrollLock
  448.     0x00E2,             // 47 C7        DIK_NUMPAD7     Num 7
  449. // $48 
  450.     0x0012,             // 48 C8        DIK_NUMPAD8     Num 8
  451.     0x0092,             // 49 C9        DIK_NUMPAD9     Num 9    
  452.     0x0052,             // 4A CA        DIK_SUBTRACT    Num -
  453.     0x00D2,             // 4B CB        DIK_NUMPAD4     Num 4
  454.        
  455.     0x0032,             // 4C CC        73 F0,73        DIK_NUMPAD5     Num 5
  456.     0x00B2,             // 4D CD        74 F0,74        DIK_NUMPAD6     Num 6
  457.     0x0072,             // 4E CE        79 F0,79        DIK_ADD         Num +
  458.     0x00F2,             // 4F CF        69 F0,69        DIK_NUMPAD1     Num 1
  459. // $50
  460.     0x000A,             // 50 D0        72 F0,72        DIK_NUMPAD2     Num 2
  461.     0x008A,             // 51 D1        7A F0,7A        DIK_NUMPAD3     Num 3
  462.     0x004A,             // 52 D2        70 F0,70        DIK_NUMPAD0     Num 0
  463.     0x00CA,             // 53 D3        71 F0,71        DIK_DECIMAL     Num .
  464.        
  465.     NO_KEY,//0x002A,    // 54 - ALT + PrintScreen (код для клавиши Alt генерируется отдельно)
  466.     NO_KEY,//0x00AA,    // 55 - hz
  467.     NO_KEY,//0x006A,    // 56 - hz - DIK_OEM_102        /* <> or \| on RT 102-key keyboard (Non-U.S.) */
  468.     0x00EA,             // 57 D7        78 F0,78        DIK_F11         F11
  469. // $58 
  470.     0x001A,             // 58 D8        07 F0,07        DIK_F12         F12
  471.     NO_KEY,//0x009A,    // 59 - hz
  472.     NO_KEY,//0x005A,    // 5A - hz
  473.     NO_KEY,//0x00DA,    // 5B - hz
  474.        
  475.     NO_KEY,//0x003A,    // 5C - hz
  476.     NO_KEY,//0x00BA,    // 5D - hz
  477.     NO_KEY,//0x007A,    // 5E - hz
  478.     NO_KEY,//0x00FA,    // 5F - hz
  479. // $60 
  480.     NO_KEY,//0x0006,    // 60 - hz
  481.     NO_KEY,//0x0086,    // 61 - hz
  482.     NO_KEY,//0x0046,    // 62 - hz
  483.     NO_KEY,//0x00C6,    // 63 - hz
  484.        
  485.     NO_KEY,//0x0026,    // 64 - hz - DIK_F13    /* (NEC PC98) */
  486.     NO_KEY,//0x00A6,    // 65 - hz - DIK_F14    /* (NEC PC98) */        есть E0,65 E0,E5 - Brwsr Search
  487.     NO_KEY,//0x0066,    // 66 - hz - DIK_F15    /* (NEC PC98) */        есть E0,66 E0,E6 - Brwsr Bookmarks
  488.     NO_KEY,//0x00E6,    // 67 - hz                                      есть E0,67 E0,E7 - Brwsr Reflesh
  489. // $68 
  490.     NO_KEY,//0x0016,    // 68 - hz
  491.     NO_KEY,//0x0096,    // 69 - hz
  492.     NO_KEY,//0x0056,    // 6A - hz
  493.     NO_KEY,//0x00D6,    // 6B - hz
  494.    
  495.     NO_KEY,//0x0036,    // 6C - hz
  496.     NO_KEY,//0x00B6,    // 6D - hz
  497.     NO_KEY,//0x0076,    // 6E - hz
  498.     NO_KEY,//0x00F6,    // 6F - hz
  499. // $70 
  500.     NO_KEY,//0x000E,    // 70 - hz - DIK_KANA           /* (Japanese keyboard) */
  501.     NO_KEY,//0x008E,    // 71 - hz
  502.     NO_KEY,//0x004E,    // 72 - hz
  503.     NO_KEY,//0x00CE,    // 73 - hz - DIK_ABNT_C1        /* /? on Brazilian keyboard */
  504.        
  505.     NO_KEY,//0x002E,    // 74 - hz
  506.     NO_KEY,//0x00AE,    // 75 - hz
  507.     NO_KEY,//0x006E,    // 76 - hz
  508.     NO_KEY,//0x00EE,    // 77 - hz
  509. // $78 
  510.     NO_KEY,//0x001E,    // 78 - hz
  511.     NO_KEY,//0x009E,    // 79 - hz - DIK_CONVERT        /* (Japanese keyboard) */
  512.     NO_KEY,//0x005E,    // 7A - hz
  513.     NO_KEY,//0x00DE,    // 7B - hz - DIK_NOCONVERT      /* (Japanese keyboard) */
  514.  
  515.     NO_KEY,//0x003E,    // 7C - hz
  516.     NO_KEY,//0x00BE,    // 7D - hz - DIK_YEN            /* (Japanese keyboard) */
  517.     NO_KEY,//0x007E,    // 7E - hz - DIK_ABNT_C2        /* Numpad . on Brazilian keyboard */
  518.     NO_KEY,//0x00FE,    // 7F - hz
  519.        
  520. // для XT это key off набор всех этих же клавишъ
  521. // а тут, судя по всему, это кнопки с E0 префиксом
  522.  
  523. // $80
  524.     NO_KEY,//0x0100,    // E0,00 - hz
  525.     NO_KEY,//0x0180,    // E0,01 - hz
  526.     NO_KEY,//0x0140,    // E0,02 - hz
  527.     NO_KEY,//0x01C0,    // E0,03 - hz
  528.  
  529.     NO_KEY,//0x0120,    // E0,04 - hz
  530.     NO_KEY,//0x01A0,    // E0,05 - hz
  531.     NO_KEY,//0x0160,    // E0,06 - hz
  532.     NO_KEY,//0x01E0,    // E0,07 - hz
  533. // $88 
  534.     NO_KEY,//0x0110,    // E0,08 - hz
  535.     NO_KEY,//0x0190,    // E0,09 - hz
  536.     NO_KEY,//0x0150,    // E0,0A - hz
  537.     NO_KEY,//0x01D0,    // E0,0B - hz
  538.        
  539.     NO_KEY,//0x0130,    // E0,0C - hz
  540.     NO_KEY,//0x01B0,    // E0,0D - hz - DIK_NUMPADEQUALS        /* = on numeric keypad (NEC PC98) */
  541.     NO_KEY,//0x0170,    // E0,0E - hz
  542.     NO_KEY,//0x01F0,    // E0,0F - hz
  543. // $90 
  544.     0x0108,//NS         // E0,10 E0,90          E0,15 E0,F0,15          DIK_PREVTRACK           Player Previous Track   (DIK_CIRCUMFLEX on Japanese keyboard)
  545.     NO_KEY,//0x0188,    // E0,11 - hz - DIK_AT          /* (NEC PC98) */
  546.     NO_KEY,//0x0148,    // E0,12 - hz - DIK_COLON       /* (NEC PC98) */
  547.     NO_KEY,//0x01C8,    // E0,13 - hz - DIK_UNDERLINE   /* (NEC PC98) */
  548.        
  549.     NO_KEY,//0x0128,    // E0,14 - hz - DIK_KANJI       /* (Japanese keyboard) */
  550.     NO_KEY,//0x01A8,    // E0,15 - hz - DIK_STOP        /* (NEC PC98) */
  551.     NO_KEY,//0x0168,    // E0,16 - hz - DIK_AX          /* (Japan AX) */
  552.     NO_KEY,//0x01E8,    // E0,17 - hz - DIK_UNLABELED   /* (J3100) */
  553. // $98
  554.     NO_KEY,//0x0118,    // E0,18 - hz
  555.     0x0198,//NS         // E0,19 E0,99          E0,4D E0,F0,4D          DIK_NEXTTRACK           Player Next Track
  556.     NO_KEY,//0x0158,    // E0,1A - hz
  557.     NO_KEY,//0x01D8,    // E0,1B - hz
  558.        
  559.     0x0138,             // E0,1C E0,9C          E0,5A E0,F0,5A          DIK_NUMPADENTER         Num Enter
  560.     0x01B8,             // E0,1D E0,9D          E0,14 E0,F0,14          DIK_RCONTROL            rCtrl    
  561.     NO_KEY,//0x0178,    // E0,1E - hz
  562.     NO_KEY,//0x01F8,    // E0,1F - hz
  563. // $A0 
  564.     0x0104,//NS         // E0,20 E0,A0          E0,23 E0,F0,23          DIK_MUTE                Player Mute
  565.     0x0184,//NS         // E0,21 E0,A1          E0,2B E0,F0,2B          DIK_CALCULATOR          App Calculator
  566.     0x0144,//NS         // E0,22 E0,A2          E0,34 E0,F0,34          DIK_PLAYPAUSE           Player Pause
  567.     NO_KEY,//0x01C4,    // E0,23 - hz
  568.        
  569.     0x0124,//NS         // E0,24 E0,A4          E0,3B E0,F0,3B          DIK_MEDIASTOP           Player Stop
  570.     NO_KEY,//0x01A4,    // E0,25 - hz
  571.     NO_KEY,//0x0164,    // E0,26 - hz
  572.     NO_KEY,//0x01E4,    // E0,27 - hz
  573. // $A8 
  574.     NO_KEY,//0x0114,    // E0,28 - hz
  575.     NO_KEY,//0x0194,    // E0,29 - hz
  576.     0x0154,             // E0,2A,E0,37 E0,B7,E0,AA      E0,12,E0,7C E0,F0,7C,E0,F0,12           PrintScreen     !!!
  577.     NO_KEY,//0x01D4,    // E0,2B - hz
  578.        
  579.     NO_KEY,//0x0134,    // E0,2C - hz
  580.     NO_KEY,//0x01B4,    // E0,2D - hz
  581.     0x0174,//NS         // E0,2E E0,AE          E0,21 E0,F0,21          DIK_VOLUMEDOWN          Player Volume -
  582.     NO_KEY,//0x01F4,    // E0,2F - hz
  583. // $B0 
  584.     0x010C,//NS         // E0,30 E0,B0          E0,32 E0,F0,32          DIK_VOLUMEUP            Player Volume +
  585.     NO_KEY,//0x018C,    // E0,31 - hz
  586.     0x014C,//NS         // E0,32 E0,B2          E0,3A E0,F0,3A          DIK_WEBHOME             Web Home
  587.     NO_KEY,//0x01CC,    // E0,33 - hz - DIK_NUMPADCOMMA /* , on numeric keypad (NEC PC98) */
  588.        
  589.     NO_KEY,//0x012C,    // E0,34 - hz
  590.     0x01AC,             // E0,35 E0,B5          E0,4A E0,F0,4A          DIK_DIVIDE              Num /
  591.     NO_KEY,//0x016C,    // E0,36 - hz
  592.     0x01EC,//??         // E0,37 E0,B7 - DIK_SYSRQ - неизвестно что генерирует неизвестно что !!!! [NS]  
  593. // $B8
  594.     0x011C,             // E0,38 E0,B8          E0,11 E0,F0,11          DIK_RMENU               rAlt
  595.     NO_KEY,//0x019C,    // E0,39 - hz
  596.     NO_KEY,//0x015C,    // E0,3A - hz
  597.     NO_KEY,//0x01DC,    // E0,3B - hz
  598.        
  599.     NO_KEY,//0x013C,    // E0,3C - hz
  600.     NO_KEY,//0x01BC,    // E0,3D - hz
  601.     NO_KEY,//0x017C,    // E0,3E - hz
  602.     NO_KEY,//0x01FC,    // E0,3F - hz
  603. // $C0 
  604.     NO_KEY,//0x0102,    // E0,40 - hz
  605.     NO_KEY,//0x0182,    // E0,41 - hz
  606.     NO_KEY,//0x0142,    // E0,42 - hz
  607.     NO_KEY,//0x01C2,    // E0,43 - hz
  608.        
  609.     NO_KEY,//0x0122,    // E0,44 - hz
  610.     0x01A2,             // E1,1D,45, E1,9D,C5   E1,14,77, E1,F0,14,F0,77  DIK_PAUSE             Pause   !!!! [NS]
  611.     0x0162,             // E0,46 E0,C6          ctrl+break ctrl+pause
  612.     0x01E2,             // E0,47 E0,C7          E0,6C E0,F0,6C          DIK_HOME                Home on arrow keypad ???
  613. // $C8 
  614.     0x0112,             // E0,48 E0,C8          E0,75 E0,F0,75          DIK_UP                  Up on arrow keypad
  615.     0x0192,             // E0,49 E0,C9          E0,7D E0,F0,7D          DIK_PRIOR               PgUp on arrow keypad
  616.     NO_KEY,//0x0152,    // E0,4A - hz
  617.     0x01D2,             // E0,4B E0,CB          E0,6B E0,F0,6B          DIK_LEFT                Left on arrow keypad
  618.        
  619.     NO_KEY,//0x0132,    // E0,4C - hz
  620.     0x01B2,             // E0,4D E0,CD          E0,74 E0,F0,74          DIK_RIGHT               Right on arrow keypad
  621.     NO_KEY,//0x0172,    // E0,4E - hz
  622.     0x01F2,             // E0,4F E0,CF          E0,69 E0,F0,69          DIK_END                 End on arrow keypad
  623. // $D0 
  624.     0x010A,             // E0,50 E0,D0          E0,72 E0,F0,72          DIK_DOWN                Down on arrow keypad
  625.     0x018A,             // E0,51 E0,D1          E0,7A E0,F0,7A          DIK_NEXT                PgDn on arrow keypad
  626.     0x014A,             // E0,52 E0,D2          E0,70 E0,F0,70          DIK_INSERT              Insert on arrow keypad
  627.     0x01CA,             // E0,53 E0,D3          E0,71 E0,F0,71          DIK_DELETE              Delete on arrow keypad
  628.        
  629.     NO_KEY,//0x012A,    // E0,54 - hz
  630.     NO_KEY,//0x01AA,    // E0,55 - hz
  631.     NO_KEY,//0x016A,    // E0,56 - hz
  632.     NO_KEY,//0x01EA,    // E0,57 - hz
  633. // $D8 
  634.     NO_KEY,//0x011A,    // E0,58 - hz
  635.     NO_KEY,//0x019A,    // E0,59 - hz
  636.     NO_KEY,//0x015A,    // E0,5A - hz
  637.     0x01DA,             // E0,5B E0,DB          E0,1F E0,F0,1F          DIK_LWIN                Left Windows key
  638.    
  639.     0x013A,             // E0,5C E0,DC          E0,27 E0,F0,27          DIK_RWIN                Right Windows key
  640.     0x01BA,             // E0,5D E0,DD          E0,2F E0,F0,2F          DIK_APPS                AppMenu key
  641.     0x017A,             // E0,5E E0,DE          E0,37 E0,F0,37          DIK_POWER               ACPI Power
  642.     0x01FA,             // E0,5F E0,DF          E0,3F E0,F0,3F          DIK_SLEEP               ACPI Sleep
  643. // $E0 
  644.     NO_KEY,//0x0106,    // E0,60 - hz
  645.     NO_KEY,//0x0186,    // E0,61 - hz
  646.     NO_KEY,//0x0146,    // E0,62 - hz
  647.     0x01C6,             // E0,63 E0,E3          E0,5E E0,F0,5E          DIK_WAKE                ACPI Wake
  648.        
  649.     NO_KEY,//0x0126,    // E0,64 - hz
  650.     0x01A6,//NS         // E0,65 E0,E5          E0,10 E0,F0,10          DIK_WEBSEARCH           Web Search
  651.     0x0166,//NS         // E0,66 E0,E6          E0,18 E0,F0,18          DIK_WEBFAVORITES        Web Favorites bookmarks?
  652.     0x01E6,//NS         // E0,67 E0,E7          E0,20 E0,F0,20          DIK_WEBREFRESH          Web Refresh
  653. // $E8 
  654.     0x0116,//NS         // E0,68 E0,E8          E0,28 E0,F0,28          DIK_WEBSTOP             Web Stop
  655.     0x0196,//NS         // E0,69 E0,E9          E0,30 E0,F0,30          DIK_WEBFORWARD          Web Forward
  656.     0x0156,//NS         // E0,6A E0,EA          E0,38 E0,F0,38          DIK_WEBBACK             Web Backward
  657.     0x01D6,//NS         // E0,6B E0,EB          E0,40 E0,F0,40          DIK_MYCOMPUTER          App My Computer
  658.        
  659.     0x0136,//NS         // E0,6C E0,EC          E0,48 E0,F0,48          DIK_MAIL                App Mail
  660.     0x01B6,//NS         // E0,6D E0,ED          E0,50 E0,F0,50          DIK_MEDIASELECT         App Media Select
  661.     NO_KEY,//0x0176,    // E0,6E - hz
  662.     NO_KEY,//0x01F6,    // E0,6F - hz
  663. // $F0 
  664.     NO_KEY,//0x010E,    // E0,70 - hz
  665.     NO_KEY,//0x018E,    // E0,71 - hz
  666.     NO_KEY,//0x014E,    // E0,72 - hz
  667.     NO_KEY,//0x01CE,    // E0,73 - hz
  668.    
  669.     NO_KEY,//0x012E,    // E0,74 - hz
  670.     NO_KEY,//0x01AE,    // E0,75 - hz
  671.     NO_KEY,//0x016E,    // E0,76 - hz
  672.     NO_KEY,//0x01EE,    // E0,77 - hz
  673. // $F8 
  674.     NO_KEY,//0x011E,    // E0,78 - hz
  675.     NO_KEY,//0x019E,    // E0,79 - hz
  676.     NO_KEY,//0x015E,    // E0,7A - hz
  677.     NO_KEY,//0x01DE,    // E0,7B - hz
  678.  
  679.     NO_KEY,//0x013E,    // E0,7C - hz
  680.     NO_KEY,//0x01BE,    // E0,7D - hz
  681.     NO_KEY,//0x017E,    // E0,7E - hz
  682.     NO_KEY,//0x01FE     // E0,7F - hz
  683. };                      //NEDOREPO
  684. //=============================================================================
  685.  
  686.  
  687.  
  688. //=============================================================================
  689. const PC_KEY pc_layout[] =
  690. {
  691.     { DIK_1,            0x31,   0xB1 },
  692.     { DIK_2,            0x32,   0xB2 },
  693.     { DIK_3,            0x33,   0xB3 },
  694.     { DIK_4,            0x34,   0xB4 },
  695.     { DIK_5,            0x35,   0xB5 },
  696.     { DIK_6,            0x45,   0xE5 },
  697.     { DIK_7,            0x44,   0xC5 },
  698.     { DIK_8,            0x43,   0xF5 },
  699.     { DIK_9,            0x42,   0xC3 },
  700.     { DIK_0,            0x41,   0xC2 },
  701.     { DIK_MINUS,        0xE4,   0xC1 }, // -_
  702.     { DIK_EQUALS,       0xE2,   0xE3 }, // =+
  703.  
  704.     { DIK_Q,            0x21,   0x29 },
  705.     { DIK_W,            0x22,   0x2A },
  706.     { DIK_E,            0x23,   0x2B },
  707.     { DIK_R,            0x24,   0x2C },
  708.     { DIK_T,            0x25,   0x2D },
  709.     { DIK_Y,            0x55,   0x5D },
  710.     { DIK_U,            0x54,   0x5C },
  711.     { DIK_I,            0x53,   0x5B },
  712.     { DIK_O,            0x52,   0x5A },
  713.     { DIK_P,            0x51,   0x59 },
  714. //  { DIK_LBRACKET,     0xD5,   0x94 }, // [{
  715. //  { DIK_RBRACKET,     0xD4,   0x95 }, // ]}
  716.  
  717.     { DIK_A,            0x11,   0x19 },
  718.     { DIK_S,            0x12,   0x1A },
  719.     { DIK_D,            0x13,   0x1B },
  720.     { DIK_F,            0x14,   0x1C },
  721.     { DIK_G,            0x15,   0x1D },
  722.     { DIK_H,            0x65,   0x6D },
  723.     { DIK_J,            0x64,   0x6C },
  724.     { DIK_K,            0x63,   0x6B },
  725.     { DIK_L,            0x62,   0x6A },
  726.     { DIK_SEMICOLON,    0xD2,   0x82 }, // ;:
  727.     { DIK_APOSTROPHE,   0xC4,   0xD1 }, // '"
  728.  
  729.     { DIK_Z,            0x02,   0x0A },
  730.     { DIK_X,            0x03,   0x0B },
  731.     { DIK_C,            0x04,   0x0C },
  732.     { DIK_V,            0x05,   0x0D },
  733.     { DIK_B,            0x75,   0x7D },
  734.     { DIK_N,            0x74,   0x7C },
  735.     { DIK_M,            0x73,   0x7B },
  736.     { DIK_COMMA,        0xF4,   0xA4 }, // ,<
  737.     { DIK_PERIOD,       0xF3,   0xA5 }, // .>
  738.     { DIK_SLASH,        0x85,   0x84 }, // /?
  739.     { DIK_BACKSLASH,    0x93,   0x92 }, // \|
  740. };
  741. //=============================================================================
  742.  
  743.  
  744. const size_t pc_layout_count = _countof( pc_layout);
  745.  
  746.  
  747.  
  748. //=============================================================================
  749. // таблица конвертации из вендовых VK_KEY-ев в вендовые? типо XT сканкоды
  750. // Win32.hlp + педивикия + метод научного тыка в унриале              // [NS]
  751. // не знаем есть ли конвертация средствами венды
  752. // будем делать ручками
  753. //
  754. //      НЕ АКТУАЛЬНО
  755. //      ТЕПЕРЬ КОНВЕРТИРУЕТСО НА ХОДУ ИЗ lParam
  756. //      ЧТО ПО ИДЕИ БУДЕТ ПРОПУСКАТЬ И КНОПКИ КОТОРЫЕ НЕ УДАЛОСЬ ПРОВЕРИТЬ
  757. /*
  758. const unsigned char vk_key_2_xt_key_tab[ 256] =        
  759. {
  760. //printscreen и sysreq ннежмутсо вообще
  761. // ПРИ ЭТОМ ЭВО ТЕСТ ВИДИТ ПРИНТСКРИН КАК E0 12
  762. // при этом эвотест не видит паузу и бреак
  763.  
  764.         NO_KEY,         //              00
  765.         NO_KEY,         // VK_LBUTTON   01      Left mouse button
  766.         NO_KEY,         // VK_RBUTTON   02      Right mouse button
  767.         0xC6, //unreal  // VK_CANCEL    03      Control-break processing
  768.  
  769.         NO_KEY,         // VK_MBUTTON   04      Middle mouse button (three-button mouse)
  770.         NO_KEY,         //  ѕ          05-07   Undefined
  771.         NO_KEY,         //              06
  772.         NO_KEY,         //              07
  773.        
  774.         0x0E,           // VK_BACK      08      BACKSPACE key
  775.         0x0F,           // VK_TAB       09      TAB key
  776.         NO_KEY,         //  ѕ          0A-0B   Undefined
  777.         NO_KEY,         //              0B
  778.        
  779.         0x4C, //unreal "5"              // VK_CLEAR     0C      CLEAR key
  780.  NO_KEY, // cnflct 0x1C,                // VK_RETURN    0D      ENTER key
  781.         NO_KEY,         //  ѕ          0E-0F   Undefined
  782.         NO_KEY,         //              0F
  783.        
  784.  NO_KEY, //0x2A, //LEFT // VK_SHIFT     10      SHIFT key
  785. NO_KEY, //      0x1D, //LEFT    // VK_CONTROL   11      CTRL key
  786.  NO_KEY,//      0x38, //LEFT    // VK_MENU      12      ALT key
  787.         0xC5, //unreal  // VK_PAUSE     13      PAUSE key
  788.        
  789.         0x3A,           // VK_CAPITAL   14      CAPS LOCK key
  790.         NO_KEY,         //  ѕ          15-19   Reserved for Kanji systems
  791.         NO_KEY,         //              16
  792.         NO_KEY,         //              17
  793.        
  794.         NO_KEY,         //              18
  795.         NO_KEY,         //              19
  796.         NO_KEY,         //  ѕ          1A      Undefined
  797.         0x01,           // VK_ESCAPE    1B      ESC key
  798.        
  799.         NO_KEY,         //  ѕ          1C-1F   Reserved for Kanji systems
  800.         NO_KEY,         //              1D
  801.         NO_KEY,         //              1E
  802.         NO_KEY,         //              1F
  803.        
  804.         0x39,           // VK_SPACE     20      SPACEBAR
  805.         0xC9, //unreal  // VK_PRIOR     21      PAGE UP key
  806.         0xD1, //unreal  // VK_NEXT      22      PAGE DOWN key
  807.         0xCF, //unreal  // VK_END       23      END key
  808.        
  809.         0xC7, //unreal  // VK_HOME      24      HOME key
  810.         0xCB, //unreal  // VK_LEFT      25      LEFT ARROW key
  811.         0xC8, //unreal  // VK_UP        26      UP ARROW key
  812.         0xCD, //unreal  // VK_RIGHT     27      RIGHT ARROW key
  813.        
  814.         0xD0, //unreal  // VK_DOWN      28      DOWN ARROW key
  815.         NO_KEY,         // VK_SELECT    29      SELECT key
  816.         NO_KEY,         //  ѕ  2A      Original equipment manufacturer (OEM) specific
  817.         NO_KEY,         // VK_EXECUTE   2B      EXECUTE key
  818.        
  819.         0x2A, //?????   // VK_SNAPSHOT  2C      PRINT SCREEN key for Windows 3.0 and later
  820.  NO_KEY, //cnflct       // VK_INSERT    2D      INS key
  821.  NO_KEY,// 2E 6E cnflct // VK_DELETE    2E      DEL key
  822.         NO_KEY,         // VK_HELP      2F      HELP key
  823.        
  824.         0x0B,           // VK_0         30      0 key
  825.         0x02,           // VK_1         31      1 key
  826.         0x03,           // VK_2         32      2 key
  827.         0x04,           // VK_3         33      3 key
  828.        
  829.         0x05,           // VK_4         34      4 key
  830.         0x06,           // VK_5         35      5 key
  831.         0x07,           // VK_6         36      6 key
  832.         0x08,           // VK_7         37      7 key
  833.        
  834.         0x09,           // VK_8         38      8 key
  835.         0x0A,           // VK_9         39      9 key
  836.         NO_KEY,         //  ѕ          3A-40   Undefined
  837.         NO_KEY,         //              3B
  838.        
  839.         NO_KEY,         //              3C
  840.         NO_KEY,         //              3D
  841.         NO_KEY,         //              3E
  842.         NO_KEY,         //              3F
  843.        
  844.         NO_KEY,         //              40
  845.         0x1E,           // VK_A         41      A key
  846.         0x30,           // VK_B         42      B key
  847.         0x2E,           // VK_C         43      C key
  848.        
  849.         0x20,           // VK_D         44      D key
  850.         0x12,           // VK_E         45      E key
  851.         0x21,           // VK_F         46      F key
  852.         0x22,           // VK_G         47      G key
  853.        
  854.         0x23,           // VK_H         48      H key
  855.         0x17,           // VK_I         49      I key
  856.         0x24,           // VK_J         4A      J key
  857.         0x25,           // VK_K         4B      K key
  858.        
  859.         0x26,           // VK_L         4C      L key
  860.         0x32,           // VK_M         4D      M key
  861.         0x31,           // VK_N         4E      N key
  862.         0x18,           // VK_O         4F      O key
  863.        
  864.         0x19,           // VK_P         50      P key
  865.         0x10,           // VK_Q         51      Q key
  866.         0x13,           // VK_R         52      R key
  867.         0x1F,           // VK_S         53      S key
  868.        
  869.         0x14,           // VK_T         54      T key
  870.         0x16,           // VK_U         55      U key
  871.         0x2F,           // VK_V         56      V key
  872.         0x11,           // VK_W         57      W key
  873.        
  874.         0x2D,           // VK_X         58      X key
  875.         0x15,           // VK_Y         59      Y key
  876.         0x2C,           // VK_Z         5A      Z key
  877.         0xDB, //unreal  // VK_LWIN      5B      Left Windows key (Microsoft Natural Keyboard)
  878.        
  879.         0x5C, //?????   // VK_RWIN      5C      Right Windows key (Microsoft Natural Keyboard)
  880.         0xDD, //unreal  // VK_APPS      5D      Applications key (Microsoft Natural Keyboard)
  881.         NO_KEY,         //  ѕ          5E-5F   Undefined
  882.         NO_KEY,         //              5F
  883.        
  884.         0x52,           // VK_NUMPAD0   60      Numeric keypad 0 key
  885.         0x4F,           // VK_NUMPAD1   61      Numeric keypad 1 key
  886.         0x50,           // VK_NUMPAD2   62      Numeric keypad 2 key
  887.         0x51,           // VK_NUMPAD3   63      Numeric keypad 3 key
  888.        
  889.         0x4B,           // VK_NUMPAD4   64      Numeric keypad 4 key
  890.         0x4C,           // VK_NUMPAD5   65      Numeric keypad 5 key
  891.         0x4D,           // VK_NUMPAD6   66      Numeric keypad 6 key
  892.         0x47,           // VK_NUMPAD7   67      Numeric keypad 7 key
  893.        
  894.         0x48,           // VK_NUMPAD8   68      Numeric keypad 8 key
  895.         0x49,           // VK_NUMPAD9   69      Numeric keypad 9 key
  896.         0x37, //unreal  // VK_MULTIPLY  6A      Multiply key numpad
  897.         0x4E, //unreal  // VK_ADD       6B      Add key
  898.        
  899.         NO_KEY,         // VK_SEPARATOR 6C      Separator key
  900.         0x4A, //unreal  // VK_SUBTRACT  6D      Subtract key
  901.  NO_KEY, //2e 6e cnflct // VK_DECIMAL   6E      Decimal key
  902.         0xB5, //unreal  // VK_DIVIDE    6F      Divide key   numpad
  903.        
  904.         0x3B,           // VK_F1        70      F1 key
  905.         0x3C,           // VK_F2        71      F2 key
  906.         0x3D,           // VK_F3        72      F3 key
  907.         0x3E,           // VK_F4        73      F4 key
  908.        
  909.         0x3F,           // VK_F5        74      F5 key
  910.         0x40,           // VK_F6        75      F6 key
  911.         0x41,           // VK_F7        76      F7 key
  912.         0x42,           // VK_F8        77      F8 key
  913.        
  914.         0x43,           // VK_F9        78      F9 key
  915.         0x44,           // VK_F10       79      F10 key
  916.         0x57,           // VK_F11       7A      F11 key
  917.         0x58,           // VK_F12       7B      F12 key
  918.        
  919.         NO_KEY,         // VK_F13       7C      F13 key
  920.         NO_KEY,         // VK_F14       7D      F14 key
  921.         NO_KEY,         // VK_F15       7E      F15 key
  922.         NO_KEY,         // VK_F16       7F      F16 key
  923.        
  924.         NO_KEY,         // VK_F17       80H     F17 key
  925.         NO_KEY,         // VK_F18       81H     F18 key
  926.         NO_KEY,         // VK_F19       82H     F19 key
  927.         NO_KEY,         // VK_F20       83H     F20 key
  928.        
  929.         NO_KEY,         // VK_F21       84H     F21 key
  930.         NO_KEY,         // VK_F22       85H     F22 key
  931.         NO_KEY,         // VK_F23       86H     F23 key
  932.         NO_KEY,         // VK_F24       87H     F24 key
  933.        
  934.         NO_KEY,         //  ѕ          88-8F   Unassigned
  935.         NO_KEY,         //              89
  936.         NO_KEY,         //              8A
  937.         NO_KEY,         //              8B
  938.        
  939.         NO_KEY,         //              8C
  940.         NO_KEY,         //              8D
  941.         NO_KEY,         //              8E
  942.         NO_KEY,         //              8F
  943.        
  944.         0x45, //unreal  // VK_NUMLOCK   90      NUM LOCK key
  945.         0x46, //?????   // VK_SCROLL    91      SCROLL LOCK key
  946.         NO_KEY,         //  ѕ          92-B9   Unassigned
  947.         NO_KEY,         //              93
  948.        
  949.         NO_KEY,         //              94
  950.         NO_KEY,         //              95
  951.         NO_KEY,         //              96
  952.         NO_KEY,         //              97
  953.        
  954.         NO_KEY,         //              98
  955.         NO_KEY,         //              99
  956.         NO_KEY,         //              9A
  957.         NO_KEY,         //              9B
  958.        
  959.         NO_KEY,         //              9C
  960.         NO_KEY,         //              9D
  961.         NO_KEY,         //              9E
  962.         NO_KEY,         //              9F
  963.        
  964.         NO_KEY,         //              A0
  965.         NO_KEY,         //              A1
  966.         NO_KEY,         //              A2
  967.         NO_KEY,         //              A3
  968.        
  969.         NO_KEY,         //              A4
  970.         NO_KEY,         //              A5
  971.         NO_KEY,         //              A6
  972.         NO_KEY,         //              A7
  973.        
  974.         NO_KEY,         //              A8
  975.         NO_KEY,         //              A9
  976.         NO_KEY,         //              AA
  977.         NO_KEY,         //              AB
  978.        
  979.         NO_KEY,         //              AC
  980.         NO_KEY,         //              AD
  981.         NO_KEY,         //              AE
  982.         NO_KEY,         //              AF
  983.        
  984.         NO_KEY,         //              B0
  985.         NO_KEY,         //              B1
  986.         NO_KEY,         //              B2
  987.         NO_KEY,         //              B3
  988.        
  989.         NO_KEY,         //              B4
  990.         NO_KEY,         //              B5
  991.         NO_KEY,         //              B6
  992.         NO_KEY,         //              B7
  993.        
  994.         NO_KEY,         //              B8
  995.         NO_KEY,         //              B9
  996.         0x27,           //  ѕ          BA-C0   OEM specific  ";" ":"
  997.         0x0D, //unreal  //              BB      = + не нумпад
  998.        
  999.         0x33, //unreal  //              BC      , <
  1000.         0x0C, //unreal  //              BD      - _ не нумпад
  1001.         0x34,           //              BE      . >
  1002.         0x35,           //              BF      / ?
  1003.        
  1004.         0x29, //unrel           //              C0      ` ~
  1005.         NO_KEY,         //  ѕ          C1-DA   Unassigned
  1006.         NO_KEY,         //              C2
  1007.         NO_KEY,         //              C3
  1008.        
  1009.         NO_KEY,         //              C4
  1010.         NO_KEY,         //              C5
  1011.         NO_KEY,         //              C6
  1012.         NO_KEY,         //              C7
  1013.        
  1014.         NO_KEY,         //              C8
  1015.         NO_KEY,         //              C9
  1016.         NO_KEY,         //              CA
  1017.         NO_KEY,         //              CB
  1018.        
  1019.         NO_KEY,         //              CC
  1020.         NO_KEY,         //              CD
  1021.         NO_KEY,         //              CE
  1022.         NO_KEY,         //              CF
  1023.        
  1024.         NO_KEY,         //              D0
  1025.         NO_KEY,         //              D1
  1026.         NO_KEY,         //              D2
  1027.         NO_KEY,         //              D3
  1028.        
  1029.         NO_KEY,         //              D4
  1030.         NO_KEY,         //              D5
  1031.         NO_KEY,         //              D6
  1032.         NO_KEY,         //              D7
  1033.        
  1034.         NO_KEY,         //              D8
  1035.         NO_KEY,         //              D9
  1036.         NO_KEY,         //              DA
  1037.         0x1A, //unreal  //  ѕ          DB-E4   OEM specific    [ {
  1038.        
  1039.         0x2B, //unreal  //              DC      \ |
  1040.         0x1B, //unreal  //              DD      ] }
  1041.         0x28, //unreal  //              DE      -'- -"-
  1042.         NO_KEY,         //              DF
  1043.        
  1044.         NO_KEY,         //              E0
  1045.         NO_KEY,         //              E1
  1046.         NO_KEY,         //              E2
  1047.         NO_KEY,         //              E3
  1048.        
  1049.         NO_KEY,         //              E4
  1050.         NO_KEY,         //  ѕ          E5      Unassigned
  1051.         NO_KEY,         //  ѕ          E6      OEM specific
  1052.         NO_KEY,         //  ѕ          E7-E8   Unassigned
  1053.        
  1054.         NO_KEY,         //              E8
  1055.         NO_KEY,         //  ѕ          E9-F5   OEM specific
  1056.         NO_KEY,         //              EA
  1057.         NO_KEY,         //              EB
  1058.        
  1059.         NO_KEY,         //              EC
  1060.         NO_KEY,         //              ED
  1061.         NO_KEY,         //              EE
  1062.         NO_KEY,         //              EF
  1063.        
  1064.         NO_KEY,         //              F0
  1065.         NO_KEY,         //              F1
  1066.         NO_KEY,         //              F2
  1067.         NO_KEY,         //              F3
  1068.        
  1069.         NO_KEY,         //              F4
  1070.         NO_KEY,         //              F5
  1071.         NO_KEY,         // VK_ATTN      F6      Attn key
  1072.         NO_KEY,         // VK_CRSEL     F7      CrSel key
  1073.        
  1074.         NO_KEY,         // VK_EXSEL     F8      ExSel key
  1075.         NO_KEY,         // VK_EREOF     F9      Erase EOF key
  1076.         NO_KEY,         // VK_PLAY      FA      Play key
  1077.         NO_KEY,         // VK_ZOOM      FB      Zoom key
  1078.        
  1079.         NO_KEY,         // VK_NONAME    FC      Reserved for future use.
  1080.         NO_KEY,         // VK_PA1       FD      PA1 key
  1081.         NO_KEY,         // VK_OEM_CLEAR FE      Clear key
  1082.         NO_KEY,         //              FF
  1083. };
  1084. */
  1085.  
  1086. //=============================================================================
  1087.