Mercurial > games > semicongine
diff fuhtark_test/include/ddk/ntdef.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fuhtark_test/include/ddk/ntdef.h Wed Nov 26 21:36:48 2025 +0700 @@ -0,0 +1,835 @@ +#ifndef _NTDEF_H +#define _NTDEF_H + +// +// Dependencies +// +#include <ctype.h> +#include <basetsd.h> +#include <excpt.h> +#include <sdkddkver.h> + +// FIXME: Should we include these here? +#include <stdarg.h> +#include <string.h> + + +typedef unsigned long POINTER_64; // FIXME! HACK!!! + + + +// +// Pseudo Modifiers for Input Parameters +// +#ifndef IN +#define IN +#endif + +#ifndef OUT +#define OUT +#endif + +#ifndef OPTIONAL +#define OPTIONAL +#endif + +#ifndef NOTHING +#define NOTHING +#endif + +#ifndef CRITICAL +#define CRITICAL +#endif + +#ifndef FAR +#define FAR +#endif + + +// +// Defines the "size" of an any-size array +// +#ifndef ANYSIZE_ARRAY +#define ANYSIZE_ARRAY 1 +#endif + +// +// Constant modifier +// +#ifndef CONST +#define CONST const +#endif + +// +// TRUE/FALSE +// +#define FALSE 0 +#define TRUE 1 + +// +// NULL/NULL64 +// +#ifndef NULL +#ifdef __cplusplus +#define NULL 0 +#define NULL64 0 +#else +#define NULL ((void *)0) +#define NULL64 ((void * POINTER_64)0) +#endif +#endif // NULL + + +// +// FIXME +// We should use the -fms-extensions compiler flag for gcc, +// and clean up the mess. +// +#ifndef NONAMELESSUNION +#ifdef __GNUC__ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +#define _ANONYMOUS_UNION __extension__ +#define _ANONYMOUS_STRUCT __extension__ +#else +#if defined(__cplusplus) +#define _ANONYMOUS_UNION __extension__ +#endif /* __cplusplus */ +#endif /* __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) */ +#elif defined(__WATCOMC__) || defined(_MSC_VER) +#define _ANONYMOUS_UNION +#define _ANONYMOUS_STRUCT +#endif /* __GNUC__/__WATCOMC__ */ +#endif /* NONAMELESSUNION */ + +#ifndef _ANONYMOUS_UNION +#define _ANONYMOUS_UNION +#define _UNION_NAME(x) x +#define DUMMYUNIONNAME u +#define DUMMYUNIONNAME2 u2 +#define DUMMYUNIONNAME3 u3 +#define DUMMYUNIONNAME4 u4 +#define DUMMYUNIONNAME5 u5 +#define DUMMYUNIONNAME6 u6 +#define DUMMYUNIONNAME7 u7 +#define DUMMYUNIONNAME8 u8 +#else +#define _UNION_NAME(x) +#define DUMMYUNIONNAME +#define DUMMYUNIONNAME2 +#define DUMMYUNIONNAME3 +#define DUMMYUNIONNAME4 +#define DUMMYUNIONNAME5 +#define DUMMYUNIONNAME6 +#define DUMMYUNIONNAME7 +#define DUMMYUNIONNAME8 +#endif + +#ifndef _ANONYMOUS_STRUCT +#define _ANONYMOUS_STRUCT +#define _STRUCT_NAME(x) x +#define DUMMYSTRUCTNAME s +#define DUMMYSTRUCTNAME2 s2 +#define DUMMYSTRUCTNAME3 s3 +#else +#define _STRUCT_NAME(x) +#define DUMMYSTRUCTNAME +#define DUMMYSTRUCTNAME2 +#define DUMMYSTRUCTNAME3 +#endif + + + +// FIXME +#undef UNALIGNED +#define UNALIGNED +#define RESTRICTED_POINTER + +// +// Returns the base address of a structure from a structure member +// +#ifndef CONTAINING_RECORD +#define CONTAINING_RECORD(address, type, field) \ + ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field)))) +#endif + +// +// Returns the byte offset of the specified structure's member +// +#ifndef __GNUC__ +#define FIELD_OFFSET(Type, Field) ((LONG)(LONG_PTR)&(((Type*) 0)->Field)) +#else +#define FIELD_OFFSET(Type, Field) __builtin_offsetof(Type, Field) +#endif + +// +// Returns the type's alignment +// +#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#define TYPE_ALIGNMENT(t) __alignof(t) +#else +#define TYPE_ALIGNMENT(t) FIELD_OFFSET( struct { char x; t test; }, test ) +#endif + +// +// Calling Conventions +// +#if defined(_M_IX86) +#define FASTCALL __fastcall +#else +#define FASTCALL +#endif + +#define NTAPI __stdcall + +// +// Used by the DDK exclusively , don't put in drivers +// +#define DDKAPI __stdcall // Use NTAPI instead +#define DDKCDECLAPI __cdecl // Just use __cdecl + +// +// Import and Export Specifiers +// + +// Done the same way as in windef.h for now +#define DECLSPEC_IMPORT __declspec(dllimport) +#define DECLSPEC_NORETURN __declspec(noreturn) + + +#ifndef DECLSPEC_ADDRSAFE +#if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64)) +#define DECLSPEC_ADDRSAFE __declspec(address_safe) +#else +#define DECLSPEC_ADDRSAFE +#endif +#endif + +#if !defined(_NTSYSTEM_) +#define NTSYSAPI DECLSPEC_IMPORT +#define NTSYSCALLAPI DECLSPEC_IMPORT +#else +#define NTSYSAPI +#if defined(_NTDLLBUILD_) +#define NTSYSCALLAPI +#else +#define NTSYSCALLAPI DECLSPEC_ADDRSAFE +#endif +#endif + +// +// Inlines +// +#ifndef FORCEINLINE +#if (_MSC_VER >= 1200) +#define FORCEINLINE __forceinline +#elif (_MSC_VER) +#define FORCEINLINE __inline +#else +#define FORCEINLINE static __inline__ __attribute__((always_inline)) +#endif +#endif + +#ifndef DECLSPEC_NOINLINE +#if (_MSC_VER >= 1300) +#define DECLSPEC_NOINLINE __declspec(noinline) +#elif defined(__GNUC__) +#define DECLSPEC_NOINLINE __attribute__((noinline)) +#else +#define DECLSPEC_NOINLINE +#endif +#endif + +#if !defined(_M_CEE_PURE) +#define NTAPI_INLINE NTAPI +#else +#define NTAPI_INLINE +#endif + +// +// Use to specify structure alignment +// +#ifndef DECLSPEC_ALIGN +#if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS) +#define DECLSPEC_ALIGN(x) __declspec(align(x)) +#elif defined(__GNUC__) +#define DECLSPEC_ALIGN(x) __attribute__((aligned(x))) +#else +#define DECLSPEC_ALIGN(x) +#endif +#endif + + + +// +// Use to silence unused variable warnings when it is intentional +// +#define UNREFERENCED_PARAMETER(P) {(P)=(P);} +#define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);} +#define DBG_UNREFERENCED_PARAMETER(P) +#define DBG_UNREFERENCED_LOCAL_VARIABLE(L) + + + +// +// min/max helper macros +// +#ifndef NOMINMAX + +#ifndef min +#define min(a,b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef max +#define max(a,b) (((a) > (b)) ? (a) : (b)) +#endif + +#endif // NOMINMAX + + + +// +// Tell windef.h that we have defined some basic types +// +#define BASETYPES + +// +// Void Pointers +// +typedef void *PVOID; +//typedef void * POINTER_64 PVOID64; +typedef PVOID PVOID64; // FIXME! + +// +// Handle Type +// +#ifdef STRICT +typedef void *HANDLE; +#define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n +#else +typedef PVOID HANDLE; +#define DECLARE_HANDLE(n) typedef HANDLE n +#endif +typedef HANDLE *PHANDLE; + +// +// Upper-Case Versions of Some Standard C Types +// +#ifndef VOID +#define VOID void +typedef char CHAR; +typedef short SHORT; +typedef long LONG; +#if !defined(MIDL_PASS) +typedef int INT; +#endif +#endif +typedef double DOUBLE; + +// +// Used to store a non-float 8 byte aligned structure +// +typedef struct _QUAD +{ + _ANONYMOUS_UNION union + { + __int64 UseThisFieldToCopy; + double DoNotUseThisField; + }; +} QUAD, *PQUAD, UQUAD, *PUQUAD; + + +// +// Unsigned Types +// +typedef unsigned char UCHAR, *PUCHAR; +typedef unsigned short USHORT, *PUSHORT; +typedef unsigned long ULONG, *PULONG; +typedef CONST UCHAR *PCUCHAR; +typedef CONST USHORT *PCUSHORT; +typedef CONST ULONG *PCULONG; + +typedef UCHAR FCHAR; +typedef USHORT FSHORT; +typedef ULONG FLONG; +typedef UCHAR BOOLEAN; +typedef BOOLEAN *PBOOLEAN; + +// +// Signed Types +// +typedef SHORT *PSHORT; +typedef LONG *PLONG; + +typedef LONG NTSTATUS; +typedef NTSTATUS *PNTSTATUS; + +typedef signed char SCHAR; +typedef SCHAR *PSCHAR; + +#ifndef _HRESULT_DEFINED +#define _HRESULT_DEFINED +typedef LONG HRESULT; +#endif + +// +// 64-bit types +// +typedef __int64 LONGLONG, *PLONGLONG; +typedef unsigned __int64 ULONGLONG, *PULONGLONG; +typedef ULONGLONG DWORDLONG, *PDWORDLONG; + +// +// Update Sequence Number +// +typedef LONGLONG USN; + + +// +// ANSI (Multi-byte Character) types +// +typedef CHAR *PCHAR, *LPCH, *PCH; +typedef CONST CHAR *LPCCH, *PCCH; +typedef CHAR *NPSTR, *LPSTR, *PSTR; +typedef PSTR *PZPSTR; +typedef CONST PSTR *PCZPSTR; +typedef CONST CHAR *LPCSTR, *PCSTR; +typedef PCSTR *PZPCSTR; + +// +// Pointer to an Asciiz string +// +typedef CHAR *PSZ; +typedef CONST char *PCSZ; + +// +// UNICODE (Wide Character) types +// +typedef wchar_t WCHAR; +typedef WCHAR *PWCHAR, *LPWCH, *PWCH; +typedef CONST WCHAR *LPCWCH, *PCWCH; +typedef WCHAR *NWPSTR, *LPWSTR, *PWSTR; +typedef PWSTR *PZPWSTR; +typedef CONST PWSTR *PCZPWSTR; +typedef WCHAR UNALIGNED *LPUWSTR, *PUWSTR; +typedef CONST WCHAR *LPCWSTR, *PCWSTR; +typedef PCWSTR *PZPCWSTR; +typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR; + +// +// Cardinal Data Types +// +typedef char CCHAR, *PCCHAR; +typedef short CSHORT, *PCSHORT; +typedef ULONG CLONG, *PCLONG; + +// +// NLS basics (Locale and Language Ids) +// +typedef ULONG LCID; +typedef PULONG PLCID; +typedef USHORT LANGID; + + + +// +// Large Integer Unions +// +#if defined(MIDL_PASS) +typedef struct _LARGE_INTEGER { +#else +typedef union _LARGE_INTEGER { + _ANONYMOUS_STRUCT struct + { + ULONG LowPart; + LONG HighPart; + } DUMMYSTRUCTNAME; + struct + { + ULONG LowPart; + LONG HighPart; + } u; +#endif //MIDL_PASS + LONGLONG QuadPart; +} LARGE_INTEGER, *PLARGE_INTEGER; + +#if defined(MIDL_PASS) +typedef struct _ULARGE_INTEGER { +#else +typedef union _ULARGE_INTEGER { + _ANONYMOUS_STRUCT struct + { + ULONG LowPart; + ULONG HighPart; + } DUMMYSTRUCTNAME; + struct + { + ULONG LowPart; + ULONG HighPart; + } u; +#endif //MIDL_PASS + ULONGLONG QuadPart; +} ULARGE_INTEGER, *PULARGE_INTEGER; + +// +// Physical Addresses are always treated as 64-bit wide +// +typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS; + + + +// +// Locally Unique Identifier +// +typedef struct _LUID { + ULONG LowPart; + LONG HighPart; +} LUID, *PLUID; + + + +// +// Native API Return Value Macros +// +#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) +#define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1) +#define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2) +#define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3) + + + +// +// String Types +// +typedef struct _UNICODE_STRING { + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +} UNICODE_STRING, *PUNICODE_STRING; +typedef const UNICODE_STRING* PCUNICODE_STRING; +#define UNICODE_NULL ((WCHAR)0) + +typedef struct _CSTRING { + USHORT Length; + USHORT MaximumLength; + CONST CHAR *Buffer; +} CSTRING, *PCSTRING; +#define ANSI_NULL ((CHAR)0) + +typedef struct _STRING { + USHORT Length; + USHORT MaximumLength; + PCHAR Buffer; +} STRING, *PSTRING; + +typedef STRING ANSI_STRING; +typedef PSTRING PANSI_STRING; +typedef STRING OEM_STRING; +typedef PSTRING POEM_STRING; +typedef CONST STRING* PCOEM_STRING; +typedef STRING CANSI_STRING; +typedef PSTRING PCANSI_STRING; + +typedef struct _STRING32 { + USHORT Length; + USHORT MaximumLength; + ULONG Buffer; +} STRING32, *PSTRING32, + UNICODE_STRING32, *PUNICODE_STRING32, + ANSI_STRING32, *PANSI_STRING32; + +typedef struct _STRING64 { + USHORT Length; + USHORT MaximumLength; + ULONGLONG Buffer; +} STRING64, *PSTRING64, + UNICODE_STRING64, *PUNICODE_STRING64, + ANSI_STRING64, *PANSI_STRING64; + +// +// LangID and NLS +// +#define MAKELANGID(p, s) ((((USHORT)(s)) << 10) | (USHORT)(p)) +#define PRIMARYLANGID(lgid) ((USHORT)(lgid) & 0x3ff) +#define SUBLANGID(lgid) ((USHORT)(lgid) >> 10) + +#define NLS_VALID_LOCALE_MASK 0x000fffff + +#define MAKELCID(lgid, srtid) ((ULONG)((((ULONG)((USHORT)(srtid))) << 16) | \ + ((ULONG)((USHORT)(lgid))))) +#define MAKESORTLCID(lgid, srtid, ver) \ + ((ULONG)((MAKELCID(lgid, srtid)) | \ + (((ULONG)((USHORT)(ver))) << 20))) +#define LANGIDFROMLCID(lcid) ((USHORT)(lcid)) +#define SORTIDFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 16) & 0xf)) +#define SORTVERSIONFROMLCID(lcid) ((USHORT)((((ULONG)(lcid)) >> 20) & 0xf)) + + + +// +// Object Attributes +// +typedef struct _OBJECT_ATTRIBUTES { + ULONG Length; + HANDLE RootDirectory; + PUNICODE_STRING ObjectName; + ULONG Attributes; + PVOID SecurityDescriptor; + PVOID SecurityQualityOfService; +} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; +typedef CONST OBJECT_ATTRIBUTES *PCOBJECT_ATTRIBUTES; + +// +// Values for the Attributes member +// +#define OBJ_INHERIT 0x00000002 +#define OBJ_PERMANENT 0x00000010 +#define OBJ_EXCLUSIVE 0x00000020 +#define OBJ_CASE_INSENSITIVE 0x00000040 +#define OBJ_OPENIF 0x00000080 +#define OBJ_OPENLINK 0x00000100 +#define OBJ_KERNEL_HANDLE 0x00000200 +#define OBJ_FORCE_ACCESS_CHECK 0x00000400 +#define OBJ_VALID_ATTRIBUTES 0x000007F2 + +// +// Helper Macro +// +#define InitializeObjectAttributes(p,n,a,r,s) { \ + (p)->Length = sizeof(OBJECT_ATTRIBUTES); \ + (p)->RootDirectory = (r); \ + (p)->Attributes = (a); \ + (p)->ObjectName = (n); \ + (p)->SecurityDescriptor = (s); \ + (p)->SecurityQualityOfService = NULL; \ +} + + + +// +// Product Types +// +typedef enum _NT_PRODUCT_TYPE { + NtProductWinNt = 1, + NtProductLanManNt, + NtProductServer +} NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE; + + + +// +// Doubly Linked Lists +// +typedef struct _LIST_ENTRY { + struct _LIST_ENTRY *Flink; + struct _LIST_ENTRY *Blink; +} LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY; + +typedef struct LIST_ENTRY32 +{ + ULONG Flink; + ULONG Blink; +} LIST_ENTRY32, *PLIST_ENTRY32; + +typedef struct LIST_ENTRY64 +{ + ULONGLONG Flink; + ULONGLONG Blink; +} LIST_ENTRY64, *PLIST_ENTRY64; + +// +// Singly Linked Lists +// +typedef struct _SINGLE_LIST_ENTRY { + struct _SINGLE_LIST_ENTRY *Next; +} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY; + + + +// +// Helper Macros +// +#define RTL_CONSTANT_STRING(s) { sizeof(s)-sizeof((s)[0]), sizeof(s), s } + +#define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field)) + +#define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0])) +#define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A) +#ifdef ENABLE_RTL_NUMBER_OF_V2 +#define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A) +#else +#define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A) +#endif +#define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A) + + + +// +// Type Limits +// +#define MINCHAR 0x80 +#define MAXCHAR 0x7f +#define MINSHORT 0x8000 +#define MAXSHORT 0x7fff +#define MINLONG 0x80000000 +#define MAXLONG 0x7fffffff +#define MAXUCHAR 0xff +#define MAXUSHORT 0xffff +#define MAXULONG 0xffffffff +#define MAXLONGLONG (0x7fffffffffffffffLL) + + + +// +// Multiplication and Shift Operations +// +#define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b)) +#define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b)) +#define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b)) +#define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b)) +#define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b)) + + + +// +// C_ASSERT Definition +// +#define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1] + + + +// +// Primary language IDs. +// +#define LANG_NEUTRAL 0x00 +#define LANG_INVARIANT 0x7f + +#define LANG_AFRIKAANS 0x36 +#define LANG_ALBANIAN 0x1c +#define LANG_ALSATIAN 0x84 +#define LANG_AMHARIC 0x5e +#define LANG_ARABIC 0x01 +#define LANG_ARMENIAN 0x2b +#define LANG_ASSAMESE 0x4d +#define LANG_AZERI 0x2c +#define LANG_BASHKIR 0x6d +#define LANG_BASQUE 0x2d +#define LANG_BELARUSIAN 0x23 +#define LANG_BENGALI 0x45 +#define LANG_BRETON 0x7e +#define LANG_BOSNIAN 0x1a +#define LANG_BOSNIAN_NEUTRAL 0x781a +#define LANG_BULGARIAN 0x02 +#define LANG_CATALAN 0x03 +#define LANG_CHINESE 0x04 +#define LANG_CHINESE_SIMPLIFIED 0x04 +#define LANG_CHINESE_TRADITIONAL 0x7c04 +#define LANG_CORSICAN 0x83 +#define LANG_CROATIAN 0x1a +#define LANG_CZECH 0x05 +#define LANG_DANISH 0x06 +#define LANG_DARI 0x8c +#define LANG_DIVEHI 0x65 +#define LANG_DUTCH 0x13 +#define LANG_ENGLISH 0x09 +#define LANG_ESTONIAN 0x25 +#define LANG_FAEROESE 0x38 +#define LANG_FARSI 0x29 +#define LANG_FILIPINO 0x64 +#define LANG_FINNISH 0x0b +#define LANG_FRENCH 0x0c +#define LANG_FRISIAN 0x62 +#define LANG_GALICIAN 0x56 +#define LANG_GEORGIAN 0x37 +#define LANG_GERMAN 0x07 +#define LANG_GREEK 0x08 +#define LANG_GREENLANDIC 0x6f +#define LANG_GUJARATI 0x47 +#define LANG_HAUSA 0x68 +#define LANG_HEBREW 0x0d +#define LANG_HINDI 0x39 +#define LANG_HUNGARIAN 0x0e +#define LANG_ICELANDIC 0x0f +#define LANG_IGBO 0x70 +#define LANG_INDONESIAN 0x21 +#define LANG_INUKTITUT 0x5d +#define LANG_IRISH 0x3c +#define LANG_ITALIAN 0x10 +#define LANG_JAPANESE 0x11 +#define LANG_KANNADA 0x4b +#define LANG_KASHMIRI 0x60 +#define LANG_KAZAK 0x3f +#define LANG_KHMER 0x53 +#define LANG_KICHE 0x86 +#define LANG_KINYARWANDA 0x87 +#define LANG_KONKANI 0x57 +#define LANG_KOREAN 0x12 +#define LANG_KYRGYZ 0x40 +#define LANG_LAO 0x54 +#define LANG_LATVIAN 0x26 +#define LANG_LITHUANIAN 0x27 +#define LANG_LOWER_SORBIAN 0x2e +#define LANG_LUXEMBOURGISH 0x6e +#define LANG_MACEDONIAN 0x2f +#define LANG_MALAY 0x3e +#define LANG_MALAYALAM 0x4c +#define LANG_MALTESE 0x3a +#define LANG_MANIPURI 0x58 +#define LANG_MAORI 0x81 +#define LANG_MAPUDUNGUN 0x7a +#define LANG_MARATHI 0x4e +#define LANG_MOHAWK 0x7c +#define LANG_MONGOLIAN 0x50 +#define LANG_NEPALI 0x61 +#define LANG_NORWEGIAN 0x14 +#define LANG_OCCITAN 0x82 +#define LANG_ORIYA 0x48 +#define LANG_PASHTO 0x63 +#define LANG_PERSIAN 0x29 +#define LANG_POLISH 0x15 +#define LANG_PORTUGUESE 0x16 +#define LANG_PUNJABI 0x46 +#define LANG_QUECHUA 0x6b +#define LANG_ROMANIAN 0x18 +#define LANG_ROMANSH 0x17 +#define LANG_RUSSIAN 0x19 +#define LANG_SAMI 0x3b +#define LANG_SANSKRIT 0x4f +#define LANG_SERBIAN 0x1a +#define LANG_SERBIAN_NEUTRAL 0x7c1a +#define LANG_SINDHI 0x59 +#define LANG_SINHALESE 0x5b +#define LANG_SLOVAK 0x1b +#define LANG_SLOVENIAN 0x24 +#define LANG_SOTHO 0x6c +#define LANG_SPANISH 0x0a +#define LANG_SWAHILI 0x41 +#define LANG_SWEDISH 0x1d +#define LANG_SYRIAC 0x5a +#define LANG_TAJIK 0x28 +#define LANG_TAMAZIGHT 0x5f +#define LANG_TAMIL 0x49 +#define LANG_TATAR 0x44 +#define LANG_TELUGU 0x4a +#define LANG_THAI 0x1e +#define LANG_TIBETAN 0x51 +#define LANG_TIGRIGNA 0x73 +#define LANG_TSWANA 0x32 +#define LANG_TURKISH 0x1f +#define LANG_TURKMEN 0x42 +#define LANG_UIGHUR 0x80 +#define LANG_UKRAINIAN 0x22 +#define LANG_UPPER_SORBIAN 0x2e +#define LANG_URDU 0x20 +#define LANG_UZBEK 0x43 +#define LANG_VIETNAMESE 0x2a +#define LANG_WELSH 0x52 +#define LANG_WOLOF 0x88 +#define LANG_XHOSA 0x34 +#define LANG_YAKUT 0x85 +#define LANG_YI 0x78 +#define LANG_YORUBA 0x6a +#define LANG_ZULU 0x35 + + + +#endif /* _NTDEF_H */
