├── .gitattributes ├── .gitignore ├── Dockerfile ├── KBFRZ71.klc ├── KBFRZ71.klc.tpl ├── KBFRZ71N.klc ├── KBFRZ71N.klc.tpl ├── LICENCE.txt ├── Make-KLC.ps1 ├── README.md ├── appveyor.yml ├── automation ├── 002c_0326_comma_below.txt ├── 002d_0335_short_stroke_overlay.txt ├── 002e_0323_dot_below.txt ├── 002f_0337_short_solidus_overlay.txt ├── 005e_0302_circumflex_accent.txt ├── 0060_0300_grave_accent.txt ├── 007e_0303_tilde.txt ├── 00a4_currency_sign.txt ├── 00a8_0308_diaeresis.txt ├── 00af_0304_macron.txt ├── 00b0_0311_inverted_breve.txt ├── 00b4_0301_acute_accent.txt ├── 00b5_micro_sign.txt ├── 00b8_0327_cedilla.txt ├── 017f_latin_small_letter_long_s.txt ├── 02c7_030c_caron.txt ├── 02cd_0331_macron_below.txt ├── 02d8_0306_breve.txt ├── 02d9_0307_dot_above.txt ├── 02da_030a_ring_above.txt ├── 02db_0328_ogonek.txt ├── 02dd_030b_double_acute_accent.txt ├── 02f5_030f_double_grave_accent.txt ├── KBFRZ71_base.inc ├── KBFRZ71_key_names.inc ├── dump-currencies.ps1 ├── make-base-layout.ps1 ├── make-dead-tables.ps1 ├── make-keynames-dead.ps1 ├── make-keynames.ps1 └── make-mapping-table.ps1 ├── context └── Make-KeyboardLayout.ps1 ├── refs ├── EU_level.png ├── base.png ├── french.png ├── greek_level.png ├── main_layout.png ├── main_layout.txt └── monetary_level.png └── src ├── .gitignore ├── Package_x64 └── Package_x64.wixproj ├── Package_x86 ├── Components_x64.wxi ├── Components_x86.wxi ├── Conditions.wxi ├── CustomAction.wxs ├── Features.wxi ├── InstallExecuteSequence.wxi ├── Package_x86.wixproj ├── Product.wxs └── Properties.wxi ├── Setup.sln └── Setup ├── Program.cs └── Setup.csproj /.gitattributes: -------------------------------------------------------------------------------- 1 | *\.klc -text diff -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | artifacts/ 3 | build.log 4 | 5 | *\.klc~ -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM springcompdocker/msklc:1.4 2 | WORKDIR /scripts 3 | COPY ./Make-KeyboardLayout.ps1 . 4 | 5 | ## $command = ". C:\scripts\Make-KeyboardLayout.ps1" 6 | ## $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) 7 | ## $encodedCommand = [Convert]::ToBase64String($bytes) 8 | 9 | ENTRYPOINT ["powershell.exe", "-nologo", "-encodedCommand", "LgAgAC8AcwBjAHIAaQBwAHQAcwAvAE0AYQBrAGUALQBLAGUAeQBiAG8AYQByAGQATABhAHkAbwB1AHQALgBwAHMAMQA="] -------------------------------------------------------------------------------- /KBFRZ71.klc: -------------------------------------------------------------------------------- 1 | KBD KBFRZ71 "Français - AZERTY NF Z71-300" 2 | 3 | COPYRIGHT "© 2019 Creative Commons" 4 | 5 | COMPANY "Creative Commons" 6 | 7 | LOCALENAME "fr-FR" 8 | 9 | LOCALEID "0000040c" 10 | 11 | VERSION 1.0 12 | 13 | ATTRIBUTES 14 | ALTGR 15 | 16 | SHIFTSTATE 17 | 18 | 0 //Column 4 19 | 1 //Column 5 : Shft 20 | 2 //Column 6 : Ctrl 21 | 3 //Column 7 : Shft Ctrl 22 | 6 //Column 8 : Ctrl Alt 23 | 7 //Column 9 : Shft Ctrl Alt 24 | 25 | LAYOUT ;an extra '@' at the end is a dead key 26 | 27 | //SC VK_ Cap 4 5 6 7 8 9 28 | //-- ---- ---- ---- ---- ---- ---- ---- ---- 29 | 30 | 02 1 SGCap 00e0 1 -1 -1 00a7 00c0 // à 1 § À 31 | -1 -1 0 00c0 1 // À 1 32 | 03 2 SGCap 00e9 2 -1 -1 00b4@ 00c9 // é 2 ´ É 33 | -1 -1 0 00c9 2 // É 2 34 | 04 3 SGCap 00e8 3 -1 -1 0060@ 00c8 // è 3 ` È 35 | -1 -1 0 00c8 3 // È 3 36 | 05 4 SGCap 00ea 4 -1 -1 0026 00ca // ê 4 & Ê 37 | -1 -1 0 00ca 4 // Ê 4 38 | 06 5 0 0028 5 -1 -1 005b 02dd@ // ( 5 [ 39 | 07 6 0 0029 6 -1 -1 005d 02f5@ // ) 6 ] 40 | 08 7 0 2018 7 -1 -1 00af@ -1 // ‘ 7 ¯ 41 | 09 8 0 2019 8 -1 -1 005f 2014 // ’ 8 _ — 42 | 0a 9 0 00ab 9 -1 -1 201c 2039 // « 9 “ ‹ 43 | 0b 0 0 00bb 0 -1 0000 201d 203a // » 0 ” › 44 | 0c OEM_4 0 0027 0022 -1 -1 00b0 02da@ // ' " ° ˚ 45 | 0d OEM_6 0 005e@ 00a8@ -1 001e 02c7@ -1 // ^ ¨ ˇ 46 | 47 | 10 A 5 a A -1 -1 00e6 00c6 // a A æ Æ 48 | 11 Z 1 z Z -1 -1 00a3 -1 // z Z £ 49 | 12 E 1 e E -1 -1 20ac -1 // e E € 50 | 13 R 1 r R -1 -1 00ae -1 // r R ® 51 | 14 T 1 t T -1 -1 007b 2122 // t T { ™ 52 | 15 Y 1 y Y -1 -1 007d -1 // y Y } 53 | 16 U 5 u U -1 -1 00f9 00d9 // u U ù Ù 54 | 18 O 5 o O -1 -1 0153 0152 // o O œ Œ 55 | 19 P 1 p P -1 -1 0025 2030 // p P % ‰ 56 | 1a OEM_MINUS 0 002d 2013 001b 001f 2212 2011 // - – − ‑ 57 | 1b OEM_PLUS 0 002b 00b1 001d -1 2020 2021 // + ± † ‡ 58 | 1e Q 5 q Q -1 -1 03b8 03f4 // q Q θ ϴ 59 | 1f S 5 s S -1 -1 00df 1e9e // s S ß ẞ 60 | 20 D 1 d D -1 -1 0024 -1 // d D $ 61 | 21 F 1 f F -1 -1 00a4@ -1 // f F ¤ 62 | 22 G 1 g G -1 -1 00b5@ -1 // g G µ 63 | 23 H 1 h H -1 -1 017f@ 02cd@ // h H 64 | 24 J 1 j J -1 -1 -1 -1 // j J 65 | 26 L 1 l L -1 -1 007c -1 // l L | 66 | 27 M 1 m M -1 -1 221e -1 // m M ∞ 67 | 28 OEM_3 0 002f 005c -1 -1 00f7 221a // / \ ÷ √ 68 | 2b OEM_5 0 002a 00bd 001c -1 00d7 00bc // * ½ × ¼ 69 | 56 OEM_102 0 003c 003e 001c -1 2a7d 2a7e // < > ⩽ ⩾ 70 | 2c W 5 w W -1 -1 0292 01b7 // w W ʒ Ʒ 71 | 2d X 1 x X -1 -1 00a9 -1 // x X © 72 | 2e C 5 c C -1 -1 00e7 00c7 // c C ç Ç 73 | 2f V 1 v V -1 -1 00b8@ 02db@ // v V ¸ ˛ 74 | 30 B 1 b B -1 -1 002d@ -1 // b B 75 | 31 N 1 n N -1 -1 007e@ -1 // n N ~ 76 | 32 OEM_PERIOD 0 002e 003f -1 -1 00bf -1 // . ? ¿ 77 | 33 OEM_COMMA 0 002c 0021 -1 -1 00a1 002c@ // , ! ¡ , 78 | 34 OEM_2 0 003a 2026 -1 -1 00b7 -1 // : … · 79 | 35 OEM_8 0 003b 003d -1 -1 2243 2260 // ; = ≃ ≠ 80 | 39 SPACE 0 0020 0020 2003 -1 00a0 202f //     81 | 53 DECIMAL 0 002c 002c -1 -1 -1 -1 // , , 82 | 83 | // The following three keys are specifically set last in the layout 84 | // to prevent the Win32 VkKeyScanEx function to report an incorrect 85 | // scan code for the '.', '/' and '°' characters that double as 86 | // 87 | // See https://github.com/springcomp/optimized-azerty-win/issues/73. 88 | 89 | 29 OEM_7 0 0040 0023 -1 -1 02d8@ 00b0@ // @ # ˘ 90 | 17 I 1 i I -1 -1 02d9@ 002e@ // i I ˙ . 91 | 25 K 1 k K -1 -1 002f@ -1 // k K / 92 | 93 | DEADKEY 002c 94 | 95 | 0053 0218 // S -> Ș 96 | 0054 021a // T -> Ț 97 | 0073 0219 // s -> ș 98 | 0074 021b // t -> ț 99 | 002c 0326 // , -> ◌̦ 100 | 00a4 002c // ¤ -> , 101 | 00b5 002c // µ -> , 102 | 017f 002c // ſ -> , 103 | 00a0 002c // -> , 104 | 2003 002c // -> , 105 | 202f 002c // -> , 106 | 0020 002c // -> , 107 | 108 | DEADKEY 002d 109 | 110 | 0042 0243 // B -> Ƀ 111 | 0044 0110 // D -> Đ 112 | 0047 01e4 // G -> Ǥ 113 | 0048 0126 // H -> Ħ 114 | 0049 0197 // I -> Ɨ 115 | 004a 0248 // J -> Ɉ 116 | 004c 023d // L -> Ƚ 117 | 0052 024c // R -> Ɍ 118 | 0054 0166 // T -> Ŧ 119 | 0055 0244 // U -> Ʉ 120 | 0059 024e // Y -> Ɏ 121 | 005a 01b5 // Z -> Ƶ 122 | 0062 0180 // b -> ƀ 123 | 0064 0111 // d -> đ 124 | 0067 01e5 // g -> ǥ 125 | 0068 0127 // h -> ħ 126 | 006a 0249 // j -> ɉ 127 | 006c 019a // l -> ƚ 128 | 0072 024d // r -> ɍ 129 | 0074 0167 // t -> ŧ 130 | 0079 024f // y -> ɏ 131 | 007a 01b6 // z -> ƶ 132 | 002d 0335 // - -> ◌̵ 133 | 00a4 002d // ¤ -> - 134 | 00b5 002d // µ -> - 135 | 017f 002d // ſ -> - 136 | 00a0 002d // -> - 137 | 2003 002d // -> - 138 | 202f 002d // -> - 139 | 0020 002d // -> - 140 | 141 | DEADKEY 002e 142 | 143 | 0041 1ea0 // A -> Ạ 144 | 0042 1e04 // B -> Ḅ 145 | 0044 1e0c // D -> Ḍ 146 | 0045 1eb8 // E -> Ẹ 147 | 0048 1e24 // H -> Ḥ 148 | 0049 1eca // I -> Ị 149 | 004b 1e32 // K -> Ḳ 150 | 004c 1e36 // L -> Ḷ 151 | 004d 1e42 // M -> Ṃ 152 | 004e 1e46 // N -> Ṇ 153 | 004f 1ecc // O -> Ọ 154 | 0052 1e5a // R -> Ṛ 155 | 0053 1e62 // S -> Ṣ 156 | 0054 1e6c // T -> Ṭ 157 | 0055 1ee4 // U -> Ụ 158 | 0056 1e7e // V -> Ṿ 159 | 0057 1e88 // W -> Ẉ 160 | 0059 1ef4 // Y -> Ỵ 161 | 005a 1e92 // Z -> Ẓ 162 | 0061 1ea1 // a -> ạ 163 | 0062 1e05 // b -> ḅ 164 | 0064 1e0d // d -> ḍ 165 | 0065 1eb9 // e -> ẹ 166 | 0068 1e25 // h -> ḥ 167 | 0069 1ecb // i -> ị 168 | 006b 1e33 // k -> ḳ 169 | 006c 1e37 // l -> ḷ 170 | 006d 1e43 // m -> ṃ 171 | 006e 1e47 // n -> ṇ 172 | 006f 1ecd // o -> ọ 173 | 0072 1e5b // r -> ṛ 174 | 0073 1e63 // s -> ṣ 175 | 0074 1e6d // t -> ṭ 176 | 0075 1ee5 // u -> ụ 177 | 0076 1e7f // v -> ṿ 178 | 0077 1e89 // w -> ẉ 179 | 0079 1ef5 // y -> ỵ 180 | 007a 1e93 // z -> ẓ 181 | 00ca 1ec6 // Ê -> Ệ 182 | 00ea 1ec7 // ê -> ệ 183 | 002e 0323 // . -> ◌̣ 184 | 00a4 002e // ¤ -> . 185 | 00b5 002e // µ -> . 186 | 017f 002e // ſ -> . 187 | 00a0 002e // -> . 188 | 2003 002e // -> . 189 | 202f 002e // -> . 190 | 0020 002e // -> . 191 | 192 | DEADKEY 002f 193 | 194 | 003c 226e // < -> ≮ 195 | 003d 2260 // = -> ≠ 196 | 003e 226f // > -> ≯ 197 | 0041 023a // A -> Ⱥ 198 | 0043 023b // C -> Ȼ 199 | 0045 0246 // E -> Ɇ 200 | 004c 0141 // L -> Ł 201 | 004f 00d8 // O -> Ø 202 | 0054 023e // T -> Ⱦ 203 | 0063 023c // c -> ȼ 204 | 0065 0247 // e -> ɇ 205 | 006c 0142 // l -> ł 206 | 006f 00f8 // o -> ø 207 | 017f 1e9c // ſ -> ẜ 208 | 2243 2244 // ≃ -> ≄ 209 | 2a7d 2270 // ⩽ -> ≰ 210 | 2a7e 2271 // ⩾ -> ≱ 211 | 002f 0337 // / -> ◌̷ 212 | 00a4 002f // ¤ -> / 213 | 00b5 002f // µ -> / 214 | 00a0 002f // -> / 215 | 2003 002f // -> / 216 | 202f 002f // -> / 217 | 0020 002f // -> / 218 | 219 | DEADKEY 005e 220 | 221 | 0028 207d // ( -> ⁽ 222 | 0029 207e // ) -> ⁾ 223 | 002b 207a // + -> ⁺ 224 | 002d 207b // - -> ⁻ 225 | 0030 2070 // 0 -> ⁰ 226 | 0031 00b9 // 1 -> ¹ 227 | 0032 00b2 // 2 -> ² 228 | 0033 00b3 // 3 -> ³ 229 | 0034 2074 // 4 -> ⁴ 230 | 0035 2075 // 5 -> ⁵ 231 | 0036 2076 // 6 -> ⁶ 232 | 0037 2077 // 7 -> ⁷ 233 | 0038 2078 // 8 -> ⁸ 234 | 0039 2079 // 9 -> ⁹ 235 | 003d 207c // = -> ⁼ 236 | 0041 00c2 // A ->  237 | 0043 0108 // C -> Ĉ 238 | 0045 00ca // E -> Ê 239 | 0047 011c // G -> Ĝ 240 | 0048 0124 // H -> Ĥ 241 | 0049 00ce // I -> Î 242 | 004a 0134 // J -> Ĵ 243 | 004f 00d4 // O -> Ô 244 | 0053 015c // S -> Ŝ 245 | 0055 00db // U -> Û 246 | 0057 0174 // W -> Ŵ 247 | 0059 0176 // Y -> Ŷ 248 | 005a 1e90 // Z -> Ẑ 249 | 0061 00e2 // a -> â 250 | 0063 0109 // c -> ĉ 251 | 0065 00ea // e -> ê 252 | 0067 011d // g -> ĝ 253 | 0068 0125 // h -> ĥ 254 | 0069 00ee // i -> î 255 | 006a 0135 // j -> ĵ 256 | 006f 00f4 // o -> ô 257 | 0073 015d // s -> ŝ 258 | 0075 00fb // u -> û 259 | 0077 0175 // w -> ŵ 260 | 0078 02e3 // x -> ˣ 261 | 0079 0177 // y -> ŷ 262 | 007a 1e91 // z -> ẑ 263 | 00c0 1ea6 // À -> Ầ 264 | 00c8 1ec0 // È -> Ề 265 | 00c9 1ebe // É -> Ế 266 | 00e0 1ea7 // à -> ầ 267 | 00e8 1ec1 // è -> ề 268 | 00e9 1ebf // é -> ế 269 | 2212 207b // − -> ⁻ 270 | 005e 0302 // ^ -> ◌̂ 271 | 00a4 005e // ¤ -> ^ 272 | 00b5 005e // µ -> ^ 273 | 017f 005e // ſ -> ^ 274 | 00a0 005e // -> ^ 275 | 2003 005e // -> ^ 276 | 202f 005e // -> ^ 277 | 0020 005e // -> ^ 278 | 279 | DEADKEY 0060 280 | 281 | 0041 00c0 // A -> À 282 | 0045 00c8 // E -> È 283 | 0049 00cc // I -> Ì 284 | 004e 01f8 // N -> Ǹ 285 | 004f 00d2 // O -> Ò 286 | 0055 00d9 // U -> Ù 287 | 0057 1e80 // W -> Ẁ 288 | 0059 1ef2 // Y -> Ỳ 289 | 0061 00e0 // a -> à 290 | 0065 00e8 // e -> è 291 | 0069 00ec // i -> ì 292 | 006e 01f9 // n -> ǹ 293 | 006f 00f2 // o -> ò 294 | 0075 00f9 // u -> ù 295 | 0077 1e81 // w -> ẁ 296 | 0079 1ef3 // y -> ỳ 297 | 00ca 1ec0 // Ê -> Ề 298 | 00ea 1ec1 // ê -> ề 299 | 0060 0300 // ` -> ◌̀ 300 | 00a4 0060 // ¤ -> ` 301 | 00b5 0060 // µ -> ` 302 | 017f 0060 // ſ -> ` 303 | 00a0 0060 // -> ` 304 | 2003 0060 // -> ` 305 | 202f 0060 // -> ` 306 | 0020 0060 // -> ` 307 | 308 | DEADKEY 007e 309 | 310 | 002d 2243 // - -> ≃ 311 | 003c 2272 // < -> ≲ 312 | 003d 2248 // = -> ≈ 313 | 003e 2273 // > -> ≳ 314 | 0041 00c3 // A -> à 315 | 0045 1ebc // E -> Ẽ 316 | 0049 0128 // I -> Ĩ 317 | 004e 00d1 // N -> Ñ 318 | 004f 00d5 // O -> Õ 319 | 0055 0168 // U -> Ũ 320 | 0056 1e7c // V -> Ṽ 321 | 0059 1ef8 // Y -> Ỹ 322 | 0061 00e3 // a -> ã 323 | 0065 1ebd // e -> ẽ 324 | 0069 0129 // i -> ĩ 325 | 006e 00f1 // n -> ñ 326 | 006f 00f5 // o -> õ 327 | 0075 0169 // u -> ũ 328 | 0076 1e7d // v -> ṽ 329 | 0079 1ef9 // y -> ỹ 330 | 00ca 1ec4 // Ê -> Ễ 331 | 00ea 1ec5 // ê -> ễ 332 | 007e 0303 // ~ -> ◌̃ 333 | 00a4 007e // ¤ -> ~ 334 | 00b5 007e // µ -> ~ 335 | 017f 007e // ſ -> ~ 336 | 00a0 007e // -> ~ 337 | 2003 007e // -> ~ 338 | 202f 007e // -> ~ 339 | 0020 007e // -> ~ 340 | 341 | DEADKEY 00a4 342 | 343 | 0025 20b0 // % -> ₰ 344 | 0041 20b3 // A -> ₳ 345 | 0042 0e3f // B -> ฿ 346 | 0043 20b5 // C -> ₵ 347 | 0044 20af // D -> ₯ 348 | 0046 20a3 // F -> ₣ 349 | 004c 20a4 // L -> ₤ 350 | 004d 2133 // M -> ℳ 351 | 0050 20a7 // P -> ₧ 352 | 0052 20b9 // R -> ₹ 353 | 0053 20b7 // S -> ₷ 354 | 0054 20ae // T -> ₮ 355 | 0062 20bf // b -> ₿ 356 | 0063 00a2 // c -> ¢ 357 | 0064 20ab // d -> ₫ 358 | 0065 20a0 // e -> ₠ 359 | 0066 0192 // f -> ƒ 360 | 0067 20b2 // g -> ₲ 361 | 0068 20b4 // h -> ₴ 362 | 006b 20ad // k -> ₭ 363 | 006c 20ba // l -> ₺ 364 | 006d 20a5 // m -> ₥ 365 | 006e 20a6 // n -> ₦ 366 | 0070 20b1 // p -> ₱ 367 | 0072 20bd // r -> ₽ 368 | 0073 20aa // s -> ₪ 369 | 0074 20b8 // t -> ₸ 370 | 0077 20a9 // w -> ₩ 371 | 0079 00a5 // y -> ¥ 372 | 007c 20be // | -> ₾ 373 | 00a4 00a4 // ¤ -> ¤ 374 | 00ae 20a8 // ® -> ₨ 375 | 00c7 20a1 // Ç -> ₡ 376 | 00e7 20a2 // ç -> ₢ 377 | 221e 20bc // ∞ -> ₼ 378 | 00b5 00a4 // µ -> ¤ 379 | 017f 00a4 // ſ -> ¤ 380 | 00a0 00a4 // -> ¤ 381 | 2003 00a4 // -> ¤ 382 | 202f 00a4 // -> ¤ 383 | 0020 00a4 // -> ¤ 384 | 385 | DEADKEY 00a8 386 | 387 | 0041 00c4 // A -> Ä 388 | 0045 00cb // E -> Ë 389 | 0048 1e26 // H -> Ḧ 390 | 0049 00cf // I -> Ï 391 | 004f 00d6 // O -> Ö 392 | 0055 00dc // U -> Ü 393 | 0057 1e84 // W -> Ẅ 394 | 0058 1e8c // X -> Ẍ 395 | 0059 0178 // Y -> Ÿ 396 | 0061 00e4 // a -> ä 397 | 0065 00eb // e -> ë 398 | 0068 1e27 // h -> ḧ 399 | 0069 00ef // i -> ï 400 | 006f 00f6 // o -> ö 401 | 0074 1e97 // t -> ẗ 402 | 0075 00fc // u -> ü 403 | 0077 1e85 // w -> ẅ 404 | 0078 1e8d // x -> ẍ 405 | 0079 00ff // y -> ÿ 406 | 00d9 01db // Ù -> Ǜ 407 | 00f9 01dc // ù -> ǜ 408 | 00a8 0308 // ¨ -> ◌̈ 409 | 00a4 00a8 // ¤ -> ¨ 410 | 00b5 00a8 // µ -> ¨ 411 | 017f 00a8 // ſ -> ¨ 412 | 00a0 00a8 // -> ¨ 413 | 2003 00a8 // -> ¨ 414 | 202f 00a8 // -> ¨ 415 | 0020 00a8 // -> ¨ 416 | 417 | DEADKEY 00af 418 | 419 | 0041 0100 // A -> Ā 420 | 0045 0112 // E -> Ē 421 | 0047 1e20 // G -> Ḡ 422 | 0049 012a // I -> Ī 423 | 004f 014c // O -> Ō 424 | 0055 016a // U -> Ū 425 | 0059 0232 // Y -> Ȳ 426 | 0061 0101 // a -> ā 427 | 0065 0113 // e -> ē 428 | 0067 1e21 // g -> ḡ 429 | 0069 012b // i -> ī 430 | 006f 014d // o -> ō 431 | 0075 016b // u -> ū 432 | 0079 0233 // y -> ȳ 433 | 00c6 01e2 // Æ -> Ǣ 434 | 00c8 1e14 // È -> Ḕ 435 | 00c9 1e16 // É -> Ḗ 436 | 00e6 01e3 // æ -> ǣ 437 | 00e8 1e15 // è -> ḕ 438 | 00e9 1e17 // é -> ḗ 439 | 00af 0304 // ¯ -> ◌̄ 440 | 00a4 00af // ¤ -> ¯ 441 | 00b5 00af // µ -> ¯ 442 | 017f 00af // ſ -> ¯ 443 | 00a0 00af // -> ¯ 444 | 2003 00af // -> ¯ 445 | 202f 00af // -> ¯ 446 | 0020 00af // -> ¯ 447 | 448 | DEADKEY 00b0 449 | 450 | 0041 0202 // A -> Ȃ 451 | 0045 0206 // E -> Ȇ 452 | 0049 020a // I -> Ȋ 453 | 004f 020e // O -> Ȏ 454 | 0052 0212 // R -> Ȓ 455 | 0055 0216 // U -> Ȗ 456 | 0061 0203 // a -> ȃ 457 | 0065 0207 // e -> ȇ 458 | 0069 020b // i -> ȋ 459 | 006f 020f // o -> ȏ 460 | 0072 0213 // r -> ȓ 461 | 0075 0217 // u -> ȗ 462 | 00c0 1ea6 // À -> Ầ 463 | 00c8 1ec0 // È -> Ề 464 | 00e0 1ea7 // à -> ầ 465 | 00e8 1ec1 // è -> ề 466 | 00b0 0311 // ° -> ◌̑ 467 | 00a4 00b0 // ¤ -> ° 468 | 00b5 00b0 // µ -> ° 469 | 017f 00b0 // ſ -> ° 470 | 00a0 00b0 // -> ° 471 | 2003 00b0 // -> ° 472 | 202f 00b0 // -> ° 473 | 0020 00b0 // -> ° 474 | 475 | DEADKEY 00b4 476 | 477 | 0041 00c1 // A -> Á 478 | 0043 0106 // C -> Ć 479 | 0045 00c9 // E -> É 480 | 0047 01f4 // G -> Ǵ 481 | 0049 00cd // I -> Í 482 | 004b 1e30 // K -> Ḱ 483 | 004c 0139 // L -> Ĺ 484 | 004d 1e3e // M -> Ḿ 485 | 004e 0143 // N -> Ń 486 | 004f 00d3 // O -> Ó 487 | 0050 1e54 // P -> Ṕ 488 | 0052 0154 // R -> Ŕ 489 | 0053 015a // S -> Ś 490 | 0055 00da // U -> Ú 491 | 0057 1e82 // W -> Ẃ 492 | 0059 00dd // Y -> Ý 493 | 005a 0179 // Z -> Ź 494 | 0061 00e1 // a -> á 495 | 0063 0107 // c -> ć 496 | 0065 00e9 // e -> é 497 | 0067 01f5 // g -> ǵ 498 | 0069 00ed // i -> í 499 | 006b 1e31 // k -> ḱ 500 | 006c 013a // l -> ĺ 501 | 006d 1e3f // m -> ḿ 502 | 006e 0144 // n -> ń 503 | 006f 00f3 // o -> ó 504 | 0070 1e55 // p -> ṕ 505 | 0072 0155 // r -> ŕ 506 | 0073 015b // s -> ś 507 | 0075 00fa // u -> ú 508 | 0077 1e83 // w -> ẃ 509 | 0079 00fd // y -> ý 510 | 007a 017a // z -> ź 511 | 00c6 01fc // Æ -> Ǽ 512 | 00c7 1e08 // Ç -> Ḉ 513 | 00ca 1ebe // Ê -> Ế 514 | 00e6 01fd // æ -> ǽ 515 | 00e7 1e09 // ç -> ḉ 516 | 00ea 1ebf // ê -> ế 517 | 00b4 0301 // ´ -> ◌́ 518 | 00a4 00b4 // ¤ -> ´ 519 | 00b5 00b4 // µ -> ´ 520 | 017f 00b4 // ſ -> ´ 521 | 00a0 00b4 // -> ´ 522 | 2003 00b4 // -> ´ 523 | 202f 00b4 // -> ´ 524 | 0020 00b4 // -> ´ 525 | 526 | DEADKEY 00b5 527 | 528 | 0041 0391 // A -> Α 529 | 0042 0392 // B -> Β 530 | 0043 03a8 // C -> Ψ 531 | 0044 0394 // D -> Δ 532 | 0045 0395 // E -> Ε 533 | 0046 03a6 // F -> Φ 534 | 0047 0393 // G -> Γ 535 | 0048 0397 // H -> Η 536 | 0049 0399 // I -> Ι 537 | 004a 039e // J -> Ξ 538 | 004b 039a // K -> Κ 539 | 004c 039b // L -> Λ 540 | 004d 039c // M -> Μ 541 | 004e 039d // N -> Ν 542 | 004f 039f // O -> Ο 543 | 0050 03a0 // P -> Π 544 | 0052 03a1 // R -> Ρ 545 | 0053 03a3 // S -> Σ 546 | 0054 03a4 // T -> Τ 547 | 0055 0398 // U -> Θ 548 | 0056 03a9 // V -> Ω 549 | 0058 03a7 // X -> Χ 550 | 0059 03a5 // Y -> Υ 551 | 005a 0396 // Z -> Ζ 552 | 0061 03b1 // a -> α 553 | 0062 03b2 // b -> β 554 | 0063 03c8 // c -> ψ 555 | 0064 03b4 // d -> δ 556 | 0065 03b5 // e -> ε 557 | 0066 03c6 // f -> φ 558 | 0067 03b3 // g -> γ 559 | 0068 03b7 // h -> η 560 | 0069 03b9 // i -> ι 561 | 006a 03be // j -> ξ 562 | 006b 03ba // k -> κ 563 | 006c 03bb // l -> λ 564 | 006d 03bc // m -> μ 565 | 006e 03bd // n -> ν 566 | 006f 03bf // o -> ο 567 | 0070 03c0 // p -> π 568 | 0072 03c1 // r -> ρ 569 | 0073 03c3 // s -> σ 570 | 0074 03c4 // t -> τ 571 | 0075 03b8 // u -> θ 572 | 0076 03c9 // v -> ω 573 | 0077 03c2 // w -> ς 574 | 0078 03c7 // x -> χ 575 | 0079 03c5 // y -> υ 576 | 007a 03b6 // z -> ζ 577 | 00b5 00b5 // µ -> µ 578 | 00a4 00b5 // ¤ -> µ 579 | 017f 00b5 // ſ -> µ 580 | 00a0 00b5 // -> µ 581 | 2003 00b5 // -> µ 582 | 202f 00b5 // -> µ 583 | 0020 00b5 // -> µ 584 | 585 | DEADKEY 00b8 586 | 587 | 0043 00c7 // C -> Ç 588 | 0044 1e10 // D -> Ḑ 589 | 0045 0228 // E -> Ȩ 590 | 0047 0122 // G -> Ģ 591 | 0048 1e28 // H -> Ḩ 592 | 004b 0136 // K -> Ķ 593 | 004c 013b // L -> Ļ 594 | 004e 0145 // N -> Ņ 595 | 0052 0156 // R -> Ŗ 596 | 0053 015e // S -> Ş 597 | 0054 0162 // T -> Ţ 598 | 0063 00e7 // c -> ç 599 | 0064 1e11 // d -> ḑ 600 | 0065 0229 // e -> ȩ 601 | 0067 0123 // g -> ģ 602 | 0068 1e29 // h -> ḩ 603 | 006b 0137 // k -> ķ 604 | 006c 013c // l -> ļ 605 | 006e 0146 // n -> ņ 606 | 0072 0157 // r -> ŗ 607 | 0073 015f // s -> ş 608 | 0074 0163 // t -> ţ 609 | 00b8 0327 // ¸ -> ◌̧ 610 | 00a4 00b8 // ¤ -> ¸ 611 | 00b5 00b8 // µ -> ¸ 612 | 017f 00b8 // ſ -> ¸ 613 | 00a0 00b8 // -> ¸ 614 | 2003 00b8 // -> ¸ 615 | 202f 00b8 // -> ¸ 616 | 0020 00b8 // -> ¸ 617 | 618 | DEADKEY 017f 619 | 620 | 0027 02bc // ' -> ʼ 621 | 0030 00ab // 0 -> « 622 | 0037 203a // 7 -> › 623 | 0038 2039 // 8 -> ‹ 624 | 0039 00bb // 9 -> » 625 | 003c 2264 // < -> ≤ 626 | 003e 2265 // > -> ≥ 627 | 0044 00d0 // D -> Ð 628 | 0045 018f // E -> Ə 629 | 0047 014a // G -> Ŋ 630 | 0049 0130 // I -> İ 631 | 004a 0132 // J -> IJ 632 | 0054 00de // T -> Þ 633 | 0061 00aa // a -> ª 634 | 0064 00f0 // d -> ð 635 | 0065 0259 // e -> ə 636 | 0067 014b // g -> ŋ 637 | 0069 0131 // i -> ı 638 | 006a 0133 // j -> ij 639 | 006f 00ba // o -> º 640 | 0073 017f // s -> ſ 641 | 0074 00fe // t -> þ 642 | 00a0 2003 // ->   643 | 00ab 201e // « -> „ 644 | 00bb 201f // » -> ‟ 645 | 017f 0000 // ſ -> ␀ 646 | 2018 201a // ‘ -> ‚ 647 | 2019 201b // ’ -> ‛ 648 | 202f 2002 // ->   649 | 00a4 0000 // ¤ -> ␀ 650 | 00b5 0000 // µ -> ␀ 651 | 00a0 0000 // -> ␀ 652 | 2003 0000 // -> ␀ 653 | 202f 0000 // -> ␀ 654 | 0020 0000 // -> ␀ 655 | 656 | DEADKEY 02c7 657 | 658 | 0028 208d // ( -> ₍ 659 | 0029 208e // ) -> ₎ 660 | 002b 208a // + -> ₊ 661 | 002d 208b // - -> ₋ 662 | 0030 2080 // 0 -> ₀ 663 | 0031 2081 // 1 -> ₁ 664 | 0032 2082 // 2 -> ₂ 665 | 0033 2083 // 3 -> ₃ 666 | 0034 2084 // 4 -> ₄ 667 | 0035 2085 // 5 -> ₅ 668 | 0036 2086 // 6 -> ₆ 669 | 0037 2087 // 7 -> ₇ 670 | 0038 2088 // 8 -> ₈ 671 | 0039 2089 // 9 -> ₉ 672 | 003d 208c // = -> ₌ 673 | 0041 01cd // A -> Ǎ 674 | 0043 010c // C -> Č 675 | 0044 010e // D -> Ď 676 | 0045 011a // E -> Ě 677 | 0047 01e6 // G -> Ǧ 678 | 0048 021e // H -> Ȟ 679 | 0049 01cf // I -> Ǐ 680 | 004b 01e8 // K -> Ǩ 681 | 004c 013d // L -> Ľ 682 | 004e 0147 // N -> Ň 683 | 004f 01d1 // O -> Ǒ 684 | 0052 0158 // R -> Ř 685 | 0053 0160 // S -> Š 686 | 0054 0164 // T -> Ť 687 | 0055 01d3 // U -> Ǔ 688 | 005a 017d // Z -> Ž 689 | 0061 01ce // a -> ǎ 690 | 0063 010d // c -> č 691 | 0064 010f // d -> ď 692 | 0065 011b // e -> ě 693 | 0067 01e7 // g -> ǧ 694 | 0068 021f // h -> ȟ 695 | 0069 01d0 // i -> ǐ 696 | 006a 01f0 // j -> ǰ 697 | 006b 01e9 // k -> ǩ 698 | 006c 013e // l -> ľ 699 | 006e 0148 // n -> ň 700 | 006f 01d2 // o -> ǒ 701 | 0072 0159 // r -> ř 702 | 0073 0161 // s -> š 703 | 0074 0165 // t -> ť 704 | 0075 01d4 // u -> ǔ 705 | 0078 2093 // x -> ₓ 706 | 007a 017e // z -> ž 707 | 01b7 01ee // Ʒ -> Ǯ 708 | 0292 01ef // ʒ -> ǯ 709 | 02c7 030c // ˇ -> ◌̌ 710 | 00a4 02c7 // ¤ -> ˇ 711 | 00b5 02c7 // µ -> ˇ 712 | 017f 02c7 // ſ -> ˇ 713 | 00a0 02c7 // -> ˇ 714 | 2003 02c7 // -> ˇ 715 | 202f 02c7 // -> ˇ 716 | 0020 02c7 // -> ˇ 717 | 718 | DEADKEY 02cd 719 | 720 | 0042 1e06 // B -> Ḇ 721 | 0044 1e0e // D -> Ḏ 722 | 004b 1e34 // K -> Ḵ 723 | 004c 1e3a // L -> Ḻ 724 | 004e 1e48 // N -> Ṉ 725 | 0052 1e5e // R -> Ṟ 726 | 0054 1e6e // T -> Ṯ 727 | 005a 1e94 // Z -> Ẕ 728 | 0062 1e07 // b -> ḇ 729 | 0064 1e0f // d -> ḏ 730 | 0068 1e96 // h -> ẖ 731 | 006b 1e35 // k -> ḵ 732 | 006c 1e3b // l -> ḻ 733 | 006e 1e49 // n -> ṉ 734 | 0072 1e5f // r -> ṟ 735 | 0074 1e6f // t -> ṯ 736 | 007a 1e95 // z -> ẕ 737 | 02cd 0331 // ˍ -> ◌̱ 738 | 00a4 02cd // ¤ -> ˍ 739 | 00b5 02cd // µ -> ˍ 740 | 017f 02cd // ſ -> ˍ 741 | 00a0 02cd // -> ˍ 742 | 2003 02cd // -> ˍ 743 | 202f 02cd // -> ˍ 744 | 0020 02cd // -> ˍ 745 | 746 | DEADKEY 02d8 747 | 748 | 0041 0102 // A -> Ă 749 | 0045 0114 // E -> Ĕ 750 | 0047 011e // G -> Ğ 751 | 0049 012c // I -> Ĭ 752 | 004f 014e // O -> Ŏ 753 | 0055 016c // U -> Ŭ 754 | 0061 0103 // a -> ă 755 | 0065 0115 // e -> ĕ 756 | 0067 011f // g -> ğ 757 | 0069 012d // i -> ĭ 758 | 006f 014f // o -> ŏ 759 | 0075 016d // u -> ŭ 760 | 00c0 1eb0 // À -> Ằ 761 | 00e0 1eb1 // à -> ằ 762 | 02d8 0306 // ˘ -> ◌̆ 763 | 00a4 02d8 // ¤ -> ˘ 764 | 00b5 02d8 // µ -> ˘ 765 | 017f 02d8 // ſ -> ˘ 766 | 00a0 02d8 // -> ˘ 767 | 2003 02d8 // -> ˘ 768 | 202f 02d8 // -> ˘ 769 | 0020 02d8 // -> ˘ 770 | 771 | DEADKEY 02d9 772 | 773 | 0041 0226 // A -> Ȧ 774 | 0042 1e02 // B -> Ḃ 775 | 0043 010a // C -> Ċ 776 | 0044 1e0a // D -> Ḋ 777 | 0045 0116 // E -> Ė 778 | 0046 1e1e // F -> Ḟ 779 | 0047 0120 // G -> Ġ 780 | 0048 1e22 // H -> Ḣ 781 | 0049 0130 // I -> İ 782 | 004c 013f // L -> Ŀ 783 | 004d 1e40 // M -> Ṁ 784 | 004e 1e44 // N -> Ṅ 785 | 004f 022e // O -> Ȯ 786 | 0050 1e56 // P -> Ṗ 787 | 0052 1e58 // R -> Ṙ 788 | 0053 1e60 // S -> Ṡ 789 | 0054 1e6a // T -> Ṫ 790 | 0057 1e86 // W -> Ẇ 791 | 0058 1e8a // X -> Ẋ 792 | 0059 1e8e // Y -> Ẏ 793 | 005a 017b // Z -> Ż 794 | 0061 0227 // a -> ȧ 795 | 0062 1e03 // b -> ḃ 796 | 0063 010b // c -> ċ 797 | 0064 1e0b // d -> ḋ 798 | 0065 0117 // e -> ė 799 | 0066 1e1f // f -> ḟ 800 | 0067 0121 // g -> ġ 801 | 0068 1e23 // h -> ḣ 802 | 0069 0131 // i -> ı 803 | 006c 0140 // l -> ŀ 804 | 006d 1e41 // m -> ṁ 805 | 006e 1e45 // n -> ṅ 806 | 006f 022f // o -> ȯ 807 | 0070 1e57 // p -> ṗ 808 | 0072 1e59 // r -> ṙ 809 | 0073 1e61 // s -> ṡ 810 | 0074 1e6b // t -> ṫ 811 | 0077 1e87 // w -> ẇ 812 | 0078 1e8b // x -> ẋ 813 | 0079 1e8f // y -> ẏ 814 | 007a 017c // z -> ż 815 | 017f 1e9b // ſ -> ẛ 816 | 02d9 0307 // ˙ -> ◌̇ 817 | 00a4 02d9 // ¤ -> ˙ 818 | 00b5 02d9 // µ -> ˙ 819 | 00a0 02d9 // -> ˙ 820 | 2003 02d9 // -> ˙ 821 | 202f 02d9 // -> ˙ 822 | 0020 02d9 // -> ˙ 823 | 824 | DEADKEY 02da 825 | 826 | 0041 00c5 // A -> Å 827 | 0055 016e // U -> Ů 828 | 0061 00e5 // a -> å 829 | 0075 016f // u -> ů 830 | 0077 1e98 // w -> ẘ 831 | 0079 1e99 // y -> ẙ 832 | 02da 030a // ˚ -> ◌̊ 833 | 00a4 02da // ¤ -> ˚ 834 | 00b5 02da // µ -> ˚ 835 | 017f 02da // ſ -> ˚ 836 | 00a0 02da // -> ˚ 837 | 2003 02da // -> ˚ 838 | 202f 02da // -> ˚ 839 | 0020 02da // -> ˚ 840 | 841 | DEADKEY 02db 842 | 843 | 0041 0104 // A -> Ą 844 | 0045 0118 // E -> Ę 845 | 0049 012e // I -> Į 846 | 004f 01ea // O -> Ǫ 847 | 0055 0172 // U -> Ų 848 | 0061 0105 // a -> ą 849 | 0065 0119 // e -> ę 850 | 0069 012f // i -> į 851 | 006f 01eb // o -> ǫ 852 | 0075 0173 // u -> ų 853 | 02db 0328 // ˛ -> ◌̨ 854 | 00a4 02db // ¤ -> ˛ 855 | 00b5 02db // µ -> ˛ 856 | 017f 02db // ſ -> ˛ 857 | 00a0 02db // -> ˛ 858 | 2003 02db // -> ˛ 859 | 202f 02db // -> ˛ 860 | 0020 02db // -> ˛ 861 | 862 | DEADKEY 02dd 863 | 864 | 004f 0150 // O -> Ő 865 | 0055 0170 // U -> Ű 866 | 006f 0151 // o -> ő 867 | 0075 0171 // u -> ű 868 | 02dd 030b // ˝ -> ◌̋ 869 | 00a4 02dd // ¤ -> ˝ 870 | 00b5 02dd // µ -> ˝ 871 | 017f 02dd // ſ -> ˝ 872 | 00a0 02dd // -> ˝ 873 | 2003 02dd // -> ˝ 874 | 202f 02dd // -> ˝ 875 | 0020 02dd // -> ˝ 876 | 877 | DEADKEY 02f5 878 | 879 | 0041 0200 // A -> Ȁ 880 | 0045 0204 // E -> Ȅ 881 | 0049 0208 // I -> Ȉ 882 | 004f 020c // O -> Ȍ 883 | 0052 0210 // R -> Ȑ 884 | 0055 0214 // U -> Ȕ 885 | 0061 0201 // a -> ȁ 886 | 0065 0205 // e -> ȅ 887 | 0069 0209 // i -> ȉ 888 | 006f 020d // o -> ȍ 889 | 0072 0211 // r -> ȑ 890 | 0075 0215 // u -> ȕ 891 | 02f5 030f // ˵ -> ◌̏ 892 | 00a4 02f5 // ¤ -> ˵ 893 | 00b5 02f5 // µ -> ˵ 894 | 017f 02f5 // ſ -> ˵ 895 | 00a0 02f5 // -> ˵ 896 | 2003 02f5 // -> ˵ 897 | 202f 02f5 // -> ˵ 898 | 0020 02f5 // -> ˵ 899 | 900 | 901 | KEYNAME 902 | 903 | 01 "Échap." 904 | 0e "Ret.Arr." 905 | 0f "Tab" 906 | 1c "Entrée" 907 | 1d "Ctrl" 908 | 2a "Maj" 909 | 36 "Maj Droite" 910 | 37 "* (Pavé Num.)" 911 | 38 "Alt" 912 | 39 "Espace" 913 | 3a "Verr. Maj" 914 | 3b "F1" 915 | 3c "F2" 916 | 3d "F3" 917 | 3e "F4" 918 | 3f "F5" 919 | 40 "F6" 920 | 41 "F7" 921 | 42 "F8" 922 | 43 "F9" 923 | 44 "F10" 924 | 45 "Pause" 925 | 46 "Défil." 926 | 47 "7 (Pavé Num.)" 927 | 48 "8 (Pavé Num.)" 928 | 49 "9 (Pavé Num.)" 929 | 4a "- (Pavé Num.)" 930 | 4b "4 (Pavé Num.)" 931 | 4c "5 (Pavé Num.)" 932 | 4d "6 (Pavé Num.)" 933 | 4e "+ (Pavé Num.)" 934 | 4f "1 (Pavé Num.)" 935 | 50 "2 (Pavé Num.)" 936 | 51 "3 (Pavé Num.)" 937 | 52 "0 (Pavé Num.)" 938 | 53 ". (Pavé Num.)" 939 | 57 "F11" 940 | 58 "F12" 941 | 7c "F13" 942 | 7d "F14" 943 | 7e "F15" 944 | 7f "F16" 945 | 80 "F17" 946 | 81 "F18" 947 | 82 "F19" 948 | 83 "F20" 949 | 84 "F21" 950 | 85 "F22" 951 | 86 "F23" 952 | 87 "F24" 953 | 954 | KEYNAME_EXT 955 | 956 | 1c "Entrée (Pavé Num.)" 957 | 1d "Ctrl Droite" 958 | 35 "/ (Pavé Num.)" 959 | 37 "Impr. Écran" 960 | 38 "AltGr" 961 | 45 "Verr. Num." 962 | 46 "Attn." 963 | 47 "Origine" 964 | 48 "Haut" 965 | 49 "Page Préc." 966 | 4b "Gauche" 967 | 4d "Droite" 968 | 4f "Fin" 969 | 50 "Bas" 970 | 51 "Page Suiv." 971 | 52 "Insér." 972 | 53 "Suppr." 973 | 54 <00> 974 | 56 "Aide" 975 | 5b "Windows Gauche" 976 | 5c "Windows Droite" 977 | 5d "Application" 978 | 979 | KEYNAME_DEAD 980 | 981 | 002c "COMMA BELOW" 982 | 002d "SHORT STROKE OVERLAY" 983 | 002e "DOT BELOW" 984 | 002f "SHORT SOLIDUS OVERLAY" 985 | 005e "CIRCUMFLEX ACCENT" 986 | 0060 "GRAVE ACCENT" 987 | 007e "TILDE" 988 | 00a4 "CURRENCY SIGN" 989 | 00a8 "DIAERESIS" 990 | 00af "MACRON" 991 | 00b0 "INVERTED BREVE" 992 | 00b4 "ACUTE ACCENT" 993 | 00b5 "MICRO SIGN" 994 | 00b8 "CEDILLA" 995 | 017f "LATIN SMALL LETTER LONG S" 996 | 02c7 "CARON" 997 | 02cd "MACRON BELOW" 998 | 02d8 "BREVE" 999 | 02d9 "DOT ABOVE" 1000 | 02da "RING ABOVE" 1001 | 02db "OGONEK" 1002 | 02dd "DOUBLE ACUTE ACCENT" 1003 | 02f5 "DOUBLE GRAVE ACCENT" 1004 | 1005 | 1006 | DESCRIPTIONS 1007 | 1008 | 0409 French - AZERTY NF Z71-300 1009 | 040c Français - AZERTY NF Z71-300 1010 | 1011 | LANGUAGENAMES 1012 | 1013 | 0409 French (France) 1014 | 040c Français 1015 | 1016 | ENDKBD 1017 | -------------------------------------------------------------------------------- /KBFRZ71.klc.tpl: -------------------------------------------------------------------------------- 1 | KBD KBFRZ71 "Français - AZERTY NF Z71-300" 2 | 3 | COPYRIGHT "© 2019 Creative Commons" 4 | 5 | COMPANY "Creative Commons" 6 | 7 | LOCALENAME "fr-FR" 8 | 9 | LOCALEID "0000040c" 10 | 11 | VERSION 1.0 12 | 13 | ATTRIBUTES 14 | ALTGR 15 | 16 | SHIFTSTATE 17 | 18 | 0 //Column 4 19 | 1 //Column 5 : Shft 20 | 2 //Column 6 : Ctrl 21 | 3 //Column 7 : Shft Ctrl 22 | 6 //Column 8 : Ctrl Alt 23 | 7 //Column 9 : Shft Ctrl Alt 24 | 25 | LAYOUT ;an extra '@' at the end is a dead key 26 | 27 | //SC VK_ Cap 4 5 6 7 8 9 28 | //-- ---- ---- ---- ---- ---- ---- ---- ---- 29 | 30 | 02 1 SGCap 00e0 1 -1 -1 00a7 00c0 // à 1 § À 31 | -1 -1 0 00c0 1 // À 1 32 | 03 2 SGCap 00e9 2 -1 -1 00b4@ 00c9 // é 2 ´ É 33 | -1 -1 0 00c9 2 // É 2 34 | 04 3 SGCap 00e8 3 -1 -1 0060@ 00c8 // è 3 ` È 35 | -1 -1 0 00c8 3 // È 3 36 | 05 4 SGCap 00ea 4 -1 -1 0026 00ca // ê 4 & Ê 37 | -1 -1 0 00ca 4 // Ê 4 38 | 06 5 0 0028 5 -1 -1 005b 02dd@ // ( 5 [ 39 | 07 6 0 0029 6 -1 -1 005d 02f5@ // ) 6 ] 40 | 08 7 0 2018 7 -1 -1 00af@ -1 // ‘ 7 ¯ 41 | 09 8 0 2019 8 -1 -1 005f 2014 // ’ 8 _ — 42 | 0a 9 0 00ab 9 -1 -1 201c 2039 // « 9 “ ‹ 43 | 0b 0 0 00bb 0 -1 0000 201d 203a // » 0 ” › 44 | 0c OEM_4 0 0027 0022 -1 -1 00b0 02da@ // ' " ° ˚ 45 | 0d OEM_6 0 005e@ 00a8@ -1 001e 02c7@ -1 // ^ ¨ ˇ 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | DESCRIPTIONS 55 | 56 | 0409 French - AZERTY NF Z71-300 57 | 040c Français - AZERTY NF Z71-300 58 | 59 | LANGUAGENAMES 60 | 61 | 0409 French (France) 62 | 040c Français 63 | 64 | ENDKBD 65 | -------------------------------------------------------------------------------- /KBFRZ71N.klc: -------------------------------------------------------------------------------- 1 | KBD KBFRZ71N "Français - AZERTY NF Z71-300 (Numérique)" 2 | 3 | COPYRIGHT "© 2019 Creative Commons" 4 | 5 | COMPANY "Creative Commons" 6 | 7 | LOCALENAME "fr-FR" 8 | 9 | LOCALEID "0000040c" 10 | 11 | VERSION 1.0 12 | 13 | ATTRIBUTES 14 | ALTGR 15 | 16 | SHIFTSTATE 17 | 18 | 0 //Column 4 19 | 1 //Column 5 : Shft 20 | 2 //Column 6 : Ctrl 21 | 3 //Column 7 : Shft Ctrl 22 | 6 //Column 8 : Ctrl Alt 23 | 7 //Column 9 : Shft Ctrl Alt 24 | 25 | LAYOUT ;an extra '@' at the end is a dead key 26 | 27 | //SC VK_ Cap 4 5 6 7 8 9 28 | //-- ---- ---- ---- ---- ---- ---- ---- ---- 29 | 30 | 02 1 SGCap 00e0 1 -1 -1 00a7 00c0 // à 1 § À 31 | -1 -1 0 1 00e0 // 1 à 32 | 03 2 SGCap 00e9 2 -1 -1 00b4@ 00c9 // é 2 ´ É 33 | -1 -1 0 2 00e9 // 2 é 34 | 04 3 SGCap 00e8 3 -1 -1 0060@ 00c8 // è 3 ` È 35 | -1 -1 0 3 00e8 // 3 è 36 | 05 4 SGCap 00ea 4 -1 -1 0026 00ca // ê 4 & Ê 37 | -1 -1 0 4 00ea // 4 ê 38 | 06 5 SGCap 0028 5 -1 -1 005b 02dd@ // ( 5 [ 39 | -1 -1 0 5 0028 // 5 ( 40 | 07 6 SGCap 0029 6 -1 -1 005d 02f5@ // ) 6 ] 41 | -1 -1 0 6 0029 // 5 ) 42 | 08 7 SGCap 2018 7 -1 -1 00af@ -1 // ‘ 7 ¯ 43 | -1 -1 0 7 2018 // 7 ‘ 44 | 09 8 SGCap 2019 8 -1 -1 005f 2014 // ’ 8 _ — 45 | -1 -1 0 8 2019 // 8 ’ 46 | 0a 9 SGCap 00ab 9 -1 -1 201c 2039 // « 9 “ ‹ 47 | -1 -1 0 9 00ab // 9 « 48 | 0b 0 SGCap 00bb 0 -1 0000 201d 203a // » 0 ” › 49 | -1 -1 0 0 00bb // 0 » 50 | 0c OEM_4 0 0027 0022 -1 -1 00b0 02da@ // ' " ° ˚ 51 | 0d OEM_6 0 005e@ 00a8@ -1 001e 02c7@ -1 // ^ ¨ ˇ 52 | 53 | 10 A 5 a A -1 -1 00e6 00c6 // a A æ Æ 54 | 11 Z 1 z Z -1 -1 00a3 -1 // z Z £ 55 | 12 E 1 e E -1 -1 20ac -1 // e E € 56 | 13 R 1 r R -1 -1 00ae -1 // r R ® 57 | 14 T 1 t T -1 -1 007b 2122 // t T { ™ 58 | 15 Y 1 y Y -1 -1 007d -1 // y Y } 59 | 16 U 5 u U -1 -1 00f9 00d9 // u U ù Ù 60 | 18 O 5 o O -1 -1 0153 0152 // o O œ Œ 61 | 19 P 1 p P -1 -1 0025 2030 // p P % ‰ 62 | 1a OEM_MINUS 0 002d 2013 001b 001f 2212 2011 // - – − ‑ 63 | 1b OEM_PLUS 0 002b 00b1 001d -1 2020 2021 // + ± † ‡ 64 | 1e Q 5 q Q -1 -1 03b8 03f4 // q Q θ ϴ 65 | 1f S 5 s S -1 -1 00df 1e9e // s S ß ẞ 66 | 20 D 1 d D -1 -1 0024 -1 // d D $ 67 | 21 F 1 f F -1 -1 00a4@ -1 // f F ¤ 68 | 22 G 1 g G -1 -1 00b5@ -1 // g G µ 69 | 23 H 1 h H -1 -1 017f@ 02cd@ // h H 70 | 24 J 1 j J -1 -1 -1 -1 // j J 71 | 26 L 1 l L -1 -1 007c -1 // l L | 72 | 27 M 1 m M -1 -1 221e -1 // m M ∞ 73 | 28 OEM_3 0 002f 005c -1 -1 00f7 221a // / \ ÷ √ 74 | 2b OEM_5 0 002a 00bd 001c -1 00d7 00bc // * ½ × ¼ 75 | 56 OEM_102 0 003c 003e 001c -1 2a7d 2a7e // < > ⩽ ⩾ 76 | 2c W 5 w W -1 -1 0292 01b7 // w W ʒ Ʒ 77 | 2d X 1 x X -1 -1 00a9 -1 // x X © 78 | 2e C 5 c C -1 -1 00e7 00c7 // c C ç Ç 79 | 2f V 1 v V -1 -1 00b8@ 02db@ // v V ¸ ˛ 80 | 30 B 1 b B -1 -1 002d@ -1 // b B 81 | 31 N 1 n N -1 -1 007e@ -1 // n N ~ 82 | 32 OEM_PERIOD 0 002e 003f -1 -1 00bf -1 // . ? ¿ 83 | 33 OEM_COMMA 0 002c 0021 -1 -1 00a1 002c@ // , ! ¡ , 84 | 34 OEM_2 0 003a 2026 -1 -1 00b7 -1 // : … · 85 | 35 OEM_8 0 003b 003d -1 -1 2243 2260 // ; = ≃ ≠ 86 | 39 SPACE 0 0020 0020 2003 -1 00a0 202f //     87 | 53 DECIMAL 0 002c 002c -1 -1 -1 -1 // , , 88 | 89 | // The following three keys are specifically set last in the layout 90 | // to prevent the Win32 VkKeyScanEx function to report an incorrect 91 | // scan code for the '.', '/' and '°' characters that double as 92 | // 93 | // See https://github.com/springcomp/optimized-azerty-win/issues/73. 94 | 95 | 29 OEM_7 0 0040 0023 -1 -1 02d8@ 00b0@ // @ # ˘ 96 | 17 I 1 i I -1 -1 02d9@ 002e@ // i I ˙ . 97 | 25 K 1 k K -1 -1 002f@ -1 // k K / 98 | 99 | DEADKEY 002c 100 | 101 | 0053 0218 // S -> Ș 102 | 0054 021a // T -> Ț 103 | 0073 0219 // s -> ș 104 | 0074 021b // t -> ț 105 | 002c 0326 // , -> ◌̦ 106 | 00a4 002c // ¤ -> , 107 | 00b5 002c // µ -> , 108 | 017f 002c // ſ -> , 109 | 00a0 002c // -> , 110 | 2003 002c // -> , 111 | 202f 002c // -> , 112 | 0020 002c // -> , 113 | 114 | DEADKEY 002d 115 | 116 | 0042 0243 // B -> Ƀ 117 | 0044 0110 // D -> Đ 118 | 0047 01e4 // G -> Ǥ 119 | 0048 0126 // H -> Ħ 120 | 0049 0197 // I -> Ɨ 121 | 004a 0248 // J -> Ɉ 122 | 004c 023d // L -> Ƚ 123 | 0052 024c // R -> Ɍ 124 | 0054 0166 // T -> Ŧ 125 | 0055 0244 // U -> Ʉ 126 | 0059 024e // Y -> Ɏ 127 | 005a 01b5 // Z -> Ƶ 128 | 0062 0180 // b -> ƀ 129 | 0064 0111 // d -> đ 130 | 0067 01e5 // g -> ǥ 131 | 0068 0127 // h -> ħ 132 | 006a 0249 // j -> ɉ 133 | 006c 019a // l -> ƚ 134 | 0072 024d // r -> ɍ 135 | 0074 0167 // t -> ŧ 136 | 0079 024f // y -> ɏ 137 | 007a 01b6 // z -> ƶ 138 | 002d 0335 // - -> ◌̵ 139 | 00a4 002d // ¤ -> - 140 | 00b5 002d // µ -> - 141 | 017f 002d // ſ -> - 142 | 00a0 002d // -> - 143 | 2003 002d // -> - 144 | 202f 002d // -> - 145 | 0020 002d // -> - 146 | 147 | DEADKEY 002e 148 | 149 | 0041 1ea0 // A -> Ạ 150 | 0042 1e04 // B -> Ḅ 151 | 0044 1e0c // D -> Ḍ 152 | 0045 1eb8 // E -> Ẹ 153 | 0048 1e24 // H -> Ḥ 154 | 0049 1eca // I -> Ị 155 | 004b 1e32 // K -> Ḳ 156 | 004c 1e36 // L -> Ḷ 157 | 004d 1e42 // M -> Ṃ 158 | 004e 1e46 // N -> Ṇ 159 | 004f 1ecc // O -> Ọ 160 | 0052 1e5a // R -> Ṛ 161 | 0053 1e62 // S -> Ṣ 162 | 0054 1e6c // T -> Ṭ 163 | 0055 1ee4 // U -> Ụ 164 | 0056 1e7e // V -> Ṿ 165 | 0057 1e88 // W -> Ẉ 166 | 0059 1ef4 // Y -> Ỵ 167 | 005a 1e92 // Z -> Ẓ 168 | 0061 1ea1 // a -> ạ 169 | 0062 1e05 // b -> ḅ 170 | 0064 1e0d // d -> ḍ 171 | 0065 1eb9 // e -> ẹ 172 | 0068 1e25 // h -> ḥ 173 | 0069 1ecb // i -> ị 174 | 006b 1e33 // k -> ḳ 175 | 006c 1e37 // l -> ḷ 176 | 006d 1e43 // m -> ṃ 177 | 006e 1e47 // n -> ṇ 178 | 006f 1ecd // o -> ọ 179 | 0072 1e5b // r -> ṛ 180 | 0073 1e63 // s -> ṣ 181 | 0074 1e6d // t -> ṭ 182 | 0075 1ee5 // u -> ụ 183 | 0076 1e7f // v -> ṿ 184 | 0077 1e89 // w -> ẉ 185 | 0079 1ef5 // y -> ỵ 186 | 007a 1e93 // z -> ẓ 187 | 00ca 1ec6 // Ê -> Ệ 188 | 00ea 1ec7 // ê -> ệ 189 | 002e 0323 // . -> ◌̣ 190 | 00a4 002e // ¤ -> . 191 | 00b5 002e // µ -> . 192 | 017f 002e // ſ -> . 193 | 00a0 002e // -> . 194 | 2003 002e // -> . 195 | 202f 002e // -> . 196 | 0020 002e // -> . 197 | 198 | DEADKEY 002f 199 | 200 | 003c 226e // < -> ≮ 201 | 003d 2260 // = -> ≠ 202 | 003e 226f // > -> ≯ 203 | 0041 023a // A -> Ⱥ 204 | 0043 023b // C -> Ȼ 205 | 0045 0246 // E -> Ɇ 206 | 004c 0141 // L -> Ł 207 | 004f 00d8 // O -> Ø 208 | 0054 023e // T -> Ⱦ 209 | 0063 023c // c -> ȼ 210 | 0065 0247 // e -> ɇ 211 | 006c 0142 // l -> ł 212 | 006f 00f8 // o -> ø 213 | 017f 1e9c // ſ -> ẜ 214 | 2243 2244 // ≃ -> ≄ 215 | 2a7d 2270 // ⩽ -> ≰ 216 | 2a7e 2271 // ⩾ -> ≱ 217 | 002f 0337 // / -> ◌̷ 218 | 00a4 002f // ¤ -> / 219 | 00b5 002f // µ -> / 220 | 00a0 002f // -> / 221 | 2003 002f // -> / 222 | 202f 002f // -> / 223 | 0020 002f // -> / 224 | 225 | DEADKEY 005e 226 | 227 | 0028 207d // ( -> ⁽ 228 | 0029 207e // ) -> ⁾ 229 | 002b 207a // + -> ⁺ 230 | 002d 207b // - -> ⁻ 231 | 0030 2070 // 0 -> ⁰ 232 | 0031 00b9 // 1 -> ¹ 233 | 0032 00b2 // 2 -> ² 234 | 0033 00b3 // 3 -> ³ 235 | 0034 2074 // 4 -> ⁴ 236 | 0035 2075 // 5 -> ⁵ 237 | 0036 2076 // 6 -> ⁶ 238 | 0037 2077 // 7 -> ⁷ 239 | 0038 2078 // 8 -> ⁸ 240 | 0039 2079 // 9 -> ⁹ 241 | 003d 207c // = -> ⁼ 242 | 0041 00c2 // A ->  243 | 0043 0108 // C -> Ĉ 244 | 0045 00ca // E -> Ê 245 | 0047 011c // G -> Ĝ 246 | 0048 0124 // H -> Ĥ 247 | 0049 00ce // I -> Î 248 | 004a 0134 // J -> Ĵ 249 | 004f 00d4 // O -> Ô 250 | 0053 015c // S -> Ŝ 251 | 0055 00db // U -> Û 252 | 0057 0174 // W -> Ŵ 253 | 0059 0176 // Y -> Ŷ 254 | 005a 1e90 // Z -> Ẑ 255 | 0061 00e2 // a -> â 256 | 0063 0109 // c -> ĉ 257 | 0065 00ea // e -> ê 258 | 0067 011d // g -> ĝ 259 | 0068 0125 // h -> ĥ 260 | 0069 00ee // i -> î 261 | 006a 0135 // j -> ĵ 262 | 006f 00f4 // o -> ô 263 | 0073 015d // s -> ŝ 264 | 0075 00fb // u -> û 265 | 0077 0175 // w -> ŵ 266 | 0078 02e3 // x -> ˣ 267 | 0079 0177 // y -> ŷ 268 | 007a 1e91 // z -> ẑ 269 | 00c0 1ea6 // À -> Ầ 270 | 00c8 1ec0 // È -> Ề 271 | 00c9 1ebe // É -> Ế 272 | 00e0 1ea7 // à -> ầ 273 | 00e8 1ec1 // è -> ề 274 | 00e9 1ebf // é -> ế 275 | 2212 207b // − -> ⁻ 276 | 005e 0302 // ^ -> ◌̂ 277 | 00a4 005e // ¤ -> ^ 278 | 00b5 005e // µ -> ^ 279 | 017f 005e // ſ -> ^ 280 | 00a0 005e // -> ^ 281 | 2003 005e // -> ^ 282 | 202f 005e // -> ^ 283 | 0020 005e // -> ^ 284 | 285 | DEADKEY 0060 286 | 287 | 0041 00c0 // A -> À 288 | 0045 00c8 // E -> È 289 | 0049 00cc // I -> Ì 290 | 004e 01f8 // N -> Ǹ 291 | 004f 00d2 // O -> Ò 292 | 0055 00d9 // U -> Ù 293 | 0057 1e80 // W -> Ẁ 294 | 0059 1ef2 // Y -> Ỳ 295 | 0061 00e0 // a -> à 296 | 0065 00e8 // e -> è 297 | 0069 00ec // i -> ì 298 | 006e 01f9 // n -> ǹ 299 | 006f 00f2 // o -> ò 300 | 0075 00f9 // u -> ù 301 | 0077 1e81 // w -> ẁ 302 | 0079 1ef3 // y -> ỳ 303 | 00ca 1ec0 // Ê -> Ề 304 | 00ea 1ec1 // ê -> ề 305 | 0060 0300 // ` -> ◌̀ 306 | 00a4 0060 // ¤ -> ` 307 | 00b5 0060 // µ -> ` 308 | 017f 0060 // ſ -> ` 309 | 00a0 0060 // -> ` 310 | 2003 0060 // -> ` 311 | 202f 0060 // -> ` 312 | 0020 0060 // -> ` 313 | 314 | DEADKEY 007e 315 | 316 | 002d 2243 // - -> ≃ 317 | 003c 2272 // < -> ≲ 318 | 003d 2248 // = -> ≈ 319 | 003e 2273 // > -> ≳ 320 | 0041 00c3 // A -> à 321 | 0045 1ebc // E -> Ẽ 322 | 0049 0128 // I -> Ĩ 323 | 004e 00d1 // N -> Ñ 324 | 004f 00d5 // O -> Õ 325 | 0055 0168 // U -> Ũ 326 | 0056 1e7c // V -> Ṽ 327 | 0059 1ef8 // Y -> Ỹ 328 | 0061 00e3 // a -> ã 329 | 0065 1ebd // e -> ẽ 330 | 0069 0129 // i -> ĩ 331 | 006e 00f1 // n -> ñ 332 | 006f 00f5 // o -> õ 333 | 0075 0169 // u -> ũ 334 | 0076 1e7d // v -> ṽ 335 | 0079 1ef9 // y -> ỹ 336 | 00ca 1ec4 // Ê -> Ễ 337 | 00ea 1ec5 // ê -> ễ 338 | 007e 0303 // ~ -> ◌̃ 339 | 00a4 007e // ¤ -> ~ 340 | 00b5 007e // µ -> ~ 341 | 017f 007e // ſ -> ~ 342 | 00a0 007e // -> ~ 343 | 2003 007e // -> ~ 344 | 202f 007e // -> ~ 345 | 0020 007e // -> ~ 346 | 347 | DEADKEY 00a4 348 | 349 | 0025 20b0 // % -> ₰ 350 | 0041 20b3 // A -> ₳ 351 | 0042 0e3f // B -> ฿ 352 | 0043 20b5 // C -> ₵ 353 | 0044 20af // D -> ₯ 354 | 0046 20a3 // F -> ₣ 355 | 004c 20a4 // L -> ₤ 356 | 004d 2133 // M -> ℳ 357 | 0050 20a7 // P -> ₧ 358 | 0052 20b9 // R -> ₹ 359 | 0053 20b7 // S -> ₷ 360 | 0054 20ae // T -> ₮ 361 | 0062 20bf // b -> ₿ 362 | 0063 00a2 // c -> ¢ 363 | 0064 20ab // d -> ₫ 364 | 0065 20a0 // e -> ₠ 365 | 0066 0192 // f -> ƒ 366 | 0067 20b2 // g -> ₲ 367 | 0068 20b4 // h -> ₴ 368 | 006b 20ad // k -> ₭ 369 | 006c 20ba // l -> ₺ 370 | 006d 20a5 // m -> ₥ 371 | 006e 20a6 // n -> ₦ 372 | 0070 20b1 // p -> ₱ 373 | 0072 20bd // r -> ₽ 374 | 0073 20aa // s -> ₪ 375 | 0074 20b8 // t -> ₸ 376 | 0077 20a9 // w -> ₩ 377 | 0079 00a5 // y -> ¥ 378 | 007c 20be // | -> ₾ 379 | 00a4 00a4 // ¤ -> ¤ 380 | 00ae 20a8 // ® -> ₨ 381 | 00c7 20a1 // Ç -> ₡ 382 | 00e7 20a2 // ç -> ₢ 383 | 221e 20bc // ∞ -> ₼ 384 | 00b5 00a4 // µ -> ¤ 385 | 017f 00a4 // ſ -> ¤ 386 | 00a0 00a4 // -> ¤ 387 | 2003 00a4 // -> ¤ 388 | 202f 00a4 // -> ¤ 389 | 0020 00a4 // -> ¤ 390 | 391 | DEADKEY 00a8 392 | 393 | 0041 00c4 // A -> Ä 394 | 0045 00cb // E -> Ë 395 | 0048 1e26 // H -> Ḧ 396 | 0049 00cf // I -> Ï 397 | 004f 00d6 // O -> Ö 398 | 0055 00dc // U -> Ü 399 | 0057 1e84 // W -> Ẅ 400 | 0058 1e8c // X -> Ẍ 401 | 0059 0178 // Y -> Ÿ 402 | 0061 00e4 // a -> ä 403 | 0065 00eb // e -> ë 404 | 0068 1e27 // h -> ḧ 405 | 0069 00ef // i -> ï 406 | 006f 00f6 // o -> ö 407 | 0074 1e97 // t -> ẗ 408 | 0075 00fc // u -> ü 409 | 0077 1e85 // w -> ẅ 410 | 0078 1e8d // x -> ẍ 411 | 0079 00ff // y -> ÿ 412 | 00d9 01db // Ù -> Ǜ 413 | 00f9 01dc // ù -> ǜ 414 | 00a8 0308 // ¨ -> ◌̈ 415 | 00a4 00a8 // ¤ -> ¨ 416 | 00b5 00a8 // µ -> ¨ 417 | 017f 00a8 // ſ -> ¨ 418 | 00a0 00a8 // -> ¨ 419 | 2003 00a8 // -> ¨ 420 | 202f 00a8 // -> ¨ 421 | 0020 00a8 // -> ¨ 422 | 423 | DEADKEY 00af 424 | 425 | 0041 0100 // A -> Ā 426 | 0045 0112 // E -> Ē 427 | 0047 1e20 // G -> Ḡ 428 | 0049 012a // I -> Ī 429 | 004f 014c // O -> Ō 430 | 0055 016a // U -> Ū 431 | 0059 0232 // Y -> Ȳ 432 | 0061 0101 // a -> ā 433 | 0065 0113 // e -> ē 434 | 0067 1e21 // g -> ḡ 435 | 0069 012b // i -> ī 436 | 006f 014d // o -> ō 437 | 0075 016b // u -> ū 438 | 0079 0233 // y -> ȳ 439 | 00c6 01e2 // Æ -> Ǣ 440 | 00c8 1e14 // È -> Ḕ 441 | 00c9 1e16 // É -> Ḗ 442 | 00e6 01e3 // æ -> ǣ 443 | 00e8 1e15 // è -> ḕ 444 | 00e9 1e17 // é -> ḗ 445 | 00af 0304 // ¯ -> ◌̄ 446 | 00a4 00af // ¤ -> ¯ 447 | 00b5 00af // µ -> ¯ 448 | 017f 00af // ſ -> ¯ 449 | 00a0 00af // -> ¯ 450 | 2003 00af // -> ¯ 451 | 202f 00af // -> ¯ 452 | 0020 00af // -> ¯ 453 | 454 | DEADKEY 00b0 455 | 456 | 0041 0202 // A -> Ȃ 457 | 0045 0206 // E -> Ȇ 458 | 0049 020a // I -> Ȋ 459 | 004f 020e // O -> Ȏ 460 | 0052 0212 // R -> Ȓ 461 | 0055 0216 // U -> Ȗ 462 | 0061 0203 // a -> ȃ 463 | 0065 0207 // e -> ȇ 464 | 0069 020b // i -> ȋ 465 | 006f 020f // o -> ȏ 466 | 0072 0213 // r -> ȓ 467 | 0075 0217 // u -> ȗ 468 | 00c0 1ea6 // À -> Ầ 469 | 00c8 1ec0 // È -> Ề 470 | 00e0 1ea7 // à -> ầ 471 | 00e8 1ec1 // è -> ề 472 | 00b0 0311 // ° -> ◌̑ 473 | 00a4 00b0 // ¤ -> ° 474 | 00b5 00b0 // µ -> ° 475 | 017f 00b0 // ſ -> ° 476 | 00a0 00b0 // -> ° 477 | 2003 00b0 // -> ° 478 | 202f 00b0 // -> ° 479 | 0020 00b0 // -> ° 480 | 481 | DEADKEY 00b4 482 | 483 | 0041 00c1 // A -> Á 484 | 0043 0106 // C -> Ć 485 | 0045 00c9 // E -> É 486 | 0047 01f4 // G -> Ǵ 487 | 0049 00cd // I -> Í 488 | 004b 1e30 // K -> Ḱ 489 | 004c 0139 // L -> Ĺ 490 | 004d 1e3e // M -> Ḿ 491 | 004e 0143 // N -> Ń 492 | 004f 00d3 // O -> Ó 493 | 0050 1e54 // P -> Ṕ 494 | 0052 0154 // R -> Ŕ 495 | 0053 015a // S -> Ś 496 | 0055 00da // U -> Ú 497 | 0057 1e82 // W -> Ẃ 498 | 0059 00dd // Y -> Ý 499 | 005a 0179 // Z -> Ź 500 | 0061 00e1 // a -> á 501 | 0063 0107 // c -> ć 502 | 0065 00e9 // e -> é 503 | 0067 01f5 // g -> ǵ 504 | 0069 00ed // i -> í 505 | 006b 1e31 // k -> ḱ 506 | 006c 013a // l -> ĺ 507 | 006d 1e3f // m -> ḿ 508 | 006e 0144 // n -> ń 509 | 006f 00f3 // o -> ó 510 | 0070 1e55 // p -> ṕ 511 | 0072 0155 // r -> ŕ 512 | 0073 015b // s -> ś 513 | 0075 00fa // u -> ú 514 | 0077 1e83 // w -> ẃ 515 | 0079 00fd // y -> ý 516 | 007a 017a // z -> ź 517 | 00c6 01fc // Æ -> Ǽ 518 | 00c7 1e08 // Ç -> Ḉ 519 | 00ca 1ebe // Ê -> Ế 520 | 00e6 01fd // æ -> ǽ 521 | 00e7 1e09 // ç -> ḉ 522 | 00ea 1ebf // ê -> ế 523 | 00b4 0301 // ´ -> ◌́ 524 | 00a4 00b4 // ¤ -> ´ 525 | 00b5 00b4 // µ -> ´ 526 | 017f 00b4 // ſ -> ´ 527 | 00a0 00b4 // -> ´ 528 | 2003 00b4 // -> ´ 529 | 202f 00b4 // -> ´ 530 | 0020 00b4 // -> ´ 531 | 532 | DEADKEY 00b5 533 | 534 | 0041 0391 // A -> Α 535 | 0042 0392 // B -> Β 536 | 0043 03a8 // C -> Ψ 537 | 0044 0394 // D -> Δ 538 | 0045 0395 // E -> Ε 539 | 0046 03a6 // F -> Φ 540 | 0047 0393 // G -> Γ 541 | 0048 0397 // H -> Η 542 | 0049 0399 // I -> Ι 543 | 004a 039e // J -> Ξ 544 | 004b 039a // K -> Κ 545 | 004c 039b // L -> Λ 546 | 004d 039c // M -> Μ 547 | 004e 039d // N -> Ν 548 | 004f 039f // O -> Ο 549 | 0050 03a0 // P -> Π 550 | 0052 03a1 // R -> Ρ 551 | 0053 03a3 // S -> Σ 552 | 0054 03a4 // T -> Τ 553 | 0055 0398 // U -> Θ 554 | 0056 03a9 // V -> Ω 555 | 0058 03a7 // X -> Χ 556 | 0059 03a5 // Y -> Υ 557 | 005a 0396 // Z -> Ζ 558 | 0061 03b1 // a -> α 559 | 0062 03b2 // b -> β 560 | 0063 03c8 // c -> ψ 561 | 0064 03b4 // d -> δ 562 | 0065 03b5 // e -> ε 563 | 0066 03c6 // f -> φ 564 | 0067 03b3 // g -> γ 565 | 0068 03b7 // h -> η 566 | 0069 03b9 // i -> ι 567 | 006a 03be // j -> ξ 568 | 006b 03ba // k -> κ 569 | 006c 03bb // l -> λ 570 | 006d 03bc // m -> μ 571 | 006e 03bd // n -> ν 572 | 006f 03bf // o -> ο 573 | 0070 03c0 // p -> π 574 | 0072 03c1 // r -> ρ 575 | 0073 03c3 // s -> σ 576 | 0074 03c4 // t -> τ 577 | 0075 03b8 // u -> θ 578 | 0076 03c9 // v -> ω 579 | 0077 03c2 // w -> ς 580 | 0078 03c7 // x -> χ 581 | 0079 03c5 // y -> υ 582 | 007a 03b6 // z -> ζ 583 | 00b5 00b5 // µ -> µ 584 | 00a4 00b5 // ¤ -> µ 585 | 017f 00b5 // ſ -> µ 586 | 00a0 00b5 // -> µ 587 | 2003 00b5 // -> µ 588 | 202f 00b5 // -> µ 589 | 0020 00b5 // -> µ 590 | 591 | DEADKEY 00b8 592 | 593 | 0043 00c7 // C -> Ç 594 | 0044 1e10 // D -> Ḑ 595 | 0045 0228 // E -> Ȩ 596 | 0047 0122 // G -> Ģ 597 | 0048 1e28 // H -> Ḩ 598 | 004b 0136 // K -> Ķ 599 | 004c 013b // L -> Ļ 600 | 004e 0145 // N -> Ņ 601 | 0052 0156 // R -> Ŗ 602 | 0053 015e // S -> Ş 603 | 0054 0162 // T -> Ţ 604 | 0063 00e7 // c -> ç 605 | 0064 1e11 // d -> ḑ 606 | 0065 0229 // e -> ȩ 607 | 0067 0123 // g -> ģ 608 | 0068 1e29 // h -> ḩ 609 | 006b 0137 // k -> ķ 610 | 006c 013c // l -> ļ 611 | 006e 0146 // n -> ņ 612 | 0072 0157 // r -> ŗ 613 | 0073 015f // s -> ş 614 | 0074 0163 // t -> ţ 615 | 00b8 0327 // ¸ -> ◌̧ 616 | 00a4 00b8 // ¤ -> ¸ 617 | 00b5 00b8 // µ -> ¸ 618 | 017f 00b8 // ſ -> ¸ 619 | 00a0 00b8 // -> ¸ 620 | 2003 00b8 // -> ¸ 621 | 202f 00b8 // -> ¸ 622 | 0020 00b8 // -> ¸ 623 | 624 | DEADKEY 017f 625 | 626 | 0027 02bc // ' -> ʼ 627 | 0030 00ab // 0 -> « 628 | 0037 203a // 7 -> › 629 | 0038 2039 // 8 -> ‹ 630 | 0039 00bb // 9 -> » 631 | 003c 2264 // < -> ≤ 632 | 003e 2265 // > -> ≥ 633 | 0044 00d0 // D -> Ð 634 | 0045 018f // E -> Ə 635 | 0047 014a // G -> Ŋ 636 | 0049 0130 // I -> İ 637 | 004a 0132 // J -> IJ 638 | 0054 00de // T -> Þ 639 | 0061 00aa // a -> ª 640 | 0064 00f0 // d -> ð 641 | 0065 0259 // e -> ə 642 | 0067 014b // g -> ŋ 643 | 0069 0131 // i -> ı 644 | 006a 0133 // j -> ij 645 | 006f 00ba // o -> º 646 | 0073 017f // s -> ſ 647 | 0074 00fe // t -> þ 648 | 00a0 2003 // ->   649 | 00ab 201e // « -> „ 650 | 00bb 201f // » -> ‟ 651 | 017f 0000 // ſ -> ␀ 652 | 2018 201a // ‘ -> ‚ 653 | 2019 201b // ’ -> ‛ 654 | 202f 2002 // ->   655 | 00a4 0000 // ¤ -> ␀ 656 | 00b5 0000 // µ -> ␀ 657 | 00a0 0000 // -> ␀ 658 | 2003 0000 // -> ␀ 659 | 202f 0000 // -> ␀ 660 | 0020 0000 // -> ␀ 661 | 662 | DEADKEY 02c7 663 | 664 | 0028 208d // ( -> ₍ 665 | 0029 208e // ) -> ₎ 666 | 002b 208a // + -> ₊ 667 | 002d 208b // - -> ₋ 668 | 0030 2080 // 0 -> ₀ 669 | 0031 2081 // 1 -> ₁ 670 | 0032 2082 // 2 -> ₂ 671 | 0033 2083 // 3 -> ₃ 672 | 0034 2084 // 4 -> ₄ 673 | 0035 2085 // 5 -> ₅ 674 | 0036 2086 // 6 -> ₆ 675 | 0037 2087 // 7 -> ₇ 676 | 0038 2088 // 8 -> ₈ 677 | 0039 2089 // 9 -> ₉ 678 | 003d 208c // = -> ₌ 679 | 0041 01cd // A -> Ǎ 680 | 0043 010c // C -> Č 681 | 0044 010e // D -> Ď 682 | 0045 011a // E -> Ě 683 | 0047 01e6 // G -> Ǧ 684 | 0048 021e // H -> Ȟ 685 | 0049 01cf // I -> Ǐ 686 | 004b 01e8 // K -> Ǩ 687 | 004c 013d // L -> Ľ 688 | 004e 0147 // N -> Ň 689 | 004f 01d1 // O -> Ǒ 690 | 0052 0158 // R -> Ř 691 | 0053 0160 // S -> Š 692 | 0054 0164 // T -> Ť 693 | 0055 01d3 // U -> Ǔ 694 | 005a 017d // Z -> Ž 695 | 0061 01ce // a -> ǎ 696 | 0063 010d // c -> č 697 | 0064 010f // d -> ď 698 | 0065 011b // e -> ě 699 | 0067 01e7 // g -> ǧ 700 | 0068 021f // h -> ȟ 701 | 0069 01d0 // i -> ǐ 702 | 006a 01f0 // j -> ǰ 703 | 006b 01e9 // k -> ǩ 704 | 006c 013e // l -> ľ 705 | 006e 0148 // n -> ň 706 | 006f 01d2 // o -> ǒ 707 | 0072 0159 // r -> ř 708 | 0073 0161 // s -> š 709 | 0074 0165 // t -> ť 710 | 0075 01d4 // u -> ǔ 711 | 0078 2093 // x -> ₓ 712 | 007a 017e // z -> ž 713 | 01b7 01ee // Ʒ -> Ǯ 714 | 0292 01ef // ʒ -> ǯ 715 | 02c7 030c // ˇ -> ◌̌ 716 | 00a4 02c7 // ¤ -> ˇ 717 | 00b5 02c7 // µ -> ˇ 718 | 017f 02c7 // ſ -> ˇ 719 | 00a0 02c7 // -> ˇ 720 | 2003 02c7 // -> ˇ 721 | 202f 02c7 // -> ˇ 722 | 0020 02c7 // -> ˇ 723 | 724 | DEADKEY 02cd 725 | 726 | 0042 1e06 // B -> Ḇ 727 | 0044 1e0e // D -> Ḏ 728 | 004b 1e34 // K -> Ḵ 729 | 004c 1e3a // L -> Ḻ 730 | 004e 1e48 // N -> Ṉ 731 | 0052 1e5e // R -> Ṟ 732 | 0054 1e6e // T -> Ṯ 733 | 005a 1e94 // Z -> Ẕ 734 | 0062 1e07 // b -> ḇ 735 | 0064 1e0f // d -> ḏ 736 | 0068 1e96 // h -> ẖ 737 | 006b 1e35 // k -> ḵ 738 | 006c 1e3b // l -> ḻ 739 | 006e 1e49 // n -> ṉ 740 | 0072 1e5f // r -> ṟ 741 | 0074 1e6f // t -> ṯ 742 | 007a 1e95 // z -> ẕ 743 | 02cd 0331 // ˍ -> ◌̱ 744 | 00a4 02cd // ¤ -> ˍ 745 | 00b5 02cd // µ -> ˍ 746 | 017f 02cd // ſ -> ˍ 747 | 00a0 02cd // -> ˍ 748 | 2003 02cd // -> ˍ 749 | 202f 02cd // -> ˍ 750 | 0020 02cd // -> ˍ 751 | 752 | DEADKEY 02d8 753 | 754 | 0041 0102 // A -> Ă 755 | 0045 0114 // E -> Ĕ 756 | 0047 011e // G -> Ğ 757 | 0049 012c // I -> Ĭ 758 | 004f 014e // O -> Ŏ 759 | 0055 016c // U -> Ŭ 760 | 0061 0103 // a -> ă 761 | 0065 0115 // e -> ĕ 762 | 0067 011f // g -> ğ 763 | 0069 012d // i -> ĭ 764 | 006f 014f // o -> ŏ 765 | 0075 016d // u -> ŭ 766 | 00c0 1eb0 // À -> Ằ 767 | 00e0 1eb1 // à -> ằ 768 | 02d8 0306 // ˘ -> ◌̆ 769 | 00a4 02d8 // ¤ -> ˘ 770 | 00b5 02d8 // µ -> ˘ 771 | 017f 02d8 // ſ -> ˘ 772 | 00a0 02d8 // -> ˘ 773 | 2003 02d8 // -> ˘ 774 | 202f 02d8 // -> ˘ 775 | 0020 02d8 // -> ˘ 776 | 777 | DEADKEY 02d9 778 | 779 | 0041 0226 // A -> Ȧ 780 | 0042 1e02 // B -> Ḃ 781 | 0043 010a // C -> Ċ 782 | 0044 1e0a // D -> Ḋ 783 | 0045 0116 // E -> Ė 784 | 0046 1e1e // F -> Ḟ 785 | 0047 0120 // G -> Ġ 786 | 0048 1e22 // H -> Ḣ 787 | 0049 0130 // I -> İ 788 | 004c 013f // L -> Ŀ 789 | 004d 1e40 // M -> Ṁ 790 | 004e 1e44 // N -> Ṅ 791 | 004f 022e // O -> Ȯ 792 | 0050 1e56 // P -> Ṗ 793 | 0052 1e58 // R -> Ṙ 794 | 0053 1e60 // S -> Ṡ 795 | 0054 1e6a // T -> Ṫ 796 | 0057 1e86 // W -> Ẇ 797 | 0058 1e8a // X -> Ẋ 798 | 0059 1e8e // Y -> Ẏ 799 | 005a 017b // Z -> Ż 800 | 0061 0227 // a -> ȧ 801 | 0062 1e03 // b -> ḃ 802 | 0063 010b // c -> ċ 803 | 0064 1e0b // d -> ḋ 804 | 0065 0117 // e -> ė 805 | 0066 1e1f // f -> ḟ 806 | 0067 0121 // g -> ġ 807 | 0068 1e23 // h -> ḣ 808 | 0069 0131 // i -> ı 809 | 006c 0140 // l -> ŀ 810 | 006d 1e41 // m -> ṁ 811 | 006e 1e45 // n -> ṅ 812 | 006f 022f // o -> ȯ 813 | 0070 1e57 // p -> ṗ 814 | 0072 1e59 // r -> ṙ 815 | 0073 1e61 // s -> ṡ 816 | 0074 1e6b // t -> ṫ 817 | 0077 1e87 // w -> ẇ 818 | 0078 1e8b // x -> ẋ 819 | 0079 1e8f // y -> ẏ 820 | 007a 017c // z -> ż 821 | 017f 1e9b // ſ -> ẛ 822 | 02d9 0307 // ˙ -> ◌̇ 823 | 00a4 02d9 // ¤ -> ˙ 824 | 00b5 02d9 // µ -> ˙ 825 | 00a0 02d9 // -> ˙ 826 | 2003 02d9 // -> ˙ 827 | 202f 02d9 // -> ˙ 828 | 0020 02d9 // -> ˙ 829 | 830 | DEADKEY 02da 831 | 832 | 0041 00c5 // A -> Å 833 | 0055 016e // U -> Ů 834 | 0061 00e5 // a -> å 835 | 0075 016f // u -> ů 836 | 0077 1e98 // w -> ẘ 837 | 0079 1e99 // y -> ẙ 838 | 02da 030a // ˚ -> ◌̊ 839 | 00a4 02da // ¤ -> ˚ 840 | 00b5 02da // µ -> ˚ 841 | 017f 02da // ſ -> ˚ 842 | 00a0 02da // -> ˚ 843 | 2003 02da // -> ˚ 844 | 202f 02da // -> ˚ 845 | 0020 02da // -> ˚ 846 | 847 | DEADKEY 02db 848 | 849 | 0041 0104 // A -> Ą 850 | 0045 0118 // E -> Ę 851 | 0049 012e // I -> Į 852 | 004f 01ea // O -> Ǫ 853 | 0055 0172 // U -> Ų 854 | 0061 0105 // a -> ą 855 | 0065 0119 // e -> ę 856 | 0069 012f // i -> į 857 | 006f 01eb // o -> ǫ 858 | 0075 0173 // u -> ų 859 | 02db 0328 // ˛ -> ◌̨ 860 | 00a4 02db // ¤ -> ˛ 861 | 00b5 02db // µ -> ˛ 862 | 017f 02db // ſ -> ˛ 863 | 00a0 02db // -> ˛ 864 | 2003 02db // -> ˛ 865 | 202f 02db // -> ˛ 866 | 0020 02db // -> ˛ 867 | 868 | DEADKEY 02dd 869 | 870 | 004f 0150 // O -> Ő 871 | 0055 0170 // U -> Ű 872 | 006f 0151 // o -> ő 873 | 0075 0171 // u -> ű 874 | 02dd 030b // ˝ -> ◌̋ 875 | 00a4 02dd // ¤ -> ˝ 876 | 00b5 02dd // µ -> ˝ 877 | 017f 02dd // ſ -> ˝ 878 | 00a0 02dd // -> ˝ 879 | 2003 02dd // -> ˝ 880 | 202f 02dd // -> ˝ 881 | 0020 02dd // -> ˝ 882 | 883 | DEADKEY 02f5 884 | 885 | 0041 0200 // A -> Ȁ 886 | 0045 0204 // E -> Ȅ 887 | 0049 0208 // I -> Ȉ 888 | 004f 020c // O -> Ȍ 889 | 0052 0210 // R -> Ȑ 890 | 0055 0214 // U -> Ȕ 891 | 0061 0201 // a -> ȁ 892 | 0065 0205 // e -> ȅ 893 | 0069 0209 // i -> ȉ 894 | 006f 020d // o -> ȍ 895 | 0072 0211 // r -> ȑ 896 | 0075 0215 // u -> ȕ 897 | 02f5 030f // ˵ -> ◌̏ 898 | 00a4 02f5 // ¤ -> ˵ 899 | 00b5 02f5 // µ -> ˵ 900 | 017f 02f5 // ſ -> ˵ 901 | 00a0 02f5 // -> ˵ 902 | 2003 02f5 // -> ˵ 903 | 202f 02f5 // -> ˵ 904 | 0020 02f5 // -> ˵ 905 | 906 | 907 | KEYNAME 908 | 909 | 01 "Échap." 910 | 0e "Ret.Arr." 911 | 0f "Tab" 912 | 1c "Entrée" 913 | 1d "Ctrl" 914 | 2a "Maj" 915 | 36 "Maj Droite" 916 | 37 "* (Pavé Num.)" 917 | 38 "Alt" 918 | 39 "Espace" 919 | 3a "Verr. Maj" 920 | 3b "F1" 921 | 3c "F2" 922 | 3d "F3" 923 | 3e "F4" 924 | 3f "F5" 925 | 40 "F6" 926 | 41 "F7" 927 | 42 "F8" 928 | 43 "F9" 929 | 44 "F10" 930 | 45 "Pause" 931 | 46 "Défil." 932 | 47 "7 (Pavé Num.)" 933 | 48 "8 (Pavé Num.)" 934 | 49 "9 (Pavé Num.)" 935 | 4a "- (Pavé Num.)" 936 | 4b "4 (Pavé Num.)" 937 | 4c "5 (Pavé Num.)" 938 | 4d "6 (Pavé Num.)" 939 | 4e "+ (Pavé Num.)" 940 | 4f "1 (Pavé Num.)" 941 | 50 "2 (Pavé Num.)" 942 | 51 "3 (Pavé Num.)" 943 | 52 "0 (Pavé Num.)" 944 | 53 ". (Pavé Num.)" 945 | 57 "F11" 946 | 58 "F12" 947 | 7c "F13" 948 | 7d "F14" 949 | 7e "F15" 950 | 7f "F16" 951 | 80 "F17" 952 | 81 "F18" 953 | 82 "F19" 954 | 83 "F20" 955 | 84 "F21" 956 | 85 "F22" 957 | 86 "F23" 958 | 87 "F24" 959 | 960 | KEYNAME_EXT 961 | 962 | 1c "Entrée (Pavé Num.)" 963 | 1d "Ctrl Droite" 964 | 35 "/ (Pavé Num.)" 965 | 37 "Impr. Écran" 966 | 38 "AltGr" 967 | 45 "Verr. Num." 968 | 46 "Attn." 969 | 47 "Origine" 970 | 48 "Haut" 971 | 49 "Page Préc." 972 | 4b "Gauche" 973 | 4d "Droite" 974 | 4f "Fin" 975 | 50 "Bas" 976 | 51 "Page Suiv." 977 | 52 "Insér." 978 | 53 "Suppr." 979 | 54 <00> 980 | 56 "Aide" 981 | 5b "Windows Gauche" 982 | 5c "Windows Droite" 983 | 5d "Application" 984 | 985 | KEYNAME_DEAD 986 | 987 | 002c "COMMA BELOW" 988 | 002d "SHORT STROKE OVERLAY" 989 | 002e "DOT BELOW" 990 | 002f "SHORT SOLIDUS OVERLAY" 991 | 005e "CIRCUMFLEX ACCENT" 992 | 0060 "GRAVE ACCENT" 993 | 007e "TILDE" 994 | 00a4 "CURRENCY SIGN" 995 | 00a8 "DIAERESIS" 996 | 00af "MACRON" 997 | 00b0 "INVERTED BREVE" 998 | 00b4 "ACUTE ACCENT" 999 | 00b5 "MICRO SIGN" 1000 | 00b8 "CEDILLA" 1001 | 017f "LATIN SMALL LETTER LONG S" 1002 | 02c7 "CARON" 1003 | 02cd "MACRON BELOW" 1004 | 02d8 "BREVE" 1005 | 02d9 "DOT ABOVE" 1006 | 02da "RING ABOVE" 1007 | 02db "OGONEK" 1008 | 02dd "DOUBLE ACUTE ACCENT" 1009 | 02f5 "DOUBLE GRAVE ACCENT" 1010 | 1011 | 1012 | DESCRIPTIONS 1013 | 1014 | 0409 French - AZERTY NF Z71-300 (Digits) 1015 | 040c Français - AZERTY NF Z71-300 (Numérique) 1016 | 1017 | LANGUAGENAMES 1018 | 1019 | 0409 French (France) 1020 | 040c Français 1021 | 1022 | ENDKBD 1023 | -------------------------------------------------------------------------------- /KBFRZ71N.klc.tpl: -------------------------------------------------------------------------------- 1 | KBD KBFRZ71N "Français - AZERTY NF Z71-300 (Numérique)" 2 | 3 | COPYRIGHT "© 2019 Creative Commons" 4 | 5 | COMPANY "Creative Commons" 6 | 7 | LOCALENAME "fr-FR" 8 | 9 | LOCALEID "0000040c" 10 | 11 | VERSION 1.0 12 | 13 | ATTRIBUTES 14 | ALTGR 15 | 16 | SHIFTSTATE 17 | 18 | 0 //Column 4 19 | 1 //Column 5 : Shft 20 | 2 //Column 6 : Ctrl 21 | 3 //Column 7 : Shft Ctrl 22 | 6 //Column 8 : Ctrl Alt 23 | 7 //Column 9 : Shft Ctrl Alt 24 | 25 | LAYOUT ;an extra '@' at the end is a dead key 26 | 27 | //SC VK_ Cap 4 5 6 7 8 9 28 | //-- ---- ---- ---- ---- ---- ---- ---- ---- 29 | 30 | 02 1 SGCap 00e0 1 -1 -1 00a7 00c0 // à 1 § À 31 | -1 -1 0 1 00e0 // 1 à 32 | 03 2 SGCap 00e9 2 -1 -1 00b4@ 00c9 // é 2 ´ É 33 | -1 -1 0 2 00e9 // 2 é 34 | 04 3 SGCap 00e8 3 -1 -1 0060@ 00c8 // è 3 ` È 35 | -1 -1 0 3 00e8 // 3 è 36 | 05 4 SGCap 00ea 4 -1 -1 0026 00ca // ê 4 & Ê 37 | -1 -1 0 4 00ea // 4 ê 38 | 06 5 SGCap 0028 5 -1 -1 005b 02dd@ // ( 5 [ 39 | -1 -1 0 5 0028 // 5 ( 40 | 07 6 SGCap 0029 6 -1 -1 005d 02f5@ // ) 6 ] 41 | -1 -1 0 6 0029 // 5 ) 42 | 08 7 SGCap 2018 7 -1 -1 00af@ -1 // ‘ 7 ¯ 43 | -1 -1 0 7 2018 // 7 ‘ 44 | 09 8 SGCap 2019 8 -1 -1 005f 2014 // ’ 8 _ — 45 | -1 -1 0 8 2019 // 8 ’ 46 | 0a 9 SGCap 00ab 9 -1 -1 201c 2039 // « 9 “ ‹ 47 | -1 -1 0 9 00ab // 9 « 48 | 0b 0 SGCap 00bb 0 -1 0000 201d 203a // » 0 ” › 49 | -1 -1 0 0 00bb // 0 » 50 | 0c OEM_4 0 0027 0022 -1 -1 00b0 02da@ // ' " ° ˚ 51 | 0d OEM_6 0 005e@ 00a8@ -1 001e 02c7@ -1 // ^ ¨ ˇ 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | DESCRIPTIONS 61 | 62 | 0409 French - AZERTY NF Z71-300 (Digits) 63 | 040c Français - AZERTY NF Z71-300 (Numérique) 64 | 65 | LANGUAGENAMES 66 | 67 | 0409 French (France) 68 | 040c Français 69 | 70 | ENDKBD 71 | -------------------------------------------------------------------------------- /LICENCE.txt: -------------------------------------------------------------------------------- 1 | Attribution 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution 4.0 International Public License 58 | 59 | By exercising the Licensed Rights (defined below), You accept and agree 60 | to be bound by the terms and conditions of this Creative Commons 61 | Attribution 4.0 International Public License ("Public License"). To the 62 | extent this Public License may be interpreted as a contract, You are 63 | granted the Licensed Rights in consideration of Your acceptance of 64 | these terms and conditions, and the Licensor grants You such rights in 65 | consideration of benefits the Licensor receives from making the 66 | Licensed Material available under these terms and conditions. 67 | 68 | 69 | Section 1 -- Definitions. 70 | 71 | a. Adapted Material means material subject to Copyright and Similar 72 | Rights that is derived from or based upon the Licensed Material 73 | and in which the Licensed Material is translated, altered, 74 | arranged, transformed, or otherwise modified in a manner requiring 75 | permission under the Copyright and Similar Rights held by the 76 | Licensor. For purposes of this Public License, where the Licensed 77 | Material is a musical work, performance, or sound recording, 78 | Adapted Material is always produced where the Licensed Material is 79 | synched in timed relation with a moving image. 80 | 81 | b. Adapter's License means the license You apply to Your Copyright 82 | and Similar Rights in Your contributions to Adapted Material in 83 | accordance with the terms and conditions of this Public License. 84 | 85 | c. Copyright and Similar Rights means copyright and/or similar rights 86 | closely related to copyright including, without limitation, 87 | performance, broadcast, sound recording, and Sui Generis Database 88 | Rights, without regard to how the rights are labeled or 89 | categorized. For purposes of this Public License, the rights 90 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 91 | Rights. 92 | 93 | d. Effective Technological Measures means those measures that, in the 94 | absence of proper authority, may not be circumvented under laws 95 | fulfilling obligations under Article 11 of the WIPO Copyright 96 | Treaty adopted on December 20, 1996, and/or similar international 97 | agreements. 98 | 99 | e. Exceptions and Limitations means fair use, fair dealing, and/or 100 | any other exception or limitation to Copyright and Similar Rights 101 | that applies to Your use of the Licensed Material. 102 | 103 | f. Licensed Material means the artistic or literary work, database, 104 | or other material to which the Licensor applied this Public 105 | License. 106 | 107 | g. Licensed Rights means the rights granted to You subject to the 108 | terms and conditions of this Public License, which are limited to 109 | all Copyright and Similar Rights that apply to Your use of the 110 | Licensed Material and that the Licensor has authority to license. 111 | 112 | h. Licensor means the individual(s) or entity(ies) granting rights 113 | under this Public License. 114 | 115 | i. Share means to provide material to the public by any means or 116 | process that requires permission under the Licensed Rights, such 117 | as reproduction, public display, public performance, distribution, 118 | dissemination, communication, or importation, and to make material 119 | available to the public including in ways that members of the 120 | public may access the material from a place and at a time 121 | individually chosen by them. 122 | 123 | j. Sui Generis Database Rights means rights other than copyright 124 | resulting from Directive 96/9/EC of the European Parliament and of 125 | the Council of 11 March 1996 on the legal protection of databases, 126 | as amended and/or succeeded, as well as other essentially 127 | equivalent rights anywhere in the world. 128 | 129 | k. You means the individual or entity exercising the Licensed Rights 130 | under this Public License. Your has a corresponding meaning. 131 | 132 | 133 | Section 2 -- Scope. 134 | 135 | a. License grant. 136 | 137 | 1. Subject to the terms and conditions of this Public License, 138 | the Licensor hereby grants You a worldwide, royalty-free, 139 | non-sublicensable, non-exclusive, irrevocable license to 140 | exercise the Licensed Rights in the Licensed Material to: 141 | 142 | a. reproduce and Share the Licensed Material, in whole or 143 | in part; and 144 | 145 | b. produce, reproduce, and Share Adapted Material. 146 | 147 | 2. Exceptions and Limitations. For the avoidance of doubt, where 148 | Exceptions and Limitations apply to Your use, this Public 149 | License does not apply, and You do not need to comply with 150 | its terms and conditions. 151 | 152 | 3. Term. The term of this Public License is specified in Section 153 | 6(a). 154 | 155 | 4. Media and formats; technical modifications allowed. The 156 | Licensor authorizes You to exercise the Licensed Rights in 157 | all media and formats whether now known or hereafter created, 158 | and to make technical modifications necessary to do so. The 159 | Licensor waives and/or agrees not to assert any right or 160 | authority to forbid You from making technical modifications 161 | necessary to exercise the Licensed Rights, including 162 | technical modifications necessary to circumvent Effective 163 | Technological Measures. For purposes of this Public License, 164 | simply making modifications authorized by this Section 2(a) 165 | (4) never produces Adapted Material. 166 | 167 | 5. Downstream recipients. 168 | 169 | a. Offer from the Licensor -- Licensed Material. Every 170 | recipient of the Licensed Material automatically 171 | receives an offer from the Licensor to exercise the 172 | Licensed Rights under the terms and conditions of this 173 | Public License. 174 | 175 | b. No downstream restrictions. You may not offer or impose 176 | any additional or different terms or conditions on, or 177 | apply any Effective Technological Measures to, the 178 | Licensed Material if doing so restricts exercise of the 179 | Licensed Rights by any recipient of the Licensed 180 | Material. 181 | 182 | 6. No endorsement. Nothing in this Public License constitutes or 183 | may be construed as permission to assert or imply that You 184 | are, or that Your use of the Licensed Material is, connected 185 | with, or sponsored, endorsed, or granted official status by, 186 | the Licensor or others designated to receive attribution as 187 | provided in Section 3(a)(1)(A)(i). 188 | 189 | b. Other rights. 190 | 191 | 1. Moral rights, such as the right of integrity, are not 192 | licensed under this Public License, nor are publicity, 193 | privacy, and/or other similar personality rights; however, to 194 | the extent possible, the Licensor waives and/or agrees not to 195 | assert any such rights held by the Licensor to the limited 196 | extent necessary to allow You to exercise the Licensed 197 | Rights, but not otherwise. 198 | 199 | 2. Patent and trademark rights are not licensed under this 200 | Public License. 201 | 202 | 3. To the extent possible, the Licensor waives any right to 203 | collect royalties from You for the exercise of the Licensed 204 | Rights, whether directly or through a collecting society 205 | under any voluntary or waivable statutory or compulsory 206 | licensing scheme. In all other cases the Licensor expressly 207 | reserves any right to collect such royalties. 208 | 209 | 210 | Section 3 -- License Conditions. 211 | 212 | Your exercise of the Licensed Rights is expressly made subject to the 213 | following conditions. 214 | 215 | a. Attribution. 216 | 217 | 1. If You Share the Licensed Material (including in modified 218 | form), You must: 219 | 220 | a. retain the following if it is supplied by the Licensor 221 | with the Licensed Material: 222 | 223 | i. identification of the creator(s) of the Licensed 224 | Material and any others designated to receive 225 | attribution, in any reasonable manner requested by 226 | the Licensor (including by pseudonym if 227 | designated); 228 | 229 | ii. a copyright notice; 230 | 231 | iii. a notice that refers to this Public License; 232 | 233 | iv. a notice that refers to the disclaimer of 234 | warranties; 235 | 236 | v. a URI or hyperlink to the Licensed Material to the 237 | extent reasonably practicable; 238 | 239 | b. indicate if You modified the Licensed Material and 240 | retain an indication of any previous modifications; and 241 | 242 | c. indicate the Licensed Material is licensed under this 243 | Public License, and include the text of, or the URI or 244 | hyperlink to, this Public License. 245 | 246 | 2. You may satisfy the conditions in Section 3(a)(1) in any 247 | reasonable manner based on the medium, means, and context in 248 | which You Share the Licensed Material. For example, it may be 249 | reasonable to satisfy the conditions by providing a URI or 250 | hyperlink to a resource that includes the required 251 | information. 252 | 253 | 3. If requested by the Licensor, You must remove any of the 254 | information required by Section 3(a)(1)(A) to the extent 255 | reasonably practicable. 256 | 257 | 4. If You Share Adapted Material You produce, the Adapter's 258 | License You apply must not prevent recipients of the Adapted 259 | Material from complying with this Public License. 260 | 261 | 262 | Section 4 -- Sui Generis Database Rights. 263 | 264 | Where the Licensed Rights include Sui Generis Database Rights that 265 | apply to Your use of the Licensed Material: 266 | 267 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 268 | to extract, reuse, reproduce, and Share all or a substantial 269 | portion of the contents of the database; 270 | 271 | b. if You include all or a substantial portion of the database 272 | contents in a database in which You have Sui Generis Database 273 | Rights, then the database in which You have Sui Generis Database 274 | Rights (but not its individual contents) is Adapted Material; and 275 | 276 | c. You must comply with the conditions in Section 3(a) if You Share 277 | all or a substantial portion of the contents of the database. 278 | 279 | For the avoidance of doubt, this Section 4 supplements and does not 280 | replace Your obligations under this Public License where the Licensed 281 | Rights include other Copyright and Similar Rights. 282 | 283 | 284 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 285 | 286 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 287 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 288 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 289 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 290 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 291 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 292 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 293 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 294 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 295 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 296 | 297 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 298 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 299 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 300 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 301 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 302 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 303 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 304 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 305 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 306 | 307 | c. The disclaimer of warranties and limitation of liability provided 308 | above shall be interpreted in a manner that, to the extent 309 | possible, most closely approximates an absolute disclaimer and 310 | waiver of all liability. 311 | 312 | 313 | Section 6 -- Term and Termination. 314 | 315 | a. This Public License applies for the term of the Copyright and 316 | Similar Rights licensed here. However, if You fail to comply with 317 | this Public License, then Your rights under this Public License 318 | terminate automatically. 319 | 320 | b. Where Your right to use the Licensed Material has terminated under 321 | Section 6(a), it reinstates: 322 | 323 | 1. automatically as of the date the violation is cured, provided 324 | it is cured within 30 days of Your discovery of the 325 | violation; or 326 | 327 | 2. upon express reinstatement by the Licensor. 328 | 329 | For the avoidance of doubt, this Section 6(b) does not affect any 330 | right the Licensor may have to seek remedies for Your violations 331 | of this Public License. 332 | 333 | c. For the avoidance of doubt, the Licensor may also offer the 334 | Licensed Material under separate terms or conditions or stop 335 | distributing the Licensed Material at any time; however, doing so 336 | will not terminate this Public License. 337 | 338 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 339 | License. 340 | 341 | 342 | Section 7 -- Other Terms and Conditions. 343 | 344 | a. The Licensor shall not be bound by any additional or different 345 | terms or conditions communicated by You unless expressly agreed. 346 | 347 | b. Any arrangements, understandings, or agreements regarding the 348 | Licensed Material not stated herein are separate from and 349 | independent of the terms and conditions of this Public License. 350 | 351 | 352 | Section 8 -- Interpretation. 353 | 354 | a. For the avoidance of doubt, this Public License does not, and 355 | shall not be interpreted to, reduce, limit, restrict, or impose 356 | conditions on any use of the Licensed Material that could lawfully 357 | be made without permission under this Public License. 358 | 359 | b. To the extent possible, if any provision of this Public License is 360 | deemed unenforceable, it shall be automatically reformed to the 361 | minimum extent necessary to make it enforceable. If the provision 362 | cannot be reformed, it shall be severed from this Public License 363 | without affecting the enforceability of the remaining terms and 364 | conditions. 365 | 366 | c. No term or condition of this Public License will be waived and no 367 | failure to comply consented to unless expressly agreed to by the 368 | Licensor. 369 | 370 | d. Nothing in this Public License constitutes or may be interpreted 371 | as a limitation upon, or waiver of, any privileges and immunities 372 | that apply to the Licensor or You, including from the legal 373 | processes of any jurisdiction or authority. 374 | 375 | 376 | ======================================================================= 377 | 378 | Creative Commons is not a party to its public 379 | licenses. Notwithstanding, Creative Commons may elect to apply one of 380 | its public licenses to material it publishes and in those instances 381 | will be considered the “Licensor.” The text of the Creative Commons 382 | public licenses is dedicated to the public domain under the CC0 Public 383 | Domain Dedication. Except for the limited purpose of indicating that 384 | material is shared under a Creative Commons public license or as 385 | otherwise permitted by the Creative Commons policies published at 386 | creativecommons.org/policies, Creative Commons does not authorize the 387 | use of the trademark "Creative Commons" or any other trademark or logo 388 | of Creative Commons without its prior written consent including, 389 | without limitation, in connection with any unauthorized modifications 390 | to any of its public licenses or any other arrangements, 391 | understandings, or agreements concerning use of licensed material. For 392 | the avoidance of doubt, this paragraph does not form part of the 393 | public licenses. 394 | 395 | Creative Commons may be contacted at creativecommons.org. 396 | -------------------------------------------------------------------------------- /Make-KLC.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding()] 2 | param( 3 | [Parameter(Mandatory = $true, Position = 0, ParameterSetName = "Paths")] 4 | [string] $path, 5 | [Parameter(Position = 1, ParameterSetName = "Paths")] 6 | [string] $output, 7 | 8 | [Parameter(Mandatory = $true, ParameterSetName = "Name")] 9 | [string] $name, 10 | 11 | [string] $encoding = "UTF8", 12 | [switch] $force = $false 13 | ) 14 | 15 | BEGIN { 16 | 17 | if ($name -ne $null){ 18 | $path = ".\$($name).klc.tpl" 19 | $output = ".\$($name).klc" 20 | } 21 | 22 | $path = (Resolve-Path -Path $path).ProviderPath 23 | $folder = Split-Path -Path $path -Parent 24 | $klc = [IO.Path]::GetFileNameWithoutExtension($path) 25 | 26 | if (-not $output) { 27 | $output = Join-Path -Path $folder -ChildPath $klc 28 | } else { 29 | $output = (Resolve-Path -Path $output).ProviderPath 30 | } 31 | 32 | if (Test-Path -Path $output) { 33 | if (-not $force.IsPresent) { 34 | throw "The layout file `"$klc`" already exists. Please, use the -force flag to overwrite." 35 | } 36 | 37 | Remove-Item -Path "$output~" -EA SilentlyContinue | Out-Null 38 | Rename-Item -Path $output -NewName "$output~" 39 | } 40 | 41 | $code = "\<\? (?.*) \?\>" 42 | 43 | Function Run-Command { 44 | [CmdletBinding()] 45 | param( 46 | [string] $script 47 | ) 48 | 49 | BEGIN { 50 | $path = (Resolve-Path -Path $script).ProviderPath 51 | $folder = Split-Path -Path $path -Parent 52 | $ps = Split-Path -Path $path -Leaf 53 | 54 | Push-Location $folder 55 | } 56 | PROCESS { 57 | Write-Output (Invoke-Expression ".\$ps") 58 | } 59 | END { 60 | Pop-Location 61 | } 62 | } 63 | } 64 | PROCESS { 65 | 66 | Get-Content -Path $path -Encoding UTF8 | % { 67 | 68 | $line = $_ 69 | $match = $line -match $code 70 | 71 | if ($match) { 72 | $command = $matches["cmd"] 73 | $result = Run-Command -Script $command 74 | $result | % { 75 | Add-Content -Path $output -Encoding $encoding -Value $_ 76 | } 77 | } 78 | else { 79 | Add-Content -Path $output -Encoding $encoding -Value $_ 80 | } 81 | } 82 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![GitHub license](https://img.shields.io/github/license/springcomp/optimized-azerty-win.svg)](https://github.com/springcomp/optimized-azerty-win/blob/master/LICENCE.txt) 2 | 3 | [![GitHub issues](https://img.shields.io/github/issues/springcomp/optimized-azerty-win.svg)](https://github.com/springcomp/optimized-azerty-win/issues) 4 | [![Build status](https://ci.appveyor.com/api/projects/status/baoggbidv649cw69?svg=true)](https://ci.appveyor.com/project/springcomp/optimized-azerty-win) 5 | [![](https://img.shields.io/badge/compliance-100%25-brightgreen.svg)](https://github.com/springcomp/optimized-azerty-win-compliance) 6 | 7 | ![](./refs/french.png) Veuillez consulter [la documentation en français](https://springcomp.github.io/optimized-azerty-win/). 8 | 9 | ## Content 10 | 11 | This repository contains a simple .klc file which can be used with [Microsoft Keyboard Layout Creator](https://www.microsoft.com/en-us/download/details.aspx?id=102134) 12 | to add a custom layout on Windows supporting a recently standardized azerty keyboard layout. 13 | 14 | ![](./refs/base.png) 15 | 16 | 17 | ## Installation 18 | 19 | See the [Releases](https://github.com/springcomp/optimized-azerty-win/releases) tab to download the last setup. 20 | 21 | When the keyboard layout is installed, you will certainly have to restart Windows to allow the new layout to be displayed on the language setup screen. 22 | 23 | The keyboard is installed as « Français - AZERTY NF Z71-300 » layout. 24 | 25 | 26 | ## Usage 27 | 28 | 29 | ### Overview 30 | 31 | The recently standardized AZERTY (hereafter referred to as AZERTY-NF) layout is designed to be very similar to the AZERTY layout in order to minimize disruption to users who write in the French language. Yet, the new layout is superior in many ways: 32 | 33 | - It includes *all* the characters that are required to write proper French, including accented upper case letters (for instance, `É`, `œ` and `«`). 34 | - It is designed to be more user-friendly and allow quicker typing. 35 | - It includes almost 60 additional characters used in foreign languages and technical publications. 36 | - Yet, those characters are easy to find thanks to clusters of likewise characters at sensible locations. 37 | 38 | 39 | ### Diacritical marks and accented characters 40 | 41 | The most distinctive changes introduced by the AZERTY-NF layout concern typing accented characters. 42 | 43 | Similar to the ^ you may be familiar with, diacritical marks can be input using one of the dedicated key, followed by the appropriate letter. The diacritical mark key acts as a *dead key*, meaning that it does not generate a complete character by itself but modifies the character generated by the key struck immediately after to produce the desired result. 44 | 45 | For instance, typing the letter `Û` is achieved by typing the ^, Shift+U combination. 46 | 47 | The AZERTY-NF layout differs in subtle ways from the AZERTY layout you have grown accustomed to. Because many European languages use complex diacritical marks, the AZERTY-NF layout is designed to allow typing arbitrary accents on a base letter. 48 | 49 | To support this scenario, the present layout allows typing a combining diacritical mark to be applied to the previously typed character. To input a combining diacritical mark, just repeat the dead key associated with the desired mark. 50 | 51 | For instance: 52 | 53 | - AltGr+v, AltGr+v produces a combining cedilla `◌̧` (U+0327). 54 | 55 | Please, note that using a combining diacritical mark differs from using a dead-key in the following ways: 56 | 57 | - The combining diacritical mark must be typed __after__ a previously typed character, whereas a dead key must be typed before the desired character key. 58 | - Using a combining diacritical mark __produces an additional Unicode code point__ in the output, and thus modifies the previously typed character to apply a diacritical mark, whereas the sequence of a dead-key followed by a character produces a single Unicode code point, corresponding to a [precomposed character](https://en.wikipedia.org/wiki/Precomposed_character). 59 | 60 | For instance, the following two combinations both produce the letter `é`. However, the resulting sequences of Unicode code points differ: 61 | 62 | - AltGr+é, e produces `é` (U+00E9). 63 | - e, AltGr+é, AltGr+é produces `é` (U+0065, U+0301) `e + ◌́` . 64 | 65 | 66 | Please, note that it is possible to input a non-combining version of a diacritical mark by typing a Space after the dead-key. 67 | 68 | This allows to input certain characters verbatim. However, please note that certain diacritical marks do not have a non-combining variant. For these characters, a somewhat equivalent glyph is produced, according to the following table: 69 | 70 | |Sequence|Character|Unicode code point| 71 | |---|---|---| 72 | | AltGr+@, Space | `˘` | BREVE (U+02D8) | 73 | | AltGr+#, Space | `°` | DEGREE SIGN (U+00B0)¹ | 74 | | AltGr+é, Space | `´` | ACUTE ACCENT (U+00B4) | 75 | | AltGr+è, Space | `` ` `` | GRAVE ACCENT (U+0060) | 76 | | AltGr+Shift+(, Space | `˝` | DOUBLE ACUTE ACCENT (U+02DD) | 77 | | AltGr+Shift+), Space | `˵` | DOUBLE GRAVE ACCENT (U+02F5)² | 78 | | AltGr+, Space | `¯` | MACRON (U+00AF) | 79 | | AltGr+", Space | `˚` | RING ABOVE (U+02DA) | 80 | | ^, Space | `^` | CIRCUMFLEX ACCENT (U+005E) | 81 | | Shift+^, Space | `¨` | DIAERESIS (U+00A8) | 82 | | AltGr+^, Space | `ˇ` | CARON (U+02C7) | 83 | | AltGr+i, Space | `˙` | DOT ABOVE (U+02D9) | 84 | | AltGr+I, Space | `.` | FULL STOP (U+002E)³ | 85 | | AltGr+H, Space | `ˍ` | MACRON BELOW (U+02CD) | 86 | | AltGr+k, Space | `/` | SOLIDUS (U+002F) | 87 | | AltGr+v, Space | `¸` | CEDILLA (U+00B8) | 88 | | AltGr+V, Space | `˛` | OGONEK (U+02DB) | 89 | | AltGr+b, Space | `-` | HYPHEN-MINUS (U+002D) | 90 | | AltGr+n, Space | `~` | TILDE (U+007E) | 91 | | AltGr+!, Space | `,` | COMMA (U+002C)⁴ | 92 | 93 | Please, note that this allows typing a `` ` `` (GRAVE ACCENT) character, known to developers as "backtick", even though this character is conspicuously absent from the list of supported characters mandated by the standard. 94 | 95 | 96 | ¹ The 'COMBINING INVERTED BREVE' character does not have a non-combining equivalent and is replaced by the 'DEGREE SIGN' visual approximation. 97 | ² For some reason, the 'DOUBLE GRAVE ACCENT' is positioned at the bottom of the text. 98 | ³ The 'COMBINING DOT BELOW' character does not have a non-combining equivalent and is replaced by the 'FULL STOP' visual approximation. 99 | ⁴ THe 'COMBINING COMMA BELOW' character does not have a non-combining equivalent and is replaced by the 'COMMA' visual approximation. 100 | 101 | 102 | 103 | ### Caps Lock 104 | 105 | The AZERTY-NF layout also includes the "SGCaps" feature. Used originally for the Swiss-German layout, this feature changes the behaviour of the Caps Lock key. 106 | 107 | Traditionnaly, Caps Lock acts like maintaining the Shift key. This means that in a traditionnal AZERTY layout, enabling Caps Lock and typing é produces the number `1`. 108 | 109 | The AZERTY-NF layout allows you to type the corresponding accented characters when Caps Lock is toggled on. 110 | 111 | Thus, enabling Caps Lock and typing à, é, ê, è, ^, i, ^, o, ù produces `ÀÉÊÈÎÔÙ`. 112 | 113 | More realistically, enabling Caps Lock and typing c, ', e, s, t, Space, à, Space, d, i, r, e produces `C'EST À DIRE`. Notice that neither the apostrophe (`'`) nor the accented character (`à`) did require extra precautions. This would not be normally feasible on a traditional AZERTY layout. 114 | 115 | The SGCaps feature is a popular option that, unfortunately, contradicts the standard. If you run a laptop computer without a numeric keypad, please, consider installing the standard-compliant `AZERTY NF Z71-300 (Numérique)` layout instead. It is also installed alonside the AZERTY-NF layout. 116 | 117 | ### Extended characters 118 | 119 | The AZERTY-NF contains a 'European Extended Characters' layer that is accessible after pressing AltGr+Eu. 120 | 121 | This layer contains characters not in common use in the French language. However, one of the goal of the standard is to allow writing texts with characters most commonly found in other European languages. 122 | 123 | The following table shows some characters available from the European Extended Characters layer. Other punctuation marks, not shown here, are also available. Please refer to [the layout](refs/EU_level.png) shown by the official page for more information. 124 | 125 | |Sequence|Character|Unicode code point| 126 | |---|---|---| 127 | | AltGr+Eu, a | `ª` | FEMININE ORDINAL INDICATOR (U+00AA) | 128 | | AltGr+Eu, d | `ð` | LATIN SMALL LETTER ETH (U+0000) | 129 | | AltGr+Eu, D | `Ð` | LATIN CAPITAL LETTER ETH (U+00D0) | 130 | | AltGr+Eu, e | `ə` | LATIN SMALL LETTER SCHWA (U+0259) | 131 | | AltGr+Eu, E | `Ə` | LATIN CAPITAL LETTER SCHWA (U+018F) | 132 | | AltGr+Eu, g | `ŋ` | LATIN SMALL LETTER ENG (U+014B) | 133 | | AltGr+Eu, G | `Ŋ` | LATIN CAPITAL LETTER ENG (U+014A) | 134 | | AltGr+Eu, i | `ı` | LATIN SMALL LETTER DOTLESS I (U+0131) | 135 | | AltGr+Eu, I | `İ` | LATIN CAPITAL LETTER I WITH DOT ABOVE (U+0130) | 136 | | AltGr+Eu, j | `ij` | LATIN SMALL LIGATURE IJ (U+0133) | 137 | | AltGr+Eu, J | `IJ` | LATIN CAPITAL LIGATURE IJ (U+0132) | 138 | | AltGr+Eu, o | `º` | MASCULINE ORDINAL INDICATOR (U+00BA) | 139 | | AltGr+Eu, s | `ſ` | LATIN SMALL LETTER LONG S (U+017F) | 140 | | AltGr+Eu, t | `þ` | LATIN SMALL LETTER THORN (U+00FE) | 141 | | AltGr+Eu, T | `Þ` | LATIN CAPITAL LETTER THORN (U+00DE) | 142 | 143 | 144 | The `ſ` character, 'LATIN SMALL LONG LETTER S' (U+017F) shown in the table above can also be altered with diacritical marks. 145 | 146 | The following two combinations are available: 147 | 148 | - AltGr+k, AltGr+Eu produces `ẜ` 'LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE' (U+1E9C) 149 | - AltGr+i, AltGr+Eu produces `ẛ` 'LATIN SMALL LETTER LONG S WITH DOT ABOVE' (U+1E9B) 150 | 151 | 152 | 153 | ## Known issues 154 | 155 | N/A. 156 | 157 | ## Links 158 | 159 | - [Le nouvel AZERTY](http://norme-azerty.fr/) 160 | - [Norme AFNOR](https://www.boutique.afnor.org/norme/nf-z71-300/interfaces-utilisateurs-dispositions-de-clavier-bureautique-francais/article/901594/fa188960) 161 | 162 | 163 | Cette œuvre est mise à disposition selon les termes de la [License Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/). 164 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | image: Visual Studio 2017 2 | 3 | branches: 4 | only: 5 | - main 6 | - /^v\d+\.\d+\.\d+\.\d+$/ 7 | 8 | init: 9 | - ps: | 10 | if ($env:APPVEYOR_REPO_TAG -eq "true") { 11 | $Env:KBFRZ71_VERSION = "$($env:APPVEYOR_REPO_TAG_NAME.TrimStart("v"))" 12 | } else { 13 | $Env:KBFRZ71_VERSION = "1.0.3.40" 14 | } 15 | 16 | before_build: 17 | - ps: docker build --cache-from sprinccompdocker/msklc:1.4 --tag private/msklc:1.4 --file .\Dockerfile .\context\ 18 | 19 | build_script: 20 | - ps: .\Make-KLC.ps1 -Name KBFRZ71 -Force 21 | - ps: .\Make-KLC.ps1 -Name KBFRZ71N -Force 22 | - ps: Set-Content -Path ".\src\KBFRZ71.klc" -Encoding Unicode -Value (Get-Content -Path ".\KBFRZ71.klc" -Raw -Encoding UTF8) 23 | - ps: Set-Content -Path ".\src\KBFRZ71N.klc" -Encoding Unicode -Value (Get-Content -Path ".\KBFRZ71N.klc" -Raw -Encoding UTF8) 24 | - ps: | 25 | docker run ` 26 | --rm ` 27 | --mount "type=bind,source=C:\projects\optimized-azerty-win\src,target=C:\sources" ` 28 | --env "KBFRZ71_VERSION=$Env:KBFRZ71_VERSION" ` 29 | private/msklc:1.4 > build.log 30 | - ps: | 31 | $content = (Get-Content -Path ".\build.log" -Raw) 32 | Write-Host "`r`n" 33 | if ($content.Contains("Error")) { 34 | Write-Host $content -ForegroundColor Red 35 | throw "Build failed." 36 | } 37 | else { 38 | Write-Host $content -ForegroundColor Green 39 | Remove-Item -Path ".\KBFRZ71.klc" 40 | } 41 | - ps: nuget restore .\src\Setup.sln 42 | - ps: msbuild .\src\Setup.sln /p:Configuration=Release /p:SolutionDir=.\src /p:ProductVersion=$Env:KBFRZ71_VERSION 43 | 44 | after_build: 45 | - ps: 7z a artifacts\setup.zip .\src\Setup\bin\x86\Release\net452\*.msi 46 | - ps: 7z a artifacts\setup.zip .\src\Setup\bin\x86\Release\net452\*.exe 47 | - ps: 7z a artifacts\setup.zip .\src\Setup\bin\x86\Release\net452\*.config 48 | - ps: copy .\src\Setup\bin\x86\Release\net452\*.msi .\artifacts\ 49 | 50 | artifacts: 51 | - path: artifacts\setup.zip 52 | name: setup 53 | type: file 54 | - path: 'artifacts\*.msi' 55 | type: file 56 | 57 | deploy: 58 | - provider: GitHub 59 | release: $(APPVEYOR_REPO_TAG_NAME) 60 | description: AZERTY NF Z71-300 Keyboard Layout 61 | auth_token: 62 | secure: QxXD5boO1cRwZNpg17XsXqC1kxznj5IhNa1m4TvpuUzl6BSErb99eM0+wMbE5dv8 63 | artifact: /.*\.(msi|zip)$/ 64 | prerelease: true 65 | on: 66 | branch: main # only release from main branch 67 | APPVEYOR_REPO_TAG: true # only release on new tag 68 | -------------------------------------------------------------------------------- /automation/002c_0326_comma_below.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/002c_0326_comma_below.txt -------------------------------------------------------------------------------- /automation/002d_0335_short_stroke_overlay.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/002d_0335_short_stroke_overlay.txt -------------------------------------------------------------------------------- /automation/002e_0323_dot_below.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/002e_0323_dot_below.txt -------------------------------------------------------------------------------- /automation/002f_0337_short_solidus_overlay.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/002f_0337_short_solidus_overlay.txt -------------------------------------------------------------------------------- /automation/005e_0302_circumflex_accent.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/005e_0302_circumflex_accent.txt -------------------------------------------------------------------------------- /automation/0060_0300_grave_accent.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/0060_0300_grave_accent.txt -------------------------------------------------------------------------------- /automation/007e_0303_tilde.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/007e_0303_tilde.txt -------------------------------------------------------------------------------- /automation/00a4_currency_sign.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/00a4_currency_sign.txt -------------------------------------------------------------------------------- /automation/00a8_0308_diaeresis.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/00a8_0308_diaeresis.txt -------------------------------------------------------------------------------- /automation/00af_0304_macron.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/00af_0304_macron.txt -------------------------------------------------------------------------------- /automation/00b0_0311_inverted_breve.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/00b0_0311_inverted_breve.txt -------------------------------------------------------------------------------- /automation/00b4_0301_acute_accent.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/00b4_0301_acute_accent.txt -------------------------------------------------------------------------------- /automation/00b5_micro_sign.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/00b5_micro_sign.txt -------------------------------------------------------------------------------- /automation/00b8_0327_cedilla.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/00b8_0327_cedilla.txt -------------------------------------------------------------------------------- /automation/017f_latin_small_letter_long_s.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/017f_latin_small_letter_long_s.txt -------------------------------------------------------------------------------- /automation/02c7_030c_caron.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/02c7_030c_caron.txt -------------------------------------------------------------------------------- /automation/02cd_0331_macron_below.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/02cd_0331_macron_below.txt -------------------------------------------------------------------------------- /automation/02d8_0306_breve.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/02d8_0306_breve.txt -------------------------------------------------------------------------------- /automation/02d9_0307_dot_above.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/02d9_0307_dot_above.txt -------------------------------------------------------------------------------- /automation/02da_030a_ring_above.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/02da_030a_ring_above.txt -------------------------------------------------------------------------------- /automation/02db_0328_ogonek.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/02db_0328_ogonek.txt -------------------------------------------------------------------------------- /automation/02dd_030b_double_acute_accent.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/02dd_030b_double_acute_accent.txt -------------------------------------------------------------------------------- /automation/02f5_030f_double_grave_accent.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/automation/02f5_030f_double_grave_accent.txt -------------------------------------------------------------------------------- /automation/KBFRZ71_base.inc: -------------------------------------------------------------------------------- 1 | 10 A 5 a A -1 -1 00e6 00c6 // a A æ Æ 2 | 11 Z 1 z Z -1 -1 00a3 -1 // z Z £ 3 | 12 E 1 e E -1 -1 20ac -1 // e E € 4 | 13 R 1 r R -1 -1 00ae -1 // r R ® 5 | 14 T 1 t T -1 -1 007b 2122 // t T { ™ 6 | 15 Y 1 y Y -1 -1 007d -1 // y Y } 7 | 16 U 5 u U -1 -1 00f9 00d9 // u U ù Ù 8 | 18 O 5 o O -1 -1 0153 0152 // o O œ Œ 9 | 19 P 1 p P -1 -1 0025 2030 // p P % ‰ 10 | 1a OEM_MINUS 0 002d 2013 001b 001f 2212 2011 // - – − ‑ 11 | 1b OEM_PLUS 0 002b 00b1 001d -1 2020 2021 // + ± † ‡ 12 | 1e Q 5 q Q -1 -1 03b8 03f4 // q Q θ ϴ 13 | 1f S 5 s S -1 -1 00df 1e9e // s S ß ẞ 14 | 20 D 1 d D -1 -1 0024 -1 // d D $ 15 | 21 F 1 f F -1 -1 00a4@ -1 // f F ¤ 16 | 22 G 1 g G -1 -1 00b5@ -1 // g G µ 17 | 23 H 1 h H -1 -1 017f@ 02cd@ // h H 18 | 24 J 1 j J -1 -1 -1 -1 // j J 19 | 26 L 1 l L -1 -1 007c -1 // l L | 20 | 27 M 1 m M -1 -1 221e -1 // m M ∞ 21 | 28 OEM_3 0 002f 005c -1 -1 00f7 221a // / \ ÷ √ 22 | 2b OEM_5 0 002a 00bd 001c -1 00d7 00bc // * ½ × ¼ 23 | 56 OEM_102 0 003c 003e 001c -1 2a7d 2a7e // < > ⩽ ⩾ 24 | 2c W 5 w W -1 -1 0292 01b7 // w W ʒ Ʒ 25 | 2d X 1 x X -1 -1 00a9 -1 // x X © 26 | 2e C 5 c C -1 -1 00e7 00c7 // c C ç Ç 27 | 2f V 1 v V -1 -1 00b8@ 02db@ // v V ¸ ˛ 28 | 30 B 1 b B -1 -1 002d@ -1 // b B 29 | 31 N 1 n N -1 -1 007e@ -1 // n N ~ 30 | 32 OEM_PERIOD 0 002e 003f -1 -1 00bf -1 // . ? ¿ 31 | 33 OEM_COMMA 0 002c 0021 -1 -1 00a1 002c@ // , ! ¡ , 32 | 34 OEM_2 0 003a 2026 -1 -1 00b7 -1 // : … · 33 | 35 OEM_8 0 003b 003d -1 -1 2243 2260 // ; = ≃ ≠ 34 | 39 SPACE 0 0020 0020 2003 -1 00a0 202f //     35 | 53 DECIMAL 0 002c 002c -1 -1 -1 -1 // , , 36 | 37 | // The following three keys are specifically set last in the layout 38 | // to prevent the Win32 VkKeyScanEx function to report an incorrect 39 | // scan code for the '.', '/' and '°' characters that double as 40 | // 41 | // See https://github.com/springcomp/optimized-azerty-win/issues/73. 42 | 43 | 29 OEM_7 0 0040 0023 -1 -1 02d8@ 00b0@ // @ # ˘ 44 | 17 I 1 i I -1 -1 02d9@ 002e@ // i I ˙ . 45 | 25 K 1 k K -1 -1 002f@ -1 // k K / -------------------------------------------------------------------------------- /automation/KBFRZ71_key_names.inc: -------------------------------------------------------------------------------- 1 | KEYNAME 2 | 3 | 01 "Échap." 4 | 0e "Ret.Arr." 5 | 0f "Tab" 6 | 1c "Entrée" 7 | 1d "Ctrl" 8 | 2a "Maj" 9 | 36 "Maj Droite" 10 | 37 "* (Pavé Num.)" 11 | 38 "Alt" 12 | 39 "Espace" 13 | 3a "Verr. Maj" 14 | 3b "F1" 15 | 3c "F2" 16 | 3d "F3" 17 | 3e "F4" 18 | 3f "F5" 19 | 40 "F6" 20 | 41 "F7" 21 | 42 "F8" 22 | 43 "F9" 23 | 44 "F10" 24 | 45 "Pause" 25 | 46 "Défil." 26 | 47 "7 (Pavé Num.)" 27 | 48 "8 (Pavé Num.)" 28 | 49 "9 (Pavé Num.)" 29 | 4a "- (Pavé Num.)" 30 | 4b "4 (Pavé Num.)" 31 | 4c "5 (Pavé Num.)" 32 | 4d "6 (Pavé Num.)" 33 | 4e "+ (Pavé Num.)" 34 | 4f "1 (Pavé Num.)" 35 | 50 "2 (Pavé Num.)" 36 | 51 "3 (Pavé Num.)" 37 | 52 "0 (Pavé Num.)" 38 | 53 ". (Pavé Num.)" 39 | 57 "F11" 40 | 58 "F12" 41 | 7c "F13" 42 | 7d "F14" 43 | 7e "F15" 44 | 7f "F16" 45 | 80 "F17" 46 | 81 "F18" 47 | 82 "F19" 48 | 83 "F20" 49 | 84 "F21" 50 | 85 "F22" 51 | 86 "F23" 52 | 87 "F24" 53 | 54 | KEYNAME_EXT 55 | 56 | 1c "Entrée (Pavé Num.)" 57 | 1d "Ctrl Droite" 58 | 35 "/ (Pavé Num.)" 59 | 37 "Impr. Écran" 60 | 38 "AltGr" 61 | 45 "Verr. Num." 62 | 46 "Attn." 63 | 47 "Origine" 64 | 48 "Haut" 65 | 49 "Page Préc." 66 | 4b "Gauche" 67 | 4d "Droite" 68 | 4f "Fin" 69 | 50 "Bas" 70 | 51 "Page Suiv." 71 | 52 "Insér." 72 | 53 "Suppr." 73 | 54 <00> 74 | 56 "Aide" 75 | 5b "Windows Gauche" 76 | 5c "Windows Droite" 77 | 5d "Application" 78 | -------------------------------------------------------------------------------- /automation/dump-currencies.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding()] 2 | param() 3 | 4 | PROCESS { 5 | 6 | $currency = New-Object -TypeName System.Text.StringBuilder 7 | 8 | for ($codePoint = 0; $codePoint -lt 0x110000; $codePoint = $codePoint + 1) { 9 | if (($codePoint -ge 0xd800) -and ($codePoint -le 0xdfff)) { 10 | } 11 | else { 12 | 13 | $char = [Char]::ConvertFromUtf32($codePoint) 14 | $category = [Char]::GetUnicodeCategory($char, 0) 15 | 16 | if ($category -eq [System.Globalization.UnicodeCategory]::CurrencySymbol) { 17 | $currency.Append($char) | Out-Null 18 | $currency.Append([Char] 0x0d) | Out-Null 19 | $currency.Append([Char] 0x0a) | Out-Null 20 | } 21 | } 22 | } 23 | 24 | $text = $currency.ToString() 25 | Write-Output $text 26 | } -------------------------------------------------------------------------------- /automation/make-base-layout.ps1: -------------------------------------------------------------------------------- 1 | Get-Content -Path KBFRZ71_base.inc -Encoding UTF8 -Raw 2 | -------------------------------------------------------------------------------- /automation/make-dead-tables.ps1: -------------------------------------------------------------------------------- 1 | Get-ChildItem -Filter "*.txt" |? { $_.Name -match "^[0-9a-f]{4}.*"} | Sort-Object -Property Name |% { 2 | .\make-mapping-table $_ 3 | } -------------------------------------------------------------------------------- /automation/make-keynames-dead.ps1: -------------------------------------------------------------------------------- 1 | Write-Output "KEYNAME_DEAD" 2 | Write-Output "" 3 | 4 | Get-ChildItem -Filter "*.txt" |? { $_.Name -match "^[0-9a-f]{4}.*"} | Sort-Object -Property Name |% { 5 | $match = $_.Name -match "^(?[0-9a-f]{4})(?:_[0-9a-f]{4})?_(?.*)\.txt$" 6 | if ($match){ 7 | $codePoint = [Convert]::ToInt32($matches["cp"], 16) 8 | $name = $matches["name"].Replace("_", " ").ToUpper() 9 | Write-Output "$($codePoint.ToString("x4"))`t`"$($name)`"" 10 | } 11 | } 12 | 13 | Write-Output "" -------------------------------------------------------------------------------- /automation/make-keynames.ps1: -------------------------------------------------------------------------------- 1 | Get-Content -Path KBFRZ71_key_names.inc -Encoding UTF8 -Raw 2 | -------------------------------------------------------------------------------- /automation/make-mapping-table.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding()] 2 | param( 3 | [Parameter(Mandatory = $true)] 4 | [string] $path, 5 | [switch] $noHeader = $false 6 | ) 7 | 8 | BEGIN { 9 | 10 | $spaces = @( 11 | 0x00a0, 12 | 0x2003, 13 | 0x202f 14 | ) 15 | 16 | $layers = @( 17 | 0x00a4, # ¤ 18 | 0x00b5, # µ 19 | 0x017f # Eu 20 | ) 21 | 22 | ## Get dead key and corresponding combining code points 23 | ## from the file name 24 | ## e.g: 002f_short_solidus_overlay_0337 25 | ## e.g: 002f_0337_short_solidus_overlay 26 | 27 | $dead = $null 28 | $combining = $null 29 | 30 | $regex = "^.*?(?[a-f0-9]{4})(?:_(?[a-f0-9]{4}))?.*$" 31 | $match = $path -match $regex 32 | 33 | if ($match) { 34 | $dead = [Convert]::ToUint32($matches["cp"], 16) 35 | if ($null -ne $matches["cm"]) { 36 | $combining = [Convert]::ToUint32($matches["cm"], 16) 37 | } 38 | } 39 | else { 40 | $noHeader = $true 41 | } 42 | 43 | Function Make-Object { 44 | param( 45 | [Parameter(Position = 1)] 46 | [string] $codePoint, 47 | [Parameter(Position = 2)] 48 | [string] $mapCodePoint, 49 | [Parameter(Position = 3)] 50 | [string] $character, 51 | [Parameter(Position = 4)] 52 | [string] $mapCharacter 53 | ) 54 | 55 | $obj = New-Object -Type PSObject 56 | $obj | Add-Member -MemberType NoteProperty -Name "CodePoint" -Value $codePoint 57 | $obj | Add-Member -MemberType NoteProperty -Name "Mapped CodePoint" -Value $mapCodePoint 58 | $obj | Add-Member -MemberType NoteProperty -Name "Character" -Value $character 59 | $obj | Add-Member -MemberType NoteProperty -Name "Mapped Character" -Value $mapCharacter 60 | 61 | Write-Output $obj 62 | } 63 | 64 | Function Get-CodePoint { 65 | param([Char] $char) 66 | Write-Output ([Int32] $char) 67 | } 68 | Function Get-Char { 69 | param([int] $codePoint) 70 | Write-Output ([Char] $codePoint) 71 | } 72 | 73 | Function Write-Combining { 74 | param( 75 | [int] $codePoint, 76 | [int] $combiningCodePoint 77 | ) 78 | 79 | $char = Get-Char -CodePoint $codePoint 80 | 81 | $combiningHigh = ($combining -band 0xff00) -shr 8 82 | $combiningLow = ($combining -band 0x00ff) 83 | $array = @(0xcc, 0x25, $combiningLow, $combiningHigh) 84 | $mapped = [Text.Encoding]::Unicode.GetString($array) 85 | 86 | $output = Make-Object ` 87 | -codePoint ($codePoint.ToString("x4")) ` 88 | -mapCodePoint ($combiningCodePoint.ToString("x4")) ` 89 | -character "$char" ` 90 | -mapCharacter "$mapped" 91 | 92 | Write-Output $output 93 | } 94 | 95 | Function Write-Mapped { 96 | param( 97 | [Char] $char, 98 | [Char] $mapped 99 | ) 100 | 101 | $codePoint = Get-CodePoint -Char $char 102 | $mappedCodePoint = Get-CodePoint -Char $mapped 103 | if ($mappedCodePoint -eq 0x2400) { 104 | $mappedCodePoint = 0x0000 105 | } 106 | 107 | $character = $char 108 | $contains = $spaces | ? { $_ -eq $codePoint } 109 | if ($null -ne $contains) { 110 | $character = " " 111 | } 112 | 113 | $output = Make-Object ` 114 | -codePoint ($codePoint.ToString("x4")) ` 115 | -mapCodePoint ($mappedCodePoint.ToString("x4")) ` 116 | -character "$character" ` 117 | -mapCharacter "$mapped" 118 | 119 | Write-Output $output 120 | } 121 | 122 | } 123 | PROCESS { 124 | 125 | if (-not $noHeader.IsPresent) { 126 | Write-Output "DEADKEY $($dead.ToString("x4"))" 127 | Write-Output "" 128 | } 129 | 130 | $table = @() 131 | 132 | Get-Content -Path $path | % { 133 | $char = $_[0] 134 | $mapped = $_[1] 135 | 136 | if ($char -eq " ") { 137 | 138 | $table = $table | Sort-Object -Property "CodePoint" 139 | 140 | if ($null -ne $combining) { 141 | $table += Write-Combining -CodePoint $dead -Combining $combining 142 | } 143 | 144 | $mappedCodePoint = Get-CodePoint -Char $mapped 145 | $layers | % { 146 | $cp = $_ 147 | $has = $table | ? { $_."CodePoint" -eq $cp.ToString("x4") } 148 | if ($has -eq $null) { 149 | $table += Write-Mapped -Char (Get-Char -CodePoint $cp) -Mapped (Get-Char -CodePoint $mappedCodePoint) 150 | } 151 | } 152 | $spaces | % { 153 | $cp = $_ 154 | $table += Write-Mapped -Char (Get-Char -CodePoint $cp) -Mapped (Get-Char -CodePoint $mappedCodePoint) 155 | } 156 | 157 | } 158 | 159 | $table += Write-Mapped -Char $char -Mapped $mapped 160 | } 161 | 162 | $table | % { 163 | $cp = $_."CodePoint" 164 | $mp = $_."Mapped CodePoint" 165 | $ch = $_."Character" 166 | $mh = $_."Mapped Character" 167 | Write-Output "$cp`t$mp`t// $ch -> $mh" 168 | } 169 | 170 | if (-not $noHeader.IsPresent) { 171 | Write-Output "" 172 | } 173 | } -------------------------------------------------------------------------------- /context/Make-KeyboardLayout.ps1: -------------------------------------------------------------------------------- 1 | [CmdletBinding()] 2 | param([string] $version = "1.0.3.40") 3 | 4 | BEGIN { 5 | Function Make-Version { 6 | [CmdletBinding()] 7 | param( 8 | [string]$number, 9 | [switch]$spaces 10 | ) 11 | 12 | $result = $number.Replace(".", ",") 13 | if ($spaces.IsPresent) { 14 | $result = $result.Replace(",", ", ") 15 | } 16 | Write-Output $result 17 | } 18 | 19 | Function Build-Layout { 20 | param( 21 | [string] $name 22 | ) 23 | 24 | BEGIN { 25 | 26 | Function Compile-Layout { 27 | param( 28 | [string] $name, 29 | [string] $option, 30 | [string] $target, 31 | [switch] $quiet = $false 32 | ) 33 | 34 | $expression = "C:\MSKLC\bin\i386\kbdutool.exe -v -w -u $option `"$name.klc`"" 35 | Invoke-Expression -Command $expression | ? { 36 | -not $_.Contains("can't open for write.") 37 | } | % { 38 | if (-not $quiet.IsPresent) { 39 | Write-Host $_ 40 | } 41 | } 42 | 43 | New-Item -Path $target -ItemType Directory -EA SilentlyContinue | Out-Null 44 | Move-Item -Path "$name.DLL" -Destination $target -Force 45 | } 46 | 47 | Function Make-Readonly { 48 | param( 49 | [string] $name, 50 | [switch] $readwrite = $false 51 | ) 52 | if ($readwrite.IsPresent) { 53 | attrib -R "$name.C" 54 | attrib -R "$name.H" 55 | attrib -R "$name.RC" 56 | attrib -R "$name.DEF" 57 | } 58 | else { 59 | attrib +R "$name.C" 60 | attrib +R "$name.H" 61 | attrib +R "$name.RC" 62 | attrib +R "$name.DEF" 63 | } 64 | } 65 | 66 | $x86 = ".\Package_x86\bin\" 67 | $x64 = ".\Package_x64\bin\" 68 | } 69 | 70 | PROCESS { 71 | 72 | ## Protect the files to prevent kbdutool from overwriting them 73 | 74 | Make-ReadOnly -Name $name 75 | 76 | ## Only the last group of commands report 77 | ## warnings an errors feedback in the output 78 | 79 | Compile-Layout -Name $name -Option "-x" -Target $x86 -Quiet 80 | Compile-Layout -Name $name -Option "-m" -Target $x64 81 | 82 | Make-Readonly -Name $name -ReadWrite 83 | } 84 | } 85 | 86 | Function Fix-Encoding { 87 | param( 88 | [string] $name 89 | ) 90 | 91 | PROCESS { 92 | 93 | Set-Content -Path "$name.C" -Encoding UTF8 -Value ` 94 | (Get-Content ` 95 | -Path "$name.C" ` 96 | -Encoding UTF8 ` 97 | -Raw).Replace( 98 | "�", "é" 99 | ).Replace( 100 | "échap", "Échap" 101 | ) 102 | 103 | } 104 | } 105 | 106 | Function Patch-Version { 107 | param( 108 | [string] $name, 109 | [string] $version 110 | ) 111 | 112 | BEGIN { 113 | 114 | $defaultVersion = "1.0.3.40" 115 | $defCommas = Make-Version -Number $defaultVersion 116 | $defSpaces = Make-Version -Number $defaultVersion -Spaces 117 | 118 | $requestedVersion = $version 119 | $reqCommas = Make-Version -Number $requestedVersion 120 | $reqSpaces = Make-Version -Number $requestedVersion -Spaces 121 | 122 | } 123 | 124 | PROCESS { 125 | 126 | Set-Content -Path "$name.RC" -Encoding Unicode -Value ` 127 | (Get-Content ` 128 | -Path "$name.RC" ` 129 | -Encoding Unicode ` 130 | -Raw).Replace( 131 | " (3.40)", "" 132 | ).Replace( 133 | $defCommas, $reqCommas 134 | ).Replace( 135 | $defSpaces, $reqSpaces 136 | ) 137 | } 138 | } 139 | 140 | ## This scripts accepts an argument 141 | ## for testing purposes 142 | ## When launched from a Docker container 143 | ## via AppVeyor, we use an environment 144 | ## variable to specify our requested version number. 145 | 146 | if ($version -eq "1.0.3.40") { 147 | $version = $Env:KBFRZ71_VERSION 148 | if (-not $version) { 149 | $version = "1.0.3.40" 150 | } 151 | } 152 | } 153 | 154 | PROCESS { 155 | 156 | Push-Location -Path "C:\sources" 157 | 158 | ## Remove target CPU folders 159 | ## These folder should not exist previously but this 160 | ## is useful for testing 161 | 162 | Remove-Item -Path Package_x86\bin -Recurse -Force -EA SilentlyContinue | Out-Null 163 | Remove-Item -Path Package_x64\bin -Recurse -Force -EA SilentlyContinue | Out-Null 164 | 165 | ## kbdutool.exe converts the KLC layout to a .C source file 166 | ## and then builds a resulting DLL for each supported target CPU. 167 | ## Unfortunately, the C source file does not use an encoding that 168 | ## preserves the accented characters 169 | 170 | ## First create C source file 171 | 172 | C:\MSKLC\bin\i386\kbdutool.exe -u -s KBFRZ71.klc | Out-Null 173 | C:\MSKLC\bin\i386\kbdutool.exe -u -s KBFRZ71N.klc | Out-Null 174 | 175 | ## Restore corrupted accented characters 176 | 177 | Fix-Encoding -Name KBFRZ71 178 | Fix-Encoding -Name KBFRZ71N 179 | 180 | ## Update version in RC source file 181 | ## MSKLC creates a DLL with version fixed to 1.0.3.40. 182 | ## We need to patch the file to update our version 183 | 184 | Patch-Version -Name KBFRZ71 -Version $version 185 | Patch-Version -Name KBFRZ71N -Version $version 186 | 187 | Build-Layout -Name KBFRZ71 188 | Build-Layout -Name KBFRZ71N 189 | 190 | ##Remove-Item -Path KBFRZ71.C 191 | ##Remove-Item -Path KBFRZ71.H 192 | ##Remove-Item -Path KBFRZ71.RC 193 | ##Remove-Item -Path KBFRZ71.DEF 194 | 195 | ## Copy MSKLC KbdMsi.dll used as Windows Installer custom actions 196 | ## in the resulting .MSI packages 197 | 198 | Copy-Item -Path C:\MSKLC\bin\i386\KbdMsi.dll -Destination Package_x86\bin | Out-Null 199 | 200 | Pop-Location 201 | } -------------------------------------------------------------------------------- /refs/EU_level.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/refs/EU_level.png -------------------------------------------------------------------------------- /refs/base.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/refs/base.png -------------------------------------------------------------------------------- /refs/french.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/refs/french.png -------------------------------------------------------------------------------- /refs/greek_level.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/refs/greek_level.png -------------------------------------------------------------------------------- /refs/main_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/refs/main_layout.png -------------------------------------------------------------------------------- /refs/main_layout.txt: -------------------------------------------------------------------------------- 1 | # Main Layout in txt format 2 | # 3 | # ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _______ 4 | # | # ̑| 1 À| 2 É| 3 È| 4 Ê| 5 ˝| 6 ̏| 7 | 8 —| 9 ‹| 0 ›| " ˚| ¨ | <-- | 5 | # | @ ˘| à §| é ´| è ̀| ê &| ( [| ) ]| ‘ ¯| ’ _| « “| » ”| ' °| ̂ ̌| | 6 | # ======================================================================== 7 | # | |<- | A Æ| Z | E | R | T ™| Y | U Ù| I ̣| O Œ| P ‰| – ‑| ± ‡| , | 8 | # | ->| | a æ| z £| e €| r ®| t {| y }| u ù| i ˙| o œ| p %| - −| + †| <-' | 9 | # ===================================================================¬ | 10 | # | | Q | S ẞ| D | F | G |H ̱| J | K | L | M | \ √| ½ ¼| | 11 | # | MAJ | q θ| s ß| d $| f ¤| g μ|h Eu| j | k ̷| l || m ∞| / ÷| * ×| | 12 | # ======================================================================== 13 | # | ^ | > ≥| W Ʒ| X | C Ç| V ˛| B | N | ? | ! ̦| … | = ≠| ^ | 14 | # | | | < ≤| w ʒ| x ©| c ç| v ¸| b ̵| n ˜| . ¿| , ¡| : ·| ; ≃| | | 15 | # ======================================================================== 16 | # | | | | Espace NoBreakSpace F | | | | | 17 | # | Ctrl | Con+ | Alt | Espace NoBreakSpace | AltGr | Con- | Con | Ctrl | 18 | # ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯¯ 19 | -------------------------------------------------------------------------------- /refs/monetary_level.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/springcomp/optimized-azerty-win/a71ef62acca5961861fcf317117f446fdca90aba/refs/monetary_level.png -------------------------------------------------------------------------------- /src/.gitignore: -------------------------------------------------------------------------------- 1 | \.vs/ 2 | \.vscode/ 3 | 4 | [Bb]in/ 5 | [Oo]bj/ 6 | *.klc 7 | *.C 8 | *.H 9 | *.DEF 10 | *.RC -------------------------------------------------------------------------------- /src/Package_x64/Package_x64.wixproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Debug 5 | x64 6 | 3.10 7 | 9c0beb66-cfca-4d29-9bbc-31ec8adbdf7e 8 | 2.0 9 | KBFRZ71_amd64 10 | Package 11 | 1.0.3.40 12 | false 13 | 14 | 15 | ..\Setup\bin\x86\$(Configuration)\net452\ 16 | obj\$(Configuration)\ 17 | Debug;ProductVersion=$(ProductVersion) 18 | ICE09 19 | -sw1091 20 | 21 | 22 | ..\Setup\bin\x86\$(Configuration)\net452\ 23 | obj\$(Configuration)\ 24 | ProductVersion=$(ProductVersion) 25 | -sw1091 26 | ICE09 27 | 28 | 29 | 30 | CustomAction.wxs 31 | 32 | 33 | Product.wxs 34 | 35 | 36 | Components_x64.wxi 37 | 38 | 39 | Components_x86.wxi 40 | 41 | 42 | Conditions.wxi 43 | 44 | 45 | Features.wxi 46 | 47 | 48 | InstallExecuteSequence.wxi 49 | 50 | 51 | Properties.wxi 52 | 53 | 54 | 55 | 56 | Setup 57 | {2be83297-a293-47a1-9f79-5ab75aebaf55} 58 | True 59 | True 60 | Binaries;Content;Satellites 61 | INSTALLFOLDER 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 77 | -------------------------------------------------------------------------------- /src/Package_x86/Components_x64.wxi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/Package_x86/Components_x86.wxi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/Package_x86/Conditions.wxi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/Package_x86/CustomAction.wxs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/Package_x86/Features.wxi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/Package_x86/InstallExecuteSequence.wxi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 2 ]]> 15 | 2 ]]> 16 | 2 ]]> 17 | 2 ]]> 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 2 ]]> 31 | 2 ]]> 32 | 2 ]]> 33 | 2 ]]> 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/Package_x86/Package_x86.wixproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Debug 5 | x86 6 | 3.10 7 | 31449d77-5f06-456f-812f-4ac4d05119a6 8 | 2.0 9 | KBFRZ71_i386 10 | Package 11 | 1.0.3.40 12 | false 13 | 14 | 15 | ..\Setup\bin\x86\$(Configuration)\net452\ 16 | obj\$(Configuration)\ 17 | Debug;ProductVersion=$(ProductVersion) 18 | ICE09 19 | -sw1091 20 | 21 | 22 | ..\Setup\bin\x86\$(Configuration)\net452\ 23 | obj\$(Configuration)\ 24 | ProductVersion=$(ProductVersion) 25 | -sw1091 26 | ICE09 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | Setup 43 | {2be83297-a293-47a1-9f79-5ab75aebaf55} 44 | True 45 | True 46 | Binaries;Content;Satellites 47 | INSTALLFOLDER 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 63 | -------------------------------------------------------------------------------- /src/Package_x86/Product.wxs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /src/Package_x86/Properties.wxi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 040c 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/Setup.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26124.0 5 | MinimumVisualStudioVersion = 15.0.26124.0 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Setup", "Setup\Setup.csproj", "{2BE83297-A293-47A1-9F79-5AB75AEBAF55}" 7 | EndProject 8 | Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Package_x64", "Package_x64\Package_x64.wixproj", "{9C0BEB66-CFCA-4D29-9BBC-31EC8ADBDF7E}" 9 | EndProject 10 | Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Package_x86", "Package_x86\Package_x86.wixproj", "{31449D77-5F06-456F-812F-4AC4D05119A6}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {2BE83297-A293-47A1-9F79-5AB75AEBAF55}.Debug|Any CPU.ActiveCfg = Debug|x86 19 | {2BE83297-A293-47A1-9F79-5AB75AEBAF55}.Debug|Any CPU.Build.0 = Debug|x86 20 | {2BE83297-A293-47A1-9F79-5AB75AEBAF55}.Release|Any CPU.ActiveCfg = Release|x86 21 | {2BE83297-A293-47A1-9F79-5AB75AEBAF55}.Release|Any CPU.Build.0 = Release|x86 22 | {9C0BEB66-CFCA-4D29-9BBC-31EC8ADBDF7E}.Debug|Any CPU.ActiveCfg = Debug|x64 23 | {9C0BEB66-CFCA-4D29-9BBC-31EC8ADBDF7E}.Debug|Any CPU.Build.0 = Debug|x64 24 | {9C0BEB66-CFCA-4D29-9BBC-31EC8ADBDF7E}.Release|Any CPU.ActiveCfg = Release|x64 25 | {9C0BEB66-CFCA-4D29-9BBC-31EC8ADBDF7E}.Release|Any CPU.Build.0 = Release|x64 26 | {31449D77-5F06-456F-812F-4AC4D05119A6}.Debug|Any CPU.ActiveCfg = Debug|x86 27 | {31449D77-5F06-456F-812F-4AC4D05119A6}.Debug|Any CPU.Build.0 = Debug|x86 28 | {31449D77-5F06-456F-812F-4AC4D05119A6}.Release|Any CPU.ActiveCfg = Release|x86 29 | {31449D77-5F06-456F-812F-4AC4D05119A6}.Release|Any CPU.Build.0 = Release|x86 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | GlobalSection(ExtensibilityGlobals) = postSolution 35 | SolutionGuid = {3FC5F211-3172-451E-98E4-C681845691A2} 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /src/Setup/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Runtime.InteropServices; 5 | 6 | namespace Setup 7 | { 8 | class Program 9 | { 10 | static void Main(string[] args) 11 | { 12 | var installers = new[]{ 13 | "KBFRZ71_i386.msi", 14 | "KBFRZ71_amd64.msi", 15 | }; 16 | 17 | var index = Is64Bit() ? 1 : 0; 18 | 19 | MsiExec(installers[index]); 20 | } 21 | 22 | private static void MsiExec(string name) 23 | { 24 | var package = GetFullPath(name); 25 | if (package == null) 26 | return; 27 | 28 | const string command = "msiexec.exe"; 29 | var options = $"/i \"{package}\""; 30 | 31 | Process.Start( 32 | new ProcessStartInfo 33 | { 34 | FileName = command, 35 | Arguments = options, 36 | CreateNoWindow = true, 37 | UseShellExecute = false, 38 | } 39 | ); 40 | } 41 | 42 | private static string GetFullPath(string fileName) 43 | { 44 | var directory = GetWorkingDirectory(); 45 | if (directory == null) 46 | return null; 47 | 48 | var path = Path.Combine(directory, fileName); 49 | return path; 50 | 51 | } 52 | 53 | private static string GetWorkingDirectory() 54 | { 55 | var directory = System.Reflection.Assembly.GetExecutingAssembly().Location; 56 | if (directory != null) 57 | directory = Path.GetDirectoryName(directory); 58 | return directory; 59 | } 60 | 61 | #region 62 | 63 | [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] 64 | [return: MarshalAs(UnmanagedType.Bool)] 65 | public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo); 66 | 67 | private static bool Is64Bit() 68 | { 69 | if (IntPtr.Size == 8 || (IntPtr.Size == 4 && Is32BitProcessOn64BitProcessor())) 70 | { 71 | return true; 72 | } 73 | else 74 | { 75 | return false; 76 | } 77 | } 78 | 79 | private static bool Is32BitProcessOn64BitProcessor() 80 | { 81 | bool retVal; 82 | 83 | IsWow64Process(Process.GetCurrentProcess().Handle, out retVal); 84 | 85 | return retVal; 86 | } 87 | 88 | #endregion 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/Setup/Setup.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | WinExe 5 | net452 6 | 7 | 8 | AnyCPU;x86 9 | 10 | 11 | 12 | --------------------------------------------------------------------------------