2 Copyright © 1995-2013, The AROS Development Team. All rights reserved.
5 Desc: english.language description file.
8 Language description file for english.language.
10 So what is this thing?
11 Well basically it's a template for you to write
12 description files for your own language.
15 A language file is simply a shared library that
16 the locale.library loads into memory. The language
17 must define at least one function, which tells locale
18 which other functions it defines. This function has an
19 an LVO number of 5 (-30 on m68k/amiga). The function
20 has to return a mask which has a bit set for each
21 function that this library defines. Functions which
22 this library does not define are filled in by the
23 functions from the english.language definition
24 (which is essentially what this file defines).
27 You have to write functions for all the locale
28 functions which would be different for your
29 language. Typically this would be just function 3,
30 GetLangString(), which returns the string
31 returned by the locale.library function
34 There are some parts of this file which will also need to
35 be altered (language names and versions), but these will
38 NOTE: This file should ideally be self-contained,
39 not relying upon any third party shared libraries.
41 In fact it is impossible to make library function
42 calls inside the locale support functions since you
43 will actually have no library base to work with.
46 #include <exec/types.h>
47 #include <exec/resident.h>
48 #include <exec/libraries.h>
49 #include <libraries/locale.h>
51 #include <proto/exec.h>
52 #include <aros/libcall.h>
53 #include <aros/asmcall.h>
55 /* -----------------------------------------------------------------------
57 You will have to change all of these to suit your language,
58 these will be used in many definitions below.
61 #define LANGSTR "english" /* String version of above */
62 #define NLANGSTR "english" /* Native version of LANGSTR */
63 #define LANGVER 41 /* Version number of language */
64 #define LANGREV 2 /* Revision number of language */
65 #define LANGTAG "\0$VER: " LANGSTR ".language 41.2 (14.04.2013)"
66 #define NLANGTAG "$NLANG:" NLANGSTR
68 AROS_LD1(STRPTR
, getlangstring
,
69 AROS_LHA(ULONG
, id
, D0
),
70 struct LocaleBase
*, LocaleBase
, 9, language
);
72 /* ----------------------------------------------------------------------- */
74 /* Bit masks for locale .language functions. */
75 #define LF_ConvToLower (1L << 0)
76 #define LF_ConvToUpper (1L << 1)
77 #define LF_Private2 (1L << 2)
78 #define LF_GetLangStr (1L << 3)
79 #define LF_IsAlNum (1L << 4)
80 #define LF_IsAlpha (1L << 5)
81 #define LF_IsCntrl (1L << 6)
82 #define LF_IsDigit (1L << 7)
83 #define LF_IsGraph (1L << 8)
84 #define LF_IsLower (1L << 9)
85 #define LF_IsPrint (1L << 10)
86 #define LF_IsPunct (1L << 11)
87 #define LF_IsSpace (1L << 12)
88 #define LF_IsUpper (1L << 13)
89 #define LF_IsXDigit (1L << 14)
90 #define LF_ToUpper (1L << 15)
91 #define LF_StringComp (1L << 16)
93 /* Arrays for english/Latin1 character type/conversion, defined later */
94 extern const UWORD __eng_ctype_array
[];
95 extern const ULONG __eng_to_lower
[];
96 extern const ULONG __eng_to_upper
[];
97 extern const STRPTR __eng_strings
[];
98 extern const ULONG __eng_collate_tab
[];
100 /* We use these to indicate whether a character is a certain type in the
103 #define iAlpha (1 << 0)
104 #define iCntrl (1 << 1)
105 #define iDigit (1 << 2)
106 #define iGraph (1 << 3)
107 #define iLower (1 << 4)
108 #define iPrint (1 << 5)
109 #define iPunct (1 << 6)
110 #define iSpace (1 << 7)
111 #define iUpper (1 << 8)
112 #define iXDigit (1 << 9)
114 /* -------------------------------------------------------------------------
115 Library definition, you should not need to change any of this.
116 ------------------------------------------------------------------------- */
120 struct Library library
;
125 extern const UBYTE name
[];
126 extern const UBYTE version
[];
127 extern const APTR inittabl
[4];
128 extern void *const functable
[];
129 extern const ULONG datatable
;
130 extern struct Language
*AROS_SLIB_ENTRY(init
,language
,0)();
131 AROS_LD1(struct Language
*, open
,
132 AROS_LHA(ULONG
, version
, D0
),
133 struct Language
*, language
, 1, language
);
134 AROS_LD0(BPTR
, close
, struct Language
*, language
, 2, language
);
135 AROS_LD0(BPTR
, expunge
, struct Language
*, language
, 3, language
);
136 AROS_LD0I(int, null
, struct Language
*, language
, 0, language
);
137 AROS_LD0(ULONG
, mask
, struct Language
*, language
, 5, language
);
138 extern const char end
;
145 const struct Resident languageTag
=
148 (struct Resident
*)&languageTag
,
159 const UBYTE name
[]=LANGSTR
".language";
160 const UBYTE nativelang
[]=NLANGTAG
; /* N.B - MUST come before $VER: */
161 const UBYTE version
[]=LANGTAG
;
163 const ULONG datatable
= 0;
165 const APTR inittabl
[4] =
167 (APTR
)sizeof(struct Language
),
170 &AROS_SLIB_ENTRY(init
,language
,0)
173 AROS_UFH3(struct Language
*, AROS_SLIB_ENTRY(init
,language
,0),
174 AROS_UFHA(struct Language
*, language
, D0
),
175 AROS_UFHA(BPTR
, segList
, A0
),
176 AROS_UFHA(struct ExecBase
*, _SysBase
, A6
)
182 You could just as easily do this bit as the InitResident()
183 datatable, however this works just as well.
185 language
->library
.lib_Node
.ln_Type
= NT_LIBRARY
;
186 language
->library
.lib_Node
.ln_Pri
= -120;
187 language
->library
.lib_Node
.ln_Name
= (char *)name
;
188 language
->library
.lib_Flags
= LIBF_SUMUSED
| LIBF_CHANGED
;
189 language
->library
.lib_Version
= LANGVER
;
190 language
->library
.lib_Revision
= LANGREV
;
191 language
->library
.lib_IdString
= (APTR
)&version
[6];
193 language
->seglist
= segList
;
194 language
->sysbase
= _SysBase
;
197 Although it is unlikely, you would return NULL if you for some
198 unknown reason couldn't open.
206 #define SysBase language->sysbase
208 AROS_LH1(struct Language
*, open
,
209 AROS_LHA(ULONG
, version
, D0
),
210 struct Language
*, language
, 1, language
)
214 language
->library
.lib_OpenCnt
++;
215 language
->library
.lib_Flags
&= ~LIBF_DELEXP
;
217 /* Again return NULL if you could not open */
223 AROS_LH0(BPTR
, close
, struct Language
*, language
, 2, language
)
226 if(! --language
->library
.lib_OpenCnt
)
228 /* Delayed expunge pending? */
229 if(language
->library
.lib_Flags
& LIBF_DELEXP
)
231 /* Yes, expunge the library */
232 return AROS_LC0(BPTR
, expunge
, struct Language
*, language
, 3, language
);
239 AROS_LH0(BPTR
, expunge
, struct Language
*, language
, 3, language
)
243 struct ExecBase
*SysBase
= language
->sysbase
;
246 if(language
->library
.lib_OpenCnt
)
248 /* Can't expunge, we are still open */
249 language
->library
.lib_Flags
|= LIBF_DELEXP
;
253 Remove(&language
->library
.lib_Node
);
254 ret
= language
->seglist
;
256 FreeMem((UBYTE
*)language
- language
->library
.lib_NegSize
,
257 language
->library
.lib_PosSize
+ language
->library
.lib_NegSize
);
264 AROS_LH0I(int, null
, struct Language
*, language
, 4, language
)
273 /* ------------------------------------------------------------------------
274 Language specific functions
275 ------------------------------------------------------------------------ */
277 /* ULONG LanguageMask():
278 This function is to inform locale.library what functions it should
279 use from this library. This is done by returning a bitmask containing
280 1's for functions to use, and 0's for functions to ignore.
282 Unused bits MUST be 0 for future compatibility.
284 AROS_LH0(ULONG
, mask
, struct Language
*, language
, 5, language
)
289 This is where you list which functions that this language
290 specifies. There are some bit masks which can be used for
293 Most languages will probably only need to implement
296 return ( LF_ConvToLower
| LF_ConvToUpper
298 | LF_IsAlNum
| LF_IsAlpha
| LF_IsCntrl
| LF_IsDigit
299 | LF_IsGraph
| LF_IsLower
| LF_IsPrint
| LF_IsPunct
300 | LF_IsSpace
| LF_IsXDigit
301 | LF_StringConv
| LF_StringComp
307 /* ULONG ConvToLower(ULONG char): Language function 0
308 This function converts the character char to the equivalent
311 AROS_LH1(ULONG
, convtolower
,
312 AROS_LHA(ULONG
, chr
, D0
),
313 struct LocaleBase
*, LocaleBase
, 6, language
)
317 return __eng_to_lower
[chr
];
322 /* ULONG ConvToUpper(ULONG char): Language Function 1
323 This function converts the character char to the equivalent
324 upper case character.
326 AROS_LH1(ULONG
, convtoupper
,
327 AROS_LHA(ULONG
, chr
, D0
),
328 struct LocaleBase
*, LocaleBase
, 7, language
)
332 return __eng_to_upper
[chr
];
337 /* STRPTR GetLangString(ULONG num): Language function 3
338 This function is called by GetLocaleStr() and should return
339 the string matching the string id passed in as num.
341 AROS_LH1(STRPTR
, getlangstring
,
342 AROS_LHA(ULONG
, id
, D0
),
343 struct LocaleBase
*, LocaleBase
, 9, language
)
348 return __eng_strings
[id
];
355 /* BOOL IsXXXXX(ULONG char): Language functions 4-14
356 These function are the same as the ANSI C isxxxxx() functions,
357 however these will pay extra attention to the current language.
359 This gives the advantage of using different character sets,
360 however I wouldn't recommend that, since you will have funny
364 AROS_LH1(BOOL
, isalnum
,
365 AROS_LHA(ULONG
, chr
, D0
),
366 struct LocaleBase
*, LocaleBase
, 10, language
)
371 (__eng_ctype_array
[chr
] & iAlpha
) || (__eng_ctype_array
[chr
] & iDigit
)
377 AROS_LH1(BOOL
, isalpha
,
378 AROS_LHA(ULONG
, chr
, D0
),
379 struct LocaleBase
*, LocaleBase
, 11, language
)
383 return (BOOL
)(__eng_ctype_array
[chr
] & iAlpha
);
388 AROS_LH1(BOOL
, iscntrl
,
389 AROS_LHA(ULONG
, chr
, D0
),
390 struct LocaleBase
*, LocaleBase
, 12, language
)
394 return (BOOL
)(__eng_ctype_array
[chr
] & iCntrl
);
399 AROS_LH1(BOOL
, isdigit
,
400 AROS_LHA(ULONG
, chr
, D0
),
401 struct LocaleBase
*, LocaleBase
, 13, language
)
405 return (BOOL
)(__eng_ctype_array
[chr
] & iDigit
);
410 AROS_LH1(BOOL
, isgraph
,
411 AROS_LHA(ULONG
, chr
, D0
),
412 struct LocaleBase
*, LocaleBase
, 14, language
)
416 return (BOOL
)(__eng_ctype_array
[chr
] & iGraph
);
421 AROS_LH1(BOOL
, islower
,
422 AROS_LHA(ULONG
, chr
, D0
),
423 struct LocaleBase
*, LocaleBase
, 15, language
)
427 return (BOOL
)(__eng_ctype_array
[chr
] & iLower
);
432 AROS_LH1(BOOL
, isprint
,
433 AROS_LHA(ULONG
, chr
, D0
),
434 struct LocaleBase
*, LocaleBase
, 16, language
)
438 return (BOOL
)(__eng_ctype_array
[chr
] & iPrint
);
443 AROS_LH1(BOOL
, ispunct
,
444 AROS_LHA(ULONG
, chr
, D0
),
445 struct LocaleBase
*, LocaleBase
, 17, language
)
449 return (BOOL
)(__eng_ctype_array
[chr
] & iPunct
);
454 AROS_LH1(BOOL
, isspace
,
455 AROS_LHA(ULONG
, chr
, D0
),
456 struct LocaleBase
*, LocaleBase
, 18, language
)
460 return (BOOL
)(__eng_ctype_array
[chr
] & iSpace
);
465 AROS_LH1(BOOL
, isupper
,
466 AROS_LHA(ULONG
, chr
, D0
),
467 struct LocaleBase
*, LocaleBase
, 19, language
)
471 return (BOOL
)(__eng_ctype_array
[chr
] & iUpper
);
476 AROS_LH1(BOOL
, isxdigit
,
477 AROS_LHA(ULONG
, chr
, D0
),
478 struct LocaleBase
*, LocaleBase
, 20, language
)
482 return (BOOL
)(__eng_ctype_array
[chr
] & iXDigit
);
487 /* ULONG strconvert(STRPTR s1, STRPTR s2, LONG len, ULONG typ): LF 15
488 This function will convert a string to automatically use the
489 collation table. This is a bit dodgy in my opinion, however the ANSI
490 people didn't think so...
492 For SC_ASCII and SC_COLLATE1 this is just convert the string as is.
493 If you use SC_COLLATE2 this does SC_COLLATE1 encoding, the repeats
496 AROS_LH4(ULONG
, strconvert
,
497 AROS_LHA(STRPTR
, string1
, A1
),
498 AROS_LHA(STRPTR
, string2
, A2
),
499 AROS_LHA(LONG
, length
, D0
),
500 AROS_LHA(ULONG
, type
, D1
),
501 struct LocaleBase
*, LocaleBase
, 21, english
)
507 if(type
== SC_COLLATE2
)
511 while(--length
&& *string1
)
513 *string2
++ = __eng_collate_tab
[(UBYTE
)*string1
];
516 while(--length
&& *origS1
)
518 *string2
++ = *origS1
++;
523 else if((type
== SC_COLLATE1
) || (type
== SC_ASCII
))
528 collTab
= __eng_to_upper
;
530 collTab
= __eng_collate_tab
;
532 while(--length
&& *string1
)
534 *string2
++ = collTab
[ (UBYTE
)*string1
];
544 /* LONG strcompare(STRPTR s1, STRPTR s2, LONG len, ULONG typ): LF 16
545 This function will do the comparison using either plain ASCII
546 or the collation information. This is explained more in
547 the data file, or in the autodoc...
549 AROS_LH4(LONG
, strcompare
,
550 AROS_LHA(STRPTR
, string1
, A1
),
551 AROS_LHA(STRPTR
, string2
, A2
),
552 AROS_LHA(LONG
, length
, D0
),
553 AROS_LHA(ULONG
, type
, D1
),
554 struct LocaleBase
*, LocaleBase
, 22, english
)
559 if(type
== SC_COLLATE2
)
561 /* Collate 2, a bit more difficult */
562 STRPTR origS1
, origS2
;
568 a
= colltab
[(UBYTE
)*string1
++];
569 b
= colltab
[(UBYTE
)*string2
++];
570 } while( (a
== b
) && --length
);
572 /* If we reached the end, and everything is the same */
573 if((a
== 0) && (a
== b
))
575 /* Compare again using strings as is... */
580 } while( (a
== b
) && --length
);
584 else if((type
== SC_COLLATE1
) || (SC_ASCII
))
588 /* Determine which collation table to use... */
590 colltab
= __eng_to_upper
;
592 colltab
= __eng_collate_tab
;
596 a
= colltab
[(UBYTE
)*string1
++];
597 b
= colltab
[(UBYTE
)*string2
++];
598 } while( (a
== b
) && --length
);
602 /* Ha: Wrong arguments... */
607 /* -----------------------------------------------------------------------
608 Library function table - you will need to alter this
609 I have this right here at the end of the library so that I do not
610 have to have prototypes for the functions. Although you could do that.
611 ----------------------------------------------------------------------- */
613 void *const functable
[] =
615 &AROS_SLIB_ENTRY(open
,language
,1),
616 &AROS_SLIB_ENTRY(close
,language
,2),
617 &AROS_SLIB_ENTRY(expunge
,language
,3),
618 &AROS_SLIB_ENTRY(null
,language
,0),
619 &AROS_SLIB_ENTRY(mask
,language
,5),
623 This is where language specific functions must go.
624 If this language doesn't require a specific function
625 you must still define the entry. You should make this a
626 function which just returns 0. For the moment, using
627 &AROS_SLIB_ENTRY(null, language) will suffice, however
628 watch out if that function is ever given a purpose.
630 You need only include enough vectors to correspond to
635 &AROS_SLIB_ENTRY(convtolower
, language
, 6),
636 &AROS_SLIB_ENTRY(convtoupper
, language
, 7),
637 &AROS_SLIB_ENTRY(null
, language
, 0),
638 &AROS_SLIB_ENTRY(getlangstring
, language
, 9),
641 &AROS_SLIB_ENTRY(isalnum
, language
, 10),
642 &AROS_SLIB_ENTRY(isalpha
, language
, 11),
643 &AROS_SLIB_ENTRY(iscntrl
, language
, 12),
644 &AROS_SLIB_ENTRY(isdigit
, language
, 13),
647 &AROS_SLIB_ENTRY(isgraph
, language
, 14),
648 &AROS_SLIB_ENTRY(islower
, language
, 15),
649 &AROS_SLIB_ENTRY(isprint
, language
, 16),
650 &AROS_SLIB_ENTRY(isspace
, language
, 17),
653 &AROS_SLIB_ENTRY(ispunct
, language
, 18),
654 &AROS_SLIB_ENTRY(isupper
, language
, 19),
655 &AROS_SLIB_ENTRY(isxdigit
, language
, 20),
656 &AROS_SLIB_ENTRY(stringconv
, language
, 21),
659 &AROS_SLIB_ENTRY(stringcomp
, language
, 22),
665 Most languages do not need most of this data. If your languages
666 uses the same codeset as english (ISO-8859-1/ECMA Latin 1), then
667 by allowing the English code to do all the work (see Mask() function)
668 you can reduce this file to just the strings.
670 ----------------------------------------------------------------------
672 This is the list of strings. It is an array of pointers to strings,
673 although how it is laid out is implementation dependant.
675 const STRPTR __eng_strings
[] =
680 /* The days of the week. Starts with the first day of the week.
681 In English this would be Sunday, this depends upon the settings
682 of Locale->CalendarType.
684 "Sunday", "Monday", "Tuesday", "Wednesday",
685 "Thursday", "Friday", "Saturday",
687 /* Abbreviated days of the week */
688 "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
690 /* Months of the year */
691 "January", "February", "March",
692 "April", "May", "June",
693 "July", "August", "September",
694 "October", "November", "December",
696 /* Abbreviated months of the year */
697 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
698 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
700 "Yes", /* Yes, affirmative response */
701 "No", /* No/negative response */
703 /* AM/PM strings AM 0000 -> 1159, PM 1200 -> 2359 */
706 /* Soft and hard hyphens */
709 /* Open and close quotes */
712 /* Days: But not actual day names
713 Yesterday - the day before the current
714 Today - the current day
715 Tomorrow - the next day
718 "Yesterday", "Today", "Tomorrow", "Future",
720 /* Native language name */
724 /* Array for the IsXXXXX() functions*/
725 const UWORD __eng_ctype_array
[256] =
736 /* 9 */ iCntrl
| iPrint
| iSpace
,
737 /* 10 */ iCntrl
| iPrint
| iSpace
,
738 /* 11 */ iCntrl
| iPrint
| iSpace
,
739 /* 12 */ iCntrl
| iPrint
| iSpace
,
740 /* 13 */ iCntrl
| iPrint
| iSpace
,
759 /* 32 */ iPrint
| iSpace
,
760 /* '!' */ iGraph
| iPrint
| iPunct
,
761 /* '"' */ iGraph
| iPrint
| iPunct
,
762 /* '#' */ iGraph
| iPrint
| iPunct
,
763 /* '$' */ iGraph
| iPrint
| iPunct
,
764 /* '%' */ iGraph
| iPrint
| iPunct
,
765 /* '&' */ iGraph
| iPrint
| iPunct
,
766 /* ''' */ iGraph
| iPrint
| iPunct
,
767 /* '(' */ iGraph
| iPrint
| iPunct
,
768 /* ')' */ iGraph
| iPrint
| iPunct
,
769 /* '*' */ iGraph
| iPrint
| iPunct
,
770 /* '+' */ iGraph
| iPrint
| iPunct
,
771 /* ',' */ iGraph
| iPrint
| iPunct
,
772 /* '-' */ iGraph
| iPrint
| iPunct
,
773 /* '.' */ iGraph
| iPrint
| iPunct
,
774 /* '/' */ iGraph
| iPrint
| iPunct
,
775 /* '0' */ iDigit
| iGraph
| iPrint
| iXDigit
,
776 /* '1' */ iDigit
| iGraph
| iPrint
| iXDigit
,
777 /* '2' */ iDigit
| iGraph
| iPrint
| iXDigit
,
778 /* '3' */ iDigit
| iGraph
| iPrint
| iXDigit
,
779 /* '4' */ iDigit
| iGraph
| iPrint
| iXDigit
,
780 /* '5' */ iDigit
| iGraph
| iPrint
| iXDigit
,
781 /* '6' */ iDigit
| iGraph
| iPrint
| iXDigit
,
782 /* '7' */ iDigit
| iGraph
| iPrint
| iXDigit
,
783 /* '8' */ iDigit
| iGraph
| iPrint
| iXDigit
,
784 /* '9' */ iDigit
| iGraph
| iPrint
| iXDigit
,
785 /* ':' */ iGraph
| iPrint
| iPunct
,
786 /* ';' */ iGraph
| iPrint
| iPunct
,
787 /* '<' */ iGraph
| iPrint
| iPunct
,
788 /* '=' */ iGraph
| iPrint
| iPunct
,
789 /* '>' */ iGraph
| iPrint
| iPunct
,
790 /* '?' */ iGraph
| iPrint
| iPunct
,
791 /* '@' */ iGraph
| iPrint
| iPunct
,
792 /* 'A' */ iAlpha
| iGraph
| iPrint
| iUpper
| iXDigit
,
793 /* 'B' */ iAlpha
| iGraph
| iPrint
| iUpper
| iXDigit
,
794 /* 'C' */ iAlpha
| iGraph
| iPrint
| iUpper
| iXDigit
,
795 /* 'D' */ iAlpha
| iGraph
| iPrint
| iUpper
| iXDigit
,
796 /* 'E' */ iAlpha
| iGraph
| iPrint
| iUpper
| iXDigit
,
797 /* 'F' */ iAlpha
| iGraph
| iPrint
| iUpper
| iXDigit
,
798 /* 'G' */ iAlpha
| iGraph
| iPrint
| iUpper
,
799 /* 'H' */ iAlpha
| iGraph
| iPrint
| iUpper
,
800 /* 'I' */ iAlpha
| iGraph
| iPrint
| iUpper
,
801 /* 'J' */ iAlpha
| iGraph
| iPrint
| iUpper
,
802 /* 'K' */ iAlpha
| iGraph
| iPrint
| iUpper
,
803 /* 'L' */ iAlpha
| iGraph
| iPrint
| iUpper
,
804 /* 'M' */ iAlpha
| iGraph
| iPrint
| iUpper
,
805 /* 'N' */ iAlpha
| iGraph
| iPrint
| iUpper
,
806 /* 'O' */ iAlpha
| iGraph
| iPrint
| iUpper
,
807 /* 'P' */ iAlpha
| iGraph
| iPrint
| iUpper
,
808 /* 'Q' */ iAlpha
| iGraph
| iPrint
| iUpper
,
809 /* 'R' */ iAlpha
| iGraph
| iPrint
| iUpper
,
810 /* 'S' */ iAlpha
| iGraph
| iPrint
| iUpper
,
811 /* 'T' */ iAlpha
| iGraph
| iPrint
| iUpper
,
812 /* 'U' */ iAlpha
| iGraph
| iPrint
| iUpper
,
813 /* 'V' */ iAlpha
| iGraph
| iPrint
| iUpper
,
814 /* 'W' */ iAlpha
| iGraph
| iPrint
| iUpper
,
815 /* 'X' */ iAlpha
| iGraph
| iPrint
| iUpper
,
816 /* 'Y' */ iAlpha
| iGraph
| iPrint
| iUpper
,
817 /* 'Z' */ iAlpha
| iGraph
| iPrint
| iUpper
,
818 /* '[' */ iGraph
| iPrint
| iPunct
,
819 /* '\' */ iGraph
| iPrint
| iPunct
,
820 /* ']' */ iGraph
| iPrint
| iPunct
,
821 /* '^' */ iGraph
| iPrint
| iPunct
,
822 /* '_' */ iGraph
| iPrint
| iPunct
,
823 /* '`' */ iGraph
| iPrint
| iPunct
,
824 /* 'a' */ iAlpha
| iGraph
| iLower
| iPrint
| iXDigit
,
825 /* 'b' */ iAlpha
| iGraph
| iLower
| iPrint
| iXDigit
,
826 /* 'c' */ iAlpha
| iGraph
| iLower
| iPrint
| iXDigit
,
827 /* 'd' */ iAlpha
| iGraph
| iLower
| iPrint
| iXDigit
,
828 /* 'e' */ iAlpha
| iGraph
| iLower
| iPrint
| iXDigit
,
829 /* 'f' */ iAlpha
| iGraph
| iLower
| iPrint
| iXDigit
,
830 /* 'g' */ iAlpha
| iGraph
| iLower
| iPrint
,
831 /* 'h' */ iAlpha
| iGraph
| iLower
| iPrint
,
832 /* 'i' */ iAlpha
| iGraph
| iLower
| iPrint
,
833 /* 'j' */ iAlpha
| iGraph
| iLower
| iPrint
,
834 /* 'k' */ iAlpha
| iGraph
| iLower
| iPrint
,
835 /* 'l' */ iAlpha
| iGraph
| iLower
| iPrint
,
836 /* 'm' */ iAlpha
| iGraph
| iLower
| iPrint
,
837 /* 'n' */ iAlpha
| iGraph
| iLower
| iPrint
,
838 /* 'o' */ iAlpha
| iGraph
| iLower
| iPrint
,
839 /* 'p' */ iAlpha
| iGraph
| iLower
| iPrint
,
840 /* 'q' */ iAlpha
| iGraph
| iLower
| iPrint
,
841 /* 'r' */ iAlpha
| iGraph
| iLower
| iPrint
,
842 /* 's' */ iAlpha
| iGraph
| iLower
| iPrint
,
843 /* 't' */ iAlpha
| iGraph
| iLower
| iPrint
,
844 /* 'u' */ iAlpha
| iGraph
| iLower
| iPrint
,
845 /* 'v' */ iAlpha
| iGraph
| iLower
| iPrint
,
846 /* 'w' */ iAlpha
| iGraph
| iLower
| iPrint
,
847 /* 'x' */ iAlpha
| iGraph
| iLower
| iPrint
,
848 /* 'y' */ iAlpha
| iGraph
| iLower
| iPrint
,
849 /* 'z' */ iAlpha
| iGraph
| iLower
| iPrint
,
850 /* '{' */ iGraph
| iPrint
| iPunct
,
851 /* '|' */ iGraph
| iPrint
| iPunct
,
852 /* '}' */ iGraph
| iPrint
| iPunct
,
853 /* '~' */ iGraph
| iPrint
| iPunct
,
887 /* 160 */ iPrint
| iSpace
,
888 /* '°' */ iGraph
| iPrint
| iPunct
,
889 /* '¢' */ iGraph
| iPrint
| iPunct
,
890 /* '£' */ iGraph
| iPrint
| iPunct
,
891 /* '§' */ iGraph
| iPrint
| iPunct
,
892 /* '€' */ iGraph
| iPrint
| iPunct
,
893 /* '¶' */ iGraph
| iPrint
| iPunct
,
894 /* 'ß' */ iAlpha
| iGraph
| iPrint
| iLower
,
895 /* '®' */ iGraph
| iPrint
| iPunct
,
896 /* '©' */ iGraph
| iPrint
| iPunct
,
897 /* '�' */ iGraph
| iPrint
| iPunct
,
898 /* '´' */ iGraph
| iPrint
| iPunct
,
899 /* '¨' */ iGraph
| iPrint
| iPunct
,
900 /* '‚' */ iGraph
| iPrint
| iPunct
,
901 /* 'Æ' */ iAlpha
| iGraph
| iPrint
| iUpper
,
902 /* 'Ø' */ iAlpha
| iGraph
| iPrint
| iUpper
,
903 /* 'ƒ' */ iGraph
| iPrint
| iPunct
,
904 /* '±' */ iGraph
| iPrint
| iPunct
,
905 /* '¾' */ iDigit
| iGraph
| iPrint
,
906 /* '„' */ iGraph
| iPrint
| iPunct
,
907 /* '¥' */ iGraph
| iPrint
| iPunct
,
908 /* 'µ' */ iGraph
| iPrint
| iPunct
,
909 /* '�' */ iGraph
| iPrint
| iPunct
,
910 /* '…' */ iGraph
| iPrint
| iPunct
,
911 /* '½' */ iDigit
| iGraph
| iPrint
,
912 /* '¼' */ iDigit
| iGraph
| iPrint
,
913 /* '†' */ iGraph
| iPrint
| iPunct
,
914 /* 'ª' */ iGraph
| iPrint
| iPunct
,
915 /* 'º' */ iGraph
| iPrint
| iPunct
,
916 /* '‡' */ iGraph
| iPrint
| iPunct
,
917 /* 'æ' */ iAlpha
| iGraph
| iPrint
| iLower
,
918 /* 'ø' */ iAlpha
| iGraph
| iPrint
| iLower
,
919 /* '¿' */ iGraph
| iPrint
| iPunct
,
920 /* '¡' */ iGraph
| iPrint
| iPunct
,
921 /* '¬' */ iAlpha
| iGraph
| iPrint
| iUpper
,
922 /* 'ˆ' */ iAlpha
| iGraph
| iPrint
| iUpper
,
923 /* 'Ÿ' */ iAlpha
| iGraph
| iPrint
| iUpper
,
924 /* '‰' */ iAlpha
| iGraph
| iPrint
| iUpper
,
925 /* '�' */ iAlpha
| iGraph
| iPrint
| iUpper
,
926 /* '«' */ iGraph
| iPrint
| iPunct
,
927 /* '»' */ iGraph
| iPrint
| iPunct
,
928 /* 'Š' */ iAlpha
| iGraph
| iPrint
| iUpper
,
929 /* ' ' */ iAlpha
| iGraph
| iPrint
| iUpper
,
930 /* 'À' */ iAlpha
| iGraph
| iPrint
| iUpper
,
931 /* 'Ã' */ iAlpha
| iGraph
| iPrint
| iUpper
,
932 /* 'Õ' */ iAlpha
| iGraph
| iPrint
| iUpper
,
933 /* '‘' */ iAlpha
| iGraph
| iPrint
| iUpper
,
934 /* '¦' */ iAlpha
| iGraph
| iPrint
| iUpper
,
935 /* '' */ iAlpha
| iGraph
| iPrint
| iUpper
,
936 /* '‹' */ iAlpha
| iGraph
| iPrint
| iUpper
,
937 /* '³' */ iDigit
| iGraph
| iPrint
,
938 /* '²' */ iDigit
| iGraph
| iPrint
,
939 /* 'Œ' */ iAlpha
| iGraph
| iPrint
| iUpper
,
940 /* '¹' */ iDigit
| iGraph
| iPrint
,
941 /* '÷' */ iPunct
| iGraph
| iPrint
,
942 /* '×' */ iPunct
| iGraph
| iPrint
,
943 /* 'ÿ' */ iAlpha
| iGraph
| iPrint
| iUpper
,
944 /* '�' */ iAlpha
| iGraph
| iPrint
| iUpper
,
945 /* 'Ž' */ iAlpha
| iGraph
| iPrint
| iUpper
,
946 /* '¤' */ iAlpha
| iGraph
| iPrint
| iUpper
,
947 /* 'Ð' */ iAlpha
| iGraph
| iPrint
| iUpper
,
948 /* 'ð' */ iAlpha
| iGraph
| iPrint
| iLower
,
949 /* 'Þ' */ iAlpha
| iGraph
| iPrint
| iUpper
,
950 /* 'þ' */ iAlpha
| iGraph
| iLower
| iPrint
,
951 /* 'ý' */ iAlpha
| iGraph
| iLower
| iPrint
,
952 /* '·' */ iAlpha
| iGraph
| iLower
| iPrint
,
953 /* '’' */ iAlpha
| iGraph
| iLower
| iPrint
,
954 /* '“' */ iAlpha
| iGraph
| iLower
| iPrint
,
955 /* '”' */ iAlpha
| iGraph
| iLower
| iPrint
,
956 /* 'Â' */ iAlpha
| iGraph
| iLower
| iPrint
,
957 /* 'Ê' */ iAlpha
| iGraph
| iLower
| iPrint
,
958 /* 'Á' */ iAlpha
| iGraph
| iLower
| iPrint
,
959 /* 'Ë' */ iAlpha
| iGraph
| iLower
| iPrint
,
960 /* 'È' */ iAlpha
| iGraph
| iLower
| iPrint
,
961 /* 'Í' */ iAlpha
| iGraph
| iLower
| iPrint
,
962 /* 'Î' */ iAlpha
| iGraph
| iLower
| iPrint
,
963 /* 'Ï' */ iAlpha
| iGraph
| iLower
| iPrint
,
964 /* 'Ì' */ iAlpha
| iGraph
| iLower
| iPrint
,
965 /* 'Ó' */ iAlpha
| iGraph
| iLower
| iPrint
,
966 /* 'Ô' */ iAlpha
| iGraph
| iLower
| iPrint
,
967 /* '•' */ iAlpha
| iGraph
| iLower
| iPrint
,
968 /* 'Ò' */ iAlpha
| iGraph
| iLower
| iPrint
,
969 /* 'Ú' */ iAlpha
| iGraph
| iLower
| iPrint
,
970 /* 'Û' */ iAlpha
| iGraph
| iLower
| iPrint
,
971 /* 'Ù' */ iAlpha
| iGraph
| iLower
| iPrint
,
972 /* 'ž' */ iAlpha
| iGraph
| iLower
| iPrint
,
973 /* '–' */ iAlpha
| iGraph
| iLower
| iPrint
,
974 /* '—' */ iGraph
| iPrint
| iPunct
,
975 /* '¯' */ iAlpha
| iGraph
| iLower
| iPrint
,
976 /* '˜' */ iAlpha
| iGraph
| iLower
| iPrint
,
977 /* '™' */ iAlpha
| iGraph
| iLower
| iPrint
,
978 /* 'š' */ iAlpha
| iGraph
| iLower
| iPrint
,
979 /* '¸' */ iAlpha
| iGraph
| iLower
| iPrint
,
980 /* '›' */ iAlpha
| iGraph
| iLower
| iPrint
,
981 /* 'œ' */ iAlpha
| iGraph
| iLower
| iPrint
,
982 /* '�' */ iAlpha
| iGraph
| iLower
| iPrint
985 const ULONG __eng_to_lower
[256] =
987 0 , /* 0 */ 1 , /* 1 */
988 2 , /* 2 */ 3 , /* 3 */
989 4 , /* 4 */ 5 , /* 5 */
990 6 , /* 6 */ 7 , /* 7 */
991 8 , /* 8 */ 9 , /* 9 */
992 10 , /* 10 */ 11 , /* 11 */
993 12 , /* 12 */ 13 , /* 13 */
994 14 , /* 14 */ 15 , /* 15 */
995 16 , /* 16 */ 17 , /* 17 */
996 18 , /* 18 */ 19 , /* 19 */
997 20 , /* 20 */ 21 , /* 21 */
998 22 , /* 22 */ 23 , /* 23 */
999 24 , /* 24 */ 25 , /* 25 */
1000 26 , /* 26 */ 27 , /* 27 */
1001 28 , /* 28 */ 29 , /* 29 */
1002 30 , /* 30 */ 31 , /* 31 */
1003 32 , /* 32 */ '!', /* '!' */
1004 '"', /* '"' */ '#', /* '#' */
1005 '$', /* '$' */ '%', /* '%' */
1006 '&', /* '&' */ 39 , /* ''' */
1007 '(', /* '(' */ ')', /* ')' */
1008 '*', /* '*' */ '+', /* '+' */
1009 ',', /* ',' */ '-', /* '-' */
1010 '.', /* '.' */ '/', /* '/' */
1011 '0', /* '0' */ '1', /* '1' */
1012 '2', /* '2' */ '3', /* '3' */
1013 '4', /* '4' */ '5', /* '5' */
1014 '6', /* '6' */ '7', /* '7' */
1015 '8', /* '8' */ '9', /* '9' */
1016 ':', /* ':' */ ';', /* ';' */
1017 '<', /* '<' */ '=', /* '=' */
1018 '>', /* '>' */ '?', /* '?' */
1019 '@', /* '@' */ 'a', /* 'A' */
1020 'b', /* 'B' */ 'c', /* 'C' */
1021 'd', /* 'D' */ 'e', /* 'E' */
1022 'f', /* 'F' */ 'g', /* 'G' */
1023 'h', /* 'H' */ 'i', /* 'I' */
1024 'j', /* 'J' */ 'k', /* 'K' */
1025 'l', /* 'L' */ 'm', /* 'M' */
1026 'n', /* 'N' */ 'o', /* 'O' */
1027 'p', /* 'P' */ 'q', /* 'Q' */
1028 'r', /* 'R' */ 's', /* 'S' */
1029 't', /* 'T' */ 'u', /* 'U' */
1030 'v', /* 'V' */ 'w', /* 'W' */
1031 'x', /* 'X' */ 'y', /* 'Y' */
1032 'z', /* 'Z' */ '[', /* '[' */
1033 92 , /* '\' */ ']', /* ']' */
1034 '^', /* '^' */ '_', /* '_' */
1035 '`', /* '`' */ 'a', /* 'a' */
1036 'b', /* 'b' */ 'c', /* 'c' */
1037 'd', /* 'd' */ 'e', /* 'e' */
1038 'f', /* 'f' */ 'g', /* 'g' */
1039 'h', /* 'h' */ 'i', /* 'i' */
1040 'j', /* 'j' */ 'k', /* 'k' */
1041 'l', /* 'l' */ 'm', /* 'm' */
1042 'n', /* 'n' */ 'o', /* 'o' */
1043 'p', /* 'p' */ 'q', /* 'q' */
1044 'r', /* 'r' */ 's', /* 's' */
1045 't', /* 't' */ 'u', /* 'u' */
1046 'v', /* 'v' */ 'w', /* 'w' */
1047 'x', /* 'x' */ 'y', /* 'y' */
1048 'z', /* 'z' */ '{', /* '{' */
1049 '|', /* '|' */ '}', /* '}' */
1050 '~', /* '~' */ 127, /* 127 */
1051 128, /* 128 */ 129, /* 129 */
1052 130, /* 130 */ 131, /* 131 */
1053 132, /* 132 */ 133, /* 133 */
1054 134, /* 134 */ 135, /* 135 */
1055 136, /* 136 */ 137, /* 137 */
1056 138, /* 138 */ 139, /* 139 */
1057 140, /* 140 */ 141, /* 141 */
1058 142, /* 142 */ 143, /* 143 */
1059 144, /* 144 */ 145, /* 145 */
1060 146, /* 146 */ 147, /* 147 */
1061 148, /* 148 */ 149, /* 149 */
1062 150, /* 150 */ 151, /* 151 */
1063 152, /* 152 */ 153, /* 153 */
1064 154, /* 154 */ 155, /* 155 */
1065 156, /* 156 */ 157, /* 157 */
1066 158, /* 158 */ 159, /* 159 */
1067 160, /* 160 */ '°', /* '°' */
1068 '¢', /* '¢' */ '£', /* '£' */
1069 '§', /* '§' */ '€', /* '€' */
1070 '¶', /* '¶' */ 'ß', /* 'ß' */
1071 '®', /* '®' */ '©', /* '©' */
1072 '�', /* '�' */ '´', /* '´' */
1073 '¨', /* '¨' */ '‚', /* '‚' */
1074 'Æ', /* 'Æ' */ 'Ø', /* 'Ø' */
1075 'ƒ', /* 'ƒ' */ '±', /* '±' */
1076 '¾', /* '¾' */ '„', /* '„' */
1077 '¥', /* '¥' */ 'µ', /* 'µ' */
1078 '�', /* '�' */ '…', /* '…' */
1079 '½', /* '½' */ '¼', /* '¼' */
1080 '†', /* '†' */ 'ª', /* 'ª' */
1081 'º', /* 'º' */ '‡', /* '‡' */
1082 'æ', /* 'æ' */ 'ø', /* 'ø' */
1083 'ý', /* '¿' */ '·', /* '¡' */
1084 '’', /* '¬' */ '“', /* 'ˆ' */
1085 '”', /* 'Ÿ' */ 'Â', /* '‰' */
1086 'Ê', /* '�' */ 'Á', /* '«' */
1087 'Ë', /* '»' */ 'È', /* 'Š' */
1088 'Í', /* ' ' */ 'Î', /* 'À' */
1089 'Ï', /* 'Ã' */ 'Ì', /* 'Õ' */
1090 'Ó', /* '‘' */ 'Ô', /* '¦' */
1091 '•', /* '' */ 'Ò', /* '‹' */
1092 'Ú', /* '³' */ 'Û', /* '²' */
1093 'Ù', /* 'Œ' */ 'ž', /* '¹' */
1094 '–', /* '÷' */ '—', /* '×' */
1095 '¯', /* 'ÿ' */ '˜', /* '�' */
1096 '™', /* 'Ž' */ 'š', /* '¤' */
1097 '¸', /* 'Ð' */ '›', /* 'ð' */
1098 'œ', /* 'Þ' */ 'þ', /* 'þ' */
1099 'ý', /* 'ý' */ '·', /* '·' */
1100 '’', /* '’' */ '“', /* '“' */
1101 '”', /* '”' */ 'Â', /* 'Â' */
1102 'Ê', /* 'Ê' */ 'Á', /* 'Á' */
1103 'Ë', /* 'Ë' */ 'È', /* 'È' */
1104 'Í', /* 'Í' */ 'Î', /* 'Î' */
1105 'Ï', /* 'Ï' */ 'Ì', /* 'Ì' */
1106 'Ó', /* 'Ó' */ 'Ô', /* 'Ô' */
1107 '•', /* '•' */ 'Ò', /* 'Ò' */
1108 'Ú', /* 'Ú' */ 'Û', /* 'Û' */
1109 'Ù', /* 'Ù' */ 'ž', /* 'ž' */
1110 '–', /* '–' */ '—', /* '—' */
1111 '¯', /* '¯' */ '˜', /* '˜' */
1112 '™', /* '™' */ 'š', /* 'š' */
1113 '¸', /* '¸' */ '›', /* '›' */
1114 'œ', /* 'œ' */ '�', /* '�' */
1117 const ULONG __eng_to_upper
[256] =
1119 0 , /* 0 */ 1 , /* 1 */
1120 2 , /* 2 */ 3 , /* 3 */
1121 4 , /* 4 */ 5 , /* 5 */
1122 6 , /* 6 */ 7 , /* 7 */
1123 8 , /* 8 */ 9 , /* 9 */
1124 10 , /* 10 */ 11 , /* 11 */
1125 12 , /* 12 */ 13 , /* 13 */
1126 14 , /* 14 */ 15 , /* 15 */
1127 16 , /* 16 */ 17 , /* 17 */
1128 18 , /* 18 */ 19 , /* 19 */
1129 20 , /* 20 */ 21 , /* 21 */
1130 22 , /* 22 */ 23 , /* 23 */
1131 24 , /* 24 */ 25 , /* 25 */
1132 26 , /* 26 */ 27 , /* 27 */
1133 28 , /* 28 */ 29 , /* 29 */
1134 30 , /* 30 */ 31 , /* 31 */
1135 32 , /* 32 */ '!', /* '!' */
1136 '"', /* '"' */ '#', /* '#' */
1137 '$', /* '$' */ '%', /* '%' */
1138 '&', /* '&' */ 39 , /* ''' */
1139 '(', /* '(' */ ')', /* ')' */
1140 '*', /* '*' */ '+', /* '+' */
1141 ',', /* ',' */ '-', /* '-' */
1142 '.', /* '.' */ '/', /* '/' */
1143 '0', /* '0' */ '1', /* '1' */
1144 '2', /* '2' */ '3', /* '3' */
1145 '4', /* '4' */ '5', /* '5' */
1146 '6', /* '6' */ '7', /* '7' */
1147 '8', /* '8' */ '9', /* '9' */
1148 ':', /* ':' */ ';', /* ';' */
1149 '<', /* '<' */ '=', /* '=' */
1150 '>', /* '>' */ '?', /* '?' */
1151 '@', /* '@' */ 'A', /* 'A' */
1152 'B', /* 'B' */ 'C', /* 'C' */
1153 'D', /* 'D' */ 'E', /* 'E' */
1154 'F', /* 'F' */ 'G', /* 'G' */
1155 'H', /* 'H' */ 'I', /* 'I' */
1156 'J', /* 'J' */ 'K', /* 'K' */
1157 'L', /* 'L' */ 'M', /* 'M' */
1158 'N', /* 'N' */ 'O', /* 'O' */
1159 'P', /* 'P' */ 'Q', /* 'Q' */
1160 'R', /* 'R' */ 'S', /* 'S' */
1161 'T', /* 'T' */ 'U', /* 'U' */
1162 'V', /* 'V' */ 'W', /* 'W' */
1163 'X', /* 'X' */ 'Y', /* 'Y' */
1164 'Z', /* 'Z' */ '[', /* '[' */
1165 92 , /* '\' */ ']', /* ']' */
1166 '^', /* '^' */ '_', /* '_' */
1167 '`', /* '`' */ 'A', /* 'a' */
1168 'B', /* 'b' */ 'C', /* 'c' */
1169 'D', /* 'd' */ 'E', /* 'e' */
1170 'F', /* 'f' */ 'G', /* 'g' */
1171 'H', /* 'h' */ 'I', /* 'i' */
1172 'J', /* 'j' */ 'K', /* 'k' */
1173 'L', /* 'l' */ 'M', /* 'm' */
1174 'N', /* 'n' */ 'O', /* 'o' */
1175 'P', /* 'p' */ 'Q', /* 'q' */
1176 'R', /* 'r' */ 'S', /* 's' */
1177 'T', /* 't' */ 'U', /* 'u' */
1178 'V', /* 'v' */ 'W', /* 'w' */
1179 'X', /* 'x' */ 'Y', /* 'y' */
1180 'Z', /* 'z' */ '{', /* '{' */
1181 '|', /* '|' */ '}', /* '}' */
1182 '~', /* '~' */ 127, /* 127 */
1183 128, /* 128 */ 129, /* 129 */
1184 130, /* 130 */ 131, /* 131 */
1185 132, /* 132 */ 133, /* 133 */
1186 134, /* 134 */ 135, /* 135 */
1187 136, /* 136 */ 137, /* 137 */
1188 138, /* 138 */ 139, /* 139 */
1189 140, /* 140 */ 141, /* 141 */
1190 142, /* 142 */ 143, /* 143 */
1191 144, /* 144 */ 145, /* 145 */
1192 146, /* 146 */ 147, /* 147 */
1193 148, /* 148 */ 149, /* 149 */
1194 150, /* 150 */ 151, /* 151 */
1195 152, /* 152 */ 153, /* 153 */
1196 154, /* 154 */ 155, /* 155 */
1197 156, /* 156 */ 157, /* 157 */
1198 158, /* 158 */ 159, /* 159 */
1199 160, /* 160 */ '°', /* '°' */
1200 '¢', /* '¢' */ '£', /* '£' */
1201 '§', /* '§' */ '€', /* '€' */
1202 '¶', /* '¶' */ 'ß', /* 'ß' */
1203 '®', /* '®' */ '©', /* '©' */
1204 '�', /* '�' */ '´', /* '´' */
1205 '¨', /* '¨' */ '‚', /* '‚' */
1206 'Æ', /* 'Æ' */ 'Ø', /* 'Ø' */
1207 'ƒ', /* 'ƒ' */ '±', /* '±' */
1208 '¾', /* '¾' */ '„', /* '„' */
1209 '¥', /* '¥' */ 'µ', /* 'µ' */
1210 '�', /* '�' */ '…', /* '…' */
1211 '½', /* '½' */ '¼', /* '¼' */
1212 '†', /* '†' */ 'ª', /* 'ª' */
1213 'º', /* 'º' */ '‡', /* '‡' */
1214 'æ', /* 'æ' */ 'ø', /* 'ø' */
1215 '¿', /* '¿' */ '¡', /* '¡' */
1216 '¬', /* '¬' */ 'ˆ', /* 'ˆ' */
1217 'Ÿ', /* 'Ÿ' */ '‰', /* '‰' */
1218 '�', /* '�' */ '«', /* '«' */
1219 '»', /* '»' */ 'Š', /* 'Š' */
1220 ' ', /* ' ' */ 'À', /* 'À' */
1221 'Ã', /* 'Ã' */ 'Õ', /* 'Õ' */
1222 '‘', /* '‘' */ '¦', /* '¦' */
1223 '', /* '' */ '‹', /* '‹' */
1224 '³', /* '³' */ '²', /* '²' */
1225 'Œ', /* 'Œ' */ '¹', /* '¹' */
1226 '÷', /* '÷' */ '×', /* '×' */
1227 'ÿ', /* 'ÿ' */ '�', /* '�' */
1228 'Ž', /* 'Ž' */ '¤', /* '¤' */
1229 'Ð', /* 'Ð' */ 'ð', /* 'ð' */
1230 'Þ', /* 'Þ' */ 'þ', /* 'þ' */
1231 '¿', /* 'ý' */ '¡', /* '·' */
1232 '¬', /* '’' */ 'ˆ', /* '“' */
1233 'Ÿ', /* '”' */ '‰', /* 'Â' */
1234 '�', /* 'Ê' */ '«', /* 'Á' */
1235 '»', /* 'Ë' */ 'Š', /* 'È' */
1236 ' ', /* 'Í' */ 'À', /* 'Î' */
1237 'Ã', /* 'Ï' */ 'Õ', /* 'Ì' */
1238 '‘', /* 'Ó' */ '¦', /* 'Ô' */
1239 '', /* '•' */ '‹', /* 'Ò' */
1240 '³', /* 'Ú' */ '²', /* 'Û' */
1241 'Œ', /* 'Ù' */ '¹', /* 'ž' */
1242 '÷', /* '–' */ '×', /* '—' */
1243 'ÿ', /* '¯' */ '�', /* '˜' */
1244 'Ž', /* '™' */ '¤', /* 'š' */
1245 'Ð', /* '¸' */ 'ð', /* '›' */
1246 'Þ', /* 'œ' */ '�', /* '�' */
1250 This is the string collation table.
1252 The basic idea is to have the character which is found in the normal
1253 ENGLISH alphabet used instead, this will allow for sorting in a
1254 list so that "fÛol" would come before full not after it, as would
1255 happen by sorting just by ASCII characters.
1257 const ULONG __eng_collate_tab
[256] =
1259 0 , /* 0 */ 1 , /* 1 */
1260 2 , /* 2 */ 3 , /* 3 */
1261 4 , /* 4 */ 5 , /* 5 */
1262 6 , /* 6 */ 7 , /* 7 */
1263 8 , /* 8 */ 9 , /* 9 */
1264 10 , /* 10 */ 11 , /* 11 */
1265 12 , /* 12 */ 13 , /* 13 */
1266 14 , /* 14 */ 15 , /* 15 */
1267 16 , /* 16 */ 17 , /* 17 */
1268 18 , /* 18 */ 19 , /* 19 */
1269 20 , /* 20 */ 21 , /* 21 */
1270 22 , /* 22 */ 23 , /* 23 */
1271 24 , /* 24 */ 25 , /* 25 */
1272 26 , /* 26 */ 27 , /* 27 */
1273 28 , /* 28 */ 29 , /* 29 */
1274 30 , /* 30 */ 31 , /* 31 */
1275 32 , /* 32 */ '!', /* '!' */
1276 '"', /* '"' */ '#', /* '#' */
1277 '$', /* '$' */ '%', /* '%' */
1278 '&', /* '&' */ 39 , /* ''' */
1279 '(', /* '(' */ ')', /* ')' */
1280 '*', /* '*' */ '+', /* '+' */
1281 ',', /* ',' */ '-', /* '-' */
1282 '.', /* '.' */ '/', /* '/' */
1283 '0', /* '0' */ '1', /* '1' */
1284 '2', /* '2' */ '3', /* '3' */
1285 '4', /* '4' */ '5', /* '5' */
1286 '6', /* '6' */ '7', /* '7' */
1287 '8', /* '8' */ '9', /* '9' */
1288 ':', /* ':' */ ';', /* ';' */
1289 '<', /* '<' */ '=', /* '=' */
1290 '>', /* '>' */ '?', /* '?' */
1291 '@', /* '@' */ 'A', /* 'A' */
1292 'B', /* 'B' */ 'C', /* 'C' */
1293 'D', /* 'D' */ 'E', /* 'E' */
1294 'F', /* 'F' */ 'G', /* 'G' */
1295 'H', /* 'H' */ 'I', /* 'I' */
1296 'J', /* 'J' */ 'K', /* 'K' */
1297 'L', /* 'L' */ 'M', /* 'M' */
1298 'N', /* 'N' */ 'O', /* 'O' */
1299 'P', /* 'P' */ 'Q', /* 'Q' */
1300 'R', /* 'R' */ 'S', /* 'S' */
1301 'T', /* 'T' */ 'U', /* 'U' */
1302 'V', /* 'V' */ 'W', /* 'W' */
1303 'X', /* 'X' */ 'Y', /* 'Y' */
1304 'Z', /* 'Z' */ '[', /* '[' */
1305 92 , /* '\' */ ']', /* ']' */
1306 '^', /* '^' */ '_', /* '_' */
1307 '`', /* '`' */ 'A', /* 'a' */
1308 'B', /* 'b' */ 'C', /* 'c' */
1309 'D', /* 'd' */ 'E', /* 'e' */
1310 'F', /* 'f' */ 'G', /* 'g' */
1311 'H', /* 'h' */ 'I', /* 'i' */
1312 'J', /* 'j' */ 'K', /* 'k' */
1313 'L', /* 'l' */ 'M', /* 'm' */
1314 'N', /* 'n' */ 'O', /* 'o' */
1315 'P', /* 'p' */ 'Q', /* 'q' */
1316 'R', /* 'r' */ 'S', /* 's' */
1317 'T', /* 't' */ 'U', /* 'u' */
1318 'V', /* 'v' */ 'W', /* 'w' */
1319 'X', /* 'x' */ 'Y', /* 'y' */
1320 'Z', /* 'z' */ '{', /* '{' */
1321 '|', /* '|' */ '}', /* '}' */
1322 '~', /* '~' */ 127, /* 127 */
1323 128, /* 128 */ 129, /* 129 */
1324 130, /* 130 */ 131, /* 131 */
1325 132, /* 132 */ 133, /* 133 */
1326 134, /* 134 */ 135, /* 135 */
1327 136, /* 136 */ 137, /* 137 */
1328 138, /* 138 */ 139, /* 139 */
1329 140, /* 140 */ 141, /* 141 */
1330 142, /* 142 */ 143, /* 143 */
1331 144, /* 144 */ 145, /* 145 */
1332 146, /* 146 */ 147, /* 147 */
1333 148, /* 148 */ 149, /* 149 */
1334 150, /* 150 */ 151, /* 151 */
1335 152, /* 152 */ 153, /* 153 */
1336 154, /* 154 */ 155, /* 155 */
1337 156, /* 156 */ 157, /* 157 */
1338 158, /* 158 */ 159, /* 159 */
1339 20, /* 160 */ '!', /* '°' */
1340 '$', /* '¢' */ '$', /* '£' */
1341 'g', /* '§' */ 'h', /* '€' */
1342 'i', /* '¶' */ 'S', /* 'ß' */
1343 'j', /* '®' */ 'k', /* '©' */
1344 'l', /* '�' */ '\"', /* '´' */
1345 'm', /* '¨' */ 'n', /* '‚' */
1346 'o', /* 'Æ' */ 'p', /* 'Ø' */
1347 'q', /* 'ƒ' */ 'r', /* '±' */
1348 's', /* '¾' */ 't', /* '„' */
1349 'u', /* '¥' */ 'v', /* 'µ' */
1350 'w', /* '�' */ 'x', /* '…' */
1351 'y', /* '½' */ 'z', /* '¼' */
1352 '{', /* '†' */ '\"' /* 'ª' */
1353 '|', /* 'º' */ '}', /* '‡' */
1354 '~', /* 'æ' */ '?', /* 'ø' */
1355 'A', /* '¿' */ 'A', /* '¡' */
1356 'A', /* '¬' */ 'A', /* 'ˆ' */
1357 'A', /* 'Ÿ' */ 'A', /* '‰' */
1358 'A', /* '�' */ 'C', /* '«' */
1359 'E', /* '»' */ 'E', /* 'Š' */
1360 'E', /* ' ' */ 'E', /* 'À' */
1361 'I', /* 'Ã' */ 'I', /* 'Õ' */
1362 'I', /* '‘' */ 'I', /* '¦' */
1363 'D', /* '' */ 'N', /* '‹' */
1364 'O', /* '³' */ 'O', /* '²' */
1365 'O', /* 'Œ' */ 'O', /* '¹' */
1366 'O', /* '÷' */ '*', /* '×' */
1367 'O', /* 'ÿ' */ 'U', /* '�' */
1368 'U', /* 'Ž' */ 'U', /* '¤' */
1369 'U', /* 'Ð' */ 'Y', /* 'ð' */
1370 'P', /* 'Þ' */ 'Y', /* 'þ' */
1371 'A', /* 'ý' */ 'A', /* '·' */
1372 'A', /* '’' */ 'A', /* '“' */
1373 'A', /* '”' */ 'A', /* 'Â' */
1374 'A', /* 'Ê' */ 'C', /* 'Á' */
1375 'E', /* 'Ë' */ 'E', /* 'È' */
1376 'E', /* 'Í' */ 'E', /* 'Î' */
1377 'I', /* 'Ï' */ 'I', /* 'Ì' */
1378 'I', /* 'Ó' */ 'I', /* 'Ô' */
1379 'D', /* '•' */ 'N', /* 'Ò' */
1380 'O', /* 'Ú' */ 'O', /* 'Û' */
1381 'O', /* 'Ù' */ 'O', /* 'ž' */
1382 'O', /* '–' */ '/', /* '—' */
1383 'O', /* '¯' */ 'U', /* '˜' */
1384 'U', /* '™' */ 'U', /* 'š' */
1385 'U', /* '¸' */ 'Y', /* '›' */
1386 'P', /* 'œ' */ 'Y', /* '�' */
1391 /* This is the end of ROMtag marker. */