Jon Griffiths | 11b26f0 | 2004-04-23 23:28:04 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2004 Jon Griffiths |
| 3 | * |
| 4 | * This library is free software; you can redistribute it and/or |
| 5 | * modify it under the terms of the GNU Lesser General Public |
| 6 | * License as published by the Free Software Foundation; either |
| 7 | * version 2.1 of the License, or (at your option) any later version. |
| 8 | * |
| 9 | * This library is distributed in the hope that it will be useful, |
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 12 | * Lesser General Public License for more details. |
| 13 | * |
| 14 | * You should have received a copy of the GNU Lesser General Public |
| 15 | * License along with this library; if not, write to the Free Software |
Jonathan Ernst | 360a3f9 | 2006-05-18 14:49:52 +0200 | [diff] [blame] | 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
Jon Griffiths | 11b26f0 | 2004-04-23 23:28:04 +0000 | [diff] [blame] | 17 | */ |
| 18 | |
| 19 | #ifndef MAPIUTIL_H_ |
| 20 | #define MAPIUTIL_H_ |
| 21 | |
| 22 | #include <mapix.h> |
| 23 | |
| 24 | #ifdef __cplusplus |
| 25 | extern "C" { |
| 26 | #endif |
| 27 | |
| 28 | #define TAD_ALL_ROWS 1 /* Delete all rows */ |
| 29 | |
| 30 | LPMALLOC WINAPI MAPIGetDefaultMalloc(void); |
| 31 | |
| 32 | #define SOF_UNIQUEFILENAME 0x80000000U /* Create a unique (temporary) filename */ |
| 33 | |
| 34 | #if defined (UNICODE) || defined (__WINESRC__) |
| 35 | typedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER, |
| 36 | ULONG,LPWSTR,LPWSTR,LPSTREAM*); |
| 37 | HRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER, |
| 38 | ULONG,LPWSTR,LPWSTR,LPSTREAM*); |
| 39 | #else |
| 40 | typedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER, |
| 41 | ULONG,LPSTR,LPSTR,LPSTREAM*); |
| 42 | HRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER, |
| 43 | ULONG,LPSTR,LPSTR,LPSTREAM*); |
| 44 | #endif |
| 45 | #define OPENSTREAMONFILE "OpenStreamOnFile" |
| 46 | |
| 47 | BOOL WINAPI FEqualNames(LPMAPINAMEID,LPMAPINAMEID); |
| 48 | |
Alexandre Julliard | b8d3075 | 2005-07-26 18:32:53 +0000 | [diff] [blame] | 49 | typedef struct IPropData *LPPROPDATA; |
Jon Griffiths | 11b26f0 | 2004-04-23 23:28:04 +0000 | [diff] [blame] | 50 | |
| 51 | #define IPROP_READONLY 0x00001U |
| 52 | #define IPROP_READWRITE 0x00002U |
| 53 | #define IPROP_CLEAN 0x10000U |
| 54 | #define IPROP_DIRTY 0x20000U |
| 55 | |
| 56 | SCODE WINAPI CreateIProp(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*, |
| 57 | LPVOID,LPPROPDATA*); |
| 58 | SCODE WINAPI PropCopyMore(LPSPropValue,LPSPropValue,ALLOCATEMORE*,LPVOID); |
| 59 | ULONG WINAPI UlPropSize(LPSPropValue); |
| 60 | VOID WINAPI GetInstance(LPSPropValue,LPSPropValue,ULONG); |
| 61 | BOOL WINAPI FPropContainsProp(LPSPropValue,LPSPropValue,ULONG); |
| 62 | BOOL WINAPI FPropCompareProp(LPSPropValue,ULONG,LPSPropValue); |
| 63 | LONG WINAPI LPropCompareProp(LPSPropValue,LPSPropValue); |
| 64 | |
| 65 | HRESULT WINAPI HrAddColumns(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER,LPFREEBUFFER); |
| 66 | HRESULT WINAPI HrAddColumnsEx(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER, |
| 67 | LPFREEBUFFER,void (*)(LPSPropTagArray)); |
| 68 | HRESULT WINAPI HrAllocAdviseSink(LPNOTIFCALLBACK,LPVOID,LPMAPIADVISESINK*); |
| 69 | HRESULT WINAPI HrThisThreadAdviseSink(LPMAPIADVISESINK,LPMAPIADVISESINK*); |
| 70 | HRESULT WINAPI HrDispatchNotifications (ULONG); |
| 71 | |
| 72 | ULONG WINAPI UlAddRef(void*); |
| 73 | ULONG WINAPI UlRelease(void*); |
| 74 | |
| 75 | HRESULT WINAPI HrGetOneProp(LPMAPIPROP,ULONG,LPSPropValue*); |
| 76 | HRESULT WINAPI HrSetOneProp(LPMAPIPROP,LPSPropValue); |
| 77 | BOOL WINAPI FPropExists(LPMAPIPROP,ULONG); |
| 78 | void WINAPI FreePadrlist(LPADRLIST); |
| 79 | void WINAPI FreeProws(LPSRowSet); |
| 80 | HRESULT WINAPI HrQueryAllRows(LPMAPITABLE,LPSPropTagArray,LPSRestriction, |
| 81 | LPSSortOrderSet,LONG,LPSRowSet*); |
| 82 | LPSPropValue WINAPI PpropFindProp(LPSPropValue,ULONG,ULONG); |
| 83 | |
| 84 | #if defined (UNICODE) || defined (__WINESRC__) |
| 85 | BOOL WINAPI FBinFromHex(LPWSTR,LPBYTE); |
| 86 | SCODE WINAPI ScBinFromHexBounded(LPWSTR,LPBYTE,ULONG); |
| 87 | void WINAPI HexFromBin(LPBYTE,int,LPWSTR); |
| 88 | ULONG WINAPI UlFromSzHex(LPCWSTR); |
| 89 | LPWSTR WINAPI SzFindCh(LPCWSTR,USHORT); |
| 90 | LPWSTR WINAPI SzFindLastCh(LPCWSTR,USHORT); |
| 91 | LPWSTR WINAPI SzFindSz(LPCWSTR,LPCWSTR); |
| 92 | UINT WINAPI UFromSz(LPCSTR); |
| 93 | #else |
| 94 | BOOL WINAPI FBinFromHex(LPSTR,LPBYTE); |
| 95 | SCODE WINAPI ScBinFromHexBounded(LPSTR,LPBYTE,ULONG); |
| 96 | void WINAPI HexFromBin(LPBYTE,int,LPSTR); |
| 97 | ULONG WINAPI UlFromSzHex(LPCSTR); |
| 98 | LPSTR WINAPI SzFindCh(LPCSTR,USHORT); |
| 99 | LPSTR WINAPI SzFindLastCh(LPCSTR,USHORT); |
| 100 | LPSTR WINAPI SzFindSz(LPCSTR,LPCSTR); |
| 101 | UINT WINAPI UFromSz(LPCSTR); |
| 102 | #endif |
| 103 | |
| 104 | SCODE WINAPI ScInitMapiUtil(ULONG); |
| 105 | void WINAPI DeinitMapiUtil(void); |
| 106 | |
| 107 | #define szHrDispatchNotifications "_HrDispatchNotifications@4" |
| 108 | #define szScCreateConversationIndex "_ScCreateConversationIndex@16" |
| 109 | |
| 110 | typedef HRESULT (WINAPI DISPATCHNOTIFICATIONS)(ULONG); |
| 111 | typedef DISPATCHNOTIFICATIONS *LPDISPATCHNOTIFICATIONS; |
| 112 | typedef SCODE (WINAPI CREATECONVERSATIONINDEX)(ULONG,LPBYTE,ULONG*,LPBYTE*); |
| 113 | typedef CREATECONVERSATIONINDEX *LPCREATECONVERSATIONINDEX; |
| 114 | |
Alexandre Julliard | b8d3075 | 2005-07-26 18:32:53 +0000 | [diff] [blame] | 115 | typedef struct ITableData *LPTABLEDATA; |
Jon Griffiths | 11b26f0 | 2004-04-23 23:28:04 +0000 | [diff] [blame] | 116 | |
| 117 | typedef void (WINAPI CALLERRELEASE)(ULONG,LPTABLEDATA,LPMAPITABLE); |
| 118 | |
| 119 | /***************************************************************************** |
| 120 | * ITableData interface |
| 121 | * |
| 122 | * The underlying table data structure for IMAPITable. |
| 123 | */ |
| 124 | #define INTERFACE ITableData |
Alexandre Julliard | 5d0160e | 2004-10-05 04:38:15 +0000 | [diff] [blame] | 125 | DECLARE_INTERFACE_(ITableData,IUnknown) |
| 126 | { |
| 127 | /*** IUnknown methods ***/ |
| 128 | STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; |
| 129 | STDMETHOD_(ULONG,AddRef)(THIS) PURE; |
| 130 | STDMETHOD_(ULONG,Release)(THIS) PURE; |
| 131 | /*** ITableData methods ***/ |
| 132 | STDMETHOD(HrGetView)(THIS_ LPSSortOrderSet lpSort, CALLERRELEASE *lpRel, |
| 133 | ULONG ulData, LPMAPITABLE *lppTable) PURE; |
| 134 | STDMETHOD(HrModifyRow)(THIS_ LPSRow lpRow) PURE; |
| 135 | STDMETHOD(HrDeleteRow)(THIS_ LPSPropValue lpKey) PURE; |
| 136 | STDMETHOD(HrQueryRow)(THIS_ LPSPropValue lpKey, LPSRow *lppRow, ULONG *lpRowNum) PURE; |
| 137 | STDMETHOD(HrEnumRow)(THIS_ ULONG ulRowNum, LPSRow *lppRow) PURE; |
| 138 | STDMETHOD(HrNotify)(THIS_ ULONG ulFlags, ULONG cValues, LPSPropValue lpValues) PURE; |
| 139 | STDMETHOD(HrInsertRow)(THIS_ ULONG ulRow, LPSRow lpRow) PURE; |
| 140 | STDMETHOD(HrModifyRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows) PURE; |
Jon Griffiths | 11b26f0 | 2004-04-23 23:28:04 +0000 | [diff] [blame] | 141 | STDMETHOD(HrDeleteRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows, ULONG *lpCount) PURE; |
Alexandre Julliard | 5d0160e | 2004-10-05 04:38:15 +0000 | [diff] [blame] | 142 | }; |
Jon Griffiths | 11b26f0 | 2004-04-23 23:28:04 +0000 | [diff] [blame] | 143 | #undef INTERFACE |
| 144 | |
Francois Gouget | 52ecbf7 | 2004-10-04 19:35:40 +0000 | [diff] [blame] | 145 | #if !defined(__cplusplus) || defined(CINTERFACE) |
Jon Griffiths | 11b26f0 | 2004-04-23 23:28:04 +0000 | [diff] [blame] | 146 | /*** IUnknown methods ***/ |
| 147 | #define ITableData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) |
| 148 | #define ITableData_AddRef(p) (p)->lpVtbl->AddRef(p) |
| 149 | #define ITableData_Release(p) (p)->lpVtbl->Release(p) |
| 150 | /*** ITableData methods ***/ |
| 151 | #define ITableData_HrGetView(p,a,b,c,d) (p)->lpVtbl->HrGetView(p,a,b,c,d) |
| 152 | #define ITableData_HrModifyRow(p,a) (p)->lpVtbl->HrModifyRow(p,a) |
| 153 | #define ITableData_HrDeleteRow(p,a) (p)->lpVtbl->HrDeleteRow(p,a) |
| 154 | #define ITableData_HrQueryRow(p,a,b,c) (p)->lpVtbl->HrQueryRow(p,a,b,c) |
| 155 | #define ITableData_HrEnumRow(p,a,b) (p)->lpVtbl->HrEnumRow(p,a,b) |
| 156 | #define ITableData_HrNotify(p,a,b,c) (p)->lpVtbl->HrNotify(p,a,b,c) |
| 157 | #define ITableData_HrInsertRow(p,a,b) (p)->lpVtbl->HrInsertRow(p,a,b) |
| 158 | #define ITableData_HrModifyRows(p,a,b) (p)->lpVtbl->HrModifyRows(p,a,b) |
| 159 | #define ITableData_HrDeleteRows(p,a,b,c) (p)->lpVtbl->HrDeleteRows(p,a,b,c) |
| 160 | #endif |
| 161 | |
| 162 | SCODE WINAPI CreateTable(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*, |
| 163 | LPVOID,ULONG,ULONG,LPSPropTagArray,LPTABLEDATA*); |
| 164 | |
| 165 | SCODE WINAPI ScCountNotifications(int,LPNOTIFICATION,ULONG*); |
| 166 | SCODE WINAPI ScCountProps(int,LPSPropValue,ULONG*); |
| 167 | SCODE WINAPI ScCopyNotifications(int,LPNOTIFICATION,LPVOID,ULONG*); |
| 168 | SCODE WINAPI ScCopyProps(int,LPSPropValue,LPVOID,ULONG*); |
| 169 | SCODE WINAPI ScDupPropset(int,LPSPropValue,LPALLOCATEBUFFER,LPSPropValue*); |
| 170 | SCODE WINAPI ScRelocNotifications(int,LPNOTIFICATION,LPVOID,LPVOID,ULONG*); |
| 171 | SCODE WINAPI ScRelocProps(int,LPSPropValue,LPVOID,LPVOID,ULONG*); |
| 172 | |
| 173 | LPSPropValue WINAPI LpValFindProp(ULONG,ULONG,LPSPropValue); |
| 174 | |
| 175 | static inline FILETIME FtAddFt(FILETIME ftLeft, FILETIME ftRight) |
| 176 | { |
| 177 | LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight; |
| 178 | union { FILETIME ft; LONG64 ll; } ftmap; |
| 179 | ftmap.ll = *pl + *pr; |
| 180 | return ftmap.ft; |
| 181 | } |
| 182 | |
| 183 | static inline FILETIME FtSubFt(FILETIME ftLeft, FILETIME ftRight) |
| 184 | { |
| 185 | LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight; |
| 186 | union { FILETIME ft; LONG64 ll; } ftmap; |
| 187 | ftmap.ll = *pl - *pr; |
| 188 | return ftmap.ft; |
| 189 | } |
| 190 | |
| 191 | static inline FILETIME FtNegFt(FILETIME ftLeft) |
| 192 | { |
| 193 | LONG64 *p = (LONG64*)&ftLeft; |
| 194 | union { FILETIME ft; LONG64 ll; } ftmap; |
| 195 | ftmap.ll = -*p; |
| 196 | return ftmap.ft; |
| 197 | } |
| 198 | |
| 199 | static inline FILETIME FtMulDw(DWORD dwLeft, FILETIME ftRight) |
| 200 | { |
| 201 | LONG64 l = (LONG64)dwLeft, *pr = (LONG64*)&ftRight; |
| 202 | union { FILETIME ft; LONG64 ll; } ftmap; |
| 203 | ftmap.ll = l * (*pr); |
| 204 | return ftmap.ft; |
| 205 | } |
| 206 | |
| 207 | static inline FILETIME FtMulDwDw(DWORD dwLeft, DWORD dwRight) |
| 208 | { |
| 209 | LONG64 l = (LONG64)dwLeft, r = (LONG64)dwRight; |
| 210 | union { FILETIME ft; LONG64 ll; } ftmap; |
| 211 | ftmap.ll = l * r; |
| 212 | return ftmap.ft; |
| 213 | } |
| 214 | |
Jon Griffiths | ee9777e | 2004-05-03 20:19:35 +0000 | [diff] [blame] | 215 | /***************************************************************************** |
| 216 | * IPropData interface |
| 217 | * |
| 218 | */ |
| 219 | #define INTERFACE IPropData |
Alexandre Julliard | 5d0160e | 2004-10-05 04:38:15 +0000 | [diff] [blame] | 220 | DECLARE_INTERFACE_(IPropData,IMAPIProp) |
| 221 | { |
| 222 | /*** IUnknown methods ***/ |
| 223 | STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; |
| 224 | STDMETHOD_(ULONG,AddRef)(THIS) PURE; |
| 225 | STDMETHOD_(ULONG,Release)(THIS) PURE; |
| 226 | /*** IMAPIProp methods ***/ |
| 227 | STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE; |
| 228 | STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE; |
| 229 | STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE; |
| 230 | STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE; |
| 231 | STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE; |
| 232 | STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE; |
| 233 | STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE; |
| 234 | STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam, |
| 235 | LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags, |
| 236 | LPSPropProblemArray *lppProbs) PURE; |
| 237 | STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress, |
| 238 | LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE; |
| 239 | STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount, |
| 240 | LPMAPINAMEID **lpppNames) PURE; |
| 241 | STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE; |
| 242 | /*** IPropData methods ***/ |
| 243 | STDMETHOD(HrSetObjAccess)(THIS_ ULONG ulAccess) PURE; |
| 244 | STDMETHOD(HrSetPropAccess)(THIS_ LPSPropTagArray lpPropTags, ULONG *lpAccess) PURE; |
| 245 | STDMETHOD(HrGetPropAccess)(THIS_ LPSPropTagArray *lppPropTags, ULONG **lppAccess) PURE; |
Jon Griffiths | ee9777e | 2004-05-03 20:19:35 +0000 | [diff] [blame] | 246 | STDMETHOD(HrAddObjProps)(THIS_ LPSPropTagArray lppPropTags, LPSPropProblemArray *lppProbs) PURE; |
Alexandre Julliard | 5d0160e | 2004-10-05 04:38:15 +0000 | [diff] [blame] | 247 | }; |
Jon Griffiths | ee9777e | 2004-05-03 20:19:35 +0000 | [diff] [blame] | 248 | #undef INTERFACE |
| 249 | |
Francois Gouget | 52ecbf7 | 2004-10-04 19:35:40 +0000 | [diff] [blame] | 250 | #if !defined(__cplusplus) || defined(CINTERFACE) |
Jon Griffiths | ee9777e | 2004-05-03 20:19:35 +0000 | [diff] [blame] | 251 | /*** IUnknown methods ***/ |
| 252 | #define IPropData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) |
| 253 | #define IPropData_AddRef(p) (p)->lpVtbl->AddRef(p) |
| 254 | #define IPropData_Release(p) (p)->lpVtbl->Release(p) |
| 255 | /*** IMAPIProp methods ***/ |
| 256 | #define IPropData_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c) |
| 257 | #define IPropData_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a) |
| 258 | #define IPropData_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d) |
| 259 | #define IPropData_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b) |
| 260 | #define IPropData_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e) |
| 261 | #define IPropData_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c) |
| 262 | #define IPropData_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b) |
| 263 | #define IPropData_CopyTo(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i) |
| 264 | #define IPropData_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g) |
| 265 | #define IPropData_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e) |
| 266 | #define IPropData_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d) |
| 267 | #define IPropData_HrSetObjAccess(p,a) (p)->lpVtbl->HrSetObjAccess(p,a) |
| 268 | #define IPropData_HrSetPropAccess(p,a,b) (p)->lpVtbl->HrSetPropAccess(p,a,b) |
| 269 | #define IPropData_HrGetPropAccess(p,a,b) (p)->lpVtbl->HrGetPropAccess(p,a,b) |
| 270 | #define IPropData_HrAddObjProps(p,a,b) (p)->lpVtbl->HrAddObjProps(p,a,b) |
| 271 | #endif |
| 272 | |
Jon Griffiths | 11b26f0 | 2004-04-23 23:28:04 +0000 | [diff] [blame] | 273 | #ifdef __cplusplus |
| 274 | } |
| 275 | #endif |
| 276 | |
| 277 | #endif /* MAPIUTIL_H_ */ |