258 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * Copyright (c) 2005 Alexander Gottwald
 | |
|  *
 | |
|  * Permission is hereby granted, free of charge, to any person obtaining a
 | |
|  * copy of this software and associated documentation files (the "Software"),
 | |
|  * to deal in the Software without restriction, including without limitation
 | |
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | |
|  * and/or sell copies of the Software, and to permit persons to whom the
 | |
|  * Software is furnished to do so, subject to the following conditions:
 | |
|  *
 | |
|  * The above copyright notice and this permission notice shall be included in
 | |
|  * all copies or substantial portions of the Software.
 | |
|  *
 | |
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | |
|  * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 | |
|  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 | |
|  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | |
|  * DEALINGS IN THE SOFTWARE.
 | |
|  *
 | |
|  * Except as contained in this notice, the name(s) of the above copyright
 | |
|  * holders shall not be used in advertising or otherwise to promote the sale,
 | |
|  * use or other dealings in this Software without prior written authorization.
 | |
|  */
 | |
| /* Definitions for various keyboard layouts from windows and their 
 | |
|  * XKB settings.
 | |
|  */
 | |
| 
 | |
| typedef struct 
 | |
| {
 | |
|     unsigned int winlayout;
 | |
|     int winkbtype;
 | |
|     char *xkbmodel;
 | |
|     char *xkblayout;
 | |
|     char *xkbvariant;
 | |
|     char *xkboptions;
 | |
|     char *layoutname;
 | |
| } WinKBLayoutRec, *WinKBLayoutPtr;
 | |
| 
 | |
| WinKBLayoutRec winKBLayouts[] = 
 | |
| {
 | |
|     {  0x405, -1, "pc105", "cz",      NULL, NULL, "Czech"},
 | |
|     {0x10405, -1, "pc105", "cz_qwerty", NULL, NULL, "Czech (QWERTY)"},
 | |
|     {  0x406, -1, "pc105", "dk",      NULL, NULL, "Danish"},
 | |
|     {  0x407, -1, "pc105", "de",      NULL, NULL, "German (Germany)"},
 | |
|     {0x10407, -1, "pc105", "de",      NULL, NULL, "German (Germany, IBM)"},
 | |
|     {  0x807, -1, "pc105", "de_CH",   NULL, NULL, "German (Switzerland)"},
 | |
|     {  0x409, -1, "pc105", "us",      NULL, NULL, "English (USA)"},
 | |
|     {0x10409, -1, "pc105", "dvorak",  NULL, NULL, "English (USA, Dvorak)"}, 
 | |
|     {0x20409, -1, "pc105", "us_intl", NULL, NULL, "English (USA, International)"}, 
 | |
|     {  0x809, -1, "pc105", "gb",      NULL, NULL, "English (United Kingdom)"},
 | |
|     { 0x1809, -1, "pc105", "ie",      NULL, NULL, "Irish"},
 | |
|     {  0x40a, -1, "pc105", "es",      NULL, NULL, "Spanish (Spain, Traditional Sort)"},
 | |
|     {  0x40b, -1, "pc105", "fi",      NULL, NULL, "Finnish"},
 | |
|     {  0x40c, -1, "pc105", "fr",      NULL, NULL, "French (Standard)"},
 | |
|     {  0x80c, -1, "pc105", "be",      NULL, NULL, "French (Belgian)"},
 | |
|     {  0xc0c, -1, "pc105", "ca_enhanced", NULL, NULL, "French (Canada)"},
 | |
|     { 0x100c, -1, "pc105", "fr_CH",   NULL, NULL, "French (Switzerland)"},
 | |
|     {  0x40e, -1, "pc105", "hu",      NULL, NULL, "Hungarian"},
 | |
|     {  0x410, -1, "pc105", "it",      NULL, NULL, "Italian"},
 | |
|     {  0x411,  7, "jp106", "jp",      NULL, NULL, "Japanese"},
 | |
|     {  0x813, -1, "pc105", "be",      NULL, NULL, "Dutch (Belgian)"},  
 | |
|     {  0x414, -1, "pc105", "no",      NULL, NULL, "Norwegian"},
 | |
|     {  0x416, -1, "pc105", "br",      NULL, NULL, "Portuguese (Brazil, ABNT)"},
 | |
|     {0x10416, -1, "abnt2", "br",      NULL, NULL, "Portuguese (Brazil, ABNT2)"},
 | |
|     {  0x816, -1, "pc105", "pt",      NULL, NULL, "Portuguese (Portugal)"},
 | |
|     {  0x41d, -1, "pc105", "se",      NULL, NULL, "Swedish (Sweden)"},
 | |
|     {     -1, -1, NULL,    NULL,      NULL, NULL, NULL}
 | |
| };
 | |
| 
 | |
| /* Listing of language codes from MSDN */
 | |
| /*
 | |
| Support ID       XKB        Language
 | |
| ====================================================================
 | |
|    ?    0x0000              Language Neutral
 | |
|    ?    0x0400              Process or User Default Language
 | |
|    ?    0x0800              System Default Language
 | |
|         0x0401              Arabic (Saudi Arabia)
 | |
|         0x0801              Arabic (Iraq)
 | |
|         0x0c01              Arabic (Egypt)
 | |
|         0x1001              Arabic (Libya)
 | |
|         0x1401              Arabic (Algeria)
 | |
|         0x1801              Arabic (Morocco)
 | |
|         0x1c01              Arabic (Tunisia)
 | |
|         0x2001              Arabic (Oman)
 | |
|         0x2401              Arabic (Yemen)
 | |
|         0x2801              Arabic (Syria)
 | |
|         0x2c01              Arabic (Jordan)
 | |
|         0x3001              Arabic (Lebanon)
 | |
|         0x3401              Arabic (Kuwait)
 | |
|         0x3801              Arabic (U.A.E.)
 | |
|         0x3c01              Arabic (Bahrain)
 | |
|         0x4001              Arabic (Qatar)
 | |
|                             Arabic (102) AZERTY        				
 | |
|         0x0402              Bulgarian
 | |
|         0x0403              Catalan
 | |
|         0x0404              Chinese (Taiwan)
 | |
|         0x0804              Chinese (PRC)
 | |
|         0x0c04              Chinese (Hong Kong SAR, PRC)
 | |
|         0x1004              Chinese (Singapore)
 | |
|         0x1404              Chinese (Macao SAR) (98/ME,2K/XP)
 | |
|    X    0x0405  cz          Czech
 | |
|    X            cz_qwerty   Czech (QWERTY)
 | |
|                             Czech (Programmers)
 | |
|    X    0x0406  dk          Danish
 | |
|    X    0x0407  de          German (Standard)
 | |
|    X    0x0807  de_CH       German (Switzerland)
 | |
|         0x0c07              German (Austria)
 | |
|         0x1007              German (Luxembourg)
 | |
|         0x1407              German (Liechtenstein)
 | |
|         0x0408              Greek
 | |
|    X    0x0409  us          English (United States)
 | |
|    X    0x0809  gb          English (United Kingdom)
 | |
|         0x0c09              English (Australian)
 | |
|         0x1009              English (Canadian)
 | |
|         0x1409              English (New Zealand)
 | |
|    X    0x1809  ie          English (Ireland)
 | |
|         0x1c09              English (South Africa)
 | |
|         0x2009              English (Jamaica)
 | |
|         0x2409              English (Caribbean)
 | |
|         0x2809              English (Belize)
 | |
|         0x2c09              English (Trinidad)
 | |
|         0x3009              English (Zimbabwe) (98/ME,2K/XP)
 | |
|         0x3409              English (Philippines) (98/ME,2K/XP)
 | |
|    X    0x040a  es          Spanish (Spain, Traditional Sort)
 | |
|         0x080a              Spanish (Mexican)
 | |
|         0x0c0a              Spanish (Spain, Modern Sort)
 | |
|         0x100a              Spanish (Guatemala)
 | |
|         0x140a              Spanish (Costa Rica)
 | |
|         0x180a              Spanish (Panama)
 | |
|         0x1c0a              Spanish (Dominican Republic)
 | |
|         0x200a              Spanish (Venezuela)
 | |
|         0x240a              Spanish (Colombia)
 | |
|         0x280a              Spanish (Peru)
 | |
|         0x2c0a              Spanish (Argentina)
 | |
|         0x300a              Spanish (Ecuador)
 | |
|         0x340a              Spanish (Chile)
 | |
|         0x380a              Spanish (Uruguay)
 | |
|         0x3c0a              Spanish (Paraguay)
 | |
|         0x400a              Spanish (Bolivia)
 | |
|         0x440a              Spanish (El Salvador)
 | |
|         0x480a              Spanish (Honduras)
 | |
|         0x4c0a              Spanish (Nicaragua)
 | |
|         0x500a              Spanish (Puerto Rico)
 | |
|    X    0x040b  fi          Finnish
 | |
|                             Finnish (with Sami)
 | |
|    X    0x040c  fr          French (Standard)
 | |
|    X    0x080c  be          French (Belgian)
 | |
|    .    0x0c0c              French (Canadian)
 | |
|                             French (Canadian, Legacy)
 | |
|                             Canadian (Multilingual)
 | |
|    X    0x100c  fr_CH       French (Switzerland)
 | |
|         0x140c              French (Luxembourg)
 | |
|         0x180c              French (Monaco) (98/ME,2K/XP)
 | |
|         0x040d              Hebrew
 | |
|    X    0x040e  hu          Hungarian
 | |
|    .    0x040f              Icelandic
 | |
|    X    0x0410  it          Italian (Standard)
 | |
|         0x0810              Italian (Switzerland)
 | |
|    X    0x0411  jp          Japanese
 | |
|         0x0412              Korean
 | |
|         0x0812              Korean (Johab) (95,NT)
 | |
|    .    0x0413              Dutch (Netherlands)
 | |
|    X    0x0813  be          Dutch (Belgium)
 | |
|    X    0x0414  no          Norwegian (Bokmal)
 | |
|         0x0814              Norwegian (Nynorsk)
 | |
|    .    0x0415              Polish
 | |
|    X    0x0416  br          Portuguese (Brazil)
 | |
|    X    0x0816  pt          Portuguese (Portugal)
 | |
|    .    0x0418              Romanian
 | |
|         0x0419              Russian
 | |
|    .    0x041a              Croatian
 | |
|    .    0x081a              Serbian (Latin)
 | |
|    .    0x0c1a              Serbian (Cyrillic)
 | |
|         0x101a              Croatian (Bosnia and Herzegovina)
 | |
|         0x141a              Bosnian (Bosnia and Herzegovina)
 | |
|         0x181a              Serbian (Latin, Bosnia, and Herzegovina)
 | |
|         0x1c1a              Serbian (Cyrillic, Bosnia, and Herzegovina)
 | |
|    .    0x041b              Slovak
 | |
|    .    0x041c              Albanian
 | |
|    X    0x041d  se          Swedish
 | |
|         0x081d              Swedish (Finland)
 | |
|         0x041e              Thai
 | |
|         0x041f              Turkish
 | |
|         0x0420              Urdu (Pakistan) (98/ME,2K/XP) 
 | |
|         0x0820              Urdu (India)
 | |
|         0x0421              Indonesian
 | |
|         0x0422              Ukrainian
 | |
|         0x0423              Belarusian
 | |
|    .    0x0424              Slovenian
 | |
|         0x0425              Estonian
 | |
|         0x0426              Latvian
 | |
|         0x0427              Lithuanian
 | |
|         0x0827              Lithuanian (Classic) (98)
 | |
|         0x0429              Farsi
 | |
|         0x042a              Vietnamese (98/ME,NT,2K/XP)
 | |
|         0x042b              Armenian. This is Unicode only. (2K/XP)
 | |
|                             Armenian Eastern
 | |
|                             Armenian Western
 | |
|         0x042c              Azeri (Latin)
 | |
|         0x082c              Azeri (Cyrillic)
 | |
|         0x042d              Basque
 | |
|         0x042f              Macedonian (FYROM)
 | |
|         0x0430              Sutu
 | |
|         0x0432              Setswana/Tswana (South Africa)
 | |
|         0x0434              isiXhosa/Xhosa (South Africa)
 | |
|         0x0435              isiZulu/Zulu (South Africa)
 | |
|         0x0436              Afrikaans
 | |
|         0x0437              Georgian. This is Unicode only. (2K/XP)
 | |
|    .    0x0438              Faeroese
 | |
|         0x0439              Hindi. This is Unicode only. (2K/XP)
 | |
|         0x043a              Maltese (Malta)
 | |
|         0x043b              Sami, Northern (Norway)
 | |
|         0x083b              Sami, Northern (Sweden)
 | |
|         0x0c3b              Sami, Northern (Finland)
 | |
|         0x103b              Sami, Lule (Norway)
 | |
|         0x143b              Sami, Lule (Sweden)
 | |
|         0x183b              Sami, Southern (Norway)
 | |
|         0x1c3b              Sami, Southern (Sweden)
 | |
|         0x203b              Sami, Skolt (Finland)
 | |
|         0x243b              Sami, Inari (Finland)
 | |
|         0x043e              Malay (Malaysian)
 | |
|         0x083e              Malay (Brunei Darussalam)
 | |
|         0x0440              Kyrgyz. (XP)
 | |
|         0x0441              Swahili (Kenya)
 | |
|         0x0443              Uzbek (Latin)
 | |
|         0x0843              Uzbek (Cyrillic)
 | |
|         0x0444              Tatar (Tatarstan)
 | |
|         0x0445              Bengali (India)
 | |
|                             Bengali (Inscript)
 | |
|         0x0446              Punjabi. This is Unicode only. (XP)
 | |
|         0x0447              Gujarati. This is Unicode only. (XP)
 | |
|         0x0449              Tamil. This is Unicode only. (2K/XP)
 | |
|         0x044a              Telugu. This is Unicode only. (XP)
 | |
|         0x044b              Kannada. This is Unicode only. (XP)
 | |
|         0x044c              Malayalam (India)
 | |
|         0x044e              Marathi. This is Unicode only. (2K/XP)
 | |
|         0x044f              Sanskrit. This is Unicode only. (2K/XP)
 | |
|         0x0450              Mongolian (XP)
 | |
|         0x0452              Welsh (United Kingdom)
 | |
|         0x0455              Burmese
 | |
|         0x0456              Galician (XP)
 | |
|         0x0457              Konkani. This is Unicode only. (2K/XP)
 | |
|         0x045a              Syriac. This is Unicode only. (XP)
 | |
|         0x0465              Divehi. This is Unicode only. (XP)
 | |
|                             Divehi (Phonetic)
 | |
|                             Divehi (Typewriter)
 | |
|         0x046b              Quechua (Bolivia)
 | |
|         0x086b              Quechua (Ecuador)
 | |
|         0x0c6b              Quechua (Peru)
 | |
|         0x046c              Sesotho sa Leboa/Northern Sotho (South Africa)
 | |
|         0x007f              LOCALE_INVARIANT. See MAKELCID.
 | |
|         0x0481              Maori (New Zealand)
 | |
| */    
 | |
| 
 | |
| 
 |