10 // FIXME: Shouldn't be included!
14 /* Helper macro to enable gcc's extension. */
15 #ifndef __GNU_EXTENSION
17 #define __GNU_EXTENSION __extension__
19 #define __GNU_EXTENSION
23 typedef unsigned long POINTER_64
; // FIXME! HACK!!!
25 /* Pseudo Modifiers for Input Parameters */
52 /* Defines the "size" of an any-size array */
54 #define ANYSIZE_ARRAY 1
57 /* Constant modifier */
72 #define NULL ((void *)0)
73 #define NULL64 ((void * POINTER_64)0)
77 typedef enum _EVENT_TYPE
{
82 typedef enum _TIMER_TYPE
{
87 typedef enum _WAIT_TYPE
{
94 // We should use the -fms-extensions compiler flag for gcc,
95 // and clean up the mess.
97 #ifndef __ANONYMOUS_DEFINED
98 #define __ANONYMOUS_DEFINED
100 #ifndef NONAMELESSUNION
102 #define _ANONYMOUS_UNION __GNU_EXTENSION
103 #define _ANONYMOUS_STRUCT __GNU_EXTENSION
104 #elif defined(__WATCOMC__) || defined(_MSC_VER)
105 #define _ANONYMOUS_UNION
106 #define _ANONYMOUS_STRUCT
107 #endif /* __GNUC__/__WATCOMC__ */
108 #endif /* NONAMELESSUNION */
110 #ifndef _ANONYMOUS_UNION
111 #define _ANONYMOUS_UNION
112 #define _UNION_NAME(x) x
113 #define DUMMYUNIONNAME u
114 #define DUMMYUNIONNAME2 u2
115 #define DUMMYUNIONNAME3 u3
116 #define DUMMYUNIONNAME4 u4
117 #define DUMMYUNIONNAME5 u5
118 #define DUMMYUNIONNAME6 u6
119 #define DUMMYUNIONNAME7 u7
120 #define DUMMYUNIONNAME8 u8
122 #define _UNION_NAME(x)
123 #define DUMMYUNIONNAME
124 #define DUMMYUNIONNAME2
125 #define DUMMYUNIONNAME3
126 #define DUMMYUNIONNAME4
127 #define DUMMYUNIONNAME5
128 #define DUMMYUNIONNAME6
129 #define DUMMYUNIONNAME7
130 #define DUMMYUNIONNAME8
133 #ifndef _ANONYMOUS_STRUCT
134 #define _ANONYMOUS_STRUCT
135 #define _STRUCT_NAME(x) x
136 #define DUMMYSTRUCTNAME s
137 #define DUMMYSTRUCTNAME2 s2
138 #define DUMMYSTRUCTNAME3 s3
139 #define DUMMYSTRUCTNAME4 s4
140 #define DUMMYSTRUCTNAME5 s5
142 #define _STRUCT_NAME(x)
143 #define DUMMYSTRUCTNAME
144 #define DUMMYSTRUCTNAME2
145 #define DUMMYSTRUCTNAME3
146 #define DUMMYSTRUCTNAME4
147 #define DUMMYSTRUCTNAME5
150 #endif /* __ANONYMOUS_DEFINED */
155 #define RESTRICTED_POINTER
158 #define ARGUMENT_PRESENT(ArgumentPointer) \
159 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL)
161 /* Returns the base address of a structure from a structure member */
162 #ifndef CONTAINING_RECORD
163 #define CONTAINING_RECORD(address, type, field) \
164 ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
167 /* Returns the byte offset of the specified structure's member */
169 #define FIELD_OFFSET(Type, Field) ((LONG)(LONG_PTR)&(((Type*) 0)->Field))
171 #define FIELD_OFFSET(Type, Field) __builtin_offsetof(Type, Field)
174 /* Returns the type's alignment */
175 #if defined(_MSC_VER) && (_MSC_VER >= 1300)
176 #define TYPE_ALIGNMENT(t) __alignof(t)
178 #define TYPE_ALIGNMENT(t) FIELD_OFFSET( struct { char x; t test; }, test )
181 /* Calling Conventions */
183 #define FASTCALL __fastcall
188 #define NTAPI __stdcall
191 // Used by the DDK exclusively , don't put in drivers
193 #define DDKAPI __stdcall // Use NTAPI instead
194 #define DDKCDECLAPI __cdecl // Just use __cdecl
196 /* Import and Export Specifiers */
198 /* Done the same way as in windef.h for now */
199 #define DECLSPEC_IMPORT __declspec(dllimport)
200 #define DECLSPEC_NORETURN __declspec(noreturn)
202 #ifndef DECLSPEC_ADDRSAFE
203 #if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
204 #define DECLSPEC_ADDRSAFE __declspec(address_safe)
206 #define DECLSPEC_ADDRSAFE
210 #if !defined(_NTSYSTEM_)
211 #define NTSYSAPI DECLSPEC_IMPORT
212 #define NTSYSCALLAPI DECLSPEC_IMPORT
215 #if defined(_NTDLLBUILD_)
218 #define NTSYSCALLAPI DECLSPEC_ADDRSAFE
224 #if (_MSC_VER >= 1200)
225 #define FORCEINLINE __forceinline
227 #define FORCEINLINE __inline
229 #define FORCEINLINE static __inline__ __attribute__((always_inline))
233 #ifndef DECLSPEC_NOINLINE
234 #if (_MSC_VER >= 1300)
235 #define DECLSPEC_NOINLINE __declspec(noinline)
236 #elif defined(__GNUC__)
237 #define DECLSPEC_NOINLINE __attribute__((noinline))
239 #define DECLSPEC_NOINLINE
243 #if !defined(_M_CEE_PURE)
244 #define NTAPI_INLINE NTAPI
249 /* Use to specify structure alignment */
250 #ifndef DECLSPEC_ALIGN
251 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
252 #define DECLSPEC_ALIGN(x) __declspec(align(x))
253 #elif defined(__GNUC__)
254 #define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
256 #define DECLSPEC_ALIGN(x)
260 /* Use to silence unused variable warnings when it is intentional */
261 #define UNREFERENCED_PARAMETER(P) {(P)=(P);}
262 #define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
263 #define DBG_UNREFERENCED_PARAMETER(P)
264 #define DBG_UNREFERENCED_LOCAL_VARIABLE(L)
266 /* min/max helper macros */
270 #define min(a,b) (((a) < (b)) ? (a) : (b))
274 #define max(a,b) (((a) > (b)) ? (a) : (b))
277 #endif /* NOMINMAX */
279 /* Tell windef.h that we have defined some basic types */
284 //typedef void * POINTER_64 PVOID64;
285 typedef PVOID PVOID64
; // FIXME!
289 typedef void *HANDLE
;
290 #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
292 typedef PVOID HANDLE
;
293 #define DECLARE_HANDLE(n) typedef HANDLE n
295 typedef HANDLE
*PHANDLE
;
297 /* Upper-Case Versions of Some Standard C Types */
303 #if !defined(MIDL_PASS)
307 typedef double DOUBLE
;
310 // Used to store a non-float 8 byte aligned structure
314 _ANONYMOUS_UNION
union
316 __GNU_EXTENSION __int64 UseThisFieldToCopy
;
317 double DoNotUseThisField
;
319 } QUAD
, *PQUAD
, UQUAD
, *PUQUAD
;
323 typedef unsigned char UCHAR
, *PUCHAR
;
324 typedef unsigned short USHORT
, *PUSHORT
;
325 typedef unsigned long ULONG
, *PULONG
;
326 typedef CONST UCHAR
*PCUCHAR
;
327 typedef CONST USHORT
*PCUSHORT
;
328 typedef CONST ULONG
*PCULONG
;
330 typedef USHORT FSHORT
;
332 typedef UCHAR BOOLEAN
, *PBOOLEAN
;
333 typedef ULONG LOGICAL
;
334 typedef ULONG
*PLOGICAL
;
337 typedef SHORT
*PSHORT
;
339 typedef LONG NTSTATUS
;
340 typedef NTSTATUS
*PNTSTATUS
;
341 typedef signed char SCHAR
;
342 typedef SCHAR
*PSCHAR
;
344 #ifndef _HRESULT_DEFINED
345 #define _HRESULT_DEFINED
346 typedef LONG HRESULT
;
350 __GNU_EXTENSION
typedef __int64 LONGLONG
, *PLONGLONG
;
351 __GNU_EXTENSION
typedef unsigned __int64 ULONGLONG
, *PULONGLONG
;
352 typedef ULONGLONG DWORDLONG
, *PDWORDLONG
;
354 /* Update Sequence Number */
355 typedef LONGLONG USN
;
357 /* ANSI (Multi-byte Character) types */
358 typedef CHAR
*PCHAR
, *LPCH
, *PCH
;
359 typedef CONST CHAR
*LPCCH
, *PCCH
;
360 typedef CHAR
*NPSTR
, *LPSTR
, *PSTR
;
361 typedef PSTR
*PZPSTR
;
362 typedef CONST PSTR
*PCZPSTR
;
363 typedef CONST CHAR
*LPCSTR
, *PCSTR
;
364 typedef PCSTR
*PZPCSTR
;
366 /* Pointer to an Asciiz string */
368 typedef CONST
char *PCSZ
;
370 /* UNICODE (Wide Character) types */
371 typedef wchar_t WCHAR
;
372 typedef WCHAR
*PWCHAR
, *LPWCH
, *PWCH
;
373 typedef CONST WCHAR
*LPCWCH
, *PCWCH
;
374 typedef WCHAR
*NWPSTR
, *LPWSTR
, *PWSTR
;
375 typedef PWSTR
*PZPWSTR
;
376 typedef CONST PWSTR
*PCZPWSTR
;
377 typedef WCHAR UNALIGNED
*LPUWSTR
, *PUWSTR
;
378 typedef CONST WCHAR
*LPCWSTR
, *PCWSTR
;
379 typedef PCWSTR
*PZPCWSTR
;
380 typedef CONST WCHAR UNALIGNED
*LPCUWSTR
, *PCUWSTR
;
382 /* Cardinal Data Types */
383 typedef char CCHAR
, *PCCHAR
;
384 typedef short CSHORT
, *PCSHORT
;
385 typedef ULONG CLONG
, *PCLONG
;
387 /* NLS basics (Locale and Language Ids) */
389 typedef PULONG PLCID
;
390 typedef USHORT LANGID
;
393 /* Large Integer Unions */
394 #if defined(MIDL_PASS)
395 typedef struct _LARGE_INTEGER
{
397 typedef union _LARGE_INTEGER
{
398 _ANONYMOUS_STRUCT
struct
408 #endif /* MIDL_PASS */
410 } LARGE_INTEGER
, *PLARGE_INTEGER
;
412 #if defined(MIDL_PASS)
413 typedef struct _ULARGE_INTEGER
{
415 typedef union _ULARGE_INTEGER
{
416 _ANONYMOUS_STRUCT
struct
426 #endif /* MIDL_PASS */
428 } ULARGE_INTEGER
, *PULARGE_INTEGER
;
430 /* Physical Addresses are always treated as 64-bit wide */
431 typedef LARGE_INTEGER PHYSICAL_ADDRESS
, *PPHYSICAL_ADDRESS
;
433 /* Locally Unique Identifier */
434 typedef struct _LUID
{
439 /* Native API Return Value Macros */
440 #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
441 #define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1)
442 #define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2)
443 #define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3)
446 typedef struct _UNICODE_STRING
{
448 USHORT MaximumLength
;
450 } UNICODE_STRING
, *PUNICODE_STRING
;
451 typedef const UNICODE_STRING
* PCUNICODE_STRING
;
452 #define UNICODE_NULL ((WCHAR)0)
454 typedef struct _CSTRING
{
456 USHORT MaximumLength
;
458 } CSTRING
, *PCSTRING
;
459 #define ANSI_NULL ((CHAR)0)
461 typedef struct _STRING
{
463 USHORT MaximumLength
;
467 typedef STRING ANSI_STRING
;
468 typedef PSTRING PANSI_STRING
;
469 typedef STRING OEM_STRING
;
470 typedef PSTRING POEM_STRING
;
471 typedef CONST STRING
* PCOEM_STRING
;
472 typedef STRING CANSI_STRING
;
473 typedef PSTRING PCANSI_STRING
;
475 typedef struct _STRING32
{
477 USHORT MaximumLength
;
479 } STRING32
, *PSTRING32
,
480 UNICODE_STRING32
, *PUNICODE_STRING32
,
481 ANSI_STRING32
, *PANSI_STRING32
;
483 typedef struct _STRING64
{
485 USHORT MaximumLength
;
487 } STRING64
, *PSTRING64
,
488 UNICODE_STRING64
, *PUNICODE_STRING64
,
489 ANSI_STRING64
, *PANSI_STRING64
;
492 #define MAKELANGID(p, s) ((((USHORT)(s)) << 10) | (USHORT)(p))
493 #define PRIMARYLANGID(lgid) ((USHORT)(lgid) & 0x3ff)
494 #define SUBLANGID(lgid) ((USHORT)(lgid) >> 10)
496 #define NLS_VALID_LOCALE_MASK 0x000fffff
498 #define MAKELCID(lgid, srtid) ((ULONG)((((ULONG)((USHORT)(srtid))) << 16) | \
499 ((ULONG)((USHORT)(lgid)))))
500 #define MAKESORTLCID(lgid, srtid, ver) \
501 ((ULONG)((MAKELCID(lgid, srtid)) | \
502 (((ULONG)((USHORT)(ver))) << 20)))
503 #define LANGIDFROMLCID(lcid) ((USHORT)(lcid))
504 #define SORTIDFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 16) & 0xf))
505 #define SORTVERSIONFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 20) & 0xf))
508 /* Object Attributes */
509 typedef struct _OBJECT_ATTRIBUTES
{
511 HANDLE RootDirectory
;
512 PUNICODE_STRING ObjectName
;
514 PVOID SecurityDescriptor
;
515 PVOID SecurityQualityOfService
;
516 } OBJECT_ATTRIBUTES
, *POBJECT_ATTRIBUTES
;
517 typedef CONST OBJECT_ATTRIBUTES
*PCOBJECT_ATTRIBUTES
;
519 /* Values for the Attributes member */
520 #define OBJ_INHERIT 0x00000002
521 #define OBJ_PERMANENT 0x00000010
522 #define OBJ_EXCLUSIVE 0x00000020
523 #define OBJ_CASE_INSENSITIVE 0x00000040
524 #define OBJ_OPENIF 0x00000080
525 #define OBJ_OPENLINK 0x00000100
526 #define OBJ_KERNEL_HANDLE 0x00000200
527 #define OBJ_FORCE_ACCESS_CHECK 0x00000400
528 #define OBJ_VALID_ATTRIBUTES 0x000007F2
531 #define InitializeObjectAttributes(p,n,a,r,s) { \
532 (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
533 (p)->RootDirectory = (r); \
534 (p)->Attributes = (a); \
535 (p)->ObjectName = (n); \
536 (p)->SecurityDescriptor = (s); \
537 (p)->SecurityQualityOfService = NULL; \
541 typedef enum _NT_PRODUCT_TYPE
{
545 } NT_PRODUCT_TYPE
, *PNT_PRODUCT_TYPE
;
549 /* Doubly Linked Lists */
550 typedef struct _LIST_ENTRY
{
551 struct _LIST_ENTRY
*Flink
;
552 struct _LIST_ENTRY
*Blink
;
553 } LIST_ENTRY
, *PLIST_ENTRY
, *RESTRICTED_POINTER PRLIST_ENTRY
;
555 typedef struct LIST_ENTRY32
559 } LIST_ENTRY32
, *PLIST_ENTRY32
;
561 typedef struct LIST_ENTRY64
565 } LIST_ENTRY64
, *PLIST_ENTRY64
;
567 /* Singly Linked Lists */
568 typedef struct _SINGLE_LIST_ENTRY
{
569 struct _SINGLE_LIST_ENTRY
*Next
;
570 } SINGLE_LIST_ENTRY
, *PSINGLE_LIST_ENTRY
;
572 typedef struct _PROCESSOR_NUMBER
{
576 } PROCESSOR_NUMBER
, *PPROCESSOR_NUMBER
;
578 typedef EXCEPTION_DISPOSITION
579 (NTAPI
*PEXCEPTION_ROUTINE
)(
580 IN
struct _EXCEPTION_RECORD
*ExceptionRecord
,
581 IN PVOID EstablisherFrame
,
582 IN OUT
struct _CONTEXT
*ContextRecord
,
583 IN OUT PVOID DispatcherContext
);
587 #define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s }
589 #define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
591 #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
592 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
593 #ifdef ENABLE_RTL_NUMBER_OF_V2
594 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
596 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
598 #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
603 #define MINSHORT 0x8000
604 #define MAXSHORT 0x7fff
605 #define MINLONG 0x80000000
606 #define MAXLONG 0x7fffffff
607 #define MAXUCHAR 0xff
608 #define MAXUSHORT 0xffff
609 #define MAXULONG 0xffffffff
610 #define MAXLONGLONG (0x7fffffffffffffffLL)
612 /* Multiplication and Shift Operations */
613 #define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b))
614 #define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b))
615 #define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b))
616 #define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b))
617 #define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
619 /* C_ASSERT Definition */
620 #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
622 /* Primary language IDs. */
623 #define LANG_NEUTRAL 0x00
624 #define LANG_INVARIANT 0x7f
626 #define LANG_AFRIKAANS 0x36
627 #define LANG_ALBANIAN 0x1c
628 #define LANG_ALSATIAN 0x84
629 #define LANG_AMHARIC 0x5e
630 #define LANG_ARABIC 0x01
631 #define LANG_ARMENIAN 0x2b
632 #define LANG_ASSAMESE 0x4d
633 #define LANG_AZERI 0x2c
634 #define LANG_BASHKIR 0x6d
635 #define LANG_BASQUE 0x2d
636 #define LANG_BELARUSIAN 0x23
637 #define LANG_BENGALI 0x45
638 #define LANG_BRETON 0x7e
639 #define LANG_BOSNIAN 0x1a
640 #define LANG_BOSNIAN_NEUTRAL 0x781a
641 #define LANG_BULGARIAN 0x02
642 #define LANG_CATALAN 0x03
643 #define LANG_CHINESE 0x04
644 #define LANG_CHINESE_SIMPLIFIED 0x04
645 #define LANG_CHINESE_TRADITIONAL 0x7c04
646 #define LANG_CORSICAN 0x83
647 #define LANG_CROATIAN 0x1a
648 #define LANG_CZECH 0x05
649 #define LANG_DANISH 0x06
650 #define LANG_DARI 0x8c
651 #define LANG_DIVEHI 0x65
652 #define LANG_DUTCH 0x13
653 #define LANG_ENGLISH 0x09
654 #define LANG_ESTONIAN 0x25
655 #define LANG_FAEROESE 0x38
656 #define LANG_FARSI 0x29
657 #define LANG_FILIPINO 0x64
658 #define LANG_FINNISH 0x0b
659 #define LANG_FRENCH 0x0c
660 #define LANG_FRISIAN 0x62
661 #define LANG_GALICIAN 0x56
662 #define LANG_GEORGIAN 0x37
663 #define LANG_GERMAN 0x07
664 #define LANG_GREEK 0x08
665 #define LANG_GREENLANDIC 0x6f
666 #define LANG_GUJARATI 0x47
667 #define LANG_HAUSA 0x68
668 #define LANG_HEBREW 0x0d
669 #define LANG_HINDI 0x39
670 #define LANG_HUNGARIAN 0x0e
671 #define LANG_ICELANDIC 0x0f
672 #define LANG_IGBO 0x70
673 #define LANG_INDONESIAN 0x21
674 #define LANG_INUKTITUT 0x5d
675 #define LANG_IRISH 0x3c
676 #define LANG_ITALIAN 0x10
677 #define LANG_JAPANESE 0x11
678 #define LANG_KANNADA 0x4b
679 #define LANG_KASHMIRI 0x60
680 #define LANG_KAZAK 0x3f
681 #define LANG_KHMER 0x53
682 #define LANG_KICHE 0x86
683 #define LANG_KINYARWANDA 0x87
684 #define LANG_KONKANI 0x57
685 #define LANG_KOREAN 0x12
686 #define LANG_KYRGYZ 0x40
687 #define LANG_LAO 0x54
688 #define LANG_LATVIAN 0x26
689 #define LANG_LITHUANIAN 0x27
690 #define LANG_LOWER_SORBIAN 0x2e
691 #define LANG_LUXEMBOURGISH 0x6e
692 #define LANG_MACEDONIAN 0x2f
693 #define LANG_MALAY 0x3e
694 #define LANG_MALAYALAM 0x4c
695 #define LANG_MALTESE 0x3a
696 #define LANG_MANIPURI 0x58
697 #define LANG_MAORI 0x81
698 #define LANG_MAPUDUNGUN 0x7a
699 #define LANG_MARATHI 0x4e
700 #define LANG_MOHAWK 0x7c
701 #define LANG_MONGOLIAN 0x50
702 #define LANG_NEPALI 0x61
703 #define LANG_NORWEGIAN 0x14
704 #define LANG_OCCITAN 0x82
705 #define LANG_ORIYA 0x48
706 #define LANG_PASHTO 0x63
707 #define LANG_PERSIAN 0x29
708 #define LANG_POLISH 0x15
709 #define LANG_PORTUGUESE 0x16
710 #define LANG_PUNJABI 0x46
711 #define LANG_QUECHUA 0x6b
712 #define LANG_ROMANIAN 0x18
713 #define LANG_ROMANSH 0x17
714 #define LANG_RUSSIAN 0x19
715 #define LANG_SAMI 0x3b
716 #define LANG_SANSKRIT 0x4f
717 #define LANG_SERBIAN 0x1a
718 #define LANG_SERBIAN_NEUTRAL 0x7c1a
719 #define LANG_SINDHI 0x59
720 #define LANG_SINHALESE 0x5b
721 #define LANG_SLOVAK 0x1b
722 #define LANG_SLOVENIAN 0x24
723 #define LANG_SOTHO 0x6c
724 #define LANG_SPANISH 0x0a
725 #define LANG_SWAHILI 0x41
726 #define LANG_SWEDISH 0x1d
727 #define LANG_SYRIAC 0x5a
728 #define LANG_TAJIK 0x28
729 #define LANG_TAMAZIGHT 0x5f
730 #define LANG_TAMIL 0x49
731 #define LANG_TATAR 0x44
732 #define LANG_TELUGU 0x4a
733 #define LANG_THAI 0x1e
734 #define LANG_TIBETAN 0x51
735 #define LANG_TIGRIGNA 0x73
736 #define LANG_TSWANA 0x32
737 #define LANG_TURKISH 0x1f
738 #define LANG_TURKMEN 0x42
739 #define LANG_UIGHUR 0x80
740 #define LANG_UKRAINIAN 0x22
741 #define LANG_UPPER_SORBIAN 0x2e
742 #define LANG_URDU 0x20
743 #define LANG_UZBEK 0x43
744 #define LANG_VIETNAMESE 0x2a
745 #define LANG_WELSH 0x52
746 #define LANG_WOLOF 0x88
747 #define LANG_XHOSA 0x34
748 #define LANG_YAKUT 0x85
750 #define LANG_YORUBA 0x6a
751 #define LANG_ZULU 0x35