summaryrefslogtreecommitdiff
path: root/win32/include
diff options
context:
space:
mode:
Diffstat (limited to 'win32/include')
-rw-r--r--win32/include/_mingw.h12
-rw-r--r--win32/include/assert.h5
-rw-r--r--win32/include/iso646.h36
-rw-r--r--win32/include/math.h52
-rw-r--r--win32/include/sys/stat.h4
-rwxr-xr-xwin32/include/uchar.h33
-rw-r--r--win32/include/winapi/qos.h72
-rw-r--r--win32/include/winapi/windows.h2
-rw-r--r--win32/include/winapi/winnls.h778
-rw-r--r--win32/include/winapi/winnt.h14
-rw-r--r--win32/include/winapi/winsock2.h1474
-rw-r--r--win32/include/winapi/ws2ipdef.h21
-rw-r--r--win32/include/winapi/ws2tcpip.h391
13 files changed, 2864 insertions, 30 deletions
diff --git a/win32/include/_mingw.h b/win32/include/_mingw.h
index 2fc9798..4ac2651 100644
--- a/win32/include/_mingw.h
+++ b/win32/include/_mingw.h
@@ -41,7 +41,7 @@
#define __MSVCRT__ 1
#undef _MSVCRT_
#define __MINGW_IMPORT extern __declspec(dllimport)
-#define __MINGW_ATTRIB_NORETURN
+#define __MINGW_ATTRIB_NORETURN __declspec(noreturn)
#define __MINGW_ATTRIB_CONST
#define __MINGW_ATTRIB_DEPRECATED
#define __MINGW_ATTRIB_MALLOC
@@ -51,7 +51,7 @@
#define __GNUC_VA_LIST
#define _CRTIMP extern
-#define __CRT_INLINE extern __inline__
+#define __CRT_INLINE static __inline__
#define _CRT_ALIGN(x) __attribute__((aligned(x)))
#define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
@@ -76,18 +76,12 @@
#define _M_AMD64 100 /* Visual Studio */
#define USE_MINGW_SETJMP_TWO_ARGS
#define mingw_getsp tinyc_getbp
-#define __TRY__
#else
#define __stdcall __attribute__((__stdcall__))
#define _X86_ 1
#define _M_IX86 300 /* Visual Studio */
#define WIN32 1
#define _USE_32BIT_TIME_T
-#ifdef __arm__
-#define __TRY__
-#else
-#define __TRY__ void __try__(void**), *_sehrec[6]; __try__(_sehrec);
-#endif
#endif
/* in stddef.h */
@@ -138,7 +132,7 @@ typedef struct localeinfo_struct _locale_tstruct,*_locale_t;
/* for winapi */
#define _ANONYMOUS_UNION
#define _ANONYMOUS_STRUCT
-#define DECLSPEC_NORETURN
+#define DECLSPEC_NORETURN __declspec(noreturn)
#define DECLARE_STDCALL_P(type) __stdcall type
#define NOSERVICE 1
#define NOMCX 1
diff --git a/win32/include/assert.h b/win32/include/assert.h
index 466d457..b15bb63 100644
--- a/win32/include/assert.h
+++ b/win32/include/assert.h
@@ -54,4 +54,9 @@ extern void __cdecl _assert(const char *, const char *, unsigned);
#endif
+#if (__STDC_VERSION__ >= 201112L) && !defined(static_assert)
+/* C11, section 7.2: The macro static_assert expands to _Static_assert. */
+#define static_assert(exp, str) _Static_assert(exp, str)
+#endif
+
#endif
diff --git a/win32/include/iso646.h b/win32/include/iso646.h
new file mode 100644
index 0000000..02770f6
--- /dev/null
+++ b/win32/include/iso646.h
@@ -0,0 +1,36 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the TinyCC package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+/*
+ * ISO C Standard: 7.9 Alternative spellings <iso646.h>
+ */
+
+#ifndef _ISO646_H_
+#define _ISO646_H_
+
+#define and &&
+#define and_eq &=
+#define bitand &
+#define bitor |
+#define compl ~
+#define not !
+#define not_eq !=
+#define or ||
+#define or_eq |=
+#define xor ^
+#define xor_eq ^=
+
+#endif /* _ISO646_H_ */
+
+
+
+
+
+
+
+
+
+
diff --git a/win32/include/math.h b/win32/include/math.h
index 74add20..c270c57 100644
--- a/win32/include/math.h
+++ b/win32/include/math.h
@@ -198,12 +198,6 @@ extern "C" {
#endif
#ifndef __cplusplus
- __CRT_INLINE long double __cdecl fabsl (long double x)
- {
- long double res;
- __asm__ ("fabs;" : "=t" (res) : "0" (x));
- return res;
- }
#define _hypotl(x,y) ((long double)_hypot((double)(x),(double)(y)))
#define _matherrl _matherr
__CRT_INLINE long double _chgsignl(long double _Number) { return _chgsign((double)(_Number)); }
@@ -213,13 +207,43 @@ extern "C" {
#if !defined (__ia64__)
__CRT_INLINE float __cdecl fabsf (float x)
{
+#ifdef _WIN64
+ *((int *) &x) &= 0x7fffffff;
+ return x;
+#else
float res;
__asm__ ("fabs;" : "=t" (res) : "0" (x));
return res;
+#endif
}
__CRT_INLINE float __cdecl ldexpf (float x, int expn) { return (float) ldexp (x, expn); }
#endif
+#if defined (_WIN32) && !defined(_WIN64)
+ __CRT_INLINE float acosf(float x) { return (float) acos(x); }
+ __CRT_INLINE float asinf(float x) { return (float) asin(x); }
+ __CRT_INLINE float atanf(float x) { return (float) atan(x); }
+ __CRT_INLINE float atan2f(float x, float y) { return (float) atan2(x, y); }
+ __CRT_INLINE float ceilf(float x) { return (float) ceil(x); }
+ __CRT_INLINE float cosf(float x) { return (float) cos(x); }
+ __CRT_INLINE float coshf(float x) { return (float) cosh(x); }
+ __CRT_INLINE float expf(float x) { return (float) exp(x); }
+ __CRT_INLINE float floorf(float x) { return (float) floor(x); }
+ __CRT_INLINE float fmodf(float x, float y) { return (float) fmod(x, y); }
+ __CRT_INLINE float logf(float x) { return (float) log(x); }
+ __CRT_INLINE float logbf(float x) { return (float) logb(x); }
+ __CRT_INLINE float log10f(float x) { return (float) log10(x); }
+ __CRT_INLINE float modff(float x, float *y) {
+ double di, df = modf(x, &di);
+ *y = (float) di; return (float) df;
+ }
+ __CRT_INLINE float powf(float x, float y) { return (float) pow(x, y); }
+ __CRT_INLINE float sinf(float x) { return (float) sin(x); }
+ __CRT_INLINE float sinhf(float x) { return (float) sinh(x); }
+ __CRT_INLINE float sqrtf(float x) { return (float) sqrt(x); }
+ __CRT_INLINE float tanf(float x) { return (float) tan(x); }
+ __CRT_INLINE float tanhf(float x) { return (float) tanh(x); }
+#endif
#else
// cplusplus
__CRT_INLINE long double __cdecl fabsl (long double x)
@@ -366,7 +390,7 @@ extern "C" {
extern double __cdecl logb (double);
extern float __cdecl logbf (float);
extern long double __cdecl logbl (long double);
-
+#ifndef _WIN32
__CRT_INLINE double __cdecl logb (double x)
{
double res;
@@ -390,6 +414,7 @@ extern "C" {
"fstp %%st" : "=t" (res) : "0" (x));
return res;
}
+#endif
extern long double __cdecl modfl (long double, long double*);
@@ -471,7 +496,7 @@ extern "C" {
__asm__ (
"fldl %1\n"
"frndint \n"
- "fstl %0\n" : "=m" (retval) : "m" (x));
+ "fstpl %0\n" : "=m" (retval) : "m" (x));
return retval;
}
@@ -481,18 +506,23 @@ extern "C" {
__asm__ (
"flds %1\n"
"frndint \n"
- "fsts %0\n" : "=m" (retval) : "m" (x));
+ "fstps %0\n" : "=m" (retval) : "m" (x));
return retval;
}
__CRT_INLINE long double __cdecl rintl (long double x)
{
+#ifdef _WIN32
+ // on win32 'long double' is double internally
+ return rint(x);
+#else
long double retval;
__asm__ (
"fldt %1\n"
"frndint \n"
- "fstt %0\n" : "=m" (retval) : "m" (x));
+ "fstpt %0\n" : "=m" (retval) : "m" (x));
return retval;
+#endif
}
/* 7.12.9.5 */
@@ -566,7 +596,7 @@ extern "C" {
__asm__ ("fldcw %0;" : : "m" (tmp_cw));
__asm__ ("fldl %1;"
"frndint;"
- "fstl %0;" : "=m" (retval) : "m" (_x)); /* round towards zero */
+ "fstpl %0;" : "=m" (retval) : "m" (_x)); /* round towards zero */
__asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
return retval;
}
diff --git a/win32/include/sys/stat.h b/win32/include/sys/stat.h
index 344d4a2..4a95e65 100644
--- a/win32/include/sys/stat.h
+++ b/win32/include/sys/stat.h
@@ -81,9 +81,9 @@ extern "C" {
#else
#define _fstat _fstat64i32
#define _fstati64 _fstat64
-#define _stat _stat64i32
+#define _stat _stat64
#define _stati64 _stat64
-#define _wstat _wstat64i32
+#define _wstat _wstat64
#define _wstati64 _wstat64
#endif
diff --git a/win32/include/uchar.h b/win32/include/uchar.h
new file mode 100755
index 0000000..1a2c029
--- /dev/null
+++ b/win32/include/uchar.h
@@ -0,0 +1,33 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the TinyCC package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+#ifndef _INC_UCHAR
+#define _INC_UCHAR
+
+/*
+ * The following defines are only valid when C11 (-std=c11) is used.
+ *
+ * ... a wide character constant prefixed by the letter u or U has type char16_t
+ * or char32_t, respectively, unsigned integer types defined in the <uchar.h>
+ * header.
+ */
+
+#if __STDC_VERSION__ >= 201112L
+/**
+ * __STDC_UTF_16__ The integer constant 1, intended to indicate that
+ * values of type char16_t are UTF-16 encoded.
+ */
+#define __STDC_UTF_16__ 1
+/**
+ * __STDC_UTF_32__ The integer constant 1, intended to indicate that
+ * values of type char32_t are UTF-32 encoded.
+ */
+#define __STDC_UTF_32__ 1
+
+typedef unsigned short char16_t;
+typedef unsigned int char32_t;
+#endif /* __STDC_VERSION__ >= 201112L */
+#endif /* _INC_UCHAR */
diff --git a/win32/include/winapi/qos.h b/win32/include/winapi/qos.h
new file mode 100644
index 0000000..7fa6ad1
--- /dev/null
+++ b/win32/include/winapi/qos.h
@@ -0,0 +1,72 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef __QOS_H_
+#define __QOS_H_
+
+typedef ULONG SERVICETYPE;
+
+#define SERVICETYPE_NOTRAFFIC 0x00000000
+#define SERVICETYPE_BESTEFFORT 0x00000001
+#define SERVICETYPE_CONTROLLEDLOAD 0x00000002
+#define SERVICETYPE_GUARANTEED 0x00000003
+
+#define SERVICETYPE_NETWORK_UNAVAILABLE 0x00000004
+#define SERVICETYPE_GENERAL_INFORMATION 0x00000005
+#define SERVICETYPE_NOCHANGE 0x00000006
+#define SERVICETYPE_NONCONFORMING 0x00000009
+#define SERVICETYPE_NETWORK_CONTROL 0x0000000A
+#define SERVICETYPE_QUALITATIVE 0x0000000D
+
+#define SERVICE_BESTEFFORT 0x80010000
+#define SERVICE_CONTROLLEDLOAD 0x80020000
+#define SERVICE_GUARANTEED 0x80040000
+#define SERVICE_QUALITATIVE 0x80200000
+
+#define SERVICE_NO_TRAFFIC_CONTROL 0x81000000
+
+#define SERVICE_NO_QOS_SIGNALING 0x40000000
+
+typedef struct _flowspec {
+ ULONG TokenRate;
+ ULONG TokenBucketSize;
+ ULONG PeakBandwidth;
+ ULONG Latency;
+ ULONG DelayVariation;
+ SERVICETYPE ServiceType;
+ ULONG MaxSduSize;
+ ULONG MinimumPolicedSize;
+} FLOWSPEC,*PFLOWSPEC,*LPFLOWSPEC;
+
+#define QOS_NOT_SPECIFIED 0xFFFFFFFF
+#define POSITIVE_INFINITY_RATE 0xFFFFFFFE
+
+typedef struct {
+ ULONG ObjectType;
+ ULONG ObjectLength;
+} QOS_OBJECT_HDR,*LPQOS_OBJECT_HDR;
+
+#define QOS_GENERAL_ID_BASE 2000
+#define QOS_OBJECT_END_OF_LIST (0x00000001 + QOS_GENERAL_ID_BASE)
+#define QOS_OBJECT_SD_MODE (0x00000002 + QOS_GENERAL_ID_BASE)
+#define QOS_OBJECT_SHAPING_RATE (0x00000003 + QOS_GENERAL_ID_BASE)
+#define QOS_OBJECT_DESTADDR (0x00000004 + QOS_GENERAL_ID_BASE)
+
+typedef struct _QOS_SD_MODE {
+ QOS_OBJECT_HDR ObjectHdr;
+ ULONG ShapeDiscardMode;
+} QOS_SD_MODE,*LPQOS_SD_MODE;
+
+#define TC_NONCONF_BORROW 0
+#define TC_NONCONF_SHAPE 1
+#define TC_NONCONF_DISCARD 2
+#define TC_NONCONF_BORROW_PLUS 3
+
+typedef struct _QOS_SHAPING_RATE {
+ QOS_OBJECT_HDR ObjectHdr;
+ ULONG ShapingRate;
+} QOS_SHAPING_RATE,*LPQOS_SHAPING_RATE;
+
+#endif
diff --git a/win32/include/winapi/windows.h b/win32/include/winapi/windows.h
index 2660d7f..ff6454a 100644
--- a/win32/include/winapi/windows.h
+++ b/win32/include/winapi/windows.h
@@ -67,7 +67,7 @@
#include <winbase.h>
#include <wingdi.h>
#include <winuser.h>
-//gr #include <winnls.h>
+#include <winnls.h>
#include <wincon.h>
#include <winver.h>
#include <winreg.h>
diff --git a/win32/include/winapi/winnls.h b/win32/include/winapi/winnls.h
new file mode 100644
index 0000000..296b4cb
--- /dev/null
+++ b/win32/include/winapi/winnls.h
@@ -0,0 +1,778 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _WINNLS_
+#define _WINNLS_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef NONLS
+
+#define MAX_LEADBYTES 12
+#define MAX_DEFAULTCHAR 2
+
+#define MB_PRECOMPOSED 0x00000001
+#define MB_COMPOSITE 0x00000002
+#define MB_USEGLYPHCHARS 0x00000004
+#define MB_ERR_INVALID_CHARS 0x00000008
+
+#define WC_COMPOSITECHECK 0x00000200
+#define WC_DISCARDNS 0x00000010
+#define WC_SEPCHARS 0x00000020
+#define WC_DEFAULTCHAR 0x00000040
+#define WC_NO_BEST_FIT_CHARS 0x00000400
+
+#define CT_CTYPE1 0x00000001
+#define CT_CTYPE2 0x00000002
+#define CT_CTYPE3 0x00000004
+
+#define C1_UPPER 0x0001
+#define C1_LOWER 0x0002
+#define C1_DIGIT 0x0004
+#define C1_SPACE 0x0008
+#define C1_PUNCT 0x0010
+#define C1_CNTRL 0x0020
+#define C1_BLANK 0x0040
+#define C1_XDIGIT 0x0080
+#define C1_ALPHA 0x0100
+#define C1_DEFINED 0x0200
+
+#define C2_LEFTTORIGHT 0x0001
+#define C2_RIGHTTOLEFT 0x0002
+
+#define C2_EUROPENUMBER 0x0003
+#define C2_EUROPESEPARATOR 0x0004
+#define C2_EUROPETERMINATOR 0x0005
+#define C2_ARABICNUMBER 0x0006
+#define C2_COMMONSEPARATOR 0x0007
+
+#define C2_BLOCKSEPARATOR 0x0008
+#define C2_SEGMENTSEPARATOR 0x0009
+#define C2_WHITESPACE 0x000A
+#define C2_OTHERNEUTRAL 0x000B
+
+#define C2_NOTAPPLICABLE 0x0000
+
+#define C3_NONSPACING 0x0001
+#define C3_DIACRITIC 0x0002
+#define C3_VOWELMARK 0x0004
+#define C3_SYMBOL 0x0008
+
+#define C3_KATAKANA 0x0010
+#define C3_HIRAGANA 0x0020
+#define C3_HALFWIDTH 0x0040
+#define C3_FULLWIDTH 0x0080
+#define C3_IDEOGRAPH 0x0100
+#define C3_KASHIDA 0x0200
+#define C3_LEXICAL 0x0400
+
+#define C3_ALPHA 0x8000
+
+#define C3_NOTAPPLICABLE 0x0000
+
+#define NORM_IGNORECASE 0x00000001
+#define NORM_IGNORENONSPACE 0x00000002
+#define NORM_IGNORESYMBOLS 0x00000004
+
+#define NORM_IGNOREKANATYPE 0x00010000
+#define NORM_IGNOREWIDTH 0x00020000
+
+#define MAP_FOLDCZONE 0x00000010
+#define MAP_PRECOMPOSED 0x00000020
+#define MAP_COMPOSITE 0x00000040
+#define MAP_FOLDDIGITS 0x00000080
+#define MAP_EXPAND_LIGATURES 0x00002000
+
+#define LCMAP_LOWERCASE 0x00000100
+#define LCMAP_UPPERCASE 0x00000200
+#define LCMAP_SORTKEY 0x00000400
+#define LCMAP_BYTEREV 0x00000800
+
+#define LCMAP_HIRAGANA 0x00100000
+#define LCMAP_KATAKANA 0x00200000
+#define LCMAP_HALFWIDTH 0x00400000
+#define LCMAP_FULLWIDTH 0x00800000
+
+#define LCMAP_LINGUISTIC_CASING 0x01000000
+
+#define LCMAP_SIMPLIFIED_CHINESE 0x02000000
+#define LCMAP_TRADITIONAL_CHINESE 0x04000000
+
+#define LGRPID_INSTALLED 0x00000001
+#define LGRPID_SUPPORTED 0x00000002
+
+#define LCID_INSTALLED 0x00000001
+#define LCID_SUPPORTED 0x00000002
+#define LCID_ALTERNATE_SORTS 0x00000004
+
+#define CP_INSTALLED 0x00000001
+#define CP_SUPPORTED 0x00000002
+
+#define SORT_STRINGSORT 0x00001000
+
+#define CSTR_LESS_THAN 1
+#define CSTR_EQUAL 2
+#define CSTR_GREATER_THAN 3
+
+#define CP_ACP 0
+#define CP_OEMCP 1
+#define CP_MACCP 2
+#define CP_THREAD_ACP 3
+#define CP_SYMBOL 42
+
+#define CP_UTF7 65000
+#define CP_UTF8 65001
+
+#define CTRY_DEFAULT 0
+
+#define CTRY_ALBANIA 355
+#define CTRY_ALGERIA 213
+#define CTRY_ARGENTINA 54
+#define CTRY_ARMENIA 374
+#define CTRY_AUSTRALIA 61
+#define CTRY_AUSTRIA 43
+#define CTRY_AZERBAIJAN 994
+#define CTRY_BAHRAIN 973
+#define CTRY_BELARUS 375
+#define CTRY_BELGIUM 32
+#define CTRY_BELIZE 501
+#define CTRY_BOLIVIA 591
+#define CTRY_BRAZIL 55
+#define CTRY_BRUNEI_DARUSSALAM 673
+#define CTRY_BULGARIA 359
+#define CTRY_CANADA 2
+#define CTRY_CARIBBEAN 1
+#define CTRY_CHILE 56
+#define CTRY_COLOMBIA 57
+#define CTRY_COSTA_RICA 506
+#define CTRY_CROATIA 385
+#define CTRY_CZECH 420
+#define CTRY_DENMARK 45
+#define CTRY_DOMINICAN_REPUBLIC 1
+#define CTRY_ECUADOR 593
+#define CTRY_EGYPT 20
+#define CTRY_EL_SALVADOR 503
+#define CTRY_ESTONIA 372
+#define CTRY_FAEROE_ISLANDS 298
+#define CTRY_FINLAND 358
+#define CTRY_FRANCE 33
+#define CTRY_GEORGIA 995
+#define CTRY_GERMANY 49
+#define CTRY_GREECE 30
+#define CTRY_GUATEMALA 502
+#define CTRY_HONDURAS 504
+#define CTRY_HONG_KONG 852
+#define CTRY_HUNGARY 36
+#define CTRY_ICELAND 354
+#define CTRY_INDIA 91
+#define CTRY_INDONESIA 62
+#define CTRY_IRAN 981
+#define CTRY_IRAQ 964
+#define CTRY_IRELAND 353
+#define CTRY_ISRAEL 972
+#define CTRY_ITALY 39
+#define CTRY_JAMAICA 1
+#define CTRY_JAPAN 81
+#define CTRY_JORDAN 962
+#define CTRY_KAZAKSTAN 7
+#define CTRY_KENYA 254
+#define CTRY_KUWAIT 965
+#define CTRY_KYRGYZSTAN 996
+#define CTRY_LATVIA 371
+#define CTRY_LEBANON 961
+#define CTRY_LIBYA 218
+#define CTRY_LIECHTENSTEIN 41
+#define CTRY_LITHUANIA 370
+#define CTRY_LUXEMBOURG 352
+#define CTRY_MACAU 853
+#define CTRY_MACEDONIA 389
+#define CTRY_MALAYSIA 60
+#define CTRY_MALDIVES 960
+#define CTRY_MEXICO 52
+#define CTRY_MONACO 33
+#define CTRY_MONGOLIA 976
+#define CTRY_MOROCCO 212
+#define CTRY_NETHERLANDS 31
+#define CTRY_NEW_ZEALAND 64
+#define CTRY_NICARAGUA 505
+#define CTRY_NORWAY 47
+#define CTRY_OMAN 968
+#define CTRY_PAKISTAN 92
+#define CTRY_PANAMA 507
+#define CTRY_PARAGUAY 595
+#define CTRY_PERU 51
+#define CTRY_PHILIPPINES 63
+#define CTRY_POLAND 48
+#define CTRY_PORTUGAL 351
+#define CTRY_PRCHINA 86
+#define CTRY_PUERTO_RICO 1
+#define CTRY_QATAR 974
+#define CTRY_ROMANIA 40
+#define CTRY_RUSSIA 7
+#define CTRY_SAUDI_ARABIA 966
+#define CTRY_SERBIA 381
+#define CTRY_SINGAPORE 65
+#define CTRY_SLOVAK 421
+#define CTRY_SLOVENIA 386
+#define CTRY_SOUTH_AFRICA 27
+#define CTRY_SOUTH_KOREA 82
+#define CTRY_SPAIN 34
+#define CTRY_SWEDEN 46
+#define CTRY_SWITZERLAND 41
+#define CTRY_SYRIA 963
+#define CTRY_TAIWAN 886
+#define CTRY_TATARSTAN 7
+#define CTRY_THAILAND 66
+#define CTRY_TRINIDAD_Y_TOBAGO 1
+#define CTRY_TUNISIA 216
+#define CTRY_TURKEY 90
+#define CTRY_UAE 971
+#define CTRY_UKRAINE 380
+#define CTRY_UNITED_KINGDOM 44
+#define CTRY_UNITED_STATES 1
+#define CTRY_URUGUAY 598
+#define CTRY_UZBEKISTAN 7
+#define CTRY_VENEZUELA 58
+#define CTRY_VIET_NAM 84
+#define CTRY_YEMEN 967
+#define CTRY_ZIMBABWE 263
+
+#define LOCALE_NOUSEROVERRIDE 0x80000000
+#define LOCALE_USE_CP_ACP 0x40000000
+#define LOCALE_RETURN_NUMBER 0x20000000
+
+#define LOCALE_ILANGUAGE 0x00000001
+#define LOCALE_SLANGUAGE 0x00000002
+#define LOCALE_SENGLANGUAGE 0x00001001
+#define LOCALE_SABBREVLANGNAME 0x00000003
+#define LOCALE_SNATIVELANGNAME 0x00000004
+
+#define LOCALE_ICOUNTRY 0x00000005
+#define LOCALE_SCOUNTRY 0x00000006
+#define LOCALE_SENGCOUNTRY 0x00001002
+#define LOCALE_SABBREVCTRYNAME 0x00000007
+#define LOCALE_SNATIVECTRYNAME 0x00000008
+
+#define LOCALE_IDEFAULTLANGUAGE 0x00000009
+#define LOCALE_IDEFAULTCOUNTRY 0x0000000A
+#define LOCALE_IDEFAULTCODEPAGE 0x0000000B
+#define LOCALE_IDEFAULTANSICODEPAGE 0x00001004
+#define LOCALE_IDEFAULTMACCODEPAGE 0x00001011
+
+#define LOCALE_SLIST 0x0000000C
+#define LOCALE_IMEASURE 0x0000000D
+
+#define LOCALE_SDECIMAL 0x0000000E
+#define LOCALE_STHOUSAND 0x0000000F
+#define LOCALE_SGROUPING 0x00000010
+#define LOCALE_IDIGITS 0x00000011
+#define LOCALE_ILZERO 0x00000012
+#define LOCALE_INEGNUMBER 0x00001010
+#define LOCALE_SNATIVEDIGITS 0x00000013
+
+#define LOCALE_SCURRENCY 0x00000014
+#define LOCALE_SINTLSYMBOL 0x00000015
+#define LOCALE_SMONDECIMALSEP 0x00000016
+#define LOCALE_SMONTHOUSANDSEP 0x00000017
+#define LOCALE_SMONGROUPING 0x00000018
+#define LOCALE_ICURRDIGITS 0x00000019
+#define LOCALE_IINTLCURRDIGITS 0x0000001A
+#define LOCALE_ICURRENCY 0x0000001B
+#define LOCALE_INEGCURR 0x0000001C
+
+#define LOCALE_SDATE 0x0000001D
+#define LOCALE_STIME 0x0000001E
+#define LOCALE_SSHORTDATE 0x0000001F
+#define LOCALE_SLONGDATE 0x00000020
+#define LOCALE_STIMEFORMAT 0x00001003
+#define LOCALE_IDATE 0x00000021
+#define LOCALE_ILDATE 0x00000022
+#define LOCALE_ITIME 0x00000023
+#define LOCALE_ITIMEMARKPOSN 0x00001005
+#define LOCALE_ICENTURY 0x00000024
+#define LOCALE_ITLZERO 0x00000025
+#define LOCALE_IDAYLZERO 0x00000026
+#define LOCALE_IMONLZERO 0x00000027
+#define LOCALE_S1159 0x00000028
+#define LOCALE_S2359 0x00000029
+
+#define LOCALE_ICALENDARTYPE 0x00001009
+#define LOCALE_IOPTIONALCALENDAR 0x0000100B
+#define LOCALE_IFIRSTDAYOFWEEK 0x0000100C
+#define LOCALE_IFIRSTWEEKOFYEAR 0x0000100D
+
+#define LOCALE_SDAYNAME1 0x0000002A
+#define LOCALE_SDAYNAME2 0x0000002B
+#define LOCALE_SDAYNAME3 0x0000002C
+#define LOCALE_SDAYNAME4 0x0000002D
+#define LOCALE_SDAYNAME5 0x0000002E
+#define LOCALE_SDAYNAME6 0x0000002F
+#define LOCALE_SDAYNAME7 0x00000030
+#define LOCALE_SABBREVDAYNAME1 0x00000031
+#define LOCALE_SABBREVDAYNAME2 0x00000032
+#define LOCALE_SABBREVDAYNAME3 0x00000033
+#define LOCALE_SABBREVDAYNAME4 0x00000034
+#define LOCALE_SABBREVDAYNAME5 0x00000035
+#define LOCALE_SABBREVDAYNAME6 0x00000036
+#define LOCALE_SABBREVDAYNAME7 0x00000037
+#define LOCALE_SMONTHNAME1 0x00000038
+#define LOCALE_SMONTHNAME2 0x00000039
+#define LOCALE_SMONTHNAME3 0x0000003A
+#define LOCALE_SMONTHNAME4 0x0000003B
+#define LOCALE_SMONTHNAME5 0x0000003C
+#define LOCALE_SMONTHNAME6 0x0000003D
+#define LOCALE_SMONTHNAME7 0x0000003E
+#define LOCALE_SMONTHNAME8 0x0000003F
+#define LOCALE_SMONTHNAME9 0x00000040
+#define LOCALE_SMONTHNAME10 0x00000041
+#define LOCALE_SMONTHNAME11 0x00000042
+#define LOCALE_SMONTHNAME12 0x00000043
+#define LOCALE_SMONTHNAME13 0x0000100E
+#define LOCALE_SABBREVMONTHNAME1 0x00000044
+#define LOCALE_SABBREVMONTHNAME2 0x00000045
+#define LOCALE_SABBREVMONTHNAME3 0x00000046
+#define LOCALE_SABBREVMONTHNAME4 0x00000047
+#define LOCALE_SABBREVMONTHNAME5 0x00000048
+#define LOCALE_SABBREVMONTHNAME6 0x00000049
+#define LOCALE_SABBREVMONTHNAME7 0x0000004A
+#define LOCALE_SABBREVMONTHNAME8 0x0000004B
+#define LOCALE_SABBREVMONTHNAME9 0x0000004C
+#define LOCALE_SABBREVMONTHNAME10 0x0000004D
+#define LOCALE_SABBREVMONTHNAME11 0x0000004E
+#define LOCALE_SABBREVMONTHNAME12 0x0000004F
+#define LOCALE_SABBREVMONTHNAME13 0x0000100F
+
+#define LOCALE_SPOSITIVESIGN 0x00000050
+#define LOCALE_SNEGATIVESIGN 0x00000051
+#define LOCALE_IPOSSIGNPOSN 0x00000052
+#define LOCALE_INEGSIGNPOSN 0x00000053
+#define LOCALE_IPOSSYMPRECEDES 0x00000054
+#define LOCALE_IPOSSEPBYSPACE 0x00000055
+#define LOCALE_INEGSYMPRECEDES 0x00000056
+#define LOCALE_INEGSEPBYSPACE 0x00000057
+#define LOCALE_FONTSIGNATURE 0x00000058
+#define LOCALE_SISO639LANGNAME 0x00000059
+#define LOCALE_SISO3166CTRYNAME 0x0000005A
+
+#define LOCALE_IDEFAULTEBCDICCODEPAGE 0x00001012
+#define LOCALE_IPAPERSIZE 0x0000100A
+#define LOCALE_SENGCURRNAME 0x00001007
+#define LOCALE_SNATIVECURRNAME 0x00001008
+#define LOCALE_SYEARMONTH 0x00001006
+#define LOCALE_SSORTNAME 0x00001013
+#define LOCALE_IDIGITSUBSTITUTION 0x00001014
+
+#define TIME_NOMINUTESORSECONDS 0x00000001
+#define TIME_NOSECONDS 0x00000002
+#define TIME_NOTIMEMARKER 0x00000004
+#define TIME_FORCE24HOURFORMAT 0x00000008
+
+#define DATE_SHORTDATE 0x00000001
+#define DATE_LONGDATE 0x00000002
+#define DATE_USE_ALT_CALENDAR 0x00000004
+#define DATE_YEARMONTH 0x00000008
+#define DATE_LTRREADING 0x00000010
+#define DATE_RTLREADING 0x00000020
+
+#define CAL_NOUSEROVERRIDE LOCALE_NOUSEROVERRIDE
+#define CAL_USE_CP_ACP LOCALE_USE_CP_ACP
+#define CAL_RETURN_NUMBER LOCALE_RETURN_NUMBER
+
+#define CAL_ICALINTVALUE 0x00000001
+#define CAL_SCALNAME 0x00000002
+#define CAL_IYEAROFFSETRANGE 0x00000003
+#define CAL_SERASTRING 0x00000004
+#define CAL_SSHORTDATE 0x00000005
+#define CAL_SLONGDATE 0x00000006
+#define CAL_SDAYNAME1 0x00000007
+#define CAL_SDAYNAME2 0x00000008
+#define CAL_SDAYNAME3 0x00000009
+#define CAL_SDAYNAME4 0x0000000a
+#define CAL_SDAYNAME5 0x0000000b
+#define CAL_SDAYNAME6 0x0000000c
+#define CAL_SDAYNAME7 0x0000000d
+#define CAL_SABBREVDAYNAME1 0x0000000e
+#define CAL_SABBREVDAYNAME2 0x0000000f
+#define CAL_SABBREVDAYNAME3 0x00000010
+#define CAL_SABBREVDAYNAME4 0x00000011
+#define CAL_SABBREVDAYNAME5 0x00000012
+#define CAL_SABBREVDAYNAME6 0x00000013
+#define CAL_SABBREVDAYNAME7 0x00000014
+#define CAL_SMONTHNAME1 0x00000015
+#define CAL_SMONTHNAME2 0x00000016
+#define CAL_SMONTHNAME3 0x00000017
+#define CAL_SMONTHNAME4 0x00000018
+#define CAL_SMONTHNAME5 0x00000019
+#define CAL_SMONTHNAME6 0x0000001a
+#define CAL_SMONTHNAME7 0x0000001b
+#define CAL_SMONTHNAME8 0x0000001c
+#define CAL_SMONTHNAME9 0x0000001d
+#define CAL_SMONTHNAME10 0x0000001e
+#define CAL_SMONTHNAME11 0x0000001f
+#define CAL_SMONTHNAME12 0x00000020
+#define CAL_SMONTHNAME13 0x00000021
+#define CAL_SABBREVMONTHNAME1 0x00000022
+#define CAL_SABBREVMONTHNAME2 0x00000023
+#define CAL_SABBREVMONTHNAME3 0x00000024
+#define CAL_SABBREVMONTHNAME4 0x00000025
+#define CAL_SABBREVMONTHNAME5 0x00000026
+#define CAL_SABBREVMONTHNAME6 0x00000027
+#define CAL_SABBREVMONTHNAME7 0x00000028
+#define CAL_SABBREVMONTHNAME8 0x00000029
+#define CAL_SABBREVMONTHNAME9 0x0000002a
+#define CAL_SABBREVMONTHNAME10 0x0000002b
+#define CAL_SABBREVMONTHNAME11 0x0000002c
+#define CAL_SABBREVMONTHNAME12 0x0000002d
+#define CAL_SABBREVMONTHNAME13 0x0000002e
+#define CAL_SYEARMONTH 0x0000002f
+#define CAL_ITWODIGITYEARMAX 0x00000030
+
+#define ENUM_ALL_CALENDARS 0xffffffff
+
+#define CAL_GREGORIAN 1
+#define CAL_GREGORIAN_US 2
+#define CAL_JAPAN 3
+#define CAL_TAIWAN 4
+#define CAL_KOREA 5
+#define CAL_HIJRI 6
+#define CAL_THAI 7
+#define CAL_HEBREW 8
+#define CAL_GREGORIAN_ME_FRENCH 9
+#define CAL_GREGORIAN_ARABIC 10
+#define CAL_GREGORIAN_XLIT_ENGLISH 11
+#define CAL_GREGORIAN_XLIT_FRENCH 12
+
+#define LGRPID_WESTERN_EUROPE 0x0001
+#define LGRPID_CENTRAL_EUROPE 0x0002
+#define LGRPID_BALTIC 0x0003
+#define LGRPID_GREEK 0x0004
+#define LGRPID_CYRILLIC 0x0005
+#define LGRPID_TURKISH 0x0006
+#define LGRPID_JAPANESE 0x0007
+#define LGRPID_KOREAN 0x0008
+#define LGRPID_TRADITIONAL_CHINESE 0x0009
+#define LGRPID_SIMPLIFIED_CHINESE 0x000a
+#define LGRPID_THAI 0x000b
+#define LGRPID_HEBREW 0x000c
+#define LGRPID_ARABIC 0x000d
+#define LGRPID_VIETNAMESE 0x000e
+#define LGRPID_INDIC 0x000f
+#define LGRPID_GEORGIAN 0x0010
+#define LGRPID_ARMENIAN 0x0011
+
+ typedef DWORD LGRPID;
+ typedef DWORD LCTYPE;
+ typedef DWORD CALTYPE;
+ typedef DWORD CALID;
+
+ typedef struct _cpinfo {
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+ } CPINFO,*LPCPINFO;
+
+ typedef struct _cpinfoexA {
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+ WCHAR UnicodeDefaultChar;
+ UINT CodePage;
+ CHAR CodePageName[MAX_PATH];
+ } CPINFOEXA,*LPCPINFOEXA;
+
+ typedef struct _cpinfoexW {
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+ WCHAR UnicodeDefaultChar;
+ UINT CodePage;
+ WCHAR CodePageName[MAX_PATH];
+ } CPINFOEXW,*LPCPINFOEXW;
+
+#ifdef UNICODE
+ typedef CPINFOEXW CPINFOEX;
+ typedef LPCPINFOEXW LPCPINFOEX;
+#else
+ typedef CPINFOEXA CPINFOEX;
+ typedef LPCPINFOEXA LPCPINFOEX;
+#endif
+
+ typedef struct _numberfmtA {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPSTR lpDecimalSep;
+ LPSTR lpThousandSep;
+ UINT NegativeOrder;
+ } NUMBERFMTA,*LPNUMBERFMTA;
+
+ typedef struct _numberfmtW {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPWSTR lpDecimalSep;
+ LPWSTR lpThousandSep;
+ UINT NegativeOrder;
+ } NUMBERFMTW,*LPNUMBERFMTW;
+
+#ifdef UNICODE
+ typedef NUMBERFMTW NUMBERFMT;
+ typedef LPNUMBERFMTW LPNUMBERFMT;
+#else
+ typedef NUMBERFMTA NUMBERFMT;
+ typedef LPNUMBERFMTA LPNUMBERFMT;
+#endif
+
+ typedef struct _currencyfmtA {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPSTR lpDecimalSep;
+ LPSTR lpThousandSep;
+ UINT NegativeOrder;
+ UINT PositiveOrder;
+ LPSTR lpCurrencySymbol;
+ } CURRENCYFMTA,*LPCURRENCYFMTA;
+
+ typedef struct _currencyfmtW {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPWSTR lpDecimalSep;
+ LPWSTR lpThousandSep;
+ UINT NegativeOrder;
+ UINT PositiveOrder;
+ LPWSTR lpCurrencySymbol;
+ } CURRENCYFMTW,*LPCURRENCYFMTW;
+
+#ifdef UNICODE
+ typedef CURRENCYFMTW CURRENCYFMT;
+ typedef LPCURRENCYFMTW LPCURRENCYFMT;
+#else
+ typedef CURRENCYFMTA CURRENCYFMT;
+ typedef LPCURRENCYFMTA LPCURRENCYFMT;
+#endif
+
+ enum SYSNLS_FUNCTION {
+ COMPARE_STRING = 0x0001
+ };
+
+ typedef DWORD NLS_FUNCTION;
+
+ typedef struct _nlsversioninfo{
+ DWORD dwNLSVersionInfoSize;
+ DWORD dwNLSVersion;
+ DWORD dwDefinedVersion;
+ } NLSVERSIONINFO,*LPNLSVERSIONINFO;
+
+ typedef LONG GEOID;
+ typedef DWORD GEOTYPE;
+ typedef DWORD GEOCLASS;
+
+#define GEOID_NOT_AVAILABLE -1
+
+ enum SYSGEOTYPE {
+ GEO_NATION = 0x0001,GEO_LATITUDE = 0x0002,GEO_LONGITUDE = 0x0003,GEO_ISO2 = 0x0004,GEO_ISO3 = 0x0005,GEO_RFC1766 = 0x0006,GEO_LCID = 0x0007,
+ GEO_FRIENDLYNAME= 0x0008,GEO_OFFICIALNAME= 0x0009,GEO_TIMEZONES = 0x000A,GEO_OFFICIALLANGUAGES = 0x000B
+ };
+
+ enum SYSGEOCLASS {
+ GEOCLASS_NATION = 16,GEOCLASS_REGION = 14
+ };
+
+ typedef enum _NORM_FORM {
+ NormalizationOther = 0,
+ NormalizationC = 0x1,
+ NormalizationD = 0x2,
+ NormalizationKC = 0x5,
+ NormalizationKD = 0x6
+} NORM_FORM;
+
+ typedef WINBOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCA)(LGRPID,LPSTR,LPSTR,DWORD,LONG_PTR);
+ typedef WINBOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCA)(LGRPID,LCID,LPSTR,LONG_PTR);
+ typedef WINBOOL (CALLBACK *UILANGUAGE_ENUMPROCA)(LPSTR,LONG_PTR);
+ typedef WINBOOL (CALLBACK *LOCALE_ENUMPROCA)(LPSTR);
+ typedef WINBOOL (CALLBACK *CODEPAGE_ENUMPROCA)(LPSTR);
+ typedef WINBOOL (CALLBACK *DATEFMT_ENUMPROCA)(LPSTR);
+ typedef WINBOOL (CALLBACK *DATEFMT_ENUMPROCEXA)(LPSTR,CALID);
+ typedef WINBOOL (CALLBACK *TIMEFMT_ENUMPROCA)(LPSTR);
+ typedef WINBOOL (CALLBACK *CALINFO_ENUMPROCA)(LPSTR);
+ typedef WINBOOL (CALLBACK *CALINFO_ENUMPROCEXA)(LPSTR,CALID);
+ typedef WINBOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCW)(LGRPID,LPWSTR,LPWSTR,DWORD,LONG_PTR);
+ typedef WINBOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCW)(LGRPID,LCID,LPWSTR,LONG_PTR);
+ typedef WINBOOL (CALLBACK *UILANGUAGE_ENUMPROCW)(LPWSTR,LONG_PTR);
+ typedef WINBOOL (CALLBACK *LOCALE_ENUMPROCW)(LPWSTR);
+ typedef WINBOOL (CALLBACK *CODEPAGE_ENUMPROCW)(LPWSTR);
+ typedef WINBOOL (CALLBACK *DATEFMT_ENUMPROCW)(LPWSTR);
+ typedef WINBOOL (CALLBACK *DATEFMT_ENUMPROCEXW)(LPWSTR,CALID);
+ typedef WINBOOL (CALLBACK *TIMEFMT_ENUMPROCW)(LPWSTR);
+ typedef WINBOOL (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR);
+ typedef WINBOOL (CALLBACK *CALINFO_ENUMPROCEXW)(LPWSTR,CALID);
+ typedef WINBOOL (CALLBACK *GEO_ENUMPROC)(GEOID);
+
+#ifdef UNICODE
+#define LANGUAGEGROUP_ENUMPROC LANGUAGEGROUP_ENUMPROCW
+#define LANGGROUPLOCALE_ENUMPROC LANGGROUPLOCALE_ENUMPROCW
+#define UILANGUAGE_ENUMPROC UILANGUAGE_ENUMPROCW
+#define LOCALE_ENUMPROC LOCALE_ENUMPROCW
+#define CODEPAGE_ENUMPROC CODEPAGE_ENUMPROCW
+#define DATEFMT_ENUMPROC DATEFMT_ENUMPROCW
+#define DATEFMT_ENUMPROCEX DATEFMT_ENUMPROCEXW
+#define TIMEFMT_ENUMPROC TIMEFMT_ENUMPROCW
+#define CALINFO_ENUMPROC CALINFO_ENUMPROCW
+#define CALINFO_ENUMPROCEX CALINFO_ENUMPROCEXW
+#else
+#define LANGUAGEGROUP_ENUMPROC LANGUAGEGROUP_ENUMPROCA
+#define LANGGROUPLOCALE_ENUMPROC LANGGROUPLOCALE_ENUMPROCA
+#define UILANGUAGE_ENUMPROC UILANGUAGE_ENUMPROCA
+#define LOCALE_ENUMPROC LOCALE_ENUMPROCA
+#define CODEPAGE_ENUMPROC CODEPAGE_ENUMPROCA
+#define DATEFMT_ENUMPROC DATEFMT_ENUMPROCA
+#define DATEFMT_ENUMPROCEX DATEFMT_ENUMPROCEXA
+#define TIMEFMT_ENUMPROC TIMEFMT_ENUMPROCA
+#define CALINFO_ENUMPROC CALINFO_ENUMPROCA
+#define CALINFO_ENUMPROCEX CALINFO_ENUMPROCEXA
+#endif
+
+#ifdef UNICODE
+#define GetCPInfoEx GetCPInfoExW
+#define CompareString CompareStringW
+#define LCMapString LCMapStringW
+#define GetLocaleInfo GetLocaleInfoW
+#define SetLocaleInfo SetLocaleInfoW
+#define GetCalendarInfo GetCalendarInfoW
+#define SetCalendarInfo SetCalendarInfoW
+#define GetTimeFormat GetTimeFormatW
+#define GetDateFormat GetDateFormatW
+#define GetNumberFormat GetNumberFormatW
+#define GetCurrencyFormat GetCurrencyFormatW
+#define EnumCalendarInfo EnumCalendarInfoW
+#define EnumCalendarInfoEx EnumCalendarInfoExW
+#define EnumTimeFormats EnumTimeFormatsW
+#define EnumDateFormats EnumDateFormatsW
+#define EnumDateFormatsEx EnumDateFormatsExW
+#define GetGeoInfo GetGeoInfoW
+#define GetStringTypeEx GetStringTypeExW
+#define FoldString FoldStringW
+#define EnumSystemLanguageGroups EnumSystemLanguageGroupsW
+#define EnumLanguageGroupLocales EnumLanguageGroupLocalesW
+#define EnumUILanguages EnumUILanguagesW
+#define EnumSystemLocales EnumSystemLocalesW
+#define EnumSystemCodePages EnumSystemCodePagesW
+#else
+#define GetCPInfoEx GetCPInfoExA
+#define CompareString CompareStringA
+#define LCMapString LCMapStringA
+#define GetLocaleInfo GetLocaleInfoA
+#define SetLocaleInfo SetLocaleInfoA
+#define GetCalendarInfo GetCalendarInfoA
+#define SetCalendarInfo SetCalendarInfoA
+#define GetTimeFormat GetTimeFormatA
+#define GetDateFormat GetDateFormatA
+#define GetNumberFormat GetNumberFormatA
+#define GetCurrencyFormat GetCurrencyFormatA
+#define EnumCalendarInfo EnumCalendarInfoA
+#define EnumCalendarInfoEx EnumCalendarInfoExA
+#define EnumTimeFormats EnumTimeFormatsA
+#define EnumDateFormats EnumDateFormatsA
+#define EnumDateFormatsEx EnumDateFormatsExA
+#define GetGeoInfo GetGeoInfoA
+#define GetStringTypeEx GetStringTypeExA
+#define FoldString FoldStringA
+#define EnumSystemLanguageGroups EnumSystemLanguageGroupsA
+#define EnumLanguageGroupLocales EnumLanguageGroupLocalesA
+#define EnumUILanguages EnumUILanguagesA
+#define EnumSystemLocales EnumSystemLocalesA
+#define EnumSystemCodePages EnumSystemCodePagesA
+#endif
+
+ WINBASEAPI WINBOOL WINAPI IsValidCodePage(UINT CodePage);
+ WINBASEAPI UINT WINAPI GetACP(void);
+ WINBASEAPI UINT WINAPI GetOEMCP(void);
+ WINBASEAPI WINBOOL WINAPI GetCPInfo(UINT CodePage,LPCPINFO lpCPInfo);
+ WINBASEAPI WINBOOL WINAPI GetCPInfoExA(UINT CodePage,DWORD dwFlags,LPCPINFOEXA lpCPInfoEx);
+ WINBASEAPI WINBOOL WINAPI GetCPInfoExW(UINT CodePage,DWORD dwFlags,LPCPINFOEXW lpCPInfoEx);
+ WINBASEAPI WINBOOL WINAPI IsDBCSLeadByte(BYTE TestChar);
+ WINBASEAPI WINBOOL WINAPI IsDBCSLeadByteEx(UINT CodePage,BYTE TestChar);
+ WINBASEAPI int WINAPI MultiByteToWideChar(UINT CodePage,DWORD dwFlags,LPCSTR lpMultiByteStr,int cbMultiByte,LPWSTR lpWideCharStr,int cchWideChar);
+ WINBASEAPI int WINAPI WideCharToMultiByte(UINT CodePage,DWORD dwFlags,LPCWSTR lpWideCharStr,int cchWideChar,LPSTR lpMultiByteStr,int cbMultiByte,LPCSTR lpDefaultChar,LPBOOL lpUsedDefaultChar);
+ WINBASEAPI int WINAPI CompareStringA(LCID Locale,DWORD dwCmpFlags,LPCSTR lpString1,int cchCount1,LPCSTR lpString2,int cchCount2);
+ WINBASEAPI int WINAPI CompareStringW(LCID Locale,DWORD dwCmpFlags,LPCWSTR lpString1,int cchCount1,LPCWSTR lpString2,int cchCount2);
+ WINBASEAPI int WINAPI LCMapStringA(LCID Locale,DWORD dwMapFlags,LPCSTR lpSrcStr,int cchSrc,LPSTR lpDestStr,int cchDest);
+ WINBASEAPI int WINAPI LCMapStringW(LCID Locale,DWORD dwMapFlags,LPCWSTR lpSrcStr,int cchSrc,LPWSTR lpDestStr,int cchDest);
+ WINBASEAPI int WINAPI GetLocaleInfoA(LCID Locale,LCTYPE LCType,LPSTR lpLCData,int cchData);
+ WINBASEAPI int WINAPI GetLocaleInfoW(LCID Locale,LCTYPE LCType,LPWSTR lpLCData,int cchData);
+ WINBASEAPI WINBOOL WINAPI SetLocaleInfoA(LCID Locale,LCTYPE LCType,LPCSTR lpLCData);
+ WINBASEAPI WINBOOL WINAPI SetLocaleInfoW(LCID Locale,LCTYPE LCType,LPCWSTR lpLCData);
+ WINBASEAPI int WINAPI GetCalendarInfoA(LCID Locale,CALID Calendar,CALTYPE CalType,LPSTR lpCalData,int cchData,LPDWORD lpValue);
+ WINBASEAPI int WINAPI GetCalendarInfoW(LCID Locale,CALID Calendar,CALTYPE CalType,LPWSTR lpCalData,int cchData,LPDWORD lpValue);
+ WINBASEAPI WINBOOL WINAPI SetCalendarInfoA(LCID Locale,CALID Calendar,CALTYPE CalType,LPCSTR lpCalData);
+ WINBASEAPI WINBOOL WINAPI SetCalendarInfoW(LCID Locale,CALID Calendar,CALTYPE CalType,LPCWSTR lpCalData);
+ WINBASEAPI int WINAPI GetTimeFormatA(LCID Locale,DWORD dwFlags,CONST SYSTEMTIME *lpTime,LPCSTR lpFormat,LPSTR lpTimeStr,int cchTime);
+ WINBASEAPI int WINAPI GetTimeFormatW(LCID Locale,DWORD dwFlags,CONST SYSTEMTIME *lpTime,LPCWSTR lpFormat,LPWSTR lpTimeStr,int cchTime);
+ WINBASEAPI int WINAPI GetDateFormatA(LCID Locale,DWORD dwFlags,CONST SYSTEMTIME *lpDate,LPCSTR lpFormat,LPSTR lpDateStr,int cchDate);
+ WINBASEAPI int WINAPI GetDateFormatW(LCID Locale,DWORD dwFlags,CONST SYSTEMTIME *lpDate,LPCWSTR lpFormat,LPWSTR lpDateStr,int cchDate);
+ WINBASEAPI int WINAPI GetNumberFormatA(LCID Locale,DWORD dwFlags,LPCSTR lpValue,CONST NUMBERFMTA *lpFormat,LPSTR lpNumberStr,int cchNumber);
+ WINBASEAPI int WINAPI GetNumberFormatW(LCID Locale,DWORD dwFlags,LPCWSTR lpValue,CONST NUMBERFMTW *lpFormat,LPWSTR lpNumberStr,int cchNumber);
+ WINBASEAPI int WINAPI GetCurrencyFormatA(LCID Locale,DWORD dwFlags,LPCSTR lpValue,CONST CURRENCYFMTA *lpFormat,LPSTR lpCurrencyStr,int cchCurrency);
+ WINBASEAPI int WINAPI GetCurrencyFormatW(LCID Locale,DWORD dwFlags,LPCWSTR lpValue,CONST CURRENCYFMTW *lpFormat,LPWSTR lpCurrencyStr,int cchCurrency);
+ WINBASEAPI WINBOOL WINAPI EnumCalendarInfoA(CALINFO_ENUMPROCA lpCalInfoEnumProc,LCID Locale,CALID Calendar,CALTYPE CalType);
+ WINBASEAPI WINBOOL WINAPI EnumCalendarInfoW(CALINFO_ENUMPROCW lpCalInfoEnumProc,LCID Locale,CALID Calendar,CALTYPE CalType);
+ WINBASEAPI WINBOOL WINAPI EnumCalendarInfoExA(CALINFO_ENUMPROCEXA lpCalInfoEnumProcEx,LCID Locale,CALID Calendar,CALTYPE CalType);
+ WINBASEAPI WINBOOL WINAPI EnumCalendarInfoExW(CALINFO_ENUMPROCEXW lpCalInfoEnumProcEx,LCID Locale,CALID Calendar,CALTYPE CalType);
+ WINBASEAPI WINBOOL WINAPI EnumTimeFormatsA(TIMEFMT_ENUMPROCA lpTimeFmtEnumProc,LCID Locale,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI EnumTimeFormatsW(TIMEFMT_ENUMPROCW lpTimeFmtEnumProc,LCID Locale,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA lpDateFmtEnumProc,LCID Locale,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW lpDateFmtEnumProc,LCID Locale,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI EnumDateFormatsExA(DATEFMT_ENUMPROCEXA lpDateFmtEnumProcEx,LCID Locale,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI EnumDateFormatsExW(DATEFMT_ENUMPROCEXW lpDateFmtEnumProcEx,LCID Locale,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI IsValidLanguageGroup(LGRPID LanguageGroup,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI GetNLSVersion(NLS_FUNCTION Function,LCID Locale,LPNLSVERSIONINFO lpVersionInformation);
+ WINBASEAPI WINBOOL WINAPI IsNLSDefinedString(NLS_FUNCTION Function,DWORD dwFlags,LPNLSVERSIONINFO lpVersionInformation,LPCWSTR lpString,INT cchStr);
+ WINBASEAPI WINBOOL WINAPI IsValidLocale(LCID Locale,DWORD dwFlags);
+ WINBASEAPI int WINAPI GetGeoInfoA(GEOID Location,GEOTYPE GeoType,LPSTR lpGeoData,int cchData,LANGID LangId);
+ WINBASEAPI int WINAPI GetGeoInfoW(GEOID Location,GEOTYPE GeoType,LPWSTR lpGeoData,int cchData,LANGID LangId);
+ WINBASEAPI WINBOOL WINAPI EnumSystemGeoID(GEOCLASS GeoClass,GEOID ParentGeoId,GEO_ENUMPROC lpGeoEnumProc);
+ WINBASEAPI GEOID WINAPI GetUserGeoID(GEOCLASS GeoClass);
+ WINBASEAPI WINBOOL WINAPI SetUserGeoID(GEOID GeoId);
+ WINBASEAPI LCID WINAPI ConvertDefaultLocale(LCID Locale);
+ WINBASEAPI LCID WINAPI GetThreadLocale(void);
+ WINBASEAPI WINBOOL WINAPI SetThreadLocale(LCID Locale);
+ WINBASEAPI LANGID WINAPI GetSystemDefaultUILanguage(void);
+ WINBASEAPI LANGID WINAPI GetUserDefaultUILanguage(void);
+ WINBASEAPI LANGID WINAPI GetSystemDefaultLangID(void);
+ WINBASEAPI LANGID WINAPI GetUserDefaultLangID(void);
+ WINBASEAPI LCID WINAPI GetSystemDefaultLCID(void);
+ WINBASEAPI LCID WINAPI GetUserDefaultLCID(void);
+ WINBASEAPI WINBOOL WINAPI GetStringTypeExA(LCID Locale,DWORD dwInfoType,LPCSTR lpSrcStr,int cchSrc,LPWORD lpCharType);
+ WINBASEAPI WINBOOL WINAPI GetStringTypeExW(LCID Locale,DWORD dwInfoType,LPCWSTR lpSrcStr,int cchSrc,LPWORD lpCharType);
+ WINBASEAPI WINBOOL WINAPI GetStringTypeA(LCID Locale,DWORD dwInfoType,LPCSTR lpSrcStr,int cchSrc,LPWORD lpCharType);
+ WINBASEAPI WINBOOL WINAPI GetStringTypeW(DWORD dwInfoType,LPCWSTR lpSrcStr,int cchSrc,LPWORD lpCharType);
+ WINBASEAPI int WINAPI FoldStringA(DWORD dwMapFlags,LPCSTR lpSrcStr,int cchSrc,LPSTR lpDestStr,int cchDest);
+ WINBASEAPI int WINAPI FoldStringW(DWORD dwMapFlags,LPCWSTR lpSrcStr,int cchSrc,LPWSTR lpDestStr,int cchDest);
+ WINBASEAPI WINBOOL WINAPI EnumSystemLanguageGroupsA(LANGUAGEGROUP_ENUMPROCA lpLanguageGroupEnumProc,DWORD dwFlags,LONG_PTR lParam);
+ WINBASEAPI WINBOOL WINAPI EnumSystemLanguageGroupsW(LANGUAGEGROUP_ENUMPROCW lpLanguageGroupEnumProc,DWORD dwFlags,LONG_PTR lParam);
+ WINBASEAPI WINBOOL WINAPI EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA lpLangGroupLocaleEnumProc,LGRPID LanguageGroup,DWORD dwFlags,LONG_PTR lParam);
+ WINBASEAPI WINBOOL WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW lpLangGroupLocaleEnumProc,LGRPID LanguageGroup,DWORD dwFlags,LONG_PTR lParam);
+ WINBASEAPI WINBOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA lpUILanguageEnumProc,DWORD dwFlags,LONG_PTR lParam);
+ WINBASEAPI WINBOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW lpUILanguageEnumProc,DWORD dwFlags,LONG_PTR lParam);
+ WINBASEAPI WINBOOL WINAPI EnumSystemLocalesA(LOCALE_ENUMPROCA lpLocaleEnumProc,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW lpLocaleEnumProc,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI EnumSystemCodePagesA(CODEPAGE_ENUMPROCA lpCodePageEnumProc,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI EnumSystemCodePagesW(CODEPAGE_ENUMPROCW lpCodePageEnumProc,DWORD dwFlags);
+ WINBASEAPI WINBOOL WINAPI IsNormalizedString(NORM_FORM NormForm,LPCWSTR lpString,int cwLength);
+ WINBASEAPI int WINAPI NormalizeString(NORM_FORM NormForm,LPCWSTR lpSrcString,int cwSrcLength,LPWSTR lpDstString,int cwDstLength);
+ WINBASEAPI int WINAPI IdnToAscii(DWORD dwFlags,LPCWSTR lpUnicodeCharStr,int cchUnicodeChar,LPWSTR lpASCIICharStr,int cchASCIIChar);
+ WINBASEAPI int WINAPI IdnToNameprepUnicode(DWORD dwFlags,LPCWSTR lpUnicodeCharStr,int cchUnicodeChar,LPWSTR lpNameprepCharStr,int cchNameprepChar);
+ WINBASEAPI int WINAPI IdnToUnicode(DWORD dwFlags,LPCWSTR lpASCIICharStr,int cchASCIIChar,LPWSTR lpUnicodeCharStr,int cchUnicodeChar);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/win32/include/winapi/winnt.h b/win32/include/winapi/winnt.h
index 4cf685d..8c33404 100644
--- a/win32/include/winapi/winnt.h
+++ b/win32/include/winapi/winnt.h
@@ -1310,7 +1310,7 @@ typedef DWORD LCID;
#define INITIAL_MXCSR 0x1f80
#define INITIAL_FPCSR 0x027f
- typedef DECLSPEC_ALIGN(16) struct _M128A {
+ typedef struct DECLSPEC_ALIGN(16) _M128A {
ULONGLONG Low;
LONGLONG High;
} M128A,*PM128A;
@@ -1336,7 +1336,7 @@ typedef DWORD LCID;
#define LEGACY_SAVE_AREA_LENGTH sizeof(XMM_SAVE_AREA32)
- typedef DECLSPEC_ALIGN(16) struct _CONTEXT {
+ typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
DWORD64 P1Home;
DWORD64 P2Home;
DWORD64 P3Home;
@@ -1474,7 +1474,7 @@ typedef DWORD LCID;
#if(defined(_X86_) && !defined(__x86_64))
__CRT_INLINE VOID MemoryBarrier(VOID) {
LONG Barrier;
- __asm__ __volatile__("xchgl %eax,%0 "
+ __asm__ __volatile__("xchgl %%eax,%0 "
:"=r" (Barrier));
}
#define YieldProcessor() __asm__ __volatile__("rep nop ");
@@ -1486,7 +1486,7 @@ typedef DWORD LCID;
#define PF_NON_TEMPORAL_LEVEL_ALL
__CRT_INLINE VOID DbgRaiseAssertionFailure(void) {
- __asm__ __volatile__("int 0x2c ");
+ __asm__ __volatile__("int $0x2c ");
}
PVOID GetCurrentFiber(void);
__CRT_INLINE PVOID GetCurrentFiber(void)
@@ -3150,7 +3150,7 @@ typedef DWORD LCID;
DWORD Type;
} MEMORY_BASIC_INFORMATION32,*PMEMORY_BASIC_INFORMATION32;
- typedef DECLSPEC_ALIGN(16) struct _MEMORY_BASIC_INFORMATION64 {
+ typedef struct DECLSPEC_ALIGN(16) _MEMORY_BASIC_INFORMATION64 {
ULONGLONG BaseAddress;
ULONGLONG AllocationBase;
DWORD AllocationProtect;
@@ -4949,7 +4949,7 @@ typedef DWORD LCID;
#ifdef _WIN64
typedef struct _SLIST_ENTRY *PSLIST_ENTRY;
- typedef DECLSPEC_ALIGN(16) struct _SLIST_ENTRY {
+ typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
PSLIST_ENTRY Next;
} SLIST_ENTRY;
#else
@@ -4961,7 +4961,7 @@ typedef DWORD LCID;
#if defined(_WIN64)
- typedef DECLSPEC_ALIGN(16) struct _SLIST_HEADER {
+ typedef struct DECLSPEC_ALIGN(16) _SLIST_HEADER {
ULONGLONG Alignment;
ULONGLONG Region;
} SLIST_HEADER;
diff --git a/win32/include/winapi/winsock2.h b/win32/include/winapi/winsock2.h
new file mode 100644
index 0000000..365ace6
--- /dev/null
+++ b/win32/include/winapi/winsock2.h
@@ -0,0 +1,1474 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+#ifndef _WINSOCK2API_
+#define _WINSOCK2API_
+
+#ifndef INCL_WINSOCK_API_TYPEDEFS
+#define INCL_WINSOCK_API_TYPEDEFS 0
+#endif
+
+#ifndef _INC_WINDOWS
+#include <windows.h>
+#endif
+
+#ifndef MAKEWORD
+#define MAKEWORD(low,high) ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8))
+#endif
+
+#ifndef WINSOCK_VERSION
+#define WINSOCK_VERSION MAKEWORD(2,2)
+#endif
+
+#ifndef WINSOCK_API_LINKAGE
+#ifdef DECLSPEC_IMPORT
+#define WINSOCK_API_LINKAGE DECLSPEC_IMPORT
+#else
+#define WINSOCK_API_LINKAGE
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _WINSOCK_SOCKET_DEFINED
+#define _WINSOCK_SOCKET_DEFINED
+ typedef unsigned char u_char;
+ typedef unsigned short u_short;
+ typedef unsigned int u_int;
+ typedef unsigned long u_long;
+ __MINGW_EXTENSION typedef unsigned __int64 u_int64;
+ typedef INT_PTR SOCKET;
+#endif
+
+#ifndef FD_SETSIZE
+#define FD_SETSIZE 64
+#endif
+
+ typedef struct fd_set {
+ u_int fd_count;
+ SOCKET fd_array[FD_SETSIZE];
+ } fd_set;
+
+ extern int WINAPI __WSAFDIsSet(SOCKET,fd_set *);
+
+#define FD_CLR(fd,set) do { u_int __i; for(__i = 0;__i < ((fd_set *)(set))->fd_count;__i++) { if (((fd_set *)(set))->fd_array[__i]==fd) { while (__i < ((fd_set *)(set))->fd_count-1) { ((fd_set *)(set))->fd_array[__i] = ((fd_set *)(set))->fd_array[__i+1]; __i++; } ((fd_set *)(set))->fd_count--; break; } } } while(0)
+#define FD_SET(fd,set) do { u_int __i; for(__i = 0;__i < ((fd_set *)(set))->fd_count;__i++) { if (((fd_set *)(set))->fd_array[__i]==(fd)) { break; } } if (__i==((fd_set *)(set))->fd_count) { if (((fd_set *)(set))->fd_count < FD_SETSIZE) { ((fd_set *)(set))->fd_array[__i] = (fd); ((fd_set *)(set))->fd_count++; } } } while(0)
+#define FD_ZERO(set) (((fd_set *)(set))->fd_count=0)
+#define FD_ISSET(fd,set) __WSAFDIsSet((SOCKET)(fd),(fd_set *)(set))
+
+#ifndef _TIMEVAL_DEFINED /* also in winsock[2].h */
+#define _TIMEVAL_DEFINED
+ struct timeval {
+ long tv_sec;
+ long tv_usec;
+ };
+
+#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timercmp(tvp,uvp,cmp) ((tvp)->tv_sec cmp (uvp)->tv_sec || (tvp)->tv_sec==(uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
+#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
+#endif /* _TIMEVAL_DEFINED */
+
+#define IOCPARM_MASK 0x7f
+#define IOC_VOID 0x20000000
+#define IOC_OUT 0x40000000
+#define IOC_IN 0x80000000
+#define IOC_INOUT (IOC_IN|IOC_OUT)
+
+#define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
+#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+
+#define FIONREAD _IOR('f',127,u_long)
+#define FIONBIO _IOW('f',126,u_long)
+#define FIOASYNC _IOW('f',125,u_long)
+
+#define SIOCSHIWAT _IOW('s',0,u_long)
+#define SIOCGHIWAT _IOR('s',1,u_long)
+#define SIOCSLOWAT _IOW('s',2,u_long)
+#define SIOCGLOWAT _IOR('s',3,u_long)
+#define SIOCATMARK _IOR('s',7,u_long)
+
+#define h_addr h_addr_list[0]
+
+ struct hostent {
+ char *h_name;
+ char **h_aliases;
+ short h_addrtype;
+ short h_length;
+ char **h_addr_list;
+ };
+
+ struct netent {
+ char *n_name;
+ char **n_aliases;
+ short n_addrtype;
+ u_long n_net;
+ };
+
+ struct servent {
+ char *s_name;
+ char **s_aliases;
+#ifdef _WIN64
+ char *s_proto;
+ short s_port;
+#else
+ short s_port;
+ char *s_proto;
+#endif
+ };
+
+ struct protoent {
+ char *p_name;
+ char **p_aliases;
+ short p_proto;
+ };
+
+#define IPPROTO_IP 0
+#define IPPROTO_HOPOPTS 0
+#define IPPROTO_ICMP 1
+#define IPPROTO_IGMP 2
+#define IPPROTO_GGP 3
+#define IPPROTO_IPV4 4
+#define IPPROTO_TCP 6
+#define IPPROTO_PUP 12
+#define IPPROTO_UDP 17
+#define IPPROTO_IDP 22
+#define IPPROTO_IPV6 41
+#define IPPROTO_ROUTING 43
+#define IPPROTO_FRAGMENT 44
+#define IPPROTO_ESP 50
+#define IPPROTO_AH 51
+#define IPPROTO_ICMPV6 58
+#define IPPROTO_NONE 59
+#define IPPROTO_DSTOPTS 60
+#define IPPROTO_ND 77
+#define IPPROTO_ICLFXBM 78
+
+#define IPPROTO_RAW 255
+#define IPPROTO_MAX 256
+
+#define IPPORT_ECHO 7
+#define IPPORT_DISCARD 9
+#define IPPORT_SYSTAT 11
+#define IPPORT_DAYTIME 13
+#define IPPORT_NETSTAT 15
+#define IPPORT_FTP 21
+#define IPPORT_TELNET 23
+#define IPPORT_SMTP 25
+#define IPPORT_TIMESERVER 37
+#define IPPORT_NAMESERVER 42
+#define IPPORT_WHOIS 43
+#define IPPORT_MTP 57
+
+#define IPPORT_TFTP 69
+#define IPPORT_RJE 77
+#define IPPORT_FINGER 79
+#define IPPORT_TTYLINK 87
+#define IPPORT_SUPDUP 95
+
+#define IPPORT_EXECSERVER 512
+#define IPPORT_LOGINSERVER 513
+#define IPPORT_CMDSERVER 514
+#define IPPORT_EFSSERVER 520
+
+#define IPPORT_BIFFUDP 512
+#define IPPORT_WHOSERVER 513
+#define IPPORT_ROUTESERVER 520
+
+#define IPPORT_RESERVED 1024
+
+#define IMPLINK_IP 155
+#define IMPLINK_LOWEXPER 156
+#define IMPLINK_HIGHEXPER 158
+
+#ifndef s_addr
+
+ struct in_addr {
+ union {
+ struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
+ struct { u_short s_w1,s_w2; } S_un_w;
+ u_long S_addr;
+ } S_un;
+ };
+
+#define s_addr S_un.S_addr
+#define s_host S_un.S_un_b.s_b2
+#define s_net S_un.S_un_b.s_b1
+#define s_imp S_un.S_un_w.s_w2
+#define s_impno S_un.S_un_b.s_b4
+#define s_lh S_un.S_un_b.s_b3
+
+#endif
+
+#define IN_CLASSA(i) (((long)(i) & 0x80000000)==0)
+#define IN_CLASSA_NET 0xff000000
+#define IN_CLASSA_NSHIFT 24
+#define IN_CLASSA_HOST 0x00ffffff
+#define IN_CLASSA_MAX 128
+
+#define IN_CLASSB(i) (((long)(i) & 0xc0000000)==0x80000000)
+#define IN_CLASSB_NET 0xffff0000
+#define IN_CLASSB_NSHIFT 16
+#define IN_CLASSB_HOST 0x0000ffff
+#define IN_CLASSB_MAX 65536
+
+#define IN_CLASSC(i) (((long)(i) & 0xe0000000)==0xc0000000)
+#define IN_CLASSC_NET 0xffffff00
+#define IN_CLASSC_NSHIFT 8
+#define IN_CLASSC_HOST 0x000000ff
+
+#define IN_CLASSD(i) (((long)(i) & 0xf0000000)==0xe0000000)
+#define IN_CLASSD_NET 0xf0000000
+#define IN_CLASSD_NSHIFT 28
+#define IN_CLASSD_HOST 0x0fffffff
+#define IN_MULTICAST(i) IN_CLASSD(i)
+
+#define INADDR_ANY (u_long)0x00000000
+#define INADDR_LOOPBACK 0x7f000001
+#define INADDR_BROADCAST (u_long)0xffffffff
+#define INADDR_NONE 0xffffffff
+
+#define ADDR_ANY INADDR_ANY
+
+ struct sockaddr_in {
+ short sin_family;
+ u_short sin_port;
+ struct in_addr sin_addr;
+ char sin_zero[8];
+ };
+
+#define WSADESCRIPTION_LEN 256
+#define WSASYS_STATUS_LEN 128
+
+ typedef struct WSAData {
+ WORD wVersion;
+ WORD wHighVersion;
+#ifdef _WIN64
+ unsigned short iMaxSockets;
+ unsigned short iMaxUdpDg;
+ char *lpVendorInfo;
+ char szDescription[WSADESCRIPTION_LEN+1];
+ char szSystemStatus[WSASYS_STATUS_LEN+1];
+#else
+ char szDescription[WSADESCRIPTION_LEN+1];
+ char szSystemStatus[WSASYS_STATUS_LEN+1];
+ unsigned short iMaxSockets;
+ unsigned short iMaxUdpDg;
+ char *lpVendorInfo;
+#endif
+ } WSADATA,*LPWSADATA;
+
+#define INVALID_SOCKET (SOCKET)(~0)
+#define SOCKET_ERROR (-1)
+
+#define FROM_PROTOCOL_INFO (-1)
+
+#define SOCK_STREAM 1
+#define SOCK_DGRAM 2
+#define SOCK_RAW 3
+#define SOCK_RDM 4
+#define SOCK_SEQPACKET 5
+
+#define SO_DEBUG 0x0001
+#define SO_ACCEPTCONN 0x0002
+#define SO_REUSEADDR 0x0004
+#define SO_KEEPALIVE 0x0008
+#define SO_DONTROUTE 0x0010
+#define SO_BROADCAST 0x0020
+#define SO_USELOOPBACK 0x0040
+#define SO_LINGER 0x0080
+#define SO_OOBINLINE 0x0100
+
+#define SO_DONTLINGER (int)(~SO_LINGER)
+#define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR))
+
+#define SO_SNDBUF 0x1001
+#define SO_RCVBUF 0x1002
+#define SO_SNDLOWAT 0x1003
+#define SO_RCVLOWAT 0x1004
+#define SO_SNDTIMEO 0x1005
+#define SO_RCVTIMEO 0x1006
+#define SO_ERROR 0x1007
+#define SO_TYPE 0x1008
+
+#define SO_GROUP_ID 0x2001
+#define SO_GROUP_PRIORITY 0x2002
+#define SO_MAX_MSG_SIZE 0x2003
+#define SO_PROTOCOL_INFOA 0x2004
+#define SO_PROTOCOL_INFOW 0x2005
+#ifdef UNICODE
+#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOW
+#else
+#define SO_PROTOCOL_INFO SO_PROTOCOL_INFOA
+#endif
+#define PVD_CONFIG 0x3001
+#define SO_CONDITIONAL_ACCEPT 0x3002
+
+#define TCP_NODELAY 0x0001
+
+#define AF_UNSPEC 0
+
+#define AF_UNIX 1
+#define AF_INET 2
+#define AF_IMPLINK 3
+#define AF_PUP 4
+#define AF_CHAOS 5
+#define AF_NS 6
+#define AF_IPX AF_NS
+#define AF_ISO 7
+#define AF_OSI AF_ISO
+#define AF_ECMA 8
+#define AF_DATAKIT 9
+#define AF_CCITT 10
+#define AF_SNA 11
+#define AF_DECnet 12
+#define AF_DLI 13
+#define AF_LAT 14
+#define AF_HYLINK 15
+#define AF_APPLETALK 16
+#define AF_NETBIOS 17
+#define AF_VOICEVIEW 18
+#define AF_FIREFOX 19
+#define AF_UNKNOWN1 20
+#define AF_BAN 21
+#define AF_ATM 22
+#define AF_INET6 23
+#define AF_CLUSTER 24
+#define AF_12844 25
+#define AF_IRDA 26
+#define AF_NETDES 28
+#define AF_TCNPROCESS 29
+#define AF_TCNMESSAGE 30
+#define AF_ICLFXBM 31
+
+#define AF_MAX 32
+
+ struct sockaddr {
+ u_short sa_family;
+ char sa_data[14];
+ };
+
+#define _SS_MAXSIZE 128
+#define _SS_ALIGNSIZE (8)
+
+#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (short))
+#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (short) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
+
+ struct sockaddr_storage {
+ short ss_family;
+ char __ss_pad1[_SS_PAD1SIZE];
+
+ __MINGW_EXTENSION __int64 __ss_align;
+ char __ss_pad2[_SS_PAD2SIZE];
+
+ };
+
+ struct sockproto {
+ u_short sp_family;
+ u_short sp_protocol;
+ };
+
+#define PF_UNSPEC AF_UNSPEC
+#define PF_UNIX AF_UNIX
+#define PF_INET AF_INET
+#define PF_IMPLINK AF_IMPLINK
+#define PF_PUP AF_PUP
+#define PF_CHAOS AF_CHAOS
+#define PF_NS AF_NS
+#define PF_IPX AF_IPX
+#define PF_ISO AF_ISO
+#define PF_OSI AF_OSI
+#define PF_ECMA AF_ECMA
+#define PF_DATAKIT AF_DATAKIT
+#define PF_CCITT AF_CCITT
+#define PF_SNA AF_SNA
+#define PF_DECnet AF_DECnet
+#define PF_DLI AF_DLI
+#define PF_LAT AF_LAT
+#define PF_HYLINK AF_HYLINK
+#define PF_APPLETALK AF_APPLETALK
+#define PF_VOICEVIEW AF_VOICEVIEW
+#define PF_FIREFOX AF_FIREFOX
+#define PF_UNKNOWN1 AF_UNKNOWN1
+#define PF_BAN AF_BAN
+#define PF_ATM AF_ATM
+#define PF_INET6 AF_INET6
+
+#define PF_MAX AF_MAX
+
+ struct linger {
+ u_short l_onoff;
+ u_short l_linger;
+ };
+
+#define SOL_SOCKET 0xffff
+
+#define SOMAXCONN 0x7fffffff
+
+#define MSG_OOB 0x1
+#define MSG_PEEK 0x2
+#define MSG_DONTROUTE 0x4
+#define MSG_WAITALL 0x8
+
+#define MSG_PARTIAL 0x8000
+
+#define MSG_INTERRUPT 0x10
+
+#define MSG_MAXIOVLEN 16
+
+#define MAXGETHOSTSTRUCT 1024
+
+#define FD_READ_BIT 0
+#define FD_READ (1 << FD_READ_BIT)
+
+#define FD_WRITE_BIT 1
+#define FD_WRITE (1 << FD_WRITE_BIT)
+
+#define FD_OOB_BIT 2
+#define FD_OOB (1 << FD_OOB_BIT)
+
+#define FD_ACCEPT_BIT 3
+#define FD_ACCEPT (1 << FD_ACCEPT_BIT)
+
+#define FD_CONNECT_BIT 4
+#define FD_CONNECT (1 << FD_CONNECT_BIT)
+
+#define FD_CLOSE_BIT 5
+#define FD_CLOSE (1 << FD_CLOSE_BIT)
+
+#define FD_QOS_BIT 6
+#define FD_QOS (1 << FD_QOS_BIT)
+
+#define FD_GROUP_QOS_BIT 7
+#define FD_GROUP_QOS (1 << FD_GROUP_QOS_BIT)
+
+#define FD_ROUTING_INTERFACE_CHANGE_BIT 8
+#define FD_ROUTING_INTERFACE_CHANGE (1 << FD_ROUTING_INTERFACE_CHANGE_BIT)
+
+#define FD_ADDRESS_LIST_CHANGE_BIT 9
+#define FD_ADDRESS_LIST_CHANGE (1 << FD_ADDRESS_LIST_CHANGE_BIT)
+
+#define FD_MAX_EVENTS 10
+#define FD_ALL_EVENTS ((1 << FD_MAX_EVENTS) - 1)
+
+#ifndef WSABASEERR
+
+#define WSABASEERR 10000
+
+#define WSAEINTR (WSABASEERR+4)
+#define WSAEBADF (WSABASEERR+9)
+#define WSAEACCES (WSABASEERR+13)
+#define WSAEFAULT (WSABASEERR+14)
+#define WSAEINVAL (WSABASEERR+22)
+#define WSAEMFILE (WSABASEERR+24)
+
+#define WSAEWOULDBLOCK (WSABASEERR+35)
+#define WSAEINPROGRESS (WSABASEERR+36)
+#define WSAEALREADY (WSABASEERR+37)
+#define WSAENOTSOCK (WSABASEERR+38)
+#define WSAEDESTADDRREQ (WSABASEERR+39)
+#define WSAEMSGSIZE (WSABASEERR+40)
+#define WSAEPROTOTYPE (WSABASEERR+41)
+#define WSAENOPROTOOPT (WSABASEERR+42)
+#define WSAEPROTONOSUPPORT (WSABASEERR+43)
+#define WSAESOCKTNOSUPPORT (WSABASEERR+44)
+#define WSAEOPNOTSUPP (WSABASEERR+45)
+#define WSAEPFNOSUPPORT (WSABASEERR+46)
+#define WSAEAFNOSUPPORT (WSABASEERR+47)
+#define WSAEADDRINUSE (WSABASEERR+48)
+#define WSAEADDRNOTAVAIL (WSABASEERR+49)
+#define WSAENETDOWN (WSABASEERR+50)
+#define WSAENETUNREACH (WSABASEERR+51)
+#define WSAENETRESET (WSABASEERR+52)
+#define WSAECONNABORTED (WSABASEERR+53)
+#define WSAECONNRESET (WSABASEERR+54)
+#define WSAENOBUFS (WSABASEERR+55)
+#define WSAEISCONN (WSABASEERR+56)
+#define WSAENOTCONN (WSABASEERR+57)
+#define WSAESHUTDOWN (WSABASEERR+58)
+#define WSAETOOMANYREFS (WSABASEERR+59)
+#define WSAETIMEDOUT (WSABASEERR+60)
+#define WSAECONNREFUSED (WSABASEERR+61)
+#define WSAELOOP (WSABASEERR+62)
+#define WSAENAMETOOLONG (WSABASEERR+63)
+#define WSAEHOSTDOWN (WSABASEERR+64)
+#define WSAEHOSTUNREACH (WSABASEERR+65)
+#define WSAENOTEMPTY (WSABASEERR+66)
+#define WSAEPROCLIM (WSABASEERR+67)
+#define WSAEUSERS (WSABASEERR+68)
+#define WSAEDQUOT (WSABASEERR+69)
+#define WSAESTALE (WSABASEERR+70)
+#define WSAEREMOTE (WSABASEERR+71)
+
+#define WSASYSNOTREADY (WSABASEERR+91)
+#define WSAVERNOTSUPPORTED (WSABASEERR+92)
+#define WSANOTINITIALISED (WSABASEERR+93)
+#define WSAEDISCON (WSABASEERR+101)
+#ifndef WSAHOST_NOT_FOUND
+#define WSAHOST_NOT_FOUND (WSABASEERR+1001)
+#endif
+#ifndef WSATRY_AGAIN
+#define WSATRY_AGAIN (WSABASEERR+1002)
+#endif
+#ifndef WSANO_RECOVERY
+#define WSANO_RECOVERY (WSABASEERR+1003)
+#endif
+#ifndef WSANO_DATA
+#define WSANO_DATA (WSABASEERR+1004)
+#endif
+
+#define WSAENOMORE (WSABASEERR+102)
+#define WSAECANCELLED (WSABASEERR+103)
+#define WSAEINVALIDPROCTABLE (WSABASEERR+104)
+#define WSAEINVALIDPROVIDER (WSABASEERR+105)
+#define WSAEPROVIDERFAILEDINIT (WSABASEERR+106)
+#define WSASYSCALLFAILURE (WSABASEERR+107)
+#define WSASERVICE_NOT_FOUND (WSABASEERR+108)
+#define WSATYPE_NOT_FOUND (WSABASEERR+109)
+#define WSA_E_NO_MORE (WSABASEERR+110)
+#define WSA_E_CANCELLED (WSABASEERR+111)
+#define WSAEREFUSED (WSABASEERR+112)
+#ifndef WSA_QOS_RECEIVERS
+#define WSA_QOS_RECEIVERS (WSABASEERR + 1005)
+#endif
+#ifndef WSA_QOS_SENDERS
+#define WSA_QOS_SENDERS (WSABASEERR + 1006)
+#endif
+#ifndef WSA_QOS_NO_SENDERS
+#define WSA_QOS_NO_SENDERS (WSABASEERR + 1007)
+#define WSA_QOS_NO_RECEIVERS (WSABASEERR + 1008)
+#define WSA_QOS_REQUEST_CONFIRMED (WSABASEERR + 1009)
+#define WSA_QOS_ADMISSION_FAILURE (WSABASEERR + 1010)
+#define WSA_QOS_POLICY_FAILURE (WSABASEERR + 1011)
+#define WSA_QOS_BAD_STYLE (WSABASEERR + 1012)
+#define WSA_QOS_BAD_OBJECT (WSABASEERR + 1013)
+#define WSA_QOS_TRAFFIC_CTRL_ERROR (WSABASEERR + 1014)
+#define WSA_QOS_GENERIC_ERROR (WSABASEERR + 1015)
+#define WSA_QOS_ESERVICETYPE (WSABASEERR + 1016)
+#define WSA_QOS_EFLOWSPEC (WSABASEERR + 1017)
+#define WSA_QOS_EPROVSPECBUF (WSABASEERR + 1018)
+#endif
+#ifndef WSA_QOS_EFILTERSTYLE
+#define WSA_QOS_EFILTERSTYLE (WSABASEERR + 1019)
+#endif
+#ifndef WSA_QOS_EFILTERTYPE
+#define WSA_QOS_EFILTERTYPE (WSABASEERR + 1020)
+#endif
+#ifndef WSA_QOS_EFILTERCOUNT
+#define WSA_QOS_EFILTERCOUNT (WSABASEERR + 1021)
+#endif
+#ifndef WSA_QOS_EOBJLENGTH
+#define WSA_QOS_EOBJLENGTH (WSABASEERR + 1022)
+#endif
+#ifndef WSA_QOS_EFLOWCOUNT
+#define WSA_QOS_EFLOWCOUNT (WSABASEERR + 1023)
+#endif
+#ifndef WSA_QOS_EUNKNOWNPSOBJ
+#define WSA_QOS_EUNKNOWNPSOBJ (WSABASEERR + 1024)
+#endif
+#ifndef WSA_QOS_EPOLICYOBJ
+#define WSA_QOS_EPOLICYOBJ (WSABASEERR + 1025)
+#endif
+#ifndef WSA_QOS_EFLOWDESC
+#define WSA_QOS_EFLOWDESC (WSABASEERR + 1026)
+#endif
+#ifndef WSA_QOS_EPSFLOWSPEC
+#define WSA_QOS_EPSFLOWSPEC (WSABASEERR + 1027)
+#endif
+#ifndef WSA_QOS_EPSFILTERSPEC
+#define WSA_QOS_EPSFILTERSPEC (WSABASEERR + 1028)
+#endif
+#ifndef WSA_QOS_ESDMODEOBJ
+#define WSA_QOS_ESDMODEOBJ (WSABASEERR + 1029)
+#endif
+#ifndef WSA_QOS_ESHAPERATEOBJ
+#define WSA_QOS_ESHAPERATEOBJ (WSABASEERR + 1030)
+#endif
+#ifndef WSA_QOS_RESERVED_PETYPE
+#define WSA_QOS_RESERVED_PETYPE (WSABASEERR + 1031)
+#endif
+#endif // WSABASEERR
+
+#define h_errno WSAGetLastError()
+#define HOST_NOT_FOUND WSAHOST_NOT_FOUND
+#define TRY_AGAIN WSATRY_AGAIN
+#define NO_RECOVERY WSANO_RECOVERY
+#define NO_DATA WSANO_DATA
+
+#define WSANO_ADDRESS WSANO_DATA
+#define NO_ADDRESS WSANO_ADDRESS
+
+#if 0
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#define EINPROGRESS WSAEINPROGRESS
+#define EALREADY WSAEALREADY
+#define ENOTSOCK WSAENOTSOCK
+#define EDESTADDRREQ WSAEDESTADDRREQ
+#define EMSGSIZE WSAEMSGSIZE
+#define EPROTOTYPE WSAEPROTOTYPE
+#define ENOPROTOOPT WSAENOPROTOOPT
+#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
+#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#define EOPNOTSUPP WSAEOPNOTSUPP
+#define EPFNOSUPPORT WSAEPFNOSUPPORT
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#define EADDRINUSE WSAEADDRINUSE
+#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
+#define ENETDOWN WSAENETDOWN
+#define ENETUNREACH WSAENETUNREACH
+#define ENETRESET WSAENETRESET
+#define ECONNABORTED WSAECONNABORTED
+#define ECONNRESET WSAECONNRESET
+#define ENOBUFS WSAENOBUFS
+#define EISCONN WSAEISCONN
+#define ENOTCONN WSAENOTCONN
+#define ESHUTDOWN WSAESHUTDOWN
+#define ETOOMANYREFS WSAETOOMANYREFS
+#define ETIMEDOUT WSAETIMEDOUT
+#define ECONNREFUSED WSAECONNREFUSED
+#define ELOOP WSAELOOP
+#define ENAMETOOLONG WSAENAMETOOLONG
+#define EHOSTDOWN WSAEHOSTDOWN
+#define EHOSTUNREACH WSAEHOSTUNREACH
+#define ENOTEMPTY WSAENOTEMPTY
+#define EPROCLIM WSAEPROCLIM
+#define EUSERS WSAEUSERS
+#define EDQUOT WSAEDQUOT
+#define ESTALE WSAESTALE
+#define EREMOTE WSAEREMOTE
+#endif
+
+#define WSAAPI WINAPI
+#define WSAEVENT HANDLE
+#define LPWSAEVENT LPHANDLE
+#define WSAOVERLAPPED OVERLAPPED
+ typedef struct _OVERLAPPED *LPWSAOVERLAPPED;
+
+#define WSA_IO_PENDING (ERROR_IO_PENDING)
+#define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE)
+#define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE)
+#define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER)
+#define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY)
+#define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED)
+
+#define WSA_INVALID_EVENT ((WSAEVENT)NULL)
+#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS)
+#define WSA_WAIT_FAILED (WAIT_FAILED)
+#define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0)
+#define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION)
+#define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT)
+#define WSA_INFINITE (INFINITE)
+
+ typedef struct _WSABUF {
+ u_long len;
+ char *buf;
+ } WSABUF,*LPWSABUF;
+
+#include <qos.h>
+
+ typedef struct _QualityOfService {
+ FLOWSPEC SendingFlowspec;
+ FLOWSPEC ReceivingFlowspec;
+ WSABUF ProviderSpecific;
+ } QOS,*LPQOS;
+
+#define CF_ACCEPT 0x0000
+#define CF_REJECT 0x0001
+#define CF_DEFER 0x0002
+
+#define SD_RECEIVE 0x00
+#define SD_SEND 0x01
+#define SD_BOTH 0x02
+
+ typedef unsigned int GROUP;
+
+#define SG_UNCONSTRAINED_GROUP 0x01
+#define SG_CONSTRAINED_GROUP 0x02
+
+ typedef struct _WSANETWORKEVENTS {
+ long lNetworkEvents;
+ int iErrorCode[FD_MAX_EVENTS];
+ } WSANETWORKEVENTS,*LPWSANETWORKEVENTS;
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#define MAX_PROTOCOL_CHAIN 7
+
+#define BASE_PROTOCOL 1
+#define LAYERED_PROTOCOL 0
+
+ typedef struct _WSAPROTOCOLCHAIN {
+ int ChainLen;
+
+ DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
+ } WSAPROTOCOLCHAIN,*LPWSAPROTOCOLCHAIN;
+
+#define WSAPROTOCOL_LEN 255
+
+ typedef struct _WSAPROTOCOL_INFOA {
+ DWORD dwServiceFlags1;
+ DWORD dwServiceFlags2;
+ DWORD dwServiceFlags3;
+ DWORD dwServiceFlags4;
+ DWORD dwProviderFlags;
+ GUID ProviderId;
+ DWORD dwCatalogEntryId;
+ WSAPROTOCOLCHAIN ProtocolChain;
+ int iVersion;
+ int iAddressFamily;
+ int iMaxSockAddr;
+ int iMinSockAddr;
+ int iSocketType;
+ int iProtocol;
+ int iProtocolMaxOffset;
+ int iNetworkByteOrder;
+ int iSecurityScheme;
+ DWORD dwMessageSize;
+ DWORD dwProviderReserved;
+ CHAR szProtocol[WSAPROTOCOL_LEN+1];
+ } WSAPROTOCOL_INFOA,*LPWSAPROTOCOL_INFOA;
+ typedef struct _WSAPROTOCOL_INFOW {
+ DWORD dwServiceFlags1;
+ DWORD dwServiceFlags2;
+ DWORD dwServiceFlags3;
+ DWORD dwServiceFlags4;
+ DWORD dwProviderFlags;
+ GUID ProviderId;
+ DWORD dwCatalogEntryId;
+ WSAPROTOCOLCHAIN ProtocolChain;
+ int iVersion;
+ int iAddressFamily;
+ int iMaxSockAddr;
+ int iMinSockAddr;
+ int iSocketType;
+ int iProtocol;
+ int iProtocolMaxOffset;
+ int iNetworkByteOrder;
+ int iSecurityScheme;
+ DWORD dwMessageSize;
+ DWORD dwProviderReserved;
+ WCHAR szProtocol[WSAPROTOCOL_LEN+1];
+ } WSAPROTOCOL_INFOW,*LPWSAPROTOCOL_INFOW;
+#ifdef UNICODE
+ typedef WSAPROTOCOL_INFOW WSAPROTOCOL_INFO;
+ typedef LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO;
+#else
+ typedef WSAPROTOCOL_INFOA WSAPROTOCOL_INFO;
+ typedef LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO;
+#endif
+
+#define PFL_MULTIPLE_PROTO_ENTRIES 0x00000001
+#define PFL_RECOMMENDED_PROTO_ENTRY 0x00000002
+#define PFL_HIDDEN 0x00000004
+#define PFL_MATCHES_PROTOCOL_ZERO 0x00000008
+
+#define XP1_CONNECTIONLESS 0x00000001
+#define XP1_GUARANTEED_DELIVERY 0x00000002
+#define XP1_GUARANTEED_ORDER 0x00000004
+#define XP1_MESSAGE_ORIENTED 0x00000008
+#define XP1_PSEUDO_STREAM 0x00000010
+#define XP1_GRACEFUL_CLOSE 0x00000020
+#define XP1_EXPEDITED_DATA 0x00000040
+#define XP1_CONNECT_DATA 0x00000080
+#define XP1_DISCONNECT_DATA 0x00000100
+#define XP1_SUPPORT_BROADCAST 0x00000200
+#define XP1_SUPPORT_MULTIPOINT 0x00000400
+#define XP1_MULTIPOINT_CONTROL_PLANE 0x00000800
+#define XP1_MULTIPOINT_DATA_PLANE 0x00001000
+#define XP1_QOS_SUPPORTED 0x00002000
+#define XP1_INTERRUPT 0x00004000
+#define XP1_UNI_SEND 0x00008000
+#define XP1_UNI_RECV 0x00010000
+#define XP1_IFS_HANDLES 0x00020000
+#define XP1_PARTIAL_MESSAGE 0x00040000
+
+#define BIGENDIAN 0x0000
+#define LITTLEENDIAN 0x0001
+
+#define SECURITY_PROTOCOL_NONE 0x0000
+
+#define JL_SENDER_ONLY 0x01
+#define JL_RECEIVER_ONLY 0x02
+#define JL_BOTH 0x04
+
+#define WSA_FLAG_OVERLAPPED 0x01
+#define WSA_FLAG_MULTIPOINT_C_ROOT 0x02
+#define WSA_FLAG_MULTIPOINT_C_LEAF 0x04
+#define WSA_FLAG_MULTIPOINT_D_ROOT 0x08
+#define WSA_FLAG_MULTIPOINT_D_LEAF 0x10
+
+#define IOC_UNIX 0x00000000
+#define IOC_WS2 0x08000000
+#define IOC_PROTOCOL 0x10000000
+#define IOC_VENDOR 0x18000000
+
+#define _WSAIO(x,y) (IOC_VOID|(x)|(y))
+#define _WSAIOR(x,y) (IOC_OUT|(x)|(y))
+#define _WSAIOW(x,y) (IOC_IN|(x)|(y))
+#define _WSAIORW(x,y) (IOC_INOUT|(x)|(y))
+
+#define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1)
+#define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2)
+#define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3)
+#define SIO_FLUSH _WSAIO(IOC_WS2,4)
+#define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5)
+#define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6)
+#define SIO_GET_QOS _WSAIORW(IOC_WS2,7)
+#define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8)
+#define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9)
+#define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10)
+#define SIO_SET_QOS _WSAIOW(IOC_WS2,11)
+#define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12)
+#define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13)
+#define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20)
+#define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21)
+#define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22)
+#define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23)
+#define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_WS2,24)
+#define SIO_ADDRESS_LIST_SORT _WSAIORW(IOC_WS2,25)
+
+ typedef int (CALLBACK *LPCONDITIONPROC)(LPWSABUF lpCallerId,LPWSABUF lpCallerData,LPQOS lpSQOS,LPQOS lpGQOS,LPWSABUF lpCalleeId,LPWSABUF lpCalleeData,GROUP *g,DWORD_PTR dwCallbackData);
+ typedef void (CALLBACK *LPWSAOVERLAPPED_COMPLETION_ROUTINE)(DWORD dwError,DWORD cbTransferred,LPWSAOVERLAPPED lpOverlapped,DWORD dwFlags);
+
+#define SIO_NSP_NOTIFY_CHANGE _WSAIOW(IOC_WS2,25)
+
+ typedef enum _WSACOMPLETIONTYPE {
+ NSP_NOTIFY_IMMEDIATELY = 0,NSP_NOTIFY_HWND,NSP_NOTIFY_EVENT,NSP_NOTIFY_PORT,NSP_NOTIFY_APC
+ } WSACOMPLETIONTYPE,*PWSACOMPLETIONTYPE,*LPWSACOMPLETIONTYPE;
+
+ typedef struct _WSACOMPLETION {
+ WSACOMPLETIONTYPE Type;
+ union {
+ struct {
+ HWND hWnd;
+ UINT uMsg;
+ WPARAM context;
+ } WindowMessage;
+ struct {
+ LPWSAOVERLAPPED lpOverlapped;
+ } Event;
+ struct {
+ LPWSAOVERLAPPED lpOverlapped;
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
+ } Apc;
+ struct {
+ LPWSAOVERLAPPED lpOverlapped;
+ HANDLE hPort;
+ ULONG_PTR Key;
+ } Port;
+ } Parameters;
+ } WSACOMPLETION,*PWSACOMPLETION,*LPWSACOMPLETION;
+
+#define TH_NETDEV 0x00000001
+#define TH_TAPI 0x00000002
+
+ typedef struct sockaddr SOCKADDR;
+ typedef struct sockaddr *PSOCKADDR;
+ typedef struct sockaddr *LPSOCKADDR;
+ typedef struct sockaddr_storage SOCKADDR_STORAGE;
+ typedef struct sockaddr_storage *PSOCKADDR_STORAGE;
+ typedef struct sockaddr_storage *LPSOCKADDR_STORAGE;
+
+#ifndef _tagBLOB_DEFINED
+#define _tagBLOB_DEFINED
+#define _BLOB_DEFINED
+#define _LPBLOB_DEFINED
+ typedef struct _BLOB {
+ ULONG cbSize;
+ BYTE *pBlobData;
+ } BLOB,*LPBLOB;
+#endif
+
+#define SERVICE_MULTIPLE (0x00000001)
+
+#define NS_ALL (0)
+
+#define NS_SAP (1)
+#define NS_NDS (2)
+#define NS_PEER_BROWSE (3)
+#define NS_SLP (5)
+#define NS_DHCP (6)
+
+#define NS_TCPIP_LOCAL (10)
+#define NS_TCPIP_HOSTS (11)
+#define NS_DNS (12)
+#define NS_NETBT (13)
+#define NS_WINS (14)
+#define NS_NLA (15)
+
+#define NS_NBP (20)
+
+#define NS_MS (30)
+#define NS_STDA (31)
+#define NS_NTDS (32)
+
+#define NS_X500 (40)
+#define NS_NIS (41)
+#define NS_NISPLUS (42)
+
+#define NS_WRQ (50)
+
+#define NS_NETDES (60)
+
+#define RES_UNUSED_1 (0x00000001)
+#define RES_FLUSH_CACHE (0x00000002)
+#ifndef RES_SERVICE
+#define RES_SERVICE (0x00000004)
+#endif
+
+#define SERVICE_TYPE_VALUE_IPXPORTA "IpxSocket"
+#define SERVICE_TYPE_VALUE_IPXPORTW L"IpxSocket"
+#define SERVICE_TYPE_VALUE_SAPIDA "SapId"
+#define SERVICE_TYPE_VALUE_SAPIDW L"SapId"
+
+#define SERVICE_TYPE_VALUE_TCPPORTA "TcpPort"
+#define SERVICE_TYPE_VALUE_TCPPORTW L"TcpPort"
+
+#define SERVICE_TYPE_VALUE_UDPPORTA "UdpPort"
+#define SERVICE_TYPE_VALUE_UDPPORTW L"UdpPort"
+
+#define SERVICE_TYPE_VALUE_OBJECTIDA "ObjectId"
+#define SERVICE_TYPE_VALUE_OBJECTIDW L"ObjectId"
+
+#ifdef UNICODE
+
+#define SERVICE_TYPE_VALUE_SAPID SERVICE_TYPE_VALUE_SAPIDW
+#define SERVICE_TYPE_VALUE_TCPPORT SERVICE_TYPE_VALUE_TCPPORTW
+#define SERVICE_TYPE_VALUE_UDPPORT SERVICE_TYPE_VALUE_UDPPORTW
+#define SERVICE_TYPE_VALUE_OBJECTID SERVICE_TYPE_VALUE_OBJECTIDW
+#else
+
+#define SERVICE_TYPE_VALUE_SAPID SERVICE_TYPE_VALUE_SAPIDA
+#define SERVICE_TYPE_VALUE_TCPPORT SERVICE_TYPE_VALUE_TCPPORTA
+#define SERVICE_TYPE_VALUE_UDPPORT SERVICE_TYPE_VALUE_UDPPORTA
+#define SERVICE_TYPE_VALUE_OBJECTID SERVICE_TYPE_VALUE_OBJECTIDA
+#endif
+
+#ifndef __CSADDR_DEFINED__
+#define __CSADDR_DEFINED__
+
+ typedef struct _SOCKET_ADDRESS {
+ LPSOCKADDR lpSockaddr;
+ INT iSockaddrLength;
+ } SOCKET_ADDRESS,*PSOCKET_ADDRESS,*LPSOCKET_ADDRESS;
+
+ typedef struct _CSADDR_INFO {
+ SOCKET_ADDRESS LocalAddr;
+ SOCKET_ADDRESS RemoteAddr;
+ INT iSocketType;
+ INT iProtocol;
+ } CSADDR_INFO,*PCSADDR_INFO,*LPCSADDR_INFO;
+#endif
+
+ typedef struct _SOCKET_ADDRESS_LIST {
+ INT iAddressCount;
+ SOCKET_ADDRESS Address[1];
+ } SOCKET_ADDRESS_LIST,*LPSOCKET_ADDRESS_LIST;
+
+ typedef struct _AFPROTOCOLS {
+ INT iAddressFamily;
+ INT iProtocol;
+ } AFPROTOCOLS,*PAFPROTOCOLS,*LPAFPROTOCOLS;
+
+ typedef enum _WSAEcomparator {
+ COMP_EQUAL = 0,COMP_NOTLESS
+ } WSAECOMPARATOR,*PWSAECOMPARATOR,*LPWSAECOMPARATOR;
+
+ typedef struct _WSAVersion {
+ DWORD dwVersion;
+ WSAECOMPARATOR ecHow;
+ } WSAVERSION,*PWSAVERSION,*LPWSAVERSION;
+
+ typedef struct _WSAQuerySetA {
+ DWORD dwSize;
+ LPSTR lpszServiceInstanceName;
+ LPGUID lpServiceClassId;
+ LPWSAVERSION lpVersion;
+ LPSTR lpszComment;
+ DWORD dwNameSpace;
+ LPGUID lpNSProviderId;
+ LPSTR lpszContext;
+ DWORD dwNumberOfProtocols;
+ LPAFPROTOCOLS lpafpProtocols;
+ LPSTR lpszQueryString;
+ DWORD dwNumberOfCsAddrs;
+ LPCSADDR_INFO lpcsaBuffer;
+ DWORD dwOutputFlags;
+ LPBLOB lpBlob;
+ } WSAQUERYSETA,*PWSAQUERYSETA,*LPWSAQUERYSETA;
+
+ typedef struct _WSAQuerySetW {
+ DWORD dwSize;
+ LPWSTR lpszServiceInstanceName;
+ LPGUID lpServiceClassId;
+ LPWSAVERSION lpVersion;
+ LPWSTR lpszComment;
+ DWORD dwNameSpace;
+ LPGUID lpNSProviderId;
+ LPWSTR lpszContext;
+ DWORD dwNumberOfProtocols;
+ LPAFPROTOCOLS lpafpProtocols;
+ LPWSTR lpszQueryString;
+ DWORD dwNumberOfCsAddrs;
+ LPCSADDR_INFO lpcsaBuffer;
+ DWORD dwOutputFlags;
+ LPBLOB lpBlob;
+ } WSAQUERYSETW,*PWSAQUERYSETW,*LPWSAQUERYSETW;
+
+#ifdef UNICODE
+ typedef WSAQUERYSETW WSAQUERYSET;
+ typedef PWSAQUERYSETW PWSAQUERYSET;
+ typedef LPWSAQUERYSETW LPWSAQUERYSET;
+#else
+ typedef WSAQUERYSETA WSAQUERYSET;
+ typedef PWSAQUERYSETA PWSAQUERYSET;
+ typedef LPWSAQUERYSETA LPWSAQUERYSET;
+#endif
+
+#define LUP_DEEP 0x0001
+#define LUP_CONTAINERS 0x0002
+#define LUP_NOCONTAINERS 0x0004
+#define LUP_NEAREST 0x0008
+#define LUP_RETURN_NAME 0x0010
+#define LUP_RETURN_TYPE 0x0020
+#define LUP_RETURN_VERSION 0x0040
+#define LUP_RETURN_COMMENT 0x0080
+#define LUP_RETURN_ADDR 0x0100
+#define LUP_RETURN_BLOB 0x0200
+#define LUP_RETURN_ALIASES 0x0400
+#define LUP_RETURN_QUERY_STRING 0x0800
+#define LUP_RETURN_ALL 0x0FF0
+#define LUP_RES_SERVICE 0x8000
+
+#define LUP_FLUSHCACHE 0x1000
+#define LUP_FLUSHPREVIOUS 0x2000
+
+#define RESULT_IS_ALIAS 0x0001
+#define RESULT_IS_ADDED 0x0010
+#define RESULT_IS_CHANGED 0x0020
+#define RESULT_IS_DELETED 0x0040
+
+ typedef enum _WSAESETSERVICEOP {
+ RNRSERVICE_REGISTER=0,RNRSERVICE_DEREGISTER,RNRSERVICE_DELETE
+ } WSAESETSERVICEOP,*PWSAESETSERVICEOP,*LPWSAESETSERVICEOP;
+
+ typedef struct _WSANSClassInfoA {
+ LPSTR lpszName;
+ DWORD dwNameSpace;
+ DWORD dwValueType;
+ DWORD dwValueSize;
+ LPVOID lpValue;
+ } WSANSCLASSINFOA,*PWSANSCLASSINFOA,*LPWSANSCLASSINFOA;
+
+ typedef struct _WSANSClassInfoW {
+ LPWSTR lpszName;
+ DWORD dwNameSpace;
+ DWORD dwValueType;
+ DWORD dwValueSize;
+ LPVOID lpValue;
+ } WSANSCLASSINFOW,*PWSANSCLASSINFOW,*LPWSANSCLASSINFOW;
+
+#ifdef UNICODE
+ typedef WSANSCLASSINFOW WSANSCLASSINFO;
+ typedef PWSANSCLASSINFOW PWSANSCLASSINFO;
+ typedef LPWSANSCLASSINFOW LPWSANSCLASSINFO;
+#else
+ typedef WSANSCLASSINFOA WSANSCLASSINFO;
+ typedef PWSANSCLASSINFOA PWSANSCLASSINFO;
+ typedef LPWSANSCLASSINFOA LPWSANSCLASSINFO;
+#endif
+
+ typedef struct _WSAServiceClassInfoA {
+ LPGUID lpServiceClassId;
+ LPSTR lpszServiceClassName;
+ DWORD dwCount;
+ LPWSANSCLASSINFOA lpClassInfos;
+ } WSASERVICECLASSINFOA,*PWSASERVICECLASSINFOA,*LPWSASERVICECLASSINFOA;
+
+ typedef struct _WSAServiceClassInfoW {
+ LPGUID lpServiceClassId;
+ LPWSTR lpszServiceClassName;
+ DWORD dwCount;
+ LPWSANSCLASSINFOW lpClassInfos;
+ } WSASERVICECLASSINFOW,*PWSASERVICECLASSINFOW,*LPWSASERVICECLASSINFOW;
+
+#ifdef UNICODE
+ typedef WSASERVICECLASSINFOW WSASERVICECLASSINFO;
+ typedef PWSASERVICECLASSINFOW PWSASERVICECLASSINFO;
+ typedef LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO;
+#else
+ typedef WSASERVICECLASSINFOA WSASERVICECLASSINFO;
+ typedef PWSASERVICECLASSINFOA PWSASERVICECLASSINFO;
+ typedef LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO;
+#endif
+
+ typedef struct _WSANAMESPACE_INFOA {
+ GUID NSProviderId;
+ DWORD dwNameSpace;
+ WINBOOL fActive;
+ DWORD dwVersion;
+ LPSTR lpszIdentifier;
+ } WSANAMESPACE_INFOA,*PWSANAMESPACE_INFOA,*LPWSANAMESPACE_INFOA;
+
+ typedef struct _WSANAMESPACE_INFOW {
+ GUID NSProviderId;
+ DWORD dwNameSpace;
+ WINBOOL fActive;
+ DWORD dwVersion;
+ LPWSTR lpszIdentifier;
+ } WSANAMESPACE_INFOW,*PWSANAMESPACE_INFOW,*LPWSANAMESPACE_INFOW;
+
+#ifdef UNICODE
+ typedef WSANAMESPACE_INFOW WSANAMESPACE_INFO;
+ typedef PWSANAMESPACE_INFOW PWSANAMESPACE_INFO;
+ typedef LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO;
+#else
+ typedef WSANAMESPACE_INFOA WSANAMESPACE_INFO;
+ typedef PWSANAMESPACE_INFOA PWSANAMESPACE_INFO;
+ typedef LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO;
+#endif
+
+#if INCL_WINSOCK_API_TYPEDEFS
+#ifdef UNICODE
+#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETW
+#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSW
+#define LPFN_WSASOCKET LPFN_WSASOCKETW
+#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGW
+#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSW
+#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINW
+#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTW
+#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSW
+#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOW
+#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSW
+#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW
+#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEW
+#else
+#define LPFN_WSADUPLICATESOCKET LPFN_WSADUPLICATESOCKETA
+#define LPFN_WSAENUMPROTOCOLS LPFN_WSAENUMPROTOCOLSA
+#define LPFN_WSASOCKET LPFN_WSASOCKETA
+#define LPFN_WSAADDRESSTOSTRING LPFN_WSAADDRESSTOSTRINGA
+#define LPFN_WSASTRINGTOADDRESS LPFN_WSASTRINGTOADDRESSA
+#define LPFN_WSALOOKUPSERVICEBEGIN LPFN_WSALOOKUPSERVICEBEGINA
+#define LPFN_WSALOOKUPSERVICENEXT LPFN_WSALOOKUPSERVICENEXTA
+#define LPFN_WSAINSTALLSERVICECLASS LPFN_WSAINSTALLSERVICECLASSA
+#define LPFN_WSAGETSERVICECLASSINFO LPFN_WSAGETSERVICECLASSINFOA
+#define LPFN_WSAENUMNAMESPACEPROVIDERS LPFN_WSAENUMNAMESPACEPROVIDERSA
+#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA
+#define LPFN_WSASETSERVICE LPFN_WSASETSERVICEA
+#endif
+
+ typedef SOCKET (WSAAPI *LPFN_ACCEPT)(SOCKET s,struct sockaddr *addr,int *addrlen);
+ typedef int (WSAAPI *LPFN_BIND)(SOCKET s,const struct sockaddr *name,int namelen);
+ typedef int (WSAAPI *LPFN_CLOSESOCKET)(SOCKET s);
+ typedef int (WSAAPI *LPFN_CONNECT)(SOCKET s,const struct sockaddr *name,int namelen);
+ typedef int (WSAAPI *LPFN_IOCTLSOCKET)(SOCKET s,long cmd,u_long *argp);
+ typedef int (WSAAPI *LPFN_GETPEERNAME)(SOCKET s,struct sockaddr *name,int *namelen);
+ typedef int (WSAAPI *LPFN_GETSOCKNAME)(SOCKET s,struct sockaddr *name,int *namelen);
+ typedef int (WSAAPI *LPFN_GETSOCKOPT)(SOCKET s,int level,int optname,char *optval,int *optlen);
+ typedef u_long (WSAAPI *LPFN_HTONL)(u_long hostlong);
+ typedef u_short (WSAAPI *LPFN_HTONS)(u_short hostshort);
+ typedef unsigned long (WSAAPI *LPFN_INET_ADDR)(const char *cp);
+ typedef char *(WSAAPI *LPFN_INET_NTOA)(struct in_addr in);
+ typedef int (WSAAPI *LPFN_LISTEN)(SOCKET s,int backlog);
+ typedef u_long (WSAAPI *LPFN_NTOHL)(u_long netlong);
+ typedef u_short (WSAAPI *LPFN_NTOHS)(u_short netshort);
+ typedef int (WSAAPI *LPFN_RECV)(SOCKET s,char *buf,int len,int flags);
+ typedef int (WSAAPI *LPFN_RECVFROM)(SOCKET s,char *buf,int len,int flags,struct sockaddr *from,int *fromlen);
+ typedef int (WSAAPI *LPFN_SELECT)(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,const struct timeval *timeout);
+ typedef int (WSAAPI *LPFN_SEND)(SOCKET s,const char *buf,int len,int flags);
+ typedef int (WSAAPI *LPFN_SENDTO)(SOCKET s,const char *buf,int len,int flags,const struct sockaddr *to,int tolen);
+ typedef int (WSAAPI *LPFN_SETSOCKOPT)(SOCKET s,int level,int optname,const char *optval,int optlen);
+ typedef int (WSAAPI *LPFN_SHUTDOWN)(SOCKET s,int how);
+ typedef SOCKET (WSAAPI *LPFN_SOCKET)(int af,int type,int protocol);
+ typedef struct hostent *(WSAAPI *LPFN_GETHOSTBYADDR)(const char *addr,int len,int type);
+ typedef struct hostent *(WSAAPI *LPFN_GETHOSTBYNAME)(const char *name);
+ typedef int (WSAAPI *LPFN_GETHOSTNAME)(char *name,int namelen);
+ typedef struct servent *(WSAAPI *LPFN_GETSERVBYPORT)(int port,const char *proto);
+ typedef struct servent *(WSAAPI *LPFN_GETSERVBYNAME)(const char *name,const char *proto);
+ typedef struct protoent *(WSAAPI *LPFN_GETPROTOBYNUMBER)(int number);
+ typedef struct protoent *(WSAAPI *LPFN_GETPROTOBYNAME)(const char *name);
+ typedef int (WSAAPI *LPFN_WSASTARTUP)(WORD wVersionRequested,LPWSADATA lpWSAData);
+ typedef int (WSAAPI *LPFN_WSACLEANUP)(void);
+ typedef void (WSAAPI *LPFN_WSASETLASTERROR)(int iError);
+ typedef int (WSAAPI *LPFN_WSAGETLASTERROR)(void);
+ typedef WINBOOL (WSAAPI *LPFN_WSAISBLOCKING)(void);
+ typedef int (WSAAPI *LPFN_WSAUNHOOKBLOCKINGHOOK)(void);
+ typedef FARPROC (WSAAPI *LPFN_WSASETBLOCKINGHOOK)(FARPROC lpBlockFunc);
+ typedef int (WSAAPI *LPFN_WSACANCELBLOCKINGCALL)(void);
+ typedef HANDLE (WSAAPI *LPFN_WSAASYNCGETSERVBYNAME)(HWND hWnd,u_int wMsg,const char *name,const char *proto,char *buf,int buflen);
+ typedef HANDLE (WSAAPI *LPFN_WSAASYNCGETSERVBYPORT)(HWND hWnd,u_int wMsg,int port,const char *proto,char *buf,int buflen);
+ typedef HANDLE (WSAAPI *LPFN_WSAASYNCGETPROTOBYNAME)(HWND hWnd,u_int wMsg,const char *name,char *buf,int buflen);
+ typedef HANDLE (WSAAPI *LPFN_WSAASYNCGETPROTOBYNUMBER)(HWND hWnd,u_int wMsg,int number,char *buf,int buflen);
+ typedef HANDLE (WSAAPI *LPFN_WSAASYNCGETHOSTBYNAME)(HWND hWnd,u_int wMsg,const char *name,char *buf,int buflen);
+ typedef HANDLE (WSAAPI *LPFN_WSAASYNCGETHOSTBYADDR)(HWND hWnd,u_int wMsg,const char *addr,int len,int type,char *buf,int buflen);
+ typedef int (WSAAPI *LPFN_WSACANCELASYNCREQUEST)(HANDLE hAsyncTaskHandle);
+ typedef int (WSAAPI *LPFN_WSAASYNCSELECT)(SOCKET s,HWND hWnd,u_int wMsg,long lEvent);
+ typedef SOCKET (WSAAPI *LPFN_WSAACCEPT)(SOCKET s,struct sockaddr *addr,LPINT addrlen,LPCONDITIONPROC lpfnCondition,DWORD_PTR dwCallbackData);
+ typedef WINBOOL (WSAAPI *LPFN_WSACLOSEEVENT)(WSAEVENT hEvent);
+ typedef int (WSAAPI *LPFN_WSACONNECT)(SOCKET s,const struct sockaddr *name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS);
+ typedef WSAEVENT (WSAAPI *LPFN_WSACREATEEVENT)(void);
+ typedef int (WSAAPI *LPFN_WSADUPLICATESOCKETA)(SOCKET s,DWORD dwProcessId,LPWSAPROTOCOL_INFOA lpProtocolInfo);
+ typedef int (WSAAPI *LPFN_WSADUPLICATESOCKETW)(SOCKET s,DWORD dwProcessId,LPWSAPROTOCOL_INFOW lpProtocolInfo);
+ typedef int (WSAAPI *LPFN_WSAENUMNETWORKEVENTS)(SOCKET s,WSAEVENT hEventObject,LPWSANETWORKEVENTS lpNetworkEvents);
+ typedef int (WSAAPI *LPFN_WSAENUMPROTOCOLSA)(LPINT lpiProtocols,LPWSAPROTOCOL_INFOA lpProtocolBuffer,LPDWORD lpdwBufferLength);
+ typedef int (WSAAPI *LPFN_WSAENUMPROTOCOLSW)(LPINT lpiProtocols,LPWSAPROTOCOL_INFOW lpProtocolBuffer,LPDWORD lpdwBufferLength);
+ typedef int (WSAAPI *LPFN_WSAEVENTSELECT)(SOCKET s,WSAEVENT hEventObject,long lNetworkEvents);
+ typedef WINBOOL (WSAAPI *LPFN_WSAGETOVERLAPPEDRESULT)(SOCKET s,LPWSAOVERLAPPED lpOverlapped,LPDWORD lpcbTransfer,WINBOOL fWait,LPDWORD lpdwFlags);
+ typedef WINBOOL (WSAAPI *LPFN_WSAGETQOSBYNAME)(SOCKET s,LPWSABUF lpQOSName,LPQOS lpQOS);
+ typedef int (WSAAPI *LPFN_WSAHTONL)(SOCKET s,u_long hostlong,u_long *lpnetlong);
+ typedef int (WSAAPI *LPFN_WSAHTONS)(SOCKET s,u_short hostshort,u_short *lpnetshort);
+ typedef int (WSAAPI *LPFN_WSAIOCTL)(SOCKET s,DWORD dwIoControlCode,LPVOID lpvInBuffer,DWORD cbInBuffer,LPVOID lpvOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbBytesReturned,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ typedef SOCKET (WSAAPI *LPFN_WSAJOINLEAF)(SOCKET s,const struct sockaddr *name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS,DWORD dwFlags);
+ typedef int (WSAAPI *LPFN_WSANTOHL)(SOCKET s,u_long netlong,u_long *lphostlong);
+ typedef int (WSAAPI *LPFN_WSANTOHS)(SOCKET s,u_short netshort,u_short *lphostshort);
+ typedef int (WSAAPI *LPFN_WSARECV)(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ typedef int (WSAAPI *LPFN_WSARECVDISCONNECT)(SOCKET s,LPWSABUF lpInboundDisconnectData);
+ typedef int (WSAAPI *LPFN_WSARECVFROM)(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,struct sockaddr *lpFrom,LPINT lpFromlen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ typedef WINBOOL (WSAAPI *LPFN_WSARESETEVENT)(WSAEVENT hEvent);
+ typedef int (WSAAPI *LPFN_WSASEND)(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ typedef int (WSAAPI *LPFN_WSASENDDISCONNECT)(SOCKET s,LPWSABUF lpOutboundDisconnectData);
+ typedef int (WSAAPI *LPFN_WSASENDTO)(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,const struct sockaddr *lpTo,int iTolen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ typedef WINBOOL (WSAAPI *LPFN_WSASETEVENT)(WSAEVENT hEvent);
+ typedef SOCKET (WSAAPI *LPFN_WSASOCKETA)(int af,int type,int protocol,LPWSAPROTOCOL_INFOA lpProtocolInfo,GROUP g,DWORD dwFlags);
+ typedef SOCKET (WSAAPI *LPFN_WSASOCKETW)(int af,int type,int protocol,LPWSAPROTOCOL_INFOW lpProtocolInfo,GROUP g,DWORD dwFlags);
+ typedef DWORD (WSAAPI *LPFN_WSAWAITFORMULTIPLEEVENTS)(DWORD cEvents,const WSAEVENT *lphEvents,WINBOOL fWaitAll,DWORD dwTimeout,WINBOOL fAlertable);
+ typedef INT (WSAAPI *LPFN_WSAADDRESSTOSTRINGA)(LPSOCKADDR lpsaAddress,DWORD dwAddressLength,LPWSAPROTOCOL_INFOA lpProtocolInfo,LPSTR lpszAddressString,LPDWORD lpdwAddressStringLength);
+ typedef INT (WSAAPI *LPFN_WSAADDRESSTOSTRINGW)(LPSOCKADDR lpsaAddress,DWORD dwAddressLength,LPWSAPROTOCOL_INFOW lpProtocolInfo,LPWSTR lpszAddressString,LPDWORD lpdwAddressStringLength);
+ typedef INT (WSAAPI *LPFN_WSASTRINGTOADDRESSA)(LPSTR AddressString,INT AddressFamily,LPWSAPROTOCOL_INFOA lpProtocolInfo,LPSOCKADDR lpAddress,LPINT lpAddressLength);
+ typedef INT (WSAAPI *LPFN_WSASTRINGTOADDRESSW)(LPWSTR AddressString,INT AddressFamily,LPWSAPROTOCOL_INFOW lpProtocolInfo,LPSOCKADDR lpAddress,LPINT lpAddressLength);
+ typedef INT (WSAAPI *LPFN_WSALOOKUPSERVICEBEGINA)(LPWSAQUERYSETA lpqsRestrictions,DWORD dwControlFlags,LPHANDLE lphLookup);
+ typedef INT (WSAAPI *LPFN_WSALOOKUPSERVICEBEGINW)(LPWSAQUERYSETW lpqsRestrictions,DWORD dwControlFlags,LPHANDLE lphLookup);
+ typedef INT (WSAAPI *LPFN_WSALOOKUPSERVICENEXTA)(HANDLE hLookup,DWORD dwControlFlags,LPDWORD lpdwBufferLength,LPWSAQUERYSETA lpqsResults);
+ typedef INT (WSAAPI *LPFN_WSALOOKUPSERVICENEXTW)(HANDLE hLookup,DWORD dwControlFlags,LPDWORD lpdwBufferLength,LPWSAQUERYSETW lpqsResults);
+ typedef INT (WSAAPI *LPFN_WSANSPIOCTL)(HANDLE hLookup,DWORD dwControlCode,LPVOID lpvInBuffer,DWORD cbInBuffer,LPVOID lpvOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbBytesReturned,LPWSACOMPLETION lpCompletion);
+ typedef INT (WSAAPI *LPFN_WSALOOKUPSERVICEEND)(HANDLE hLookup);
+ typedef INT (WSAAPI *LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA lpServiceClassInfo);
+ typedef INT (WSAAPI *LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW lpServiceClassInfo);
+ typedef INT (WSAAPI *LPFN_WSAREMOVESERVICECLASS)(LPGUID lpServiceClassId);
+ typedef INT (WSAAPI *LPFN_WSAGETSERVICECLASSINFOA)(LPGUID lpProviderId,LPGUID lpServiceClassId,LPDWORD lpdwBufSize,LPWSASERVICECLASSINFOA lpServiceClassInfo);
+ typedef INT (WSAAPI *LPFN_WSAGETSERVICECLASSINFOW)(LPGUID lpProviderId,LPGUID lpServiceClassId,LPDWORD lpdwBufSize,LPWSASERVICECLASSINFOW lpServiceClassInfo);
+ typedef INT (WSAAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA)(LPDWORD lpdwBufferLength,LPWSANAMESPACE_INFOA lpnspBuffer);
+ typedef INT (WSAAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW)(LPDWORD lpdwBufferLength,LPWSANAMESPACE_INFOW lpnspBuffer);
+ typedef INT (WSAAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(LPGUID lpServiceClassId,LPSTR lpszServiceClassName,LPDWORD lpdwBufferLength);
+ typedef INT (WSAAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(LPGUID lpServiceClassId,LPWSTR lpszServiceClassName,LPDWORD lpdwBufferLength);
+ typedef INT (WSAAPI *LPFN_WSASETSERVICEA)(LPWSAQUERYSETA lpqsRegInfo,WSAESETSERVICEOP essoperation,DWORD dwControlFlags);
+ typedef INT (WSAAPI *LPFN_WSASETSERVICEW)(LPWSAQUERYSETW lpqsRegInfo,WSAESETSERVICEOP essoperation,DWORD dwControlFlags);
+ typedef INT (WSAAPI *LPFN_WSAPROVIDERCONFIGCHANGE)(LPHANDLE lpNotificationHandle,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+#endif
+
+#ifdef UNICODE
+#define WSADuplicateSocket WSADuplicateSocketW
+#define WSAEnumProtocols WSAEnumProtocolsW
+#define WSAAddressToString WSAAddressToStringW
+#define WSASocket WSASocketW
+#define WSAStringToAddress WSAStringToAddressW
+#define WSALookupServiceBegin WSALookupServiceBeginW
+#define WSALookupServiceNext WSALookupServiceNextW
+#define WSAInstallServiceClass WSAInstallServiceClassW
+#define WSAGetServiceClassInfo WSAGetServiceClassInfoW
+#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersW
+#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdW
+#define WSASetService WSASetServiceW
+#else
+#define WSADuplicateSocket WSADuplicateSocketA
+#define WSAEnumProtocols WSAEnumProtocolsA
+#define WSASocket WSASocketA
+#define WSAAddressToString WSAAddressToStringA
+#define WSAStringToAddress WSAStringToAddressA
+#define WSALookupServiceBegin WSALookupServiceBeginA
+#define WSALookupServiceNext WSALookupServiceNextA
+#define WSAInstallServiceClass WSAInstallServiceClassA
+#define WSAGetServiceClassInfo WSAGetServiceClassInfoA
+#define WSAEnumNameSpaceProviders WSAEnumNameSpaceProvidersA
+#define WSAGetServiceClassNameByClassId WSAGetServiceClassNameByClassIdA
+#define WSASetService WSASetServiceA
+#endif
+
+ WINSOCK_API_LINKAGE SOCKET WSAAPI accept(SOCKET s,struct sockaddr *addr,int *addrlen);
+ WINSOCK_API_LINKAGE int WSAAPI bind(SOCKET s,const struct sockaddr *name,int namelen);
+ WINSOCK_API_LINKAGE int WSAAPI closesocket(SOCKET s);
+ WINSOCK_API_LINKAGE int WSAAPI connect(SOCKET s,const struct sockaddr *name,int namelen);
+ WINSOCK_API_LINKAGE int WSAAPI ioctlsocket(SOCKET s,long cmd,u_long *argp);
+ WINSOCK_API_LINKAGE int WSAAPI getpeername(SOCKET s,struct sockaddr *name,int *namelen);
+ WINSOCK_API_LINKAGE int WSAAPI getsockname(SOCKET s,struct sockaddr *name,int *namelen);
+ WINSOCK_API_LINKAGE int WSAAPI getsockopt(SOCKET s,int level,int optname,char *optval,int *optlen);
+ WINSOCK_API_LINKAGE u_long WSAAPI htonl(u_long hostlong);
+ WINSOCK_API_LINKAGE u_short WSAAPI htons(u_short hostshort);
+ WINSOCK_API_LINKAGE unsigned long WSAAPI inet_addr(const char *cp);
+ WINSOCK_API_LINKAGE char *WSAAPI inet_ntoa(struct in_addr in);
+ WINSOCK_API_LINKAGE int WSAAPI listen(SOCKET s,int backlog);
+ WINSOCK_API_LINKAGE u_long WSAAPI ntohl(u_long netlong);
+ WINSOCK_API_LINKAGE u_short WSAAPI ntohs(u_short netshort);
+ WINSOCK_API_LINKAGE int WSAAPI recv(SOCKET s,char *buf,int len,int flags);
+ WINSOCK_API_LINKAGE int WSAAPI recvfrom(SOCKET s,char *buf,int len,int flags,struct sockaddr *from,int *fromlen);
+ WINSOCK_API_LINKAGE int WSAAPI select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,const struct timeval *timeout);
+ WINSOCK_API_LINKAGE int WSAAPI send(SOCKET s,const char *buf,int len,int flags);
+ WINSOCK_API_LINKAGE int WSAAPI sendto(SOCKET s,const char *buf,int len,int flags,const struct sockaddr *to,int tolen);
+ WINSOCK_API_LINKAGE int WSAAPI setsockopt(SOCKET s,int level,int optname,const char *optval,int optlen);
+ WINSOCK_API_LINKAGE int WSAAPI shutdown(SOCKET s,int how);
+ WINSOCK_API_LINKAGE SOCKET WSAAPI socket(int af,int type,int protocol);
+ WINSOCK_API_LINKAGE struct hostent *WSAAPI gethostbyaddr(const char *addr,int len,int type);
+ WINSOCK_API_LINKAGE struct hostent *WSAAPI gethostbyname(const char *name);
+ WINSOCK_API_LINKAGE int WSAAPI gethostname(char *name,int namelen);
+ WINSOCK_API_LINKAGE struct servent *WSAAPI getservbyport(int port,const char *proto);
+ WINSOCK_API_LINKAGE struct servent *WSAAPI getservbyname(const char *name,const char *proto);
+ WINSOCK_API_LINKAGE struct protoent *WSAAPI getprotobynumber(int number);
+ WINSOCK_API_LINKAGE struct protoent *WSAAPI getprotobyname(const char *name);
+ WINSOCK_API_LINKAGE int WSAAPI WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);
+ WINSOCK_API_LINKAGE int WSAAPI WSACleanup(void);
+ WINSOCK_API_LINKAGE void WSAAPI WSASetLastError(int iError);
+ WINSOCK_API_LINKAGE int WSAAPI WSAGetLastError(void);
+ WINSOCK_API_LINKAGE WINBOOL WSAAPI WSAIsBlocking(void);
+ WINSOCK_API_LINKAGE int WSAAPI WSAUnhookBlockingHook(void);
+ WINSOCK_API_LINKAGE FARPROC WSAAPI WSASetBlockingHook(FARPROC lpBlockFunc);
+ WINSOCK_API_LINKAGE int WSAAPI WSACancelBlockingCall(void);
+ WINSOCK_API_LINKAGE HANDLE WSAAPI WSAAsyncGetServByName(HWND hWnd,u_int wMsg,const char *name,const char *proto,char *buf,int buflen);
+ WINSOCK_API_LINKAGE HANDLE WSAAPI WSAAsyncGetServByPort(HWND hWnd,u_int wMsg,int port,const char *proto,char *buf,int buflen);
+ WINSOCK_API_LINKAGE HANDLE WSAAPI WSAAsyncGetProtoByName(HWND hWnd,u_int wMsg,const char *name,char *buf,int buflen);
+ WINSOCK_API_LINKAGE HANDLE WSAAPI WSAAsyncGetProtoByNumber(HWND hWnd,u_int wMsg,int number,char *buf,int buflen);
+ WINSOCK_API_LINKAGE HANDLE WSAAPI WSAAsyncGetHostByName(HWND hWnd,u_int wMsg,const char *name,char *buf,int buflen);
+ WINSOCK_API_LINKAGE HANDLE WSAAPI WSAAsyncGetHostByAddr(HWND hWnd,u_int wMsg,const char *addr,int len,int type,char *buf,int buflen);
+ WINSOCK_API_LINKAGE int WSAAPI WSACancelAsyncRequest(HANDLE hAsyncTaskHandle);
+ WINSOCK_API_LINKAGE int WSAAPI WSAAsyncSelect(SOCKET s,HWND hWnd,u_int wMsg,long lEvent);
+ WINSOCK_API_LINKAGE SOCKET WSAAPI WSAAccept(SOCKET s,struct sockaddr *addr,LPINT addrlen,LPCONDITIONPROC lpfnCondition,DWORD_PTR dwCallbackData);
+ WINSOCK_API_LINKAGE WINBOOL WSAAPI WSACloseEvent(WSAEVENT hEvent);
+ WINSOCK_API_LINKAGE int WSAAPI WSAConnect(SOCKET s,const struct sockaddr *name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS);
+ WINSOCK_API_LINKAGE WSAEVENT WSAAPI WSACreateEvent(void);
+ WINSOCK_API_LINKAGE int WSAAPI WSADuplicateSocketA(SOCKET s,DWORD dwProcessId,LPWSAPROTOCOL_INFOA lpProtocolInfo);
+ WINSOCK_API_LINKAGE int WSAAPI WSADuplicateSocketW(SOCKET s,DWORD dwProcessId,LPWSAPROTOCOL_INFOW lpProtocolInfo);
+ WINSOCK_API_LINKAGE int WSAAPI WSAEnumNetworkEvents(SOCKET s,WSAEVENT hEventObject,LPWSANETWORKEVENTS lpNetworkEvents);
+ WINSOCK_API_LINKAGE int WSAAPI WSAEnumProtocolsA(LPINT lpiProtocols,LPWSAPROTOCOL_INFOA lpProtocolBuffer,LPDWORD lpdwBufferLength);
+ WINSOCK_API_LINKAGE int WSAAPI WSAEnumProtocolsW(LPINT lpiProtocols,LPWSAPROTOCOL_INFOW lpProtocolBuffer,LPDWORD lpdwBufferLength);
+ WINSOCK_API_LINKAGE int WSAAPI WSAEventSelect(SOCKET s,WSAEVENT hEventObject,long lNetworkEvents);
+ WINSOCK_API_LINKAGE WINBOOL WSAAPI WSAGetOverlappedResult(SOCKET s,LPWSAOVERLAPPED lpOverlapped,LPDWORD lpcbTransfer,WINBOOL fWait,LPDWORD lpdwFlags);
+ WINSOCK_API_LINKAGE WINBOOL WSAAPI WSAGetQOSByName(SOCKET s,LPWSABUF lpQOSName,LPQOS lpQOS);
+ WINSOCK_API_LINKAGE int WSAAPI WSAHtonl(SOCKET s,u_long hostlong,u_long *lpnetlong);
+ WINSOCK_API_LINKAGE int WSAAPI WSAHtons(SOCKET s,u_short hostshort,u_short *lpnetshort);
+ WINSOCK_API_LINKAGE int WSAAPI WSAIoctl(SOCKET s,DWORD dwIoControlCode,LPVOID lpvInBuffer,DWORD cbInBuffer,LPVOID lpvOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbBytesReturned,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ WINSOCK_API_LINKAGE SOCKET WSAAPI WSAJoinLeaf(SOCKET s,const struct sockaddr *name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS,DWORD dwFlags);
+ WINSOCK_API_LINKAGE int WSAAPI WSANtohl(SOCKET s,u_long netlong,u_long *lphostlong);
+ WINSOCK_API_LINKAGE int WSAAPI WSANtohs(SOCKET s,u_short netshort,u_short *lphostshort);
+ WINSOCK_API_LINKAGE int WSAAPI WSARecv(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ WINSOCK_API_LINKAGE int WSAAPI WSARecvDisconnect(SOCKET s,LPWSABUF lpInboundDisconnectData);
+ WINSOCK_API_LINKAGE int WSAAPI WSARecvFrom(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesRecvd,LPDWORD lpFlags,struct sockaddr *lpFrom,LPINT lpFromlen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ WINSOCK_API_LINKAGE WINBOOL WSAAPI WSAResetEvent(WSAEVENT hEvent);
+ WINSOCK_API_LINKAGE int WSAAPI WSASend(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ WINSOCK_API_LINKAGE int WSAAPI WSASendDisconnect(SOCKET s,LPWSABUF lpOutboundDisconnectData);
+ WINSOCK_API_LINKAGE int WSAAPI WSASendTo(SOCKET s,LPWSABUF lpBuffers,DWORD dwBufferCount,LPDWORD lpNumberOfBytesSent,DWORD dwFlags,const struct sockaddr *lpTo,int iTolen,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+ WINSOCK_API_LINKAGE WINBOOL WSAAPI WSASetEvent(WSAEVENT hEvent);
+ WINSOCK_API_LINKAGE SOCKET WSAAPI WSASocketA(int af,int type,int protocol,LPWSAPROTOCOL_INFOA lpProtocolInfo,GROUP g,DWORD dwFlags);
+ WINSOCK_API_LINKAGE SOCKET WSAAPI WSASocketW(int af,int type,int protocol,LPWSAPROTOCOL_INFOW lpProtocolInfo,GROUP g,DWORD dwFlags);
+ WINSOCK_API_LINKAGE DWORD WSAAPI WSAWaitForMultipleEvents(DWORD cEvents,const WSAEVENT *lphEvents,WINBOOL fWaitAll,DWORD dwTimeout,WINBOOL fAlertable);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAAddressToStringA(LPSOCKADDR lpsaAddress,DWORD dwAddressLength,LPWSAPROTOCOL_INFOA lpProtocolInfo,LPSTR lpszAddressString,LPDWORD lpdwAddressStringLength);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAAddressToStringW(LPSOCKADDR lpsaAddress,DWORD dwAddressLength,LPWSAPROTOCOL_INFOW lpProtocolInfo,LPWSTR lpszAddressString,LPDWORD lpdwAddressStringLength);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAStringToAddressA(LPSTR AddressString,INT AddressFamily,LPWSAPROTOCOL_INFOA lpProtocolInfo,LPSOCKADDR lpAddress,LPINT lpAddressLength);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAStringToAddressW(LPWSTR AddressString,INT AddressFamily,LPWSAPROTOCOL_INFOW lpProtocolInfo,LPSOCKADDR lpAddress,LPINT lpAddressLength);
+ WINSOCK_API_LINKAGE INT WSAAPI WSALookupServiceBeginA(LPWSAQUERYSETA lpqsRestrictions,DWORD dwControlFlags,LPHANDLE lphLookup);
+ WINSOCK_API_LINKAGE INT WSAAPI WSALookupServiceBeginW(LPWSAQUERYSETW lpqsRestrictions,DWORD dwControlFlags,LPHANDLE lphLookup);
+ WINSOCK_API_LINKAGE INT WSAAPI WSALookupServiceNextA(HANDLE hLookup,DWORD dwControlFlags,LPDWORD lpdwBufferLength,LPWSAQUERYSETA lpqsResults);
+ WINSOCK_API_LINKAGE INT WSAAPI WSALookupServiceNextW(HANDLE hLookup,DWORD dwControlFlags,LPDWORD lpdwBufferLength,LPWSAQUERYSETW lpqsResults);
+ WINSOCK_API_LINKAGE INT WSAAPI WSANSPIoctl(HANDLE hLookup,DWORD dwControlCode,LPVOID lpvInBuffer,DWORD cbInBuffer,LPVOID lpvOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbBytesReturned,LPWSACOMPLETION lpCompletion);
+ WINSOCK_API_LINKAGE INT WSAAPI WSALookupServiceEnd(HANDLE hLookup);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA lpServiceClassInfo);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW lpServiceClassInfo);
+ WINSOCK_API_LINKAGE INT WSAAPI WSARemoveServiceClass(LPGUID lpServiceClassId);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAGetServiceClassInfoA(LPGUID lpProviderId,LPGUID lpServiceClassId,LPDWORD lpdwBufSize,LPWSASERVICECLASSINFOA lpServiceClassInfo);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAGetServiceClassInfoW(LPGUID lpProviderId,LPGUID lpServiceClassId,LPDWORD lpdwBufSize,LPWSASERVICECLASSINFOW lpServiceClassInfo);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAEnumNameSpaceProvidersA(LPDWORD lpdwBufferLength,LPWSANAMESPACE_INFOA lpnspBuffer);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAEnumNameSpaceProvidersW(LPDWORD lpdwBufferLength,LPWSANAMESPACE_INFOW lpnspBuffer);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAGetServiceClassNameByClassIdA(LPGUID lpServiceClassId,LPSTR lpszServiceClassName,LPDWORD lpdwBufferLength);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAGetServiceClassNameByClassIdW(LPGUID lpServiceClassId,LPWSTR lpszServiceClassName,LPDWORD lpdwBufferLength);
+ WINSOCK_API_LINKAGE INT WSAAPI WSASetServiceA(LPWSAQUERYSETA lpqsRegInfo,WSAESETSERVICEOP essoperation,DWORD dwControlFlags);
+ WINSOCK_API_LINKAGE INT WSAAPI WSASetServiceW(LPWSAQUERYSETW lpqsRegInfo,WSAESETSERVICEOP essoperation,DWORD dwControlFlags);
+ WINSOCK_API_LINKAGE INT WSAAPI WSAProviderConfigChange(LPHANDLE lpNotificationHandle,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
+
+ typedef struct sockaddr_in SOCKADDR_IN;
+ typedef struct sockaddr_in *PSOCKADDR_IN;
+ typedef struct sockaddr_in *LPSOCKADDR_IN;
+
+ typedef struct linger LINGER;
+ typedef struct linger *PLINGER;
+ typedef struct linger *LPLINGER;
+
+ typedef struct in_addr IN_ADDR;
+ typedef struct in_addr *PIN_ADDR;
+ typedef struct in_addr *LPIN_ADDR;
+
+ typedef struct fd_set FD_SET;
+ typedef struct fd_set *PFD_SET;
+ typedef struct fd_set *LPFD_SET;
+
+ typedef struct hostent HOSTENT;
+ typedef struct hostent *PHOSTENT;
+ typedef struct hostent *LPHOSTENT;
+
+ typedef struct servent SERVENT;
+ typedef struct servent *PSERVENT;
+ typedef struct servent *LPSERVENT;
+
+ typedef struct protoent PROTOENT;
+ typedef struct protoent *PPROTOENT;
+ typedef struct protoent *LPPROTOENT;
+
+ typedef struct timeval TIMEVAL;
+ typedef struct timeval *PTIMEVAL;
+ typedef struct timeval *LPTIMEVAL;
+
+#define WSAMAKEASYNCREPLY(buflen,error) MAKELONG(buflen,error)
+#define WSAMAKESELECTREPLY(event,error) MAKELONG(event,error)
+#define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam)
+#define WSAGETASYNCERROR(lParam) HIWORD(lParam)
+#define WSAGETSELECTEVENT(lParam) LOWORD(lParam)
+#define WSAGETSELECTERROR(lParam) HIWORD(lParam)
+
+/* #if (_WIN32_WINNT >= 0x0600) */
+#define POLLRDNORM 0x0100
+#define POLLRDBAND 0x0200
+#define POLLIN (POLLRDNORM | POLLRDBAND)
+#define POLLPRI 0x0400
+
+#define POLLWRNORM 0x0010
+#define POLLOUT (POLLWRNORM)
+#define POLLWRBAND 0x0020
+
+#define POLLERR 0x0001
+#define POLLHUP 0x0002
+#define POLLNVAL 0x0004
+
+typedef struct pollfd {
+ SOCKET fd;
+ SHORT events;
+ SHORT revents;
+} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
+
+WINSOCK_API_LINKAGE int WSAAPI WSAPoll(LPWSAPOLLFD fdArray, ULONG fds, INT timeout);
+/* #endif // (_WIN32_WINNT >= 0x0600) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef _NEED_POPPACK
+#include <poppack.h>
+#endif
+
+#ifdef IPV6STRICT
+#include <wsipv6ok.h>
+#endif
+
+#ifndef _WINSOCKAPI_
+#define _WINSOCKAPI_
+#endif
+
+#ifdef _INC_WINSOCK_H
+#include <mswsock.h>
+#endif
+
+#endif
diff --git a/win32/include/winapi/ws2ipdef.h b/win32/include/winapi/ws2ipdef.h
new file mode 100644
index 0000000..1f6c1c0
--- /dev/null
+++ b/win32/include/winapi/ws2ipdef.h
@@ -0,0 +1,21 @@
+#ifndef _WS2IPDEF_H
+#define _WS2IPDEF_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <winsock2.h>
+
+struct ip_mreq {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_interface;
+};
+
+struct ip_mreq_source {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_sourceaddr;
+ struct in_addr imr_interface;
+};
+
+#endif
diff --git a/win32/include/winapi/ws2tcpip.h b/win32/include/winapi/ws2tcpip.h
new file mode 100644
index 0000000..ac45767
--- /dev/null
+++ b/win32/include/winapi/ws2tcpip.h
@@ -0,0 +1,391 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _WS2TCPIP_H
+#define _WS2TCPIP_H
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#include <ws2ipdef.h>
+
+struct ip_msfilter {
+ struct in_addr imsf_multiaddr;
+ struct in_addr imsf_interface;
+ u_long imsf_fmode;
+ u_long imsf_numsrc;
+ struct in_addr imsf_slist[1];
+};
+
+#define IP_MSFILTER_SIZE(numsrc) (sizeof(struct ip_msfilter)-sizeof(struct in_addr) + (numsrc)*sizeof(struct in_addr))
+
+#define MCAST_INCLUDE 0
+#define MCAST_EXCLUDE 1
+
+#define SIO_GET_INTERFACE_LIST _IOR('t',127,u_long)
+
+#define SIO_GET_INTERFACE_LIST_EX _IOR('t',126,u_long)
+#define SIO_SET_MULTICAST_FILTER _IOW('t',125,u_long)
+#define SIO_GET_MULTICAST_FILTER _IOW('t',124 | IOC_IN,u_long)
+
+#define IP_OPTIONS 1
+#define IP_HDRINCL 2
+#define IP_TOS 3
+#define IP_TTL 4
+#define IP_MULTICAST_IF 9
+#define IP_MULTICAST_TTL 10
+#define IP_MULTICAST_LOOP 11
+#define IP_ADD_MEMBERSHIP 12
+#define IP_DROP_MEMBERSHIP 13
+#define IP_DONTFRAGMENT 14
+#define IP_ADD_SOURCE_MEMBERSHIP 15
+#define IP_DROP_SOURCE_MEMBERSHIP 16
+#define IP_BLOCK_SOURCE 17
+#define IP_UNBLOCK_SOURCE 18
+#define IP_PKTINFO 19
+#define IP_RECEIVE_BROADCAST 22
+
+#define IPV6_HDRINCL 2
+#define IPV6_UNICAST_HOPS 4
+#define IPV6_MULTICAST_IF 9
+#define IPV6_MULTICAST_HOPS 10
+#define IPV6_MULTICAST_LOOP 11
+#define IPV6_ADD_MEMBERSHIP 12
+#define IPV6_DROP_MEMBERSHIP 13
+#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
+#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
+#define IPV6_PKTINFO 19
+#define IPV6_HOPLIMIT 21
+#define IPV6_PROTECTION_LEVEL 23
+
+#define PROTECTION_LEVEL_UNRESTRICTED 10
+#define PROTECTION_LEVEL_DEFAULT 20
+#define PROTECTION_LEVEL_RESTRICTED 30
+
+#define UDP_NOCHECKSUM 1
+#define UDP_CHECKSUM_COVERAGE 20
+
+#define TCP_EXPEDITED_1122 0x0002
+
+#ifndef s6_addr
+
+struct in6_addr {
+ __MINGW_EXTENSION union {
+ u_char Byte[16];
+ u_short Word[8];
+ } u;
+};
+
+#define in_addr6 in6_addr
+
+#define _S6_un u
+#define _S6_u8 Byte
+#define s6_addr _S6_un._S6_u8
+
+#define s6_bytes u.Byte
+#define s6_words u.Word
+#endif
+
+typedef struct ipv6_mreq {
+ struct in6_addr ipv6mr_multiaddr;
+ unsigned int ipv6mr_interface;
+} IPV6_MREQ;
+
+struct sockaddr_in6_old {
+ short sin6_family;
+ u_short sin6_port;
+ u_long sin6_flowinfo;
+ struct in6_addr sin6_addr;
+};
+
+struct sockaddr_in6 {
+ short sin6_family;
+ u_short sin6_port;
+ u_long sin6_flowinfo;
+ struct in6_addr sin6_addr;
+ u_long sin6_scope_id;
+};
+
+typedef struct in6_addr IN6_ADDR;
+typedef struct in6_addr *PIN6_ADDR;
+typedef struct in6_addr *LPIN6_ADDR;
+
+typedef struct sockaddr_in6 SOCKADDR_IN6;
+typedef struct sockaddr_in6 *PSOCKADDR_IN6;
+typedef struct sockaddr_in6 *LPSOCKADDR_IN6;
+
+#define SS_PORT(ssp) (((struct sockaddr_in*)(ssp))->sin_port)
+
+#define IN6ADDR_ANY_INIT { 0 }
+#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ extern const struct in6_addr in6addr_any;
+ extern const struct in6_addr in6addr_loopback;
+
+#ifdef __cplusplus
+}
+#endif
+
+#define WS2TCPIP_INLINE __CRT_INLINE
+
+int IN6_ADDR_EQUAL(const struct in6_addr *,const struct in6_addr *);
+int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *);
+int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *);
+int IN6_IS_ADDR_MULTICAST(const struct in6_addr *);
+int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *);
+int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *);
+int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *);
+int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *);
+int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *);
+int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *);
+int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *);
+int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *);
+int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *);
+int IN6ADDR_ISANY(const struct sockaddr_in6 *);
+int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *);
+void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *);
+void IN6_SET_ADDR_LOOPBACK(struct in6_addr *);
+void IN6ADDR_SETANY(struct sockaddr_in6 *);
+void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *);
+
+#ifndef __CRT__NO_INLINE
+WS2TCPIP_INLINE int IN6_ADDR_EQUAL(const struct in6_addr *a,const struct in6_addr *b) { return (memcmp(a,b,sizeof(struct in6_addr))==0); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && (a->s6_words[6]==0) && (a->s6_words[7]==0)); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && (a->s6_words[6]==0) && (a->s6_words[7]==0x0100)); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_MULTICAST(const struct in6_addr *a) { return (a->s6_bytes[0]==0xff); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0x80)); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *a) { return ((a->s6_bytes[0]==0xfe) && ((a->s6_bytes[1] & 0xc0)==0xc0)); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0xffff)); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *a) { return ((a->s6_words[0]==0) && (a->s6_words[1]==0) && (a->s6_words[2]==0) && (a->s6_words[3]==0) && (a->s6_words[4]==0) && (a->s6_words[5]==0) && !((a->s6_words[6]==0) && (a->s6_addr[14]==0) && ((a->s6_addr[15]==0) || (a->s6_addr[15]==1)))); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==1); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==2); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==5); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==8); }
+WS2TCPIP_INLINE int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *a) { return IN6_IS_ADDR_MULTICAST(a) && ((a->s6_bytes[1] & 0xf)==0xe); }
+WS2TCPIP_INLINE int IN6ADDR_ISANY(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_UNSPECIFIED(&a->sin6_addr)); }
+WS2TCPIP_INLINE int IN6ADDR_ISLOOPBACK(const struct sockaddr_in6 *a) { return ((a->sin6_family==AF_INET6) && IN6_IS_ADDR_LOOPBACK(&a->sin6_addr)); }
+WS2TCPIP_INLINE void IN6_SET_ADDR_UNSPECIFIED(struct in6_addr *a) { memset(a->s6_bytes,0,sizeof(struct in6_addr)); }
+WS2TCPIP_INLINE void IN6_SET_ADDR_LOOPBACK(struct in6_addr *a) {
+ memset(a->s6_bytes,0,sizeof(struct in6_addr));
+ a->s6_bytes[15] = 1;
+}
+WS2TCPIP_INLINE void IN6ADDR_SETANY(struct sockaddr_in6 *a) {
+ a->sin6_family = AF_INET6;
+ a->sin6_port = 0;
+ a->sin6_flowinfo = 0;
+ IN6_SET_ADDR_UNSPECIFIED(&a->sin6_addr);
+ a->sin6_scope_id = 0;
+}
+WS2TCPIP_INLINE void IN6ADDR_SETLOOPBACK(struct sockaddr_in6 *a) {
+ a->sin6_family = AF_INET6;
+ a->sin6_port = 0;
+ a->sin6_flowinfo = 0;
+ IN6_SET_ADDR_LOOPBACK(&a->sin6_addr);
+ a->sin6_scope_id = 0;
+}
+#endif /* !__CRT__NO_INLINE */
+
+typedef union sockaddr_gen {
+ struct sockaddr Address;
+ struct sockaddr_in AddressIn;
+ struct sockaddr_in6_old AddressIn6;
+} sockaddr_gen;
+
+typedef struct _INTERFACE_INFO {
+ u_long iiFlags;
+ sockaddr_gen iiAddress;
+ sockaddr_gen iiBroadcastAddress;
+ sockaddr_gen iiNetmask;
+} INTERFACE_INFO,*LPINTERFACE_INFO;
+
+typedef struct _INTERFACE_INFO_EX {
+ u_long iiFlags;
+ SOCKET_ADDRESS iiAddress;
+ SOCKET_ADDRESS iiBroadcastAddress;
+ SOCKET_ADDRESS iiNetmask;
+} INTERFACE_INFO_EX,*LPINTERFACE_INFO_EX;
+
+#define IFF_UP 0x00000001
+#define IFF_BROADCAST 0x00000002
+#define IFF_LOOPBACK 0x00000004
+#define IFF_POINTTOPOINT 0x00000008
+#define IFF_MULTICAST 0x00000010
+
+typedef struct in_pktinfo {
+ IN_ADDR ipi_addr;
+ UINT ipi_ifindex;
+} IN_PKTINFO;
+
+C_ASSERT(sizeof(IN_PKTINFO)==8);
+
+typedef struct in6_pktinfo {
+ IN6_ADDR ipi6_addr;
+ UINT ipi6_ifindex;
+} IN6_PKTINFO;
+
+C_ASSERT(sizeof(IN6_PKTINFO)==20);
+
+#define EAI_AGAIN WSATRY_AGAIN
+#define EAI_BADFLAGS WSAEINVAL
+#define EAI_FAIL WSANO_RECOVERY
+#define EAI_FAMILY WSAEAFNOSUPPORT
+#define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
+
+#define EAI_NONAME WSAHOST_NOT_FOUND
+#define EAI_SERVICE WSATYPE_NOT_FOUND
+#define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
+
+#define EAI_NODATA EAI_NONAME
+
+typedef struct addrinfo {
+ int ai_flags;
+ int ai_family;
+ int ai_socktype;
+ int ai_protocol;
+ size_t ai_addrlen;
+ char *ai_canonname;
+ struct sockaddr *ai_addr;
+ struct addrinfo *ai_next;
+} ADDRINFOA,*PADDRINFOA;
+
+typedef struct addrinfoW {
+ int ai_flags;
+ int ai_family;
+ int ai_socktype;
+ int ai_protocol;
+ size_t ai_addrlen;
+ PWSTR ai_canonname;
+ struct sockaddr *ai_addr;
+ struct addrinfoW *ai_next;
+} ADDRINFOW,*PADDRINFOW;
+
+#ifdef UNICODE
+typedef ADDRINFOW ADDRINFOT,*PADDRINFOT;
+#else
+typedef ADDRINFOA ADDRINFOT,*PADDRINFOT;
+#endif
+
+typedef ADDRINFOA ADDRINFO,*LPADDRINFO;
+
+#define AI_PASSIVE 0x1
+#define AI_CANONNAME 0x2
+#define AI_NUMERICHOST 0x4
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef UNICODE
+#define GetAddrInfo GetAddrInfoW
+#else
+#define GetAddrInfo GetAddrInfoA
+#endif
+
+ WINSOCK_API_LINKAGE int WSAAPI getaddrinfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res);
+ WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoW(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult);
+
+#define GetAddrInfoA getaddrinfo
+
+#if INCL_WINSOCK_API_TYPEDEFS
+ typedef int (WSAAPI *LPFN_GETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res);
+ typedef int (WSAAPI *LPFN_GETADDRINFOW)(PCWSTR pNodeName,PCWSTR pServiceName,const ADDRINFOW *pHints,PADDRINFOW *ppResult);
+
+#define LPFN_GETADDRINFOA LPFN_GETADDRINFO
+
+#ifdef UNICODE
+#define LPFN_GETADDRINFOT LPFN_GETADDRINFOW
+#else
+#define LPFN_GETADDRINFOT LPFN_GETADDRINFOA
+#endif
+#endif
+
+#ifdef UNICODE
+#define FreeAddrInfo FreeAddrInfoW
+#else
+#define FreeAddrInfo FreeAddrInfoA
+#endif
+
+ WINSOCK_API_LINKAGE void WSAAPI freeaddrinfo(LPADDRINFO pAddrInfo);
+ WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoW(PADDRINFOW pAddrInfo);
+
+#define FreeAddrInfoA freeaddrinfo
+
+#if INCL_WINSOCK_API_TYPEDEFS
+ typedef void (WSAAPI *LPFN_FREEADDRINFO)(struct addrinfo *ai);
+ typedef void (WSAAPI *LPFN_FREEADDRINFOW)(PADDRINFOW pAddrInfo);
+
+#define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO
+
+#ifdef UNICODE
+#define LPFN_FREEADDRINFOT LPFN_FREEADDRINFOW
+#else
+#define LPFN_FREEADDRINFOT LPFN_FREEADDRINFOA
+#endif
+#endif
+
+#pragma push_macro("socklen_t")
+#undef socklen_t
+
+ typedef int socklen_t;
+
+#ifdef UNICODE
+#define GetNameInfo GetNameInfoW
+#else
+#define GetNameInfo GetNameInfoA
+#endif
+
+ WINSOCK_API_LINKAGE int WSAAPI getnameinfo(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags);
+ WINSOCK_API_LINKAGE INT WSAAPI GetNameInfoW(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags);
+
+#define GetNameInfoA getnameinfo
+
+#if INCL_WINSOCK_API_TYPEDEFS
+ typedef int (WSAAPI *LPFN_GETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,DWORD hostlen,char *serv,DWORD servlen,int flags);
+ typedef INT (WSAAPI *LPFN_GETNAMEINFOW)(const SOCKADDR *pSockaddr,socklen_t SockaddrLength,PWCHAR pNodeBuffer,DWORD NodeBufferSize,PWCHAR pServiceBuffer,DWORD ServiceBufferSize,INT Flags);
+
+#define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO
+
+#ifdef UNICODE
+#define LPFN_GETNAMEINFOT LPFN_GETNAMEINFOW
+#else
+#define LPFN_GETNAMEINFOT LPFN_GETNAMEINFOA
+#endif
+#endif
+
+#pragma pop_macro("socklen_t")
+
+#ifdef UNICODE
+#define gai_strerror gai_strerrorW
+#else
+#define gai_strerror gai_strerrorA
+#endif
+
+#define GAI_STRERROR_BUFFER_SIZE 1024
+
+char *gai_strerrorA (int);
+WCHAR *gai_strerrorW(int);
+
+#define NI_MAXHOST 1025
+#define NI_MAXSERV 32
+
+#define INET_ADDRSTRLEN 22
+#define INET6_ADDRSTRLEN 65
+
+#define NI_NOFQDN 0x01
+#define NI_NUMERICHOST 0x02
+#define NI_NAMEREQD 0x04
+#define NI_NUMERICSERV 0x08
+#define NI_DGRAM 0x10
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif