toupper.c

Go to the documentation of this file.
00001 #include "codepage.h"
00002 
00003 /* MS-DOS doesn't use the same ASCII code as Unix does. The appearance
00004  * of the characters is defined using code pages. These code pages
00005  * aren't the same for all countries. For instance, some code pages
00006  * don't contain upper case accented characters. This affects two
00007  * things, relating to filenames:
00008 
00009  * 1. upper case characters. In short names, only upper case
00010  * characters are allowed.  This also holds for accented characters.
00011  * For instance, in a code page which doesn't contain accented
00012  * uppercase characters, the accented lowercase characters get
00013  * transformed into their unaccented counterparts. This is very bad
00014  * design. Indeed, stuff like national language support should never
00015  * affect filesystem integrity. And it does: A filename which is legal
00016  * in one country could be illegal in another one. Bad News for
00017  * frequent travellers.
00018 
00019  * 2. long file names: Micro$oft has finally come to their senses and
00020  * uses a more standard mapping for the long file names.  They use
00021  * Unicode, which is basically a 32 bit version of ASCII. Its first
00022  * 256 characters are identical to Unix ASCII. Thus, the code page
00023  * also affects the correspondence between the codes used in long
00024  * names and those used in short names.
00025 
00026  * Such a bad design is rather unbelievable. That's why I quoted the
00027  * translation tables. BEGIN FAIR USE EXCERPT:
00028  */
00029 
00030 unsigned char toucase[][128]={
00031         /* 0 */
00032         /* 437 German Umlauts upcased, French accents 
00033          * upcased and lose accent */
00034         { 0x80, 0x9a, 0x45, 0x41, 0x8e, 0x41, 0x8f, 0x80, 
00035           0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x8e, 0x8f, 
00036           0x90, 0x92, 0x92, 0x4f, 0x99, 0x4f, 0x55, 0x55, 
00037           0x59, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 
00038           0x41, 0x49, 0x4f, 0x55, 0xa5, 0xa5, 0xa6, 0xa7, 
00039           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00040           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
00041           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00042           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
00043           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00044           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
00045           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
00046           0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
00047           0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
00048           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00049           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00050 
00051         /* 1 */
00052         { 0x43, 0x55, 0x45, 0x41, 0x41, 0x41, 0x86, 0x43, 
00053           0x45, 0x45, 0x45, 0x49, 0x49, 0x8d, 0x41, 0x8f, 
00054           0x45, 0x45, 0x45, 0x4f, 0x45, 0x49, 0x55, 0x55, 
00055           0x98, 0x4f, 0x55, 0x9b, 0x9c, 0x55, 0x55, 0x9f, 
00056           0xa0, 0xa1, 0x4f, 0x55, 0xa4, 0xa5, 0xa6, 0xa7, 
00057           0x49, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00058           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
00059           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00060           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
00061           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00062           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
00063           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
00064           0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
00065           0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
00066           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00067           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00068 
00069         /* 2 */
00070         { 0x80, 0x9a, 0x90, 0x41, 0x8e, 0x41, 0x8f, 0x80, 
00071           0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x8e, 0x8f, 
00072           0x90, 0x92, 0x92, 0x4f, 0x99, 0x4f, 0x55, 0x55, 
00073           0x59, 0x99, 0x9a, 0x9d, 0x9c, 0x9d, 0x9e, 0x9f, 
00074           0x41, 0x49, 0x4f, 0x55, 0xa5, 0xa5, 0xa6, 0xa7, 
00075           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00076           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
00077           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00078           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
00079           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00080           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
00081           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
00082           0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
00083           0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
00084           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00085           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00086 
00087         /* 3 */
00088         { 0x80, 0x9a, 0x90, 0x41, 0x8e, 0x41, 0x8f, 0x80, 
00089           0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x8e, 0x8f, 
00090           0x90, 0x92, 0x92, 0x4f, 0x99, 0x4f, 0x55, 0x55, 
00091           0x59, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 
00092           0x41, 0x49, 0x4f, 0x55, 0xa5, 0xa5, 0xa6, 0xa7, 
00093           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00094           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
00095           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00096           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
00097           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00098           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
00099           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
00100           0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
00101           0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
00102           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00103           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00104 
00105         /* 4 
00106          * 437: all accented characters lose their accent */
00107         { 0x80, 0x55, 0x45, 0x41, 0x41, 0x41, 0x8f, 0x80, 
00108           0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x41, 0x8f, 
00109           0x45, 0x92, 0x92, 0x4f, 0x4f, 0x4f, 0x55, 0x55, 
00110           0x98, 0x4f, 0x55, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 
00111           0x41, 0x49, 0x4f, 0x55, 0xa5, 0xa5, 0xa6, 0xa7, 
00112           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00113           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
00114           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00115           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
00116           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00117           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
00118           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
00119           0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
00120           0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
00121           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00122           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00123 
00124         /* 5 */
00125         { 0x80, 0x9a, 0x90, 0x8f, 0x8e, 0x91, 0x86, 0x80, 
00126           0x89, 0x89, 0x92, 0x8b, 0x8c, 0x98, 0x8e, 0x8f, 
00127           0x90, 0x91, 0x92, 0x8c, 0x99, 0xa9, 0x96, 0x9d, 
00128           0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 
00129           0x86, 0x8b, 0x9f, 0x96, 0xa5, 0xa5, 0xa6, 0xa7, 
00130           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00131           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
00132           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00133           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
00134           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00135           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
00136           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
00137           0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
00138           0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
00139           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00140           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00141 
00142         /* 6 All accented characters lose their accent
00143            when upcased. C loses cedilla. æ upcased. ø
00144            loses slash. Ð, ñ, ß intact */
00145         { 0x43, 0x55, 0x45, 0x41, 0x41, 0x41, 0x41, 0x43, 
00146           0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x41, 0x41, 
00147           0x45, 0x92, 0x92, 0x4f, 0x4f, 0x4f, 0x55, 0x55, 
00148           0x59, 0x4f, 0x55, 0x4f, 0x9c, 0x4f, 0x9e, 0x9f, 
00149           0x41, 0x49, 0x4f, 0x55, 0xa5, 0xa5, 0xa6, 0xa7, 
00150           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00151           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x41, 0x41, 0x41, 
00152           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00153           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x41, 0x41, 
00154           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00155           0xd1, 0xd1, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 
00156           0x49, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x49, 0xdf, 
00157           0x4f, 0xe1, 0x4f, 0x4f, 0x4f, 0x4f, 0xe6, 0xe8, 
00158           0xe8, 0x55, 0x55, 0x55, 0x59, 0x59, 0xee, 0xef, 
00159           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00160           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00161 
00162         /* 7: As 6, but German Umlauts keep their Umlaut */
00163         { 0x43, 0x9a, 0x45, 0x41, 0x8e, 0x41, 0x41, 0x43, 
00164           0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x8e, 0x41, 
00165           0x45, 0x92, 0x92, 0x4f, 0x99, 0x4f, 0x55, 0x55, 
00166           0x59, 0x99, 0x9a, 0x4f, 0x9c, 0x4f, 0x9e, 0x9f, 
00167           0x41, 0x49, 0x4f, 0x55, 0xa5, 0xa5, 0xa6, 0xa7, 
00168           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00169           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x41, 0x41, 0x41, 
00170           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00171           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x41, 0x41, 
00172           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00173           0xd1, 0xd1, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 
00174           0x49, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x49, 0xdf, 
00175           0x4f, 0xe1, 0x4f, 0x4f, 0x4f, 0x4f, 0xe6, 0xe8, 
00176           0xe8, 0x55, 0x55, 0x55, 0x59, 0x59, 0xee, 0xef, 
00177           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00178           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00179 
00180         /* 8: All characters except ÿ keep their accent
00181          */
00182         { 0x80, 0x9a, 0x90, 0xb6, 0x8e, 0xb7, 0x8f, 0x80, 
00183           0xd2, 0xd3, 0xd4, 0xd8, 0xd7, 0xde, 0x8e, 0x8f, 
00184           0x90, 0x92, 0x92, 0xe2, 0x99, 0xe3, 0xea, 0xeb, 
00185           0x59, 0x99, 0x9a, 0x9d, 0x9c, 0x9d, 0x9e, 0x9f, 
00186           0xb5, 0xd6, 0xe0, 0xe9, 0xa5, 0xa5, 0xa6, 0xa7, 
00187           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00188           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
00189           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00190           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc7, 0xc7, 
00191           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00192           0xd1, 0xd1, 0xd2, 0xd3, 0xd4, 0x49, 0xd6, 0xd7, 
00193           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
00194           0xe0, 0xe1, 0xe2, 0xe3, 0xe5, 0xe5, 0xe6, 0xe8, 
00195           0xe8, 0xe9, 0xea, 0xeb, 0xed, 0xed, 0xee, 0xef, 
00196           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00197           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00198 
00199         /* 9: As 6, but Ç and Å preserved */
00200         { 0x80, 0x55, 0x45, 0x41, 0x41, 0x41, 0x8f, 0x80, 
00201           0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x41, 0x8f, 
00202           0x45, 0x92, 0x92, 0x4f, 0x4f, 0x4f, 0x55, 0x55, 
00203           0x98, 0x4f, 0x55, 0x4f, 0x9c, 0x4f, 0x9e, 0x9f, 
00204           0x41, 0x49, 0x4f, 0x55, 0xa5, 0xa5, 0xa6, 0xa7, 
00205           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00206           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x41, 0x41, 0x41, 
00207           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00208           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x41, 0x41, 
00209           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00210           0xd1, 0xd1, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 
00211           0x49, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x49, 0xdf, 
00212           0x4f, 0xe1, 0x4f, 0x4f, 0x4f, 0x4f, 0xe6, 0xe8, 
00213           0xe8, 0x55, 0x55, 0x55, 0x59, 0x59, 0xee, 0xef, 
00214           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00215           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00216 
00217         /* 10: every accented character keeps its accent */
00218         { 0x80, 0x9a, 0x90, 0xb6, 0x8e, 0xb7, 0x8f, 0x80, 
00219           0xd2, 0xd3, 0xd4, 0xd8, 0xd7, 0xde, 0x8e, 0x8f, 
00220           0x90, 0x92, 0x92, 0xe2, 0x99, 0xe3, 0xea, 0xeb, 
00221           0x98, 0x99, 0x9a, 0x9d, 0x9c, 0x9d, 0x9e, 0x9f, 
00222           0xb5, 0xd6, 0xe0, 0xe9, 0xa5, 0xa5, 0xa6, 0xa7, 
00223           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
00224           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
00225           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
00226           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc7, 0xc7, 
00227           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00228           0xd1, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
00229           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
00230           0xe0, 0xe1, 0xe2, 0xe3, 0xe5, 0xe5, 0xe6, 0xe8, 
00231           0xe8, 0xe9, 0xea, 0xeb, 0xed, 0xed, 0xee, 0xef, 
00232           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00233           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00234 
00235         /* 11 */
00236         { 0x80, 0x9a, 0x90, 0xb6, 0x8e, 0xde, 0x8f, 0x80, 
00237           0x9d, 0xd3, 0x8a, 0x8a, 0xd7, 0x8d, 0x8e, 0x8f, 
00238           0x90, 0x91, 0x91, 0xe2, 0x99, 0x95, 0x95, 0x97, 
00239           0x97, 0x99, 0x9a, 0x9b, 0x9b, 0x9d, 0x9e, 0xac, 
00240           0xb5, 0xd6, 0xe0, 0xe9, 0xa4, 0xa4, 0xa6, 0xa6, 
00241           0xa8, 0xa8, 0xaa, 0x8d, 0xac, 0xb8, 0xae, 0xaf, 
00242           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
00243           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbd, 0xbf, 
00244           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc6, 
00245           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
00246           0xd1, 0xd1, 0xd2, 0xd3, 0xd2, 0xd5, 0xd6, 0xd7, 
00247           0xb7, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
00248           0xe0, 0xe1, 0xe2, 0xe3, 0xe3, 0xd5, 0xe6, 0xe6, 
00249           0xe8, 0xe9, 0xe8, 0xeb, 0xed, 0xed, 0xdd, 0xef, 
00250           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
00251           0xf8, 0xf9, 0xfa, 0xeb, 0xfc, 0xfc, 0xfe, 0xff },
00252 
00253 
00254         /* 14 All accented characters lose their accent, C loses cedilla,
00255          * ø loses slash.  æ upcased. Ð, ñ, ß intact */
00256         { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
00257           0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
00258 
00259           0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
00260           0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
00261 
00262           0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
00263           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
00264 
00265           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
00266           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
00267 
00268           0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xc6, 0x43,
00269           0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49,
00270 
00271           0xd0, 0xd1, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0xd7,
00272           0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0xde, 0xdf,
00273 
00274           0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xc6, 0x43,
00275           0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49,
00276 
00277           0xd0, 0xd1, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0xf7,
00278           0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0xde, 0x59  },
00279 
00280 
00281 
00282         /* 15 as 14, but German Umlauts (ä, ö, ü) keep their Umlaut when
00283            upcased */
00284         { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
00285           0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
00286 
00287           0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
00288           0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
00289 
00290           0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
00291           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
00292 
00293           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
00294           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
00295 
00296           0x41, 0x41, 0x41, 0x41, 0xc4, 0x41, 0xc6, 0x43,
00297           0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49,
00298 
00299           0xd0, 0xd1, 0x4f, 0x4f, 0x4f, 0x4f, 0xd6, 0xd7,
00300           0x4f, 0x55, 0x55, 0x55, 0xdc, 0x59, 0xde, 0xdf,
00301 
00302           0x41, 0x41, 0x41, 0x41, 0xc4, 0x41, 0xc6, 0x43,
00303           0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49,
00304 
00305           0xd0, 0xd1, 0x4f, 0x4f, 0x4f, 0x4f, 0xd6, 0xf7,
00306           0x4f, 0x55, 0x55, 0x55, 0xdc, 0x59, 0xde, 0x59  },
00307 
00308 
00309         /* 16 every accented character except ÿ keeps its accent */
00310         { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
00311           0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
00312 
00313           0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
00314           0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
00315 
00316           0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
00317           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
00318 
00319           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
00320           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
00321 
00322           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00323           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00324 
00325           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
00326           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
00327 
00328           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00329           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00330 
00331           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7,
00332           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x59 },
00333 
00334 
00335 
00336         /* 17: As 6, but Ç, Å and ÿ preserved */
00337         { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
00338           0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
00339 
00340           0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
00341           0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
00342 
00343           0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
00344           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
00345 
00346           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
00347           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
00348 
00349           0x41, 0x41, 0x41, 0x41, 0x41, 0xc5, 0xc6, 0xc7,
00350           0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49,
00351 
00352           0xd0, 0xd1, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0xd7,
00353           0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0xde, 0xdf,
00354 
00355           0x41, 0x41, 0x41, 0x41, 0x41, 0xc5, 0xc6, 0xc7,
00356           0x45, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49,
00357 
00358           0xd0, 0xd1, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0xf7,
00359           0x4f, 0x55, 0x55, 0x55, 0x55, 0x59, 0xde, 0xff  },
00360 
00361 
00362         /* 18 every accented character keeps its accent */
00363         { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
00364           0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
00365 
00366           0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
00367           0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
00368 
00369           0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
00370           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
00371 
00372           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
00373           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
00374 
00375           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00376           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00377 
00378           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
00379           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
00380 
00381           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00382           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00383 
00384           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7,
00385           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff },
00386 
00387 
00388         /* 19 */
00389         { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
00390           0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
00391           0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
00392           0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
00393           0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
00394           0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
00395           0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
00396           0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
00397           0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
00398           0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
00399           0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
00400           0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
00401           0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
00402           0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
00403           0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
00404           0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff },
00405 
00406 };
00407 
00408 country_t countries[]={
00409         {   1, 437, 437,   0 },
00410         {   1, 850, 437,   6 },
00411         {   1, 819, 437,  14 },
00412         {  44, 437, 437,   0 },
00413         {  44, 850, 437,   6 },
00414         {  44, 819, 437,  14 },
00415         {  33, 437, 437,   0 },
00416         {  33, 850, 437,   6 },
00417         {  33, 819, 437,  14 },
00418         {  49, 437, 437,   0 },
00419         {  49, 850, 437,   7 },
00420         {  49, 819, 437,  15 },
00421         {  34, 850, 437,   8 },
00422         {  34, 819, 437,  16 },
00423         {  34, 437, 437,   0 },
00424         {  39, 437, 437,   0 },
00425         {  39, 850, 437,   6 },
00426         {  39, 819, 437,  14 },
00427         {  46, 437, 437,   3 },
00428         {  46, 850, 437,   8 },
00429         {  46, 819, 437,  16 },
00430         {  45, 850, 865,   8 },
00431         {  45, 819, 865,  16 },
00432         {  45, 865, 865,   2 },
00433         {  41, 850, 437,   8 },
00434         {  41, 819, 437,  16 },
00435         {  41, 437, 437,   3 },
00436         {  47, 850, 865,   8 },
00437         {  47, 819, 865,  16 },
00438         {  47, 865, 865,   2 },
00439         {  31, 437, 437,   4 },
00440         {  31, 850, 437,   9 },
00441         {  31, 819, 437,  17 },
00442         {  32, 850, 437,   8 },
00443         {  32, 819, 437,  16 },
00444         {  32, 437, 437,   3 },
00445         { 358, 850, 437,   8 },
00446         { 358, 819, 437,  16 },
00447         { 358, 437, 437,   3 },
00448         {   2, 863, 863,   1 },
00449         {   2, 850, 863,   6 },
00450         {   2, 819, 863,  14 },
00451         { 351, 850, 860,   6 },
00452         { 351, 819, 860,  14 },
00453         { 351, 860, 860,   5 },
00454         {   3, 850, 437,   8 },
00455         {   3, 819, 437,  16 },
00456         {   3, 437, 437,   0 },
00457         {  61, 437, 437,   0 },
00458         {  61, 850, 437,   6 },
00459         {  61, 819, 437,  16 },
00460         {  81, 437, 437,   0 },
00461         {  81, 819, 437,  14 },
00462         {  82, 437, 437,   0 },
00463         {  82, 819, 437,  14 },
00464         {  86, 437, 437,   0 },
00465         {  86, 819, 437,  14 },
00466         {  88, 437, 437,   0 },
00467         {  88, 819, 437,  14 },
00468         {  55, 850, 850,  10 },
00469         {  55, 819, 850,  18 },
00470         {  55, 437, 850,   0 },
00471         { 354, 850, 850,  10 },
00472         { 354, 819, 850,  18 },
00473         {  90, 850, 850,  10 },
00474         {  90, 819, 850,  18 },
00475         {  38, 852, 852,  11 },
00476         {  38, 850, 852,  10 },
00477         {  38, 819, 852,  18 },
00478         {  42, 852, 852,  11 },
00479         {  42, 850, 852,  10 },
00480         {  42, 819, 852,  18 },
00481         {  48, 852, 852,  11 },
00482         {  48, 850, 852,  10 },
00483         {  48, 819, 852,  18 },
00484         {  36, 852, 852,  11 },
00485         {  36, 850, 852,  10 },
00486         {  36, 819, 852,  18 },
00487         { 886, 950, 950,  19 },         /* for Taiwan support (Country code) */
00488         {   0,   0,   0,   0 }
00489 };
00490 
00491 /* END FAIR USE EXCERPT */

Generated on Fri Apr 14 22:56:56 2006 for minix by  doxygen 1.4.6