ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

kbdpo.c
Go to the documentation of this file.
00001 /*
00002  * ReactOS Portuguese keyboard layout
00003  * Copyright (C) 2006 ReactOS
00004  * License: LGPL, see: LGPL.txt
00005  * Based on kbdes, skbdda and skbdfr
00006  *
00007  * Made by Pedro Maia pedrom.maia@gmail.com
00008  *
00009  *
00010  * http://keytouch.sourceforge.net/howto_keyboard/node4.html (Very Good)
00011  * http://www.microsoft.com/globaldev/tools/msklc.mspx (Keyboard layout file from MS)
00012  *
00013  * TODO
00014  *  Correct DEADKEYS
00015  *  Correct DIVIDE and PrtScr
00016  */
00017 
00018 #include <windows.h>
00019 #include <ndk/kbd.h>
00020 
00021 #ifdef _M_IA64
00022 #define ROSDATA static __declspec(allocate(".data"))
00023 #else
00024 #ifdef _MSC_VER
00025 #pragma data_seg(".data")
00026 #define ROSDATA static
00027 #else
00028 #define ROSDATA static __attribute__((section(".data")))
00029 #endif
00030 #endif
00031 
00032 #define VK_EMPTY  0xff   /* The non-existent VK */
00033 
00034 #define KNUMS     KBDNUMPAD|KBDSPECIAL /* Special + number pad */
00035 #define KMEXT     KBDEXT|KBDMULTIVK    /* Multi + ext */
00036 
00037 ROSDATA USHORT scancode_to_vk[] = {
00038 /* 00 */  VK_EMPTY,
00039 /* 01 */  VK_ESCAPE,
00040 /* 02 */  '1',
00041 /* 03 */  '2',
00042 /* 04 */  '3',
00043 /* 05 */  '4',
00044 /* 06 */  '5',
00045 /* 07 */  '6',
00046 /* 08 */  '7',
00047 /* 09 */  '8',
00048 /* 0a */  '9',
00049 /* 0b */  '0',
00050 /* 0c */  VK_OEM_4,
00051 /* 0d */  VK_OEM_6,
00052 /* 0e */  VK_BACK,
00053 /* 0f */  VK_TAB,
00054 /* 10 */  'Q',
00055 /* 11 */  'W',
00056 /* 12 */  'E',
00057 /* 13 */  'R',
00058 /* 14 */  'T',
00059 /* 15 */  'Y',
00060 /* 16 */  'U',
00061 /* 17 */  'I',
00062 /* 18 */  'O',
00063 /* 19 */  'P',
00064 /* 1a */  VK_OEM_PLUS,
00065 /* 1b */  VK_OEM_1,
00066 /* 1c */  VK_RETURN,
00067 /* 1d */  VK_LCONTROL,
00068 /* 1e */  'A',
00069 /* 1f */  'S',
00070 /* 20 */  'D',
00071 /* 21 */  'F',
00072 /* 22 */  'G',
00073 /* 23 */  'H',
00074 /* 24 */  'J',
00075 /* 25 */  'K',
00076 /* 26 */  'L',
00077 /* 27 */  VK_OEM_3,
00078 /* 28 */  VK_OEM_7,
00079 /* 29 */  VK_OEM_5,
00080 /* 2a */  VK_LSHIFT,
00081 /* 2b */  VK_OEM_2,
00082 /* 2c */  'Z',
00083 /* 2d */  'X',
00084 /* 2e */  'C',
00085 /* 2f */  'V',
00086 /* 30 */  'B',
00087 /* 31 */  'N',
00088 /* 32 */  'M',
00089 /* 33 */  VK_OEM_COMMA,
00090 /* 34 */  VK_OEM_PERIOD,
00091 /* 35 */  VK_OEM_MINUS,
00092 /* 36 */  VK_RSHIFT,
00093 /* 37 */  VK_MULTIPLY,
00094 /* 38 */  VK_LMENU,
00095 /* 39 */  VK_SPACE,
00096 /* 3a */  VK_CAPITAL,
00097 /* 3b */  VK_F1,
00098 /* 3c */  VK_F2,
00099 /* 3d */  VK_F3,
00100 /* 3e */  VK_F4,
00101 /* 3f */  VK_F5,
00102 /* 40 */  VK_F6,
00103 /* 41 */  VK_F7,
00104 /* 42 */  VK_F8,
00105 /* 43 */  VK_F9,
00106 /* 44 */  VK_F10,
00107 /* 45 */  VK_NUMLOCK | KMEXT,
00108 /* 46 */  VK_SCROLL | KBDMULTIVK,
00109 /* 47 */  VK_HOME | KNUMS,
00110 /* 48 */  VK_UP | KNUMS,
00111 /* 49 */  VK_PRIOR | KNUMS,
00112 /* 4a */  VK_SUBTRACT,
00113 /* 4b */  VK_LEFT | KNUMS,
00114 /* 4c */  VK_CLEAR | KNUMS,
00115 /* 4d */  VK_RIGHT | KNUMS,
00116 /* 4e */  VK_ADD,
00117 /* 4f */  VK_END | KNUMS,
00118 /* 50 */  VK_DOWN | KNUMS,
00119 /* 51 */  VK_NEXT | KNUMS,
00120 /* 52 */  VK_INSERT | KNUMS,
00121 /* 53 */  VK_DELETE | KNUMS,
00122 /* 54 */  VK_SNAPSHOT,
00123 /* 55 */  VK_EMPTY,
00124 /* 56 */  VK_OEM_102,
00125 /* 57 */  VK_F11,
00126 /* 58 */  VK_F12,
00127 /* 59 */  VK_EMPTY,
00128 /* 5a */  VK_CLEAR,
00129 /* 5b */  VK_EMPTY,
00130 /* 5c */  VK_EMPTY,
00131 /* 5d */  VK_EMPTY,
00132 /* 5e */  VK_EMPTY,  /* EREOF */
00133 /* 5f */  VK_EMPTY,
00134 /* 60 */  VK_EMPTY,
00135 /* 61 */  VK_EMPTY,
00136 /* 62 */  VK_EMPTY,
00137 /* 63 */  VK_EMPTY,  /* ZOOM */
00138 /* 64 */  VK_HELP,
00139 /* 65 */  VK_F13,
00140 /* 66 */  VK_F14,
00141 /* 67 */  VK_F15,
00142 /* 68 */  VK_F16,
00143 /* 69 */  VK_F17,
00144 /* 6a */  VK_F18,
00145 /* 6b */  VK_F19,
00146 /* 6c */  VK_F20,
00147 /* 6d */  VK_F21,
00148 /* 6e */  VK_F22,
00149 /* 6f */  VK_F23,
00150 /* 70 */  VK_EMPTY,
00151 /* 71 */  VK_EMPTY,
00152 /* 72 */  VK_EMPTY,
00153 /* 73 */  VK_EMPTY,
00154 /* 74 */  VK_EMPTY,
00155 /* 75 */  VK_EMPTY,
00156 /* 76 */  VK_EMPTY,
00157 /* 77 */  VK_F24,
00158 /* 78 */  VK_EMPTY,
00159 /* 79 */  VK_EMPTY,
00160 /* 7a */  VK_EMPTY,
00161 /* 7b */  VK_EMPTY,
00162 /* 7c */  VK_EMPTY,
00163 /* 7d */  VK_EMPTY,
00164 /* 7e */  VK_EMPTY,
00165 /* 7f */  VK_EMPTY,
00166 /* 80 */  VK_EMPTY,
00167 /* 00 */  0
00168 };
00169 
00170 ROSDATA VSC_VK extcode0_to_vk[] = {
00171   { 0x10, VK_MEDIA_PREV_TRACK    | KBDEXT },    // Pista Anterior
00172   { 0x19, VK_MEDIA_NEXT_TRACK    | KBDEXT },    // Proxima Pista
00173   { 0x1D, VK_RCONTROL            | KBDEXT },    // Tecla ctrl
00174   { 0x20, VK_VOLUME_MUTE         | KBDEXT },    // Mute volume
00175   { 0x21, VK_LAUNCH_APP2         | KBDEXT },    // Tecla calculadora
00176   { 0x22, VK_MEDIA_PLAY_PAUSE    | KBDEXT },    // Play/pause
00177   { 0x24, VK_MEDIA_STOP          | KBDEXT },    // Stop
00178   { 0x2E, VK_VOLUME_DOWN         | KBDEXT },    // Baixar volume
00179   { 0x30, VK_VOLUME_UP           | KBDEXT },    // Subir volume
00180   { 0x32, VK_BROWSER_HOME        | KBDEXT },    // Pagina predefinida do navegador de internet, ou abri-lo se não estiver activo
00181   { 0x35, VK_DIVIDE              | KBDEXT },    // Tecla /
00182   { 0x37, VK_SNAPSHOT            | KBDEXT },    // Tecla de Print Screen
00183   { 0x38, VK_RMENU               | KBDEXT },    // Tecla Alt
00184   { 0x47, VK_HOME                | KBDEXT },    // Tecla Home
00185   { 0x48, VK_UP                  | KBDEXT },    // Cursor Cima
00186   { 0x49, VK_PRIOR               | KBDEXT },    // Tecla Re pag
00187   { 0x4b, VK_LEFT                | KBDEXT },    // Cursor esquerda
00188   { 0x4d, VK_RIGHT               | KBDEXT },    // Cursor direita
00189   { 0x4f, VK_END                 | KBDEXT },    // Tecla End
00190   { 0x50, VK_DOWN                | KBDEXT },    // Cursor Down
00191   { 0x51, VK_NEXT                | KBDEXT },    // Tecla Av pag
00192   { 0x52, VK_INSERT              | KBDEXT },    // Tecla insert
00193   { 0x53, VK_DELETE              | KBDEXT },    // Tecla delete
00194   { 0x5b, VK_LWIN                | KBDEXT },    // Tecla windows esquerda
00195   { 0x5c, VK_RWIN                | KBDEXT },    // Tecla windows direita
00196   { 0x5d, VK_APPS                | KBDEXT },    // Tecla menu aplicacao direita*/
00197   { 0x5f, VK_SLEEP               | KBDEXT },    // Tecla Sleep
00198   { 0x65, VK_BROWSER_SEARCH      | KBDEXT },    // Pagina de pesquisa do navegador de internet
00199   { 0x66, VK_BROWSER_FAVORITES   | KBDEXT },    // Favoritos, not yet implemented
00200   { 0x67, VK_BROWSER_REFRESH     | KBDEXT },    // Actualizar pagina do navegador de internet
00201   { 0x68, VK_BROWSER_STOP        | KBDEXT },    // Parar navegação na internet internet
00202   { 0x69, VK_BROWSER_FORWARD     | KBDEXT },    // Frente no historico de paginas no navegador de internet
00203   { 0x6a, VK_BROWSER_BACK        | KBDEXT },    // Atras no historico de paginas no navegador de internet (Backspace)
00204   { 0x6b, VK_LAUNCH_APP1         | KBDEXT },    // Tecla Meu Computador
00205   { 0x6c, VK_LAUNCH_MAIL         | KBDEXT },    // Abrir programa de e-mail
00206   { 0x6d, VK_LAUNCH_MEDIA_SELECT | KBDEXT },    // Abrir reproductor multimedia
00207   { 0x1c, VK_RETURN              | KBDEXT },    // Tecla de Enter
00208   { 0x46, VK_CANCEL              | KBDEXT },    // Tecla Escape
00209   { 0, 0 },
00210 };
00211 
00212 ROSDATA VSC_VK extcode1_to_vk[] = {
00213    { 0, 0 },
00214 };
00215 
00216 #define TIDLE_CIRC      VK_OEM_2
00217 #define ACUTE_GRAVE     VK_OEM_1
00218 #define ORDERN_SUPERSCRIPT  VK_OEM_7
00219 #define CCEDIL          VK_OEM_3
00220 #define QUOTE           VK_OEM_4
00221 #define BACKSLASH_BAR       VK_OEM_5
00222 #define CLASSIC_QUOTES      VK_OEM_6
00223 #define MATH_RELATE     VK_OEM_102
00224 
00225 #define ACUTE_CHAR  0xB4
00226 #define GRAVE_CHAR  0x60
00227 #define CIRC_CHAR   0x5E
00228 #define TIDLE_CHAR  0x7E
00229 #define TREMA_CHAR  0xA8
00230 
00231 /* Modifiers */
00232 
00233 ROSDATA VK_TO_BIT modifier_keys[] = {
00234   { VK_SHIFT,   KBDSHIFT },
00235   { VK_CONTROL, KBDCTRL },
00236   { VK_MENU,    KBDALT },
00237   { 0,  0 }
00238 };
00239 
00240 ROSDATA MODIFIERS modifier_bits = {
00241   modifier_keys,
00242   6,
00243   {     0,  1<<0, 1<<1, 1<<2, SHFT_INVALID, SHFT_INVALID,             3  }
00244   /* NONE, SHIFT, CTRL,  ALT,         MENU, SHIFT + MENU, SHIFT+CONTROL */
00245 };
00246 
00247 ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
00248   { VK_NUMPAD0, 0, {'0'} },
00249   { VK_NUMPAD1, 0, {'1'} },
00250   { VK_NUMPAD2, 0, {'2'} },
00251   { VK_NUMPAD3, 0, {'3'} },
00252   { VK_NUMPAD4, 0, {'4'} },
00253   { VK_NUMPAD5, 0, {'5'} },
00254   { VK_NUMPAD6, 0, {'6'} },
00255   { VK_NUMPAD7, 0, {'7'} },
00256   { VK_NUMPAD8, 0, {'8'} },
00257   { VK_NUMPAD9, 0, {'9'} },
00258   { VK_DECIMAL, 0, {'.'} },
00259   { 0,0 }
00260 };
00261 
00262 ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
00263   /* Normal vs Shifted */
00264 
00265    /* The alphabet */
00266   { 'A',    CAPLOK,   {'a', 'A'} },
00267   { 'B',    CAPLOK,   {'b', 'B'} },
00268   { 'C',    CAPLOK,   {'c', 'C'} },
00269   { 'D',    CAPLOK,   {'d', 'D'} },
00270   { 'F',    CAPLOK,   {'f', 'F'} },
00271   { 'G',    CAPLOK,   {'g', 'G'} },
00272   { 'H',    CAPLOK,   {'h', 'H'} },
00273   { 'I',    CAPLOK,   {'i', 'I'} },
00274   { 'J',    CAPLOK,   {'j', 'J'} },
00275   { 'K',    CAPLOK,   {'k', 'K'} },
00276   { 'L',    CAPLOK,   {'l', 'L'} },
00277   { 'M',    CAPLOK,   {'m', 'M'} },
00278   { 'N',    CAPLOK,   {'n', 'N'} },
00279   { 'O',    CAPLOK,   {'o', 'O'} },
00280   { 'P',    CAPLOK,   {'p', 'P'} },
00281   { 'Q',    CAPLOK,   {'q', 'Q'} },
00282   { 'R',    CAPLOK,   {'r', 'R'} },
00283   { 'S',    CAPLOK,   {'s', 'S'} },
00284   { 'T',    CAPLOK,   {'t', 'T'} },
00285   { 'U',    CAPLOK,   {'u', 'U'} },
00286   { 'V',    CAPLOK,   {'v', 'V'} },
00287   { 'W',    CAPLOK,   {'w', 'W'} },
00288   { 'X',    CAPLOK,   {'x', 'X'} },
00289   { 'Y',    CAPLOK,   {'y', 'Y'} },
00290   { 'Z',    CAPLOK,   {'z', 'Z'} },
00291 
00292    /* The numbers */
00293   //De 2 ate 4 tem tres estados
00294   { '1',  0,   {'1', '!'} },
00295   { '5',  0,   {'5', '%'} },
00296   { '6',  0,   {'6', '&'} },
00297   //De 7 ate 0 tem tres estados
00298 
00299   /* Specials */
00300   /* Shift-_ generates PT */
00301   { TIDLE_CIRC,     0, {   WCH_DEAD,   WCH_DEAD} },
00302   {   VK_EMPTY,     0, { TIDLE_CHAR,  CIRC_CHAR} },
00303 
00304   { CCEDIL,       CAPLOK, {       0xe7,       0xc7} }, // ç
00305   { QUOTE,      0, {       0xb4,        '?'} }, // ' ?
00306   { BACKSLASH_BAR,  0, {       0x5c,       0x7c} }, // \ |
00307   { CLASSIC_QUOTES, 0, {       0xab,       0xbb} }, // « »
00308 
00309   { ACUTE_GRAVE,    0, {   WCH_DEAD,   WCH_DEAD} }, // ` '
00310   {    VK_EMPTY,    0, { ACUTE_CHAR, GRAVE_CHAR} },
00311 
00312   { ORDERN_SUPERSCRIPT, 0, {       0xBA,       0xAA} }, // º ª
00313   { MATH_RELATE,    0, {        '<',        '>'} },
00314   { VK_OEM_COMMA,   0, {        ',',        ';'} },
00315   { VK_OEM_PERIOD,  0, {        '.',        ':'} },
00316   { VK_OEM_MINUS,   0, {        '-',        '_'} },
00317 
00318   /* Keys that do not have shift states */
00319   { VK_TAB,     0, {        '\t',      '\t'} },
00320   { VK_ADD,     0, {         '+',       '+'} },
00321   { VK_SUBTRACT,    0, {         '-',       '-'} },
00322   { VK_MULTIPLY,    0, {         '*',       '*'} },
00323   { VK_DIVIDE,      0, {         '/',       '/'} },
00324   { VK_ESCAPE,      0, {      0x1b,    0x1b} },
00325   { VK_SPACE,       0, {         ' ',       ' '} },
00326 
00327   { 0, 0 }
00328 };
00329 
00330 ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
00331   /* Normal, Shifted, Ctrl */
00332 
00333   /* Legacy (telnet-style) ascii escapes */
00334   { VK_RETURN,    0, {'\r',     '\r',     '\n'} },
00335   { VK_BACK,      0, {'\b',     '\b',     0x7f} },
00336   { 0,0 }
00337 };
00338 
00339 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
00340                         /* Normal, Shift,  Control,   Alt+Gr */
00341 
00342   {         '2', 0, {    '2',   '"', WCH_NONE,        '@' }  }, // 2 " @
00343   {         '3', 0, {    '3',   '#', WCH_NONE,       0xa3 }  }, // 3 #
00344   {         '4', 0, {    '4',   '$', WCH_NONE,       0xa7 }  }, // 4 $
00345   {         '7', 0, {    '7',   '/', WCH_NONE,       0x7b }  }, // 7 &
00346   {         '8', 0, {    '8',   '(', WCH_NONE,       0x5b }  }, // 8 (
00347   {         '9', 0, {    '9',   ')', WCH_NONE,       0x5d }  }, // 9 )
00348   {         '0', 0, {    '0',   '=', WCH_NONE,       0x7d }  }, // 0 =
00349   {         'E',   CAPLOK, {    'e',   'E', WCH_NONE,     0x20ac }  }, // e E
00350 
00351   { VK_OEM_PLUS, 0, {    '+',   '*', WCH_NONE,   WCH_DEAD }  }, // + * "
00352   {    VK_EMPTY, 0, {    '+',   '*', WCH_NONE, TREMA_CHAR }  },
00353   { 0, 0 }
00354 };
00355 
00356 #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
00357 
00358 ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
00359   vk_master(1,keypad_numbers),
00360   vk_master(2,key_to_chars_2mod),
00361   vk_master(3,key_to_chars_3mod),
00362   vk_master(4,key_to_chars_4mod),
00363   { 0,0,0 }
00364 };
00365 
00366 #define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags
00367 
00368 ROSDATA DEADKEY  deadkey[] =
00369 {
00370             //*´* DEADKEY   00B4
00371             { DEADTRANS(L'a', 0xb4, 0xe1, 0x00) }, // letra a com ´
00372             { DEADTRANS(L'A', 0xb4, 0xc1, 0x00) }, // letra A com ´
00373             { DEADTRANS(L'e', 0xb4, 0xe9, 0x00) }, // letra e com ´
00374             { DEADTRANS(L'E', 0xb4, 0xc9, 0x00) }, // letra E com ´
00375             { DEADTRANS(L'i', 0xb4, 0xed, 0x00) }, // letra i com ´
00376             { DEADTRANS(L'I', 0xb4, 0xcd, 0x00) }, // letra I com ´
00377             { DEADTRANS(L'o', 0xb4, 0xf3, 0x00) }, // letra o com ´
00378             { DEADTRANS(L'O', 0xb4, 0xd3, 0x00) }, // letra O com ´
00379             { DEADTRANS(L'u', 0xb4, 0xfa, 0x00) }, // letra u com ´
00380             { DEADTRANS(L'U', 0xb4, 0xda, 0x00) }, // letra U com ´
00381             { DEADTRANS(L'y', 0xb4, 0xfd, 0x00) }, // letra y com ´
00382             { DEADTRANS(0x20, 0xb4, 0xb4, 0x00) }, // letra 'space' (0x0020) com ´
00383 
00384             //*`* DEADKEY   0060
00385             { DEADTRANS(L'a', 0x60, 0xe0, 0x00) }, // letra a com `
00386             { DEADTRANS(L'A', 0x60, 0xc0, 0x00) }, // letra A com `
00387             { DEADTRANS(L'e', 0x60, 0xe8, 0x00) }, // letra e com `
00388             { DEADTRANS(L'E', 0x60, 0xc8, 0x00) }, // letra E com `
00389             { DEADTRANS(L'i', 0x60, 0xec, 0x00) }, // letra i com `
00390             { DEADTRANS(L'I', 0x60, 0xcc, 0x00) }, // letra I com `
00391             { DEADTRANS(L'o', 0x60, 0xf2, 0x00) }, // letra o com `
00392             { DEADTRANS(L'O', 0x60, 0xd2, 0x00) }, // letra O com `
00393             { DEADTRANS(L'u', 0x60, 0xf9, 0x00) }, // letra u com `
00394             { DEADTRANS(L'U', 0x60, 0xd9, 0x00) }, // letra U com `
00395             { DEADTRANS(0x20, 0x60, 0x60, 0x00) }, // letra 'space' (0x0020) com `
00396 
00397         //*^* DEADKEY   005E
00398             { DEADTRANS(L'a', 0x5e, 0xe2, 0x00) }, // letra a com ^
00399             { DEADTRANS(L'A', 0x5e, 0xc2, 0x00) }, // letra A com ^
00400             { DEADTRANS(L'e', 0x5e, 0xea, 0x00) }, // letra e com ^
00401             { DEADTRANS(L'E', 0x5e, 0xca, 0x00) }, // letra E com ^
00402             { DEADTRANS(L'i', 0x5e, 0xee, 0x00) }, // letra i com ^
00403             { DEADTRANS(L'I', 0x5e, 0xce, 0x00) }, // letra I com ^
00404             { DEADTRANS(L'o', 0x5e, 0xf4, 0x00) }, // letra o com ^
00405             { DEADTRANS(L'O', 0x5e, 0xd4, 0x00) }, // letra O com ^
00406             { DEADTRANS(L'u', 0x5e, 0xfb, 0x00) }, // letra u com ^
00407             { DEADTRANS(L'U', 0x5e, 0xdb, 0x00) }, // letra U com ^
00408             { DEADTRANS(0x20, 0x5e, 0x5e, 0x00) }, // letra 'space' (0x0020) com ^
00409 
00410             //*~* DEADKEY   007E
00411             { DEADTRANS(L'a', 0x7e, 0xe3, 0x00) }, // letra a com ~
00412             { DEADTRANS(L'A', 0x7e, 0xc3, 0x00) }, // letra A com ~
00413             { DEADTRANS(L'n', 0x7e, 0xf1, 0x00) }, // letra e com ~
00414             { DEADTRANS(L'N', 0x7e, 0xd1, 0x00) }, // letra E com ~
00415             { DEADTRANS(L'o', 0x7e, 0xf5, 0x00) }, // letra i com ~
00416             { DEADTRANS(L'O', 0x7e, 0xd5, 0x00) }, // letra I com ~
00417             { DEADTRANS(0x20, 0x7e, 0x7e, 0x00) }, // letra 'space' (0x0020) com ~
00418 
00419             //*"* DEADKEY   00A8
00420             { DEADTRANS(L'a', 0xa8, 0xe4, 0x00) }, // letra a com "
00421             { DEADTRANS(L'A', 0xa8, 0xc4, 0x00) }, // letra A com "
00422             { DEADTRANS(L'e', 0xa8, 0xeb, 0x00) }, // letra e com "
00423             { DEADTRANS(L'E', 0xa8, 0xcb, 0x00) }, // letra E com "
00424             { DEADTRANS(L'i', 0xa8, 0xef, 0x00) }, // letra i com "
00425             { DEADTRANS(L'I', 0xa8, 0xcf, 0x00) }, // letra I com "
00426             { DEADTRANS(L'o', 0xa8, 0xf6, 0x00) }, // letra o com "
00427             { DEADTRANS(L'O', 0xa8, 0xd6, 0x00) }, // letra O com "
00428             { DEADTRANS(L'u', 0xa8, 0xfc, 0x00) }, // letra u com "
00429             { DEADTRANS(L'U', 0xa8, 0xdc, 0x00) }, // letra U com "
00430             { DEADTRANS(L'y', 0xa8, 0xff, 0x00) }, // letra y com "
00431             { DEADTRANS(0x20, 0xa8, 0xa8, 0x00) }, // letra 'space' (0x0020) com "
00432 
00433             { 0, 0, 0}
00434 };
00435 
00436 ROSDATA VSC_LPWSTR key_names[] = {
00437   { 0x01, L"Escape" },
00438   { 0x0e, L"BackSpace" },
00439   { 0x0f, L"Tab" },
00440   { 0x1c, L"Enter" },
00441   { 0x1d, L"Ctrl" },
00442   { 0x2a, L"Shift" },
00443   { 0x36, L"Shift Direito" },
00444   { 0x37, L"* Num" },
00445   { 0x38, L"Alt" },
00446   { 0x39, L"Espaco" },
00447   { 0x3a, L"CAPLOK Lock" },
00448   { 0x3b, L"F1" },
00449   { 0x3c, L"F2" },
00450   { 0x3d, L"F3" },
00451   { 0x3e, L"F4" },
00452   { 0x3f, L"F5" },
00453   { 0x40, L"F6" },
00454   { 0x41, L"F7" },
00455   { 0x42, L"F8" },
00456   { 0x43, L"F9" },
00457   { 0x44, L"F10" },
00458   { 0x45, L"Pausa" },
00459   { 0x46, L"Scroll Lock" },
00460   { 0x47, L"Num 7" },
00461   { 0x48, L"Num 8" },
00462   { 0x49, L"Num 9" },
00463   { 0x4a, L"Num -" },
00464   { 0x4b, L"Num 4" },
00465   { 0x4c, L"Num 5" },
00466   { 0x4d, L"Num 6" },
00467   { 0x4e, L"Num +" },
00468   { 0x4f, L"Num 1" },
00469   { 0x50, L"Num 2" },
00470   { 0x51, L"Num 3" },
00471   { 0x52, L"Num 0" },
00472   { 0x53, L"Del Num" },
00473   { 0x54, L"System Request" },
00474   { 0x57, L"F11" },
00475   { 0x58, L"F12" },
00476   { 0x7c, L"F13" },
00477   { 0x7d, L"F14" },
00478   { 0x7e, L"F15" },
00479   { 0x7f, L"F16" },
00480   { 0x80, L"F17" },
00481   { 0x81, L"F18" },
00482   { 0x82, L"F19" },
00483   { 0x83, L"F20" },
00484   { 0x84, L"F21" },
00485   { 0x85, L"F22" },
00486   { 0x86, L"F23" },
00487   { 0x87, L"F24" },
00488   { 0, NULL },
00489 };
00490 
00491 ROSDATA VSC_LPWSTR extended_key_names[] = {
00492   { 0x1c, L"Enter Num" },
00493   { 0x1d, L"Ctrl direito" },
00494   { 0x35, L"/ Num" },
00495   { 0x37, L"Print Screen" },
00496   { 0x38, L"Alt Direito" },
00497   { 0x45, L"Num Lock" },
00498   { 0x46, L"Pausa" },
00499 
00500   { 0x47, L"Home" },
00501   { 0x4f, L"End" },
00502 
00503   { 0x52, L"Insert" },
00504   { 0x53, L"Delete" },
00505 
00506   { 0x49, L"Page Up" },
00507   { 0x51, L"Page Down" },
00508 
00509   { 0x48, L"Cima" },
00510   { 0x50, L"Baixo" },
00511   { 0x4b, L"Esquerda" },
00512   { 0x4d, L"Direita" },
00513 
00514   { 0x54, L"<ReactOS>" },
00515   { 0x56, L"Ajuda" },
00516   { 0x5b, L"Windows Esquerda" },
00517   { 0x5c, L"Windows Direita" },
00518   { 0x5d, L"Aplicacao" },
00519 
00520   { 0, NULL },
00521 };
00522 
00523 ROSDATA DEADKEY_LPWSTR dead_key_names[] = {
00524     L"\x00b4"   L"Agudo",
00525     L"\x0060"   L"Grave",
00526     L"\x005e"   L"Circunflexo",
00527     L"\x007e"   L"Til",
00528     L"\x00a8"   L"Trema",
00529     NULL
00530 };
00531 
00532 /* Finally, the master table */
00533 ROSDATA KBDTABLES keyboard_layout_table = {
00534 
00535   /* modifier assignments */
00536   &modifier_bits,
00537 
00538   /* character from vk tables */
00539   vk_to_wchar_master_table,
00540 
00541   /* diacritical marks -- currently implemented by wine code */
00542   /* Portuguese have severals */
00543   deadkey,
00544 
00545   /* Key names */
00546   (VSC_LPWSTR *)key_names,
00547   (VSC_LPWSTR *)extended_key_names,
00548   dead_key_names,
00549   /* Dead key names */
00550 
00551   /* scan code to virtual key maps */
00552   scancode_to_vk,
00553   sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]),
00554   extcode0_to_vk,
00555   extcode1_to_vk,
00556 
00557   MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
00558 
00559   /* Ligatures -- Portuguese doesn't have any, that i'm aware  */
00560   0,
00561   0,
00562 
00563   NULL
00564 };
00565 
00566 PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
00567   return &keyboard_layout_table;
00568 }

Generated on Sat May 26 2012 04:20:57 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.