fix NAMELESSUNION support for struct DECIMAL
[reactos.git] / reactos / w32api / include / wtypes.h
1 #include <rpc.h>
2 #include <rpcndr.h>
3
4 #ifndef _WTYPES_H
5 #define _WTYPES_H
6 #if __GNUC__ >=3
7 #pragma GCC system_header
8 #endif
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14 #ifdef NONAMELESSUNION
15 #define DEC_SIGN(d) ((d)->DUMMYUNIONNAME.DUMMYSTRUCTNAME.sign)
16 #define DEC_SCALE(d) ((d)->DUMMYUNIONNAME.DUMMYSTRUCTNAME.scale)
17 #define DEC_SIGNSCALE(d) ((d)->DUMMYUNIONNAME.signscale)
18 #define DEC_MID32(d) ((d)->DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.Mid32)
19 #define DEC_LO32(d) ((d)->DUMMYUNIONNAME2.DUMMYSTRUCTNAME2.Lo32)
20 #define DEC_LO64(d) ((d)->DUMMYUNIONNAME2.Lo64)
21 #else
22 #define DEC_SIGN(d) ((d)->sign)
23 #define DEC_SCALE(d) ((d)->scale)
24 #define DEC_SIGNSCALE(d) ((d)->signscale)
25 #define DEC_MID32(d) ((d)->Mid32)
26 #define DEC_LO32(d) ((d)->Lo32)
27 #define DEC_LO64(d) ((d)->Lo64)
28 #endif
29 #define DEC_HI32(d) ((d)->Hi32)
30
31 #define IID_NULL GUID_NULL
32 #define CLSID_NULL GUID_NULL
33 #define CBPCLIPDATA(d) ((d).cbSize-sizeof((d).ulClipFmt))
34 #define DECIMAL_NEG ((BYTE)0x80)
35 #define DECIMAL_SETZERO(d) {DEC_LO64(&d)=DEC_HI32(&d)=DEC_SIGNSCALE(&d)=0;}
36 #define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x01
37 #define ROTFLAGS_ALLOWANYCLIENT 0x02
38
39 #ifndef __BLOB_T_DEFINED /* also in winsock2.h */
40 #define __BLOB_T_DEFINED
41 typedef struct _BLOB {
42 ULONG cbSize;
43 BYTE *pBlobData;
44 } BLOB,*PBLOB,*LPBLOB;
45 #endif
46 typedef enum tagDVASPECT {
47 DVASPECT_CONTENT=1,
48 DVASPECT_THUMBNAIL=2,
49 DVASPECT_ICON=4,
50 DVASPECT_DOCPRINT=8
51 } DVASPECT;
52 typedef enum tagDVASPECT2 {
53 DVASPECT_OPAQUE=16,
54 DVASPECT_TRANSPARENT=32
55 } DVASPECT2;
56 typedef enum tagSTATFLAG {
57 STATFLAG_DEFAULT=0,
58 STATFLAG_NONAME=1
59 } STATFLAG;
60 typedef enum tagMEMCTX {
61 MEMCTX_LOCAL=0,
62 MEMCTX_TASK,
63 MEMCTX_SHARED,
64 MEMCTX_MACSYSTEM,
65 MEMCTX_UNKNOWN=-1,
66 MEMCTX_SAME=-2
67 } MEMCTX;
68 typedef enum tagMSHCTX {
69 MSHCTX_LOCAL=0,
70 MSHCTX_NOSHAREDMEM,
71 MSHCTX_DIFFERENTMACHINE,
72 MSHCTX_INPROC,
73 MSHCTX_CROSSCTX
74 } MSHCTX;
75 typedef enum tagCLSCTX {
76 CLSCTX_INPROC_SERVER=1,CLSCTX_INPROC_HANDLER=2,CLSCTX_LOCAL_SERVER=4,
77 CLSCTX_INPROC_SERVER16=8,CLSCTX_REMOTE_SERVER=16
78 } CLSCTX;
79 typedef enum tagMSHLFLAGS {
80 MSHLFLAGS_NORMAL,MSHLFLAGS_TABLESTRONG,MSHLFLAGS_TABLEWEAK
81 } MSHLFLAGS;
82 typedef struct _FLAGGED_WORD_BLOB {
83 unsigned long fFlags;
84 unsigned long clSize;
85 unsigned short asData[1];
86 }FLAGGED_WORD_BLOB;
87
88 #ifndef OLE2ANSI
89 typedef WCHAR OLECHAR;
90 typedef LPWSTR LPOLESTR;
91 typedef LPCWSTR LPCOLESTR;
92 #define OLESTR(s) L##s
93 #else
94 typedef char OLECHAR;
95 typedef LPSTR LPOLESTR;
96 typedef LPCSTR LPCOLESTR;
97 #define OLESTR(s) s
98 #endif
99 typedef unsigned short VARTYPE;
100 typedef short VARIANT_BOOL;
101 typedef VARIANT_BOOL _VARIANT_BOOL;
102 #define VARIANT_TRUE ((VARIANT_BOOL)0xffff)
103 #define VARIANT_FALSE ((VARIANT_BOOL)0)
104 typedef OLECHAR *BSTR;
105 typedef FLAGGED_WORD_BLOB *wireBSTR;
106 typedef BSTR *LPBSTR;
107 typedef LONG SCODE;
108 typedef void *HCONTEXT;
109 typedef union tagCY {
110 _ANONYMOUS_STRUCT struct {
111 unsigned long Lo;
112 long Hi;
113 }_STRUCT_NAME(s);
114 LONGLONG int64;
115 } CY;
116 typedef double DATE;
117 typedef struct tagBSTRBLOB {
118 ULONG cbSize;
119 PBYTE pData;
120 }BSTRBLOB;
121 typedef struct tagBSTRBLOB *LPBSTRBLOB;
122 typedef struct tagCLIPDATA {
123 ULONG cbSize;
124 long ulClipFmt;
125 PBYTE pClipData;
126 }CLIPDATA;
127 typedef enum tagSTGC {
128 STGC_DEFAULT,STGC_OVERWRITE,STGC_ONLYIFCURRENT,
129 STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE
130 }STGC;
131 typedef enum tagSTGMOVE {
132 STGMOVE_MOVE,STGMOVE_COPY,STGMOVE_SHALLOWCOPY
133 }STGMOVE;
134 enum VARENUM {
135 VT_EMPTY,VT_NULL,VT_I2,VT_I4,VT_R4,VT_R8,VT_CY,VT_DATE,VT_BSTR,VT_DISPATCH,
136 VT_ERROR,VT_BOOL,VT_VARIANT,VT_UNKNOWN,VT_DECIMAL,VT_I1=16,VT_UI1,VT_UI2,VT_UI4,VT_I8,
137 VT_UI8,VT_INT,VT_UINT,VT_VOID,VT_HRESULT,VT_PTR,VT_SAFEARRAY,VT_CARRAY,VT_USERDEFINED,
138 VT_LPSTR,VT_LPWSTR,VT_RECORD=36,VT_INT_PTR=37,VT_UINT_PTR=38,VT_FILETIME=64,VT_BLOB,VT_STREAM,VT_STORAGE,VT_STREAMED_OBJECT,
139 VT_STORED_OBJECT,VT_BLOB_OBJECT,VT_CF,VT_CLSID,VT_BSTR_BLOB=0xfff,VT_VECTOR=0x1000,
140 VT_ARRAY=0x2000,VT_BYREF=0x4000,VT_RESERVED=0x8000,VT_ILLEGAL= 0xffff,VT_ILLEGALMASKED=0xfff,
141 VT_TYPEMASK=0xfff
142 };
143
144 typedef struct _BYTE_SIZEDARR {
145 unsigned long clSize;
146 byte *pData;
147 }BYTE_SIZEDARR;
148 typedef struct _SHORT_SIZEDARR {
149 unsigned long clSize;
150 unsigned short *pData;
151 }WORD_SIZEDARR;
152 typedef struct _LONG_SIZEDARR {
153 unsigned long clSize;
154 unsigned long *pData;
155 }DWORD_SIZEDARR;
156 typedef struct _HYPER_SIZEDARR {
157 unsigned long clSize;
158 hyper *pData;
159 }HYPER_SIZEDARR;
160 typedef double DOUBLE;
161 typedef struct tagDEC {
162 USHORT wReserved;
163 _ANONYMOUS_UNION union {
164 _ANONYMOUS_STRUCT struct {
165 BYTE scale;
166 BYTE sign;
167 }_STRUCT_NAME(s);
168 USHORT signscale;
169 } DUMMYUNIONNAME;
170 ULONG Hi32;
171 _ANONYMOUS_UNION union {
172 _ANONYMOUS_STRUCT struct {
173 ULONG Lo32;
174 ULONG Mid32;
175 }_STRUCT_NAME(s2);
176 ULONGLONG Lo64;
177 } DUMMYUNIONNAME2;
178 } DECIMAL;
179 typedef void *HMETAFILEPICT;
180 #ifdef __cplusplus
181 }
182 #endif
183 #endif