Reactos

[BOOTDATA][INPUT][KBDCMK] Add Colemak keyboard layout

- Add the Colemak keyboard layout. It is not done yet. Some deadkey translations are still missing.
- Add missing strings for the German Extended (E1) keyboard layout.

CORE-4463

Eric Kohl 97480729 8f3ac7ef

+571
+19
boot/bootdata/hivesys.inf
··· 595 595 HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Text",0x00000000,%US_ARABIC% 596 596 HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5123" 597 597 598 + HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00060409","Layout File",0x00000000,"kbdcmk.dll" 599 + HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00060409","Layout Id", 0x00000000,"00D3" 600 + HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00060409","Layout Text",0x00000000,%COLEMAK% 601 + HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00060409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5145" 602 + 598 603 HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout File",0x00000000,"kbdsp.dll" 599 604 HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout Text",0x00000000,%SPANISH% 600 605 HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5020" ··· 2348 2353 BURMESE = "Burmese" 2349 2354 CANADIAN_FRENCH = "Canadian French (Legacy)" 2350 2355 CANADIAN_MULTILINGUAL = "Canadian Multilingual Standard" 2356 + COLEMAK = "Colemak" 2351 2357 CROATIAN = "Croatian" 2352 2358 CZECH = "Czech" 2353 2359 CZECH_QWERTY = "Czech (QWERTY)" ··· 2357 2363 ESPERANTO = "Esperanto" 2358 2364 ESTONIAN = "Estonian" 2359 2365 GERMAN_ERGO = "German (de_ergo)" 2366 + GERMAN_EXTENDED1 = "German Extended (E1)" 2360 2367 GERMAN_IBM = "German (IBM)" 2361 2368 GERMAN_NEO = "German (NEO-1.1)" 2362 2369 GERMAN_RISTOME = "German (RISTOME)" ··· 2505 2512 BURMESE = "Birmano" 2506 2513 CANADIAN_FRENCH = "Francés canadiense (Heredado)" 2507 2514 CANADIAN_MULTILINGUAL = "Canadiense estándar multilingüe" 2515 + COLEMAK = "Colemak" 2508 2516 CROATIAN = "Croata" 2509 2517 CZECH = "Checo" 2510 2518 CZECH_QWERTY = "Checo (QWERTY)" ··· 2514 2522 ESPERANTO = "Esperanto" 2515 2523 ESTONIAN = "Estonio" 2516 2524 GERMAN_ERGO = "Alemán (de_ergo)" 2525 + GERMAN_EXTENDED1 = "German Extended (E1)" 2517 2526 GERMAN_IBM = "Alemán (IBM)" 2518 2527 GERMAN_NEO = "Alemán (NEO-1.1)" 2519 2528 GERMAN_RISTOME = "Alemán (RISTOME)" ··· 2662 2671 BURMESE = "Burmański" 2663 2672 CANADIAN_FRENCH = "Kanadyjski francuski (Legacy)" 2664 2673 CANADIAN_MULTILINGUAL = "Kanadyjski wielojęzykowy" 2674 + COLEMAK = "Colemak" 2665 2675 CROATIAN = "Chorwacki" 2666 2676 CZECH = "Czeski" 2667 2677 CZECH_QWERTY = "Czeski (QWERTY)" ··· 2671 2681 ESPERANTO = "Esperanto" 2672 2682 ESTONIAN = "Estoński" 2673 2683 GERMAN_ERGO = "Niemiecki (de_ergo)" 2684 + GERMAN_EXTENDED1 = "German Extended (E1)" 2674 2685 GERMAN_IBM = "Niemiecki (IBM)" 2675 2686 GERMAN_NEO = "Niemiecki (NEO-1.1)" 2676 2687 GERMAN_RISTOME = "Niemiecki (RISTOME)" ··· 2819 2830 BURMESE = "Birmano" 2820 2831 CANADIAN_FRENCH = "Francês canadense (Herdado)" 2821 2832 CANADIAN_MULTILINGUAL = "Canadense estandarte multilingüe" 2833 + COLEMAK = "Colemak" 2822 2834 CROATIAN = "Croata" 2823 2835 CZECH = "Checo" 2824 2836 CZECH_QWERTY = "Checo (QWERTY)" ··· 2828 2840 ESPERANTO = "Esperanto" 2829 2841 ESTONIAN = "Estonio" 2830 2842 GERMAN_ERGO = "Alemão (de_ergo)" 2843 + GERMAN_EXTENDED1 = "German Extended (E1)" 2831 2844 GERMAN_IBM = "Alemão (IBM)" 2832 2845 GERMAN_NEO = "Alemão (NEO-1.1)" 2833 2846 GERMAN_RISTOME = "Alemão (RISTOME)" ··· 2973 2986 BURMESE = "Birmană" 2974 2987 CANADIAN_FRENCH = "Canadiană Franceză (moștenire)" 2975 2988 CANADIAN_MULTILINGUAL = "Canadiană Multilingvă Standard" 2989 + COLEMAK = "Colemak" 2976 2990 CROATIAN = "Croată" 2977 2991 CZECH = "Cehă" 2978 2992 CZECH_QWERTY = "Cehă (QWERTY)" ··· 2982 2996 ESPERANTO = "Esperanto" 2983 2997 ESTONIAN = "Estonă" 2984 2998 GERMAN_ERGO = "Germană (de_ergo)" 2999 + GERMAN_EXTENDED1 = "German Extended (E1)" 2985 3000 GERMAN_IBM = "Germană (IBM)" 2986 3001 GERMAN_NEO = "Germană (NEO-1.1)" 2987 3002 GERMAN_RISTOME = "Germană (RISTOME)" ··· 3130 3145 BURMESE = "Бирманская" 3131 3146 CANADIAN_FRENCH = "Канадская (французская традиционная)" 3132 3147 CANADIAN_MULTILINGUAL = "Канадская стандартная (многоязычная)" 3148 + COLEMAK = "Colemak" 3133 3149 CROATIAN = "Хорватская" 3134 3150 CZECH = "Чешская" 3135 3151 CZECH_QWERTY = "Чешская (QWERTY)" ··· 3139 3155 ESPERANTO = "Эсперанто" 3140 3156 ESTONIAN = "Эстонская" 3141 3157 GERMAN_ERGO = "Немецкая (de_ergo)" 3158 + GERMAN_EXTENDED1 = "German Extended (E1)" 3142 3159 GERMAN_IBM = "Немецкая (IBM)" 3143 3160 GERMAN_NEO = "Немецкая (NEO-1.1)" 3144 3161 GERMAN_RISTOME = "Немецкая (RISTOME)" ··· 3287 3304 BURMESE = "Burma dili" 3288 3305 CANADIAN_FRENCH = "Kanada Fransızcası (Eski)" 3289 3306 CANADIAN_MULTILINGUAL = "Kanada Çok Dilli Standardı" 3307 + COLEMAK = "Colemak" 3290 3308 CROATIAN = "Hırvatça" 3291 3309 CZECH = "Çekçe" 3292 3310 CZECH_QWERTY = "Çekçe (QWERTY)" ··· 3296 3314 ESPERANTO = "Esperanto" 3297 3315 ESTONIAN = "Estonca" 3298 3316 GERMAN_ERGO = "Almanca (de_ergo)" 3317 + GERMAN_EXTENDED1 = "German Extended (E1)" 3299 3318 GERMAN_IBM = "Almanca (IBM)" 3300 3319 GERMAN_NEO = "Almanca (NEO-1.1)" 3301 3320 GERMAN_RISTOME = "Almanca (RISTOME)"
+2
boot/bootdata/txtsetup.sif
··· 497 497 00000455 = "Burmese" 498 498 00000C0C = "Canadian French (Legacy)" 499 499 00011009 = "Canadian Multilingual Standard" 500 + 00060409 = "Colemak" 500 501 0000041A = "Croatian" 501 502 00000405 = "Czech" 502 503 00010405 = "Czech (QWERTY)" ··· 597 598 00030409 = kbdusl.dll 598 599 00040409 = kbdusr.dll 599 600 00050409 = kbdusa.dll 601 + 00060409 = kbdcmk.dll 600 602 0000040A = kbdsp.dll 601 603 0000080A = kbdla.dll 602 604 0000040B = kbdfi.dll
+1
dll/cpl/input/lang/bg-BG.rc
··· 156 156 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chinese (Traditional) - Quick" 157 157 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chinese (Traditional) - Unicode" 158 158 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chinese (Traditional) - US Keyboard" 159 + IDS_COLEMAK_LAYOUT "Colemak" 159 160 IDS_CROATIAN_LAYOUT "Croatian" 160 161 IDS_CZECH_LAYOUT "Czech" 161 162 IDS_CZECH_PROGRAMMERS_LAYOUT "Czech Programmers"
+1
dll/cpl/input/lang/cs-CZ.rc
··· 164 164 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Čínština (Tradiční) - Rychlá" 165 165 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Čínština (Tradiční) - Unicode" 166 166 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Čínština (Tradiční) - US Klávesnice" 167 + IDS_COLEMAK_LAYOUT "Colemak" 167 168 IDS_CROATIAN_LAYOUT "Chorvatština" 168 169 IDS_CZECH_LAYOUT "Čeština" 169 170 IDS_CZECH_PROGRAMMERS_LAYOUT "Čeština (Programátorská)"
+1
dll/cpl/input/lang/de-DE.rc
··· 167 167 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chinesisch (traditionell) - Quick" 168 168 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chinesisch (traditionell) - Unicode" 169 169 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chinesisch (traditionell) - US-Tastatur" 170 + IDS_COLEMAK_LAYOUT "Colemak" 170 171 IDS_CROATIAN_LAYOUT "Kroatisch" 171 172 IDS_CZECH_LAYOUT "Tschechisch" 172 173 IDS_CZECH_PROGRAMMERS_LAYOUT "Tschechisch (Programmierer)"
+1
dll/cpl/input/lang/el-GR.rc
··· 156 156 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chinese (Traditional) - Quick" 157 157 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Κινέζικα (Παραδοσιακά) - Unicode" 158 158 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Κινέζικα (Παραδοσιακά) - US Keyboard" 159 + IDS_COLEMAK_LAYOUT "Colemak" 159 160 IDS_CROATIAN_LAYOUT "Κροάτικα" 160 161 IDS_CZECH_LAYOUT "Τσέχικα" 161 162 IDS_CZECH_PROGRAMMERS_LAYOUT "Czech Programmers"
+1
dll/cpl/input/lang/en-US.rc
··· 156 156 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chinese (Traditional) - Quick" 157 157 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chinese (Traditional) - Unicode" 158 158 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chinese (Traditional) - US Keyboard" 159 + IDS_COLEMAK_LAYOUT "Colemak" 159 160 IDS_CROATIAN_LAYOUT "Croatian" 160 161 IDS_CZECH_LAYOUT "Czech" 161 162 IDS_CZECH_PROGRAMMERS_LAYOUT "Czech Programmers"
+1
dll/cpl/input/lang/es-ES.rc
··· 165 165 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chino (tradicional) - rápido" 166 166 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chino (tradicional) - Unicode" 167 167 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chino (tradicional) - teclado EE.UU." 168 + IDS_COLEMAK_LAYOUT "Colemak" 168 169 IDS_CROATIAN_LAYOUT "Croata" 169 170 IDS_CZECH_LAYOUT "Checo" 170 171 IDS_CZECH_PROGRAMMERS_LAYOUT "Checo (programadores)"
+1
dll/cpl/input/lang/fr-FR.rc
··· 157 157 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chinois (Traditionnel) - Rapide" 158 158 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chinois (Traditionnel) - Unicode" 159 159 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chinois (Traditionnel) - Clavier américain" 160 + IDS_COLEMAK_LAYOUT "Colemak" 160 161 IDS_CROATIAN_LAYOUT "Croate" 161 162 IDS_CZECH_LAYOUT "Tchèque" 162 163 IDS_CZECH_PROGRAMMERS_LAYOUT "Tchèque Programmeurs"
+1
dll/cpl/input/lang/he-IL.rc
··· 158 158 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "סינית (מסורתית) - Quick" 159 159 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "סינית (מסורתית) - Unicode" 160 160 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "סינית (מסורתית) - US Keyboard" 161 + IDS_COLEMAK_LAYOUT "Colemak" 161 162 IDS_CROATIAN_LAYOUT "קרואטית" 162 163 IDS_CZECH_LAYOUT "צ'כית" 163 164 IDS_CZECH_PROGRAMMERS_LAYOUT "צ'כית מתכנתים"
+1
dll/cpl/input/lang/id-ID.rc
··· 156 156 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Cina (Tradisional) - Cepat" 157 157 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Cina (Tradisional) - Unikode" 158 158 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Cina (Tradisional) - Papan Ketik AS" 159 + IDS_COLEMAK_LAYOUT "Colemak" 159 160 IDS_CROATIAN_LAYOUT "Kroasia" 160 161 IDS_CZECH_LAYOUT "Ceko" 161 162 IDS_CZECH_PROGRAMMERS_LAYOUT "Ceko Programmer"
+1
dll/cpl/input/lang/it-IT.rc
··· 156 156 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Cinese (tradizionale) - Quick" 157 157 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Cinese (Tradizionale) - Unicode" 158 158 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Cinese (Tradizionale) - Tastiera US" 159 + IDS_COLEMAK_LAYOUT "Colemak" 159 160 IDS_CROATIAN_LAYOUT "Croata" 160 161 IDS_CZECH_LAYOUT "Ceco" 161 162 IDS_CZECH_PROGRAMMERS_LAYOUT "Ceco , programmatori"
+1
dll/cpl/input/lang/ja-JP.rc
··· 156 156 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "中国語 (繁体字) - Quick" 157 157 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "中国語 (繁体字) - Unicode" 158 158 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "中国語 (繁体字) - USキーボード" 159 + IDS_COLEMAK_LAYOUT "Colemak" 159 160 IDS_CROATIAN_LAYOUT "クロアチア語" 160 161 IDS_CZECH_LAYOUT "チェコ語" 161 162 IDS_CZECH_PROGRAMMERS_LAYOUT "チェコ語 プログラマー"
+1
dll/cpl/input/lang/no-NO.rc
··· 156 156 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chinese (Traditional) - Quick" 157 157 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chinese (Traditional) - Unicode" 158 158 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chinese (Traditional) - US Keyboard" 159 + IDS_COLEMAK_LAYOUT "Colemak" 159 160 IDS_CROATIAN_LAYOUT "Croatian" 160 161 IDS_CZECH_LAYOUT "Czech" 161 162 IDS_CZECH_PROGRAMMERS_LAYOUT "Czech Programmers"
+1
dll/cpl/input/lang/pl-PL.rc
··· 165 165 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chiński (Tradycyjny) - Quick" 166 166 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chiński (Tradycyjny) - Unicode" 167 167 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chiński (Tradycyjny) - Klawiatura US" 168 + IDS_COLEMAK_LAYOUT "Colemak" 168 169 IDS_CROATIAN_LAYOUT "Chorwacki" 169 170 IDS_CZECH_LAYOUT "Czeski" 170 171 IDS_CZECH_PROGRAMMERS_LAYOUT "Czeski (Programisty)"
+1
dll/cpl/input/lang/pt-BR.rc
··· 156 156 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chinês (tradicional) - rápido" 157 157 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chinês (tradicional) - Unicode" 158 158 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chinês (tradicional) - teclado americano" 159 + IDS_COLEMAK_LAYOUT "Colemak" 159 160 IDS_CROATIAN_LAYOUT "Croata" 160 161 IDS_CZECH_LAYOUT "Tcheco" 161 162 IDS_CZECH_PROGRAMMERS_LAYOUT "Tcheco (programadores)"
+1
dll/cpl/input/lang/pt-PT.rc
··· 163 163 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chinês (tradicional) - rápido" 164 164 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chinês (tradicional) - Unicode" 165 165 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chinês (tradicional) - teclado americano" 166 + IDS_COLEMAK_LAYOUT "Colemak" 166 167 IDS_CROATIAN_LAYOUT "Croata" 167 168 IDS_CZECH_LAYOUT "Tcheco" 168 169 IDS_CZECH_PROGRAMMERS_LAYOUT "Tcheco (programadores)"
+1
dll/cpl/input/lang/ro-RO.rc
··· 164 164 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Chineză (Traditională) - Rapidă" 165 165 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Chineză (Traditională) - Unicod" 166 166 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Chineză (Traditională) - Tastatură SUA" 167 + IDS_COLEMAK_LAYOUT "Colemak" 167 168 IDS_CROATIAN_LAYOUT "Croată" 168 169 IDS_CZECH_LAYOUT "Cehă" 169 170 IDS_CZECH_PROGRAMMERS_LAYOUT "Cehă (de programare)"
+1
dll/cpl/input/lang/ru-RU.rc
··· 156 156 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Китайская (традиционная) - быстрая" 157 157 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Китайская (традиционная) - Юникод" 158 158 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Китайская (традиционная) - США" 159 + IDS_COLEMAK_LAYOUT "Colemak" 159 160 IDS_CROATIAN_LAYOUT "Хорватская" 160 161 IDS_CZECH_LAYOUT "Чешская" 161 162 IDS_CZECH_PROGRAMMERS_LAYOUT "Чешская (программистская)"
+1
dll/cpl/input/lang/sk-SK.rc
··· 161 161 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Čínske (Traditional) - Quick" 162 162 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Čínske (Traditional) - Unicode" 163 163 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Čínske (Traditional) - US Keyboard" 164 + IDS_COLEMAK_LAYOUT "Colemak" 164 165 IDS_CROATIAN_LAYOUT "Chorvátske" 165 166 IDS_CZECH_LAYOUT "České" 166 167 IDS_CZECH_PROGRAMMERS_LAYOUT "České programátorské"
+1
dll/cpl/input/lang/sq-AL.rc
··· 160 160 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Kineze (Tradicionale) - Quick" 161 161 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Kineze (Tradicionale) - Unicode" 162 162 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Kineze (Tradicionale) - US Keyboard" 163 + IDS_COLEMAK_LAYOUT "Colemak" 163 164 IDS_CROATIAN_LAYOUT "Kroate" 164 165 IDS_CZECH_LAYOUT "Czech" 165 166 IDS_CZECH_PROGRAMMERS_LAYOUT "Czech Programmers"
+1
dll/cpl/input/lang/tr-TR.rc
··· 158 158 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Çince (Geleneksel) - Çabuk" 159 159 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Çince (Geleneksel) - Unicode" 160 160 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Çince (Geleneksel) - ABD Klavye" 161 + IDS_COLEMAK_LAYOUT "Colemak" 161 162 IDS_CROATIAN_LAYOUT "Hırvatça" 162 163 IDS_CZECH_LAYOUT "Çekçe" 163 164 IDS_CZECH_PROGRAMMERS_LAYOUT "Çekçe Programcılar"
+1
dll/cpl/input/lang/uk-UA.rc
··· 164 164 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "Китайська (традиційне письмо) - швидка" 165 165 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "Китайська (традиційне письмо) - Юнікод" 166 166 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "Китайська (традиційне письмо) - США" 167 + IDS_COLEMAK_LAYOUT "Colemak" 167 168 IDS_CROATIAN_LAYOUT "Хорватська" 168 169 IDS_CZECH_LAYOUT "Чеська" 169 170 IDS_CZECH_PROGRAMMERS_LAYOUT "Чеська (програмістська)"
+1
dll/cpl/input/lang/zh-CN.rc
··· 158 158 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "中文(繁体)- 速成" 159 159 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "中文(繁体)- Unicode" 160 160 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "中文(繁体)- 美国键盘" 161 + IDS_COLEMAK_LAYOUT "Colemak" 161 162 IDS_CROATIAN_LAYOUT "克罗地亚文" 162 163 IDS_CZECH_LAYOUT "捷克文" 163 164 IDS_CZECH_PROGRAMMERS_LAYOUT "捷克文(程序员)"
+1
dll/cpl/input/lang/zh-HK.rc
··· 164 164 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "中文(繁體) - 速成" 165 165 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "中文(繁體) - Unicode" 166 166 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "中文(繁體) - 美國鍵盤" 167 + IDS_COLEMAK_LAYOUT "Colemak" 167 168 IDS_CROATIAN_LAYOUT "克羅地亞文" 168 169 IDS_CZECH_LAYOUT "捷克文" 169 170 IDS_CZECH_PROGRAMMERS_LAYOUT "捷克文(程式設計師)"
+1
dll/cpl/input/lang/zh-TW.rc
··· 164 164 IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT "中文(繁體) - 速成" 165 165 IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT "中文(繁體) - Unicode" 166 166 IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT "中文(繁體) - 美國鍵盤" 167 + IDS_COLEMAK_LAYOUT "Colemak" 167 168 IDS_CROATIAN_LAYOUT "克羅埃西亞文" 168 169 IDS_CZECH_LAYOUT "捷克文" 169 170 IDS_CZECH_PROGRAMMERS_LAYOUT "捷克文(程式設計師)"
+1
dll/cpl/input/resource.h
··· 203 203 #define IDS_ESPERANTO_LAYOUT 5142 204 204 #define IDS_GERMAN_EXTENDED1_LAYOUT 5143 205 205 #define IDS_GERMAN_EXTENDED2_LAYOUT 5144 206 + #define IDS_COLEMAK_LAYOUT 5145 206 207 #define IDS_ROMANIAN_STANDARD_LAYOUT 5175
+1
dll/keyboard/CMakeLists.txt
··· 16 16 kbdbu 17 17 kbdbur 18 18 kbdcan 19 + kbdcmk 19 20 kbdcr 20 21 kbdcz 21 22 kbdcz1
+518
dll/keyboard/kbdcmk/kbdcmk.c
··· 1 + /* 2 + * ReactOS Colemak Keyboard layout 3 + * Copyright (C) 2025 ReactOS 4 + * License: LGPL, see: LGPL.txt 5 + * 6 + * Thanks to: http://www.barcodeman.com/altek/mule/scandoc.php 7 + * and http://win.tue.nl/~aeb/linux/kbd/scancodes-1.html 8 + */ 9 + 10 + #define WIN32_NO_STATUS 11 + #include <stdarg.h> 12 + #include <windef.h> 13 + #include <winuser.h> 14 + #include <ndk/kbd.h> 15 + 16 + #ifdef _M_IA64 17 + #define ROSDATA static __declspec(allocate(".data")) 18 + #else 19 + #ifdef _MSC_VER 20 + #pragma data_seg(".data") 21 + #define ROSDATA static 22 + #else 23 + #define ROSDATA static __attribute__((section(".data"))) 24 + #endif 25 + #endif 26 + 27 + #define VK_EMPTY 0xff /* The non-existent VK */ 28 + 29 + #define KNUMS KBDNUMPAD|KBDSPECIAL /* Special + number pad */ 30 + #define KMEXT KBDEXT|KBDMULTIVK /* Multi + ext */ 31 + 32 + ROSDATA USHORT scancode_to_vk[] = { 33 + /* Numbers Row */ 34 + /* - 00 - */ 35 + /* 1 ... 2 ... 3 ... 4 ... */ 36 + VK_EMPTY, VK_ESCAPE, '1', '2', 37 + '3', '4', '5', '6', 38 + '7', '8', '9', '0', 39 + VK_OEM_MINUS, VK_OEM_PLUS, VK_BACK, 40 + /* - 0f - */ 41 + /* First Letters Row */ 42 + VK_TAB, 'Q', 'W', 'F', 43 + 'P', 'G', 'J', 'L', 44 + 'U', 'Y', VK_OEM_1, 45 + VK_OEM_4, VK_OEM_6, VK_RETURN, 46 + /* - 1d - */ 47 + /* Second Letters Row */ 48 + VK_LCONTROL, 49 + 'A', 'R', 'S', 'T', 50 + 'D', 'H', 'N', 'E', 51 + 'I', 'O', VK_OEM_7, VK_OEM_3, 52 + VK_LSHIFT, VK_OEM_5, 53 + /* - 2c - */ 54 + /* Third letters row */ 55 + 'Z', 'X', 'C', 'V', 56 + 'B', 'K', 'M', VK_OEM_COMMA, 57 + VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT | KBDEXT, 58 + /* - 37 - */ 59 + /* Bottom Row */ 60 + 0x26a, VK_LMENU, VK_SPACE, VK_CAPITAL, 61 + 62 + /* - 3b - */ 63 + /* F-Keys */ 64 + VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6, 65 + VK_F7, VK_F8, VK_F9, VK_F10, 66 + /* - 45 - */ 67 + /* Locks */ 68 + VK_NUMLOCK | KMEXT, 69 + VK_SCROLL | KBDMULTIVK, 70 + /* - 47 - */ 71 + /* Number-Pad */ 72 + VK_HOME | KNUMS, VK_UP | KNUMS, VK_PRIOR | KNUMS, VK_SUBTRACT, 73 + VK_LEFT | KNUMS, VK_CLEAR | KNUMS, VK_RIGHT | KNUMS, VK_ADD, 74 + VK_END | KNUMS, VK_DOWN | KNUMS, VK_NEXT | KNUMS, 75 + VK_INSERT | KNUMS, VK_DELETE | KNUMS, 76 + /* - 54 - */ 77 + /* Presumably PrtSc */ 78 + VK_SNAPSHOT, 79 + /* - 55 - */ 80 + /* Oddities, and the remaining standard F-Keys */ 81 + VK_EMPTY, VK_OEM_102, VK_F11, VK_F12, 82 + /* - 59 - */ 83 + VK_CLEAR, VK_OEM_WSCTRL,VK_OEM_FINISH,VK_OEM_JUMP, VK_EREOF, /* EREOF */ 84 + VK_OEM_BACKTAB, VK_OEM_AUTO, VK_EMPTY, VK_ZOOM, /* ZOOM */ 85 + VK_HELP, 86 + /* - 64 - */ 87 + /* Even more F-Keys (for example, NCR keyboards from the early 90's) */ 88 + VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18, VK_F19, VK_F20, 89 + VK_F21, VK_F22, VK_F23, 90 + /* - 6f - */ 91 + /* Not sure who uses these codes */ 92 + VK_OEM_PA3, VK_EMPTY, VK_OEM_RESET, 93 + /* - 72 - */ 94 + VK_EMPTY, 0xc1, VK_EMPTY, VK_EMPTY, 95 + /* - 76 - */ 96 + /* One more f-key */ 97 + VK_F24, 98 + /* - 77 - */ 99 + VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY, 100 + VK_OEM_PA1, VK_TAB, 0xc2, VK_EMPTY, /* PA1 */ 101 + VK_EMPTY, 102 + }; 103 + 104 + ROSDATA VSC_VK extcode0_to_vk[] = { 105 + { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT }, 106 + { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT }, 107 + { 0x1D, VK_RCONTROL | KBDEXT }, 108 + { 0x20, VK_VOLUME_MUTE | KBDEXT }, 109 + { 0x21, VK_LAUNCH_APP2 | KBDEXT }, 110 + { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT }, 111 + { 0x24, VK_MEDIA_STOP | KBDEXT }, 112 + { 0x2E, VK_VOLUME_DOWN | KBDEXT }, 113 + { 0x30, VK_VOLUME_UP | KBDEXT }, 114 + { 0x32, VK_BROWSER_HOME | KBDEXT }, 115 + { 0x35, VK_DIVIDE | KBDEXT }, 116 + { 0x37, VK_SNAPSHOT | KBDEXT }, 117 + { 0x38, VK_RMENU | KBDEXT }, 118 + { 0x47, VK_HOME | KBDEXT }, 119 + { 0x48, VK_UP | KBDEXT }, 120 + { 0x49, VK_PRIOR | KBDEXT }, 121 + { 0x4B, VK_LEFT | KBDEXT }, 122 + { 0x4D, VK_RIGHT | KBDEXT }, 123 + { 0x4F, VK_END | KBDEXT }, 124 + { 0x50, VK_DOWN | KBDEXT }, 125 + { 0x51, VK_NEXT | KBDEXT }, 126 + { 0x52, VK_INSERT | KBDEXT }, 127 + { 0x53, VK_DELETE | KBDEXT }, 128 + { 0x5B, VK_LWIN | KBDEXT }, 129 + { 0x5C, VK_RWIN | KBDEXT }, 130 + { 0x5D, VK_APPS | KBDEXT }, 131 + { 0x5F, VK_SLEEP | KBDEXT }, 132 + { 0x65, VK_BROWSER_SEARCH | KBDEXT }, 133 + { 0x66, VK_BROWSER_FAVORITES | KBDEXT }, 134 + { 0x67, VK_BROWSER_REFRESH | KBDEXT }, 135 + { 0x68, VK_BROWSER_STOP | KBDEXT }, 136 + { 0x69, VK_BROWSER_FORWARD | KBDEXT }, 137 + { 0x6A, VK_BROWSER_BACK | KBDEXT }, 138 + { 0x6B, VK_LAUNCH_APP1 | KBDEXT }, 139 + { 0x6C, VK_LAUNCH_MAIL | KBDEXT }, 140 + { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT }, 141 + { 0x1C, VK_RETURN | KBDEXT }, 142 + { 0x46, VK_CANCEL | KBDEXT }, 143 + { 0, 0 }, 144 + }; 145 + 146 + ROSDATA VSC_VK extcode1_to_vk[] = { 147 + { 0x1d, VK_PAUSE }, 148 + { 0, 0 }, 149 + }; 150 + 151 + ROSDATA VK_TO_BIT modifier_keys[] = { 152 + { VK_SHIFT, KBDSHIFT }, 153 + { VK_CONTROL, KBDCTRL }, 154 + { VK_MENU, KBDALT }, 155 + { 0, 0 } 156 + }; 157 + 158 + ROSDATA MODIFIERS modifier_bits = { 159 + modifier_keys, 160 + 8, 161 + /* Modifier bit order, NONE, SHIFT, CTRL, SHIFT+CTRL, ALT, SHIFT+ALT, CTRL+ALT, SHIFT+CTRL+ALT */ 162 + { 0, 1, 4, 5, SHFT_INVALID, SHFT_INVALID, 2, 3 } 163 + }; 164 + 165 + ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = { 166 + /* Normal, Shift */ 167 + { VK_DECIMAL, 0, {'.', '.' } }, 168 + { VK_TAB, 0, {'\t', '\t'} }, 169 + { VK_ADD, 0, {'+', '+' } }, 170 + { VK_DIVIDE, 0, {'/', '/' } }, 171 + { VK_MULTIPLY, 0, {'*', '*' } }, 172 + { VK_SUBTRACT, 0, {'-', '-' } }, 173 + { 0, 0 } 174 + }; 175 + 176 + ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = { 177 + /* Normal, Shift, Ctrl+Alt */ 178 + { VK_OEM_3, 0, {'`', '~', WCH_DEAD} }, 179 + { 0xff, 0, {WCH_NONE, WCH_NONE, '~' } }, 180 + { 'G', CAPLOK, {'g', 'G', WCH_DEAD} }, 181 + { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02DB } }, 182 + { 'R', CAPLOK, {'r', 'R', WCH_DEAD} }, 183 + { 0xff, 0, {WCH_NONE, WCH_NONE, '`' } }, 184 + { 'D', CAPLOK, {'d', 'D', WCH_DEAD} }, 185 + { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00a8 } }, 186 + { 'H', CAPLOK, {'h', 'H', WCH_DEAD} }, 187 + { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02c7 } }, 188 + { 'X', CAPLOK, {'x', 'X', WCH_DEAD} }, 189 + { 0xff, 0, {WCH_NONE, WCH_NONE, '^' } }, 190 + { 'B', CAPLOK, {'b', 'B', WCH_DEAD} }, 191 + { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d8 } }, 192 + { 'K', CAPLOK, {'k', 'K', WCH_DEAD} }, 193 + { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02da } }, 194 + { 'M', CAPLOK, {'m', 'M', WCH_DEAD} }, 195 + { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00af } }, 196 + { VK_OEM_COMMA, 0, {',', '<', WCH_DEAD} }, 197 + { 0xff, 0, {WCH_NONE, WCH_NONE, 0x00b8 } }, 198 + { VK_OEM_PERIOD, 0, {'.', '>', WCH_DEAD} }, 199 + { 0xff, 0, {WCH_NONE, WCH_NONE, 0x02d9 } }, 200 + { VK_OEM_2, 0, {'/', '?', 0x00bf } }, 201 + { 0, 0 } 202 + }; 203 + 204 + ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { 205 + /* Normal, Shift, Ctrl+Alt, Shift+Ctrl+Alt */ 206 + { '1', 0, {'1', '!', 0x00a1, 0x00b9 } }, 207 + { '3', 0, {'3', '#', 0x00aa, 0x00b3 } }, 208 + { '4', 0, {'4', '$', 0x00a2, 0x00a3 } }, 209 + { '5', 0, {'5', '%', 0x20ac, 0x00a5 } }, 210 + { '7', CAPLOKALTGR, {'7', '&', 0x00f0, 0x00d0 } }, 211 + { '8', CAPLOKALTGR, {'8', '*', 0x00fe, 0x00de } }, 212 + { '9', 0, {'9', '(', 0x2018, 0x201c } }, 213 + { '0', 0, {'0', ')', 0x2019, 0x201d } }, 214 + { VK_OEM_PLUS, 0, {'=', '+', 0x00d7, 0x00f7 } }, 215 + { 'Q', CAPLOK|CAPLOKALTGR, {'q', 'Q', 0x00e4, 0x00c4 } }, 216 + { 'W', CAPLOK|CAPLOKALTGR, {'w', 'W', 0x00e5, 0x00c5 } }, 217 + { 'F', CAPLOK|CAPLOKALTGR, {'f', 'F', 0x00e3, 0x00c3 } }, 218 + { 'P', CAPLOK|CAPLOKALTGR, {'p', 'P', 0x00f8, 0x00d8 } }, 219 + { 'J', CAPLOK|CAPLOKALTGR, {'j', 'J', 0x0111, 0x0110 } }, 220 + { 'L', CAPLOK|CAPLOKALTGR, {'l', 'L', 0x0142, 0x0141 } }, 221 + { 'U', CAPLOK|CAPLOKALTGR, {'u', 'U', 0x00fa, 0x00da } }, 222 + { 'Y', CAPLOK|CAPLOKALTGR, {'y', 'Y', 0x00fc, 0x00dc } }, 223 + { VK_OEM_1, CAPLOKALTGR, {';', ':', 0x00f6, 0x00d6 } }, 224 + { 'A', CAPLOK|CAPLOKALTGR, {'a', 'A', 0x00e1, 0x00c1 } }, 225 + { 'S', CAPLOK|CAPLOKALTGR, {'s', 'S', 0x00df, 0x1e9e } }, 226 + { 'T', CAPLOK, {'t', 'T', WCH_DEAD, WCH_DEAD} }, 227 + { 0xff, 0, {WCH_NONE, WCH_NONE, '\'', 0x02dd } }, 228 + { 'N', CAPLOK|CAPLOKALTGR, {'n', 'N', 0x00f1, 0x00d1 } }, 229 + { 'E', CAPLOK|CAPLOKALTGR, {'e', 'E', 0x00e9, 0x00c9 } }, 230 + { 'I', CAPLOK|CAPLOKALTGR, {'i', 'I', 0x00ed, 0x00cd } }, 231 + { 'O', CAPLOK|CAPLOKALTGR, {'o', 'O', 0x00f3, 0x00d3 } }, 232 + { VK_OEM_7, CAPLOKALTGR, {'\'', '\"', 0x00f5, 0x00d5 } }, 233 + { VK_OEM_102, 0, {'-', '_', 0x2013, 0x2014 } }, 234 + { 'Z', CAPLOK|CAPLOKALTGR, {'z', 'Z', 0x00e6, 0x00c6 } }, 235 + { 'C', CAPLOK|CAPLOKALTGR, {'c', 'C', 0x00e7, 0x00c7 } }, 236 + { 'V', CAPLOK|CAPLOKALTGR, {'v', 'V', 0x0153, 0x0152 } }, 237 + { 0, 0 } 238 + }; 239 + 240 + ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = { 241 + /* Normal, Shift, Ctrl+Alt, Shift+Ctrl+Alt, Ctrl */ 242 + { VK_OEM_4, 0, {'[', '{', 0x00ab, 0x2039, 0x001b } }, 243 + { VK_OEM_6, 0, {']', '}', 0x00bb, 0x203A, 0x001d } }, 244 + { VK_OEM_5, 0, {'\\', '|', WCH_DEAD, WCH_NONE, 0x001c } }, 245 + { 0xff, 0, {WCH_NONE, WCH_NONE, '*', WCH_NONE, WCH_NONE} }, 246 + { VK_BACK, 0, {'\b', '\b', WCH_NONE, WCH_NONE, 0x007f } }, 247 + { VK_ESCAPE, 0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, 0x001b } }, 248 + { VK_RETURN, 0, {'\r', '\r', WCH_NONE, WCH_NONE, '\n' } }, 249 + { VK_SPACE, 0, {' ', ' ', WCH_NONE, WCH_NONE, ' ' } }, 250 + { VK_CANCEL, 0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, 0x0003 } }, 251 + { 0, 0 } 252 + }; 253 + 254 + ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = { 255 + /* Normal, Shift, Ctrl+Alt, Shift+Ctrl+Alt, Ctrl, Shift+Ctrl */ 256 + { '2', 0, {'2', '@', 0x00ba, 0x00b2, WCH_NONE, 0x0000 } }, 257 + { '6', CAPLOKALTGR, {'6', '^', 0x0127, 0x0126, WCH_NONE, 0x001e } }, 258 + { VK_OEM_MINUS, 0, {'-', '_', 0x2013, 0x2014, WCH_NONE, 0x001f } }, 259 + { 0, 0 } 260 + }; 261 + 262 + ROSDATA VK_TO_WCHARS1 keypad_numbers[] = { 263 + { VK_NUMPAD0, 0, {'0'} }, 264 + { VK_NUMPAD1, 0, {'1'} }, 265 + { VK_NUMPAD2, 0, {'2'} }, 266 + { VK_NUMPAD3, 0, {'3'} }, 267 + { VK_NUMPAD4, 0, {'4'} }, 268 + { VK_NUMPAD5, 0, {'5'} }, 269 + { VK_NUMPAD6, 0, {'6'} }, 270 + { VK_NUMPAD7, 0, {'7'} }, 271 + { VK_NUMPAD8, 0, {'8'} }, 272 + { VK_NUMPAD9, 0, {'9'} }, 273 + { 0, 0 } 274 + }; 275 + 276 + #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) } 277 + 278 + ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = { 279 + vk_master(3,key_to_chars_3mod), 280 + vk_master(4,key_to_chars_4mod), 281 + vk_master(5,key_to_chars_5mod), 282 + vk_master(6,key_to_chars_6mod), 283 + vk_master(2,key_to_chars_2mod), 284 + vk_master(1,keypad_numbers), 285 + { 0,0,0 } 286 + }; 287 + 288 + ROSDATA VSC_LPWSTR key_names[] = { 289 + { 0x01, L"Esc" }, 290 + { 0x0e, L"Backspace" }, 291 + { 0x0f, L"Tab" }, 292 + { 0x1c, L"Enter" }, 293 + { 0x1d, L"Ctrl" }, 294 + { 0x2a, L"Shift" }, 295 + { 0x36, L"Right Shift" }, 296 + { 0x37, L"Num *" }, 297 + { 0x38, L"Alt" }, 298 + { 0x39, L"Space" }, 299 + { 0x3a, L"CAPLOK Lock" }, 300 + { 0x3b, L"F1" }, 301 + { 0x3c, L"F2" }, 302 + { 0x3d, L"F3" }, 303 + { 0x3e, L"F4" }, 304 + { 0x3f, L"F5" }, 305 + { 0x40, L"F6" }, 306 + { 0x41, L"F7" }, 307 + { 0x42, L"F8" }, 308 + { 0x43, L"F9" }, 309 + { 0x44, L"F10" }, 310 + { 0x45, L"Pause" }, 311 + { 0x46, L"Scroll Lock" }, 312 + { 0x47, L"Num 7" }, 313 + { 0x48, L"Num 8" }, 314 + { 0x49, L"Num 9" }, 315 + { 0x4a, L"Num -" }, 316 + { 0x4b, L"Num 4" }, 317 + { 0x4c, L"Num 5" }, 318 + { 0x4d, L"Num 6" }, 319 + { 0x4e, L"Num +" }, 320 + { 0x4f, L"Num 1" }, 321 + { 0x50, L"Num 2" }, 322 + { 0x51, L"Num 3" }, 323 + { 0x52, L"Num 0" }, 324 + { 0x53, L"Num Del" }, 325 + { 0x54, L"Sys Req" }, 326 + { 0x57, L"F11" }, 327 + { 0x58, L"F12" }, 328 + { 0x7c, L"F13" }, 329 + { 0x7d, L"F14" }, 330 + { 0x7e, L"F15" }, 331 + { 0x7f, L"F16" }, 332 + { 0x80, L"F17" }, 333 + { 0x81, L"F18" }, 334 + { 0x82, L"F19" }, 335 + { 0x83, L"F20" }, 336 + { 0x84, L"F21" }, 337 + { 0x85, L"F22" }, 338 + { 0x86, L"F23" }, 339 + { 0x87, L"F24" }, 340 + { 0, NULL } 341 + }; 342 + 343 + ROSDATA VSC_LPWSTR extended_key_names[] = { 344 + { 0x1c, L"Num Enter" }, 345 + { 0x1d, L"Right Control" }, 346 + { 0x35, L"Num /" }, 347 + { 0x37, L"Prnt Scrn" }, 348 + { 0x38, L"Right Alt" }, 349 + { 0x45, L"Num Lock" }, 350 + { 0x46, L"Break" }, 351 + { 0x47, L"Home" }, 352 + { 0x48, L"Up" }, 353 + { 0x49, L"Page Up" }, 354 + { 0x4b, L"Left" }, 355 + { 0x4d, L"Right" }, 356 + { 0x4f, L"End" }, 357 + { 0x50, L"Down" }, 358 + { 0x51, L"Page Down" }, 359 + { 0x52, L"Insert" }, 360 + { 0x53, L"Delete" }, 361 + { 0x54, L"<ReactOS>" }, 362 + { 0x56, L"Help" }, 363 + { 0x5b, L"Left <ReactOS>" }, 364 + { 0x5c, L"Right <ReactOS>" }, 365 + { 0x5d, L"Application" }, 366 + { 0, NULL } 367 + }; 368 + 369 + ROSDATA DEADKEY_LPWSTR dead_key_names[] = { 370 + L"\'" L"ACUTE ACCENT", 371 + L"`" L"GRAVE ACCENT", 372 + L"^" L"CIRCUMFLEX ACCENT", 373 + L"~" L"TILDE", 374 + L"\x02db" L"OGONEK", 375 + L"*" L"SPECIAL", 376 + L"\x02dd" L"DOUBLE ACUTE ACCENT", 377 + L"\x00a8" L"DIAERESIS", 378 + L"\x02c7" L"CARON", 379 + L"\x02d8" L"BREVE", 380 + L"\x02da" L"RING ABOVE", 381 + L"\x00af" L"MACRON", 382 + L"\x00b8" L"CEDILLA", 383 + L"\x02d9" L"DOT ABOVE", 384 + NULL 385 + }; 386 + 387 + #define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags 388 + 389 + ROSDATA DEADKEY dead_key[] = { 390 + { DEADTRANS(L'a', '\'', 0x00e1, 0x0000) }, /* ACUTE incomplete */ 391 + { DEADTRANS(L'c', '\'', 0x00e7, 0x0000) }, 392 + { DEADTRANS(L'e', '\'', 0x00e9, 0x0000) }, 393 + { DEADTRANS(L'i', '\'', 0x00ed, 0x0000) }, 394 + { DEADTRANS(L'o', '\'', 0x00f3, 0x0000) }, 395 + { DEADTRANS(L'u', '\'', 0x00fa, 0x0000) }, 396 + { DEADTRANS(L'y', '\'', 0x00fd, 0x0000) }, 397 + { DEADTRANS(L'A', '\'', 0x00c1, 0x0000) }, 398 + { DEADTRANS(L'C', '\'', 0x00c7, 0x0000) }, 399 + { DEADTRANS(L'E', '\'', 0x00c9, 0x0000) }, 400 + { DEADTRANS(L'I', '\'', 0x00cd, 0x0000) }, 401 + { DEADTRANS(L'O', '\'', 0x00d3, 0x0000) }, 402 + { DEADTRANS(L'U', '\'', 0x00da, 0x0000) }, 403 + { DEADTRANS(L'Y', '\'', 0x00dd, 0x0000) }, 404 + { DEADTRANS(L' ', '\'', '\'', 0x0000) }, 405 + 406 + { DEADTRANS(L'a', L'^', 0x00e2, 0x0000) }, /* CIRCUMFLEX incomplete */ 407 + { DEADTRANS(L'e', L'^', 0x00ea, 0x0000) }, 408 + { DEADTRANS(L'i', L'^', 0x00ee, 0x0000) }, 409 + { DEADTRANS(L'o', L'^', 0x00f4, 0x0000) }, 410 + { DEADTRANS(L'u', L'^', 0x00fb, 0x0000) }, 411 + { DEADTRANS(L'A', L'^', 0x00c2, 0x0000) }, 412 + { DEADTRANS(L'E', L'^', 0x00ca, 0x0000) }, 413 + { DEADTRANS(L'I', L'^', 0x00ce, 0x0000) }, 414 + { DEADTRANS(L'O', L'^', 0x00d4, 0x0000) }, 415 + { DEADTRANS(L'U', L'^', 0x00db, 0x0000) }, 416 + { DEADTRANS(L' ', L'^', L'^', 0x0000) }, 417 + 418 + { DEADTRANS(L'a', L'~', 0x00e3, 0x0000) }, /* TILDE incomplete */ 419 + { DEADTRANS(L'n', L'~', 0x00f1, 0x0000) }, 420 + { DEADTRANS(L'o', L'~', 0x00f5, 0x0000) }, 421 + { DEADTRANS(L'A', L'~', 0x00c3, 0x0000) }, 422 + { DEADTRANS(L'N', L'~', 0x00d1, 0x0000) }, 423 + { DEADTRANS(L'O', L'~', 0x00d5, 0x0000) }, 424 + { DEADTRANS(L' ', L'~', L'~', 0x0000) }, 425 + 426 + { DEADTRANS(L'a', 0x02db, 0x0105, 0x0000) }, /* OGONEK */ 427 + { DEADTRANS(L'e', 0x02db, 0x0119, 0x0000) }, 428 + { DEADTRANS(L'i', 0x02db, 0x012f, 0x0000) }, 429 + { DEADTRANS(L'o', 0x02db, 0x01eb, 0x0000) }, 430 + { DEADTRANS(L'u', 0x02db, 0x0173, 0x0000) }, 431 + { DEADTRANS(L'A', 0x02db, 0x0104, 0x0000) }, 432 + { DEADTRANS(L'E', 0x02db, 0x0118, 0x0000) }, 433 + { DEADTRANS(L'I', 0x02db, 0x012e, 0x0000) }, 434 + { DEADTRANS(L'O', 0x02db, 0x01ea, 0x0000) }, 435 + { DEADTRANS(L'U', 0x02db, 0x0173, 0x0000) }, 436 + { DEADTRANS(L' ', 0x02db, 0x02db, 0x0000) }, 437 + { DEADTRANS(0x02db, 0x02db, 0x02db, 0x0000) }, 438 + 439 + { DEADTRANS(L' ', L'*', L'*', 0x0000) }, /* SPECIAL incomplete */ 440 + 441 + { DEADTRANS(L'a', L'`', 0x00e0, 0x0000) }, /* GRAVE ACCENT */ 442 + { DEADTRANS(L'e', L'`', 0x00e8, 0x0000) }, 443 + { DEADTRANS(L'i', L'`', 0x00ec, 0x0000) }, 444 + { DEADTRANS(L'n', L'`', 0x01f9, 0x0000) }, 445 + { DEADTRANS(L'o', L'`', 0x00f2, 0x0000) }, 446 + { DEADTRANS(L'u', L'`', 0x00f9, 0x0000) }, 447 + { DEADTRANS(L'w', L'`', 0x1e81, 0x0000) }, 448 + { DEADTRANS(L'y', L'`', 0x1ef3, 0x0000) }, 449 + { DEADTRANS(0x00fc, L'`', 0x01dc, 0x0000) }, 450 + { DEADTRANS(L'A', L'`', 0x00c0, 0x0000) }, 451 + { DEADTRANS(L'E', L'`', 0x00c8, 0x0000) }, 452 + { DEADTRANS(L'I', L'`', 0x00cc, 0x0000) }, 453 + { DEADTRANS(L'N', L'`', 0x01f8, 0x0000) }, 454 + { DEADTRANS(L'O', L'`', 0x00d2, 0x0000) }, 455 + { DEADTRANS(L'U', L'`', 0x00d9, 0x0000) }, 456 + { DEADTRANS(L'W', L'`', 0x1e80, 0x0000) }, 457 + { DEADTRANS(L'Y', L'`', 0x1ef2, 0x0000) }, 458 + { DEADTRANS(0x00dc, L'`', 0x01db, 0x0000) }, 459 + { DEADTRANS(L' ', L'`', L'`', 0x0000) }, 460 + { DEADTRANS(L'`', L'`', L'`', 0x0000) }, 461 + 462 + { DEADTRANS(L'o', 0x02dd, 0x0151, 0x0000) }, /* DOUBLE ACUTE */ 463 + { DEADTRANS(L'u', 0x02dd, 0x0171, 0x0000) }, 464 + { DEADTRANS(L'O', 0x02dd, 0x0150, 0x0000) }, 465 + { DEADTRANS(L'U', 0x02dd, 0x0170, 0x0000) }, 466 + { DEADTRANS(L' ', 0x02dd, 0x02dd, 0x0000) }, 467 + { DEADTRANS(0x02dd, 0x02dd, 0x02dd, 0x0000) }, 468 + 469 + { DEADTRANS(L' ', 0x00a8, 0x00a8, 0x0000) }, /* DIAERESIS incomplete */ 470 + 471 + { DEADTRANS(L' ', 0x02c7, 0x02c7, 0x0000) }, /* CARON incomplete */ 472 + 473 + { DEADTRANS(L' ', 0x02d8, 0x02d8, 0x0000) }, /* BREVE incomplete */ 474 + 475 + { DEADTRANS(L' ', 0x02da, 0x02da, 0x0000) }, /* RING ABOVE incomplete */ 476 + 477 + { DEADTRANS(L' ', 0x00af, 0x00af, 0x0000) }, /* MACRON incomplete */ 478 + 479 + { DEADTRANS(L' ', 0x00b8, 0x00b8, 0x0000) }, /* CEDILLA incomplete */ 480 + 481 + { DEADTRANS(L' ', 0x02d9, 0x02d9, 0x0000) }, /* DOT ABOVE incomplete */ 482 + 483 + {0, 0} 484 + }; 485 + 486 + /* Finally, the master table */ 487 + ROSDATA KBDTABLES keyboard_layout_table = { 488 + /* modifier assignments */ 489 + &modifier_bits, 490 + 491 + /* character from vk tables */ 492 + vk_to_wchar_master_table, 493 + 494 + /* diacritical marks */ 495 + dead_key, 496 + 497 + /* Key names */ 498 + (VSC_LPWSTR *)key_names, 499 + (VSC_LPWSTR *)extended_key_names, 500 + dead_key_names, /* Dead key names */ 501 + 502 + /* scan code to virtual key maps */ 503 + scancode_to_vk, 504 + RTL_NUMBER_OF(scancode_to_vk), 505 + extcode0_to_vk, 506 + extcode1_to_vk, 507 + 508 + MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */ 509 + 510 + /* Ligatures */ 511 + 0, 512 + 0, 513 + NULL 514 + }; 515 + 516 + PKBDTABLES WINAPI KbdLayerDescriptor(VOID) { 517 + return &keyboard_layout_table; 518 + }
+5
dll/keyboard/kbdcmk/kbdcmk.rc
··· 1 + #define REACTOS_VERSION_DLL 2 + #define REACTOS_STR_FILE_DESCRIPTION "ReactOS Colemak Keyboard Layout" 3 + #define REACTOS_STR_INTERNAL_NAME "kbdcmk" 4 + #define REACTOS_STR_ORIGINAL_FILENAME "kbdcmk.dll" 5 + #include <reactos/version.rc>
+1
dll/keyboard/kbdcmk/kbdcmk.spec
··· 1 + @ stdcall KbdLayerDescriptor()