/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #include #include #ifndef _OBJBASE_H_ #define _OBJBASE_H_ #include #ifdef _OLE32_ #define WINOLEAPI EXTERN_C HRESULT WINAPI #define WINOLEAPI_(type) EXTERN_C type WINAPI #else #define WINOLEAPI EXTERN_C DECLSPEC_IMPORT HRESULT WINAPI #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type WINAPI #endif #if defined(__cplusplus) && !defined(CINTERFACE) #ifndef __OBJC__ #undef interface #define interface struct #endif #define __STRUCT__ struct #define STDMETHOD(method) virtual HRESULT WINAPI method #define STDMETHOD_(type,method) virtual type WINAPI method #define STDMETHODV(method) virtual HRESULT STDMETHODVCALLTYPE method #define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method #define PURE = 0 #define THIS_ #define THIS void #define DECLARE_INTERFACE(iface) __STRUCT__ iface #define DECLARE_INTERFACE_(iface,baseiface) __STRUCT__ iface : public baseiface #define DECLARE_INTERFACE_IID_(iface,baseiface,iidiface) __STRUCT__ iface : public baseiface #if !defined(BEGIN_INTERFACE) #define BEGIN_INTERFACE #define END_INTERFACE #endif #else #ifndef __OBJC__ #undef interface #define interface struct #endif #define STDMETHOD(method) HRESULT (WINAPI *method) #define STDMETHOD_(type,method) type (WINAPI *method) #define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE *method) #define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE *method) #if !defined(BEGIN_INTERFACE) #define BEGIN_INTERFACE #define END_INTERFACE #endif #define PURE #define THIS_ INTERFACE *This, #define THIS INTERFACE *This #ifdef CONST_VTABLE #undef CONST_VTBL #define CONST_VTBL const #define DECLARE_INTERFACE(iface) typedef struct iface { const struct iface##Vtbl *lpVtbl; } iface; typedef const struct iface##Vtbl iface##Vtbl; const struct iface##Vtbl #else #undef CONST_VTBL #define CONST_VTBL #define DECLARE_INTERFACE(iface) typedef struct iface { struct iface##Vtbl *lpVtbl; } iface; typedef struct iface##Vtbl iface##Vtbl; struct iface##Vtbl #endif #define DECLARE_INTERFACE_(iface,baseiface) DECLARE_INTERFACE(iface) #define DECLARE_INTERFACE_IID_(iface,baseiface,iidiface) DECLARE_INTERFACE(iface) #endif #define IFACEMETHOD(method) STDMETHOD(method) #define IFACEMETHOD_(type,method) STDMETHOD_(type,method) #define IFACEMETHODV(method) STDMETHODV(method) #define IFACEMETHODV_(type,method) STDMETHODV_(type,method) #ifndef FARSTRUCT #define FARSTRUCT #endif #ifndef HUGEP #define HUGEP #endif #include #define LISet32(li,v) ((li).HighPart = ((LONG) (v)) < 0 ? -1 : 0,(li).LowPart = (v)) #define ULISet32(li,v) ((li).HighPart = 0,(li).LowPart = (v)) #define CLSCTX_INPROC (CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER) #define CLSCTX_ALL (CLSCTX_INPROC_SERVER| CLSCTX_INPROC_HANDLER| CLSCTX_LOCAL_SERVER| CLSCTX_REMOTE_SERVER) #define CLSCTX_SERVER (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER|CLSCTX_REMOTE_SERVER) typedef enum tagREGCLS { REGCLS_SINGLEUSE = 0,REGCLS_MULTIPLEUSE = 1,REGCLS_MULTI_SEPARATE = 2,REGCLS_SUSPENDED = 4,REGCLS_SURROGATE = 8 } REGCLS; #define MARSHALINTERFACE_MIN 500 #define CWCSTORAGENAME 32 #define STGM_DIRECT __MSABI_LONG(0x00000000) #define STGM_TRANSACTED __MSABI_LONG(0x00010000) #define STGM_SIMPLE __MSABI_LONG(0x08000000) #define STGM_READ __MSABI_LONG(0x00000000) #define STGM_WRITE __MSABI_LONG(0x00000001) #define STGM_READWRITE __MSABI_LONG(0x00000002) #define STGM_SHARE_DENY_NONE __MSABI_LONG(0x00000040) #define STGM_SHARE_DENY_READ __MSABI_LONG(0x00000030) #define STGM_SHARE_DENY_WRITE __MSABI_LONG(0x00000020) #define STGM_SHARE_EXCLUSIVE __MSABI_LONG(0x00000010) #define STGM_PRIORITY __MSABI_LONG(0x00040000) #define STGM_DELETEONRELEASE __MSABI_LONG(0x04000000) #define STGM_NOSCRATCH __MSABI_LONG(0x00100000) #define STGM_CREATE __MSABI_LONG(0x00001000) #define STGM_CONVERT __MSABI_LONG(0x00020000) #define STGM_FAILIFTHERE __MSABI_LONG(0x00000000) #define STGM_NOSNAPSHOT __MSABI_LONG(0x00200000) #define STGM_DIRECT_SWMR __MSABI_LONG(0x00400000) #define ASYNC_MODE_COMPATIBILITY __MSABI_LONG(0x00000001) #define ASYNC_MODE_DEFAULT __MSABI_LONG(0x00000000) #define STGTY_REPEAT __MSABI_LONG(0x00000100) #define STG_TOEND __MSABI_LONG(0xFFFFFFFF) #define STG_LAYOUT_SEQUENTIAL __MSABI_LONG(0x00000000) #define STG_LAYOUT_INTERLEAVED __MSABI_LONG(0x00000001) #define STGFMT_STORAGE 0 #define STGFMT_NATIVE 1 #define STGFMT_FILE 3 #define STGFMT_ANY 4 #define STGFMT_DOCFILE 5 #define STGFMT_DOCUMENT 0 #ifndef __IRpcStubBuffer_FWD_DEFINED__ #define __IRpcStubBuffer_FWD_DEFINED__ typedef struct IRpcStubBuffer IRpcStubBuffer; #endif #ifndef __IRpcChannelBuffer_FWD_DEFINED__ #define __IRpcChannelBuffer_FWD_DEFINED__ typedef struct IRpcChannelBuffer IRpcChannelBuffer; #endif #include #include #include #include #ifndef INITGUID #include #endif #if defined(__cplusplus) && !defined(CINTERFACE) extern "C++" { template void **IID_PPV_ARGS_Helper(T **iface) { static_cast(*iface); return reinterpret_cast(iface); } } #define IID_PPV_ARGS(iface) __uuidof(**(iface)), IID_PPV_ARGS_Helper(iface) #endif typedef enum tagCOINIT { COINIT_APARTMENTTHREADED = 0x2,COINIT_MULTITHREADED = 0x0,COINIT_DISABLE_OLE1DDE = 0x4,COINIT_SPEED_OVER_MEMORY = 0x8 } COINIT; WINOLEAPI_(DWORD) CoBuildVersion(VOID); WINOLEAPI CoInitialize(LPVOID pvReserved); WINOLEAPI_(void) CoUninitialize(void); WINOLEAPI CoGetMalloc(DWORD dwMemContext,LPMALLOC *ppMalloc); WINOLEAPI_(DWORD) CoGetCurrentProcess(void); WINOLEAPI CoRegisterMallocSpy(LPMALLOCSPY pMallocSpy); WINOLEAPI CoRevokeMallocSpy(void); WINOLEAPI CoCreateStandardMalloc(DWORD memctx,IMalloc **ppMalloc); WINOLEAPI CoInitializeEx(LPVOID pvReserved,DWORD dwCoInit); WINOLEAPI CoGetCallerTID(LPDWORD lpdwTID); WINOLEAPI CoRegisterInitializeSpy(LPINITIALIZESPY pSpy,ULARGE_INTEGER *puliCookie); WINOLEAPI CoRevokeInitializeSpy(ULARGE_INTEGER uliCookie); WINOLEAPI CoGetContextToken(ULONG_PTR *pToken); typedef enum tagCOMSD { SD_LAUNCHPERMISSIONS = 0,SD_ACCESSPERMISSIONS = 1,SD_LAUNCHRESTRICTIONS = 2,SD_ACCESSRESTRICTIONS = 3 } COMSD; WINOLEAPI CoGetSystemSecurityPermissions(COMSD comSDType,PSECURITY_DESCRIPTOR *ppSD); typedef struct tagSOleTlsDataPublic { void *pvReserved0[2]; DWORD dwReserved0[3]; void *pvReserved1[1]; DWORD dwReserved1[3]; void *pvReserved2[4]; DWORD dwReserved2[1]; void *pCurrentCtx; } SOleTlsDataPublic; WINOLEAPI CoGetObjectContext(REFIID riid,LPVOID *ppv); WINOLEAPI CoGetClassObject(REFCLSID rclsid,DWORD dwClsContext,LPVOID pvReserved,REFIID riid,LPVOID *ppv); WINOLEAPI CoRegisterClassObject(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister); WINOLEAPI CoRevokeClassObject(DWORD dwRegister); WINOLEAPI CoResumeClassObjects(void); WINOLEAPI CoSuspendClassObjects(void); WINOLEAPI_(ULONG) CoAddRefServerProcess(void); WINOLEAPI_(ULONG) CoReleaseServerProcess(void); WINOLEAPI CoGetPSClsid(REFIID riid,CLSID *pClsid); WINOLEAPI CoRegisterPSClsid(REFIID riid,REFCLSID rclsid); WINOLEAPI CoRegisterSurrogate(LPSURROGATE pSurrogate); WINOLEAPI CoGetMarshalSizeMax(ULONG *pulSize,REFIID riid,LPUNKNOWN pUnk,DWORD dwDestContext,LPVOID pvDestContext,DWORD mshlflags); WINOLEAPI CoMarshalInterface(LPSTREAM pStm,REFIID riid,LPUNKNOWN pUnk,DWORD dwDestContext,LPVOID pvDestContext,DWORD mshlflags); WINOLEAPI CoUnmarshalInterface(LPSTREAM pStm,REFIID riid,LPVOID *ppv); WINOLEAPI CoMarshalHresult(LPSTREAM pstm,HRESULT hresult); WINOLEAPI CoUnmarshalHresult(LPSTREAM pstm,HRESULT *phresult); WINOLEAPI CoReleaseMarshalData(LPSTREAM pStm); WINOLEAPI CoDisconnectObject(LPUNKNOWN pUnk,DWORD dwReserved); WINOLEAPI CoLockObjectExternal(LPUNKNOWN pUnk,WINBOOL fLock,WINBOOL fLastUnlockReleases); WINOLEAPI CoGetStandardMarshal(REFIID riid,LPUNKNOWN pUnk,DWORD dwDestContext,LPVOID pvDestContext,DWORD mshlflags,LPMARSHAL *ppMarshal); WINOLEAPI CoGetStdMarshalEx(LPUNKNOWN pUnkOuter,DWORD smexflags,LPUNKNOWN *ppUnkInner); typedef enum tagSTDMSHLFLAGS { SMEXF_SERVER = 0x01,SMEXF_HANDLER = 0x02 } STDMSHLFLAGS; WINOLEAPI_(WINBOOL) CoIsHandlerConnected(LPUNKNOWN pUnk); WINOLEAPI CoMarshalInterThreadInterfaceInStream(REFIID riid,LPUNKNOWN pUnk,LPSTREAM *ppStm); WINOLEAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm,REFIID iid,LPVOID *ppv); WINOLEAPI CoCreateFreeThreadedMarshaler(LPUNKNOWN punkOuter,LPUNKNOWN *ppunkMarshal); WINOLEAPI_(HINSTANCE) CoLoadLibrary(LPOLESTR lpszLibName,WINBOOL bAutoFree); WINOLEAPI_(void) CoFreeLibrary(HINSTANCE hInst); WINOLEAPI_(void) CoFreeAllLibraries(void); WINOLEAPI_(void) CoFreeUnusedLibraries(void); WINOLEAPI_(void) CoFreeUnusedLibrariesEx(DWORD dwUnloadDelay,DWORD dwReserved); WINOLEAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR pSecDesc,LONG cAuthSvc,SOLE_AUTHENTICATION_SERVICE *asAuthSvc,void *pReserved1,DWORD dwAuthnLevel,DWORD dwImpLevel,void *pAuthList,DWORD dwCapabilities,void *pReserved3); WINOLEAPI CoGetCallContext(REFIID riid,void **ppInterface); WINOLEAPI CoQueryProxyBlanket(IUnknown *pProxy,DWORD *pwAuthnSvc,DWORD *pAuthzSvc,OLECHAR **pServerPrincName,DWORD *pAuthnLevel,DWORD *pImpLevel,RPC_AUTH_IDENTITY_HANDLE *pAuthInfo,DWORD *pCapabilites); WINOLEAPI CoSetProxyBlanket(IUnknown *pProxy,DWORD dwAuthnSvc,DWORD dwAuthzSvc,OLECHAR *pServerPrincName,DWORD dwAuthnLevel,DWORD dwImpLevel,RPC_AUTH_IDENTITY_HANDLE pAuthInfo,DWORD dwCapabilities); WINOLEAPI CoCopyProxy(IUnknown *pProxy,IUnknown **ppCopy); WINOLEAPI CoQueryClientBlanket(DWORD *pAuthnSvc,DWORD *pAuthzSvc,OLECHAR **pServerPrincName,DWORD *pAuthnLevel,DWORD *pImpLevel,RPC_AUTHZ_HANDLE *pPrivs,DWORD *pCapabilities); WINOLEAPI CoImpersonateClient(); WINOLEAPI CoRevertToSelf(); WINOLEAPI CoQueryAuthenticationServices(DWORD *pcAuthSvc,SOLE_AUTHENTICATION_SERVICE **asAuthSvc); WINOLEAPI CoSwitchCallContext(IUnknown *pNewObject,IUnknown **ppOldObject); #define COM_RIGHTS_EXECUTE 1 #define COM_RIGHTS_EXECUTE_LOCAL 2 #define COM_RIGHTS_EXECUTE_REMOTE 4 #define COM_RIGHTS_ACTIVATE_LOCAL 8 #define COM_RIGHTS_ACTIVATE_REMOTE 16 WINOLEAPI CoCreateInstance(REFCLSID rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,REFIID riid,LPVOID *ppv); WINOLEAPI CoGetInstanceFromFile(COSERVERINFO *pServerInfo,CLSID *pClsid,IUnknown *punkOuter,DWORD dwClsCtx,DWORD grfMode,OLECHAR *pwszName,DWORD dwCount,MULTI_QI *pResults); WINOLEAPI CoGetInstanceFromIStorage(COSERVERINFO *pServerInfo,CLSID *pClsid,IUnknown *punkOuter,DWORD dwClsCtx,struct IStorage *pstg,DWORD dwCount,MULTI_QI *pResults); WINOLEAPI CoCreateInstanceEx(REFCLSID Clsid,IUnknown *punkOuter,DWORD dwClsCtx,COSERVERINFO *pServerInfo,DWORD dwCount,MULTI_QI *pResults); WINOLEAPI CoGetCancelObject(DWORD dwThreadId,REFIID iid,void **ppUnk); WINOLEAPI CoSetCancelObject(IUnknown *pUnk); WINOLEAPI CoCancelCall(DWORD dwThreadId,ULONG ulTimeout); WINOLEAPI CoTestCancel(); WINOLEAPI CoEnableCallCancellation(LPVOID pReserved); WINOLEAPI CoDisableCallCancellation(LPVOID pReserved); WINOLEAPI CoAllowSetForegroundWindow(IUnknown *pUnk,LPVOID lpvReserved); WINOLEAPI DcomChannelSetHResult(LPVOID pvReserved,ULONG *pulReserved,HRESULT appsHR); WINOLEAPI StringFromCLSID(REFCLSID rclsid,LPOLESTR *lplpsz); WINOLEAPI CLSIDFromString(LPOLESTR lpsz,LPCLSID pclsid); WINOLEAPI StringFromIID(REFIID rclsid,LPOLESTR *lplpsz); WINOLEAPI IIDFromString(LPOLESTR lpsz,LPIID lpiid); WINOLEAPI_(WINBOOL) CoIsOle1Class(REFCLSID rclsid); WINOLEAPI ProgIDFromCLSID (REFCLSID clsid,LPOLESTR *lplpszProgID); WINOLEAPI CLSIDFromProgID (LPCOLESTR lpszProgID,LPCLSID lpclsid); WINOLEAPI CLSIDFromProgIDEx (LPCOLESTR lpszProgID,LPCLSID lpclsid); WINOLEAPI_(int) StringFromGUID2(REFGUID rguid,LPOLESTR lpsz,int cchMax); WINOLEAPI CoCreateGuid(GUID *pguid); WINOLEAPI_(WINBOOL) CoFileTimeToDosDateTime(FILETIME *lpFileTime,LPWORD lpDosDate,LPWORD lpDosTime); WINOLEAPI_(WINBOOL) CoDosDateTimeToFileTime(WORD nDosDate,WORD nDosTime,FILETIME *lpFileTime); WINOLEAPI CoFileTimeNow(FILETIME *lpFileTime); WINOLEAPI CoRegisterMessageFilter(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter); WINOLEAPI CoRegisterChannelHook(REFGUID ExtensionUuid,IChannelHook *pChannelHook); WINOLEAPI CoWaitForMultipleHandles (DWORD dwFlags,DWORD dwTimeout,ULONG cHandles,LPHANDLE pHandles,LPDWORD lpdwindex); typedef enum tagCOWAIT_FLAGS { COWAIT_WAITALL = 1,COWAIT_ALERTABLE = 2,COWAIT_INPUTAVAILABLE = 4 } COWAIT_FLAGS; WINOLEAPI CoInvalidateRemoteMachineBindings(LPOLESTR pszMachineName); WINOLEAPI CoGetTreatAsClass(REFCLSID clsidOld,LPCLSID pClsidNew); WINOLEAPI CoTreatAsClass(REFCLSID clsidOld,REFCLSID clsidNew); typedef HRESULT (WINAPI *LPFNGETCLASSOBJECT)(REFCLSID,REFIID,LPVOID *); typedef HRESULT (WINAPI *LPFNCANUNLOADNOW)(void); STDAPI DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID *ppv); STDAPI DllCanUnloadNow(void); WINOLEAPI_(LPVOID) CoTaskMemAlloc(SIZE_T cb); WINOLEAPI_(LPVOID) CoTaskMemRealloc(LPVOID pv,SIZE_T cb); WINOLEAPI_(void) CoTaskMemFree(LPVOID pv); WINOLEAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER *ppDAHolder); WINOLEAPI CreateDataCache(LPUNKNOWN pUnkOuter,REFCLSID rclsid,REFIID iid,LPVOID *ppv); WINOLEAPI StgCreateDocfile(const OLECHAR *pwcsName,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen); WINOLEAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen); WINOLEAPI StgOpenStorage(const OLECHAR *pwcsName,IStorage *pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage **ppstgOpen); WINOLEAPI StgOpenStorageOnILockBytes(ILockBytes *plkbyt,IStorage *pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage **ppstgOpen); WINOLEAPI StgIsStorageFile(const OLECHAR *pwcsName); WINOLEAPI StgIsStorageILockBytes(ILockBytes *plkbyt); WINOLEAPI StgSetTimes(OLECHAR const *lpszName,FILETIME const *pctime,FILETIME const *patime,FILETIME const *pmtime); WINOLEAPI StgOpenAsyncDocfileOnIFillLockBytes(IFillLockBytes *pflb,DWORD grfMode,DWORD asyncFlags,IStorage **ppstgOpen); WINOLEAPI StgGetIFillLockBytesOnILockBytes(ILockBytes *pilb,IFillLockBytes **ppflb); WINOLEAPI StgGetIFillLockBytesOnFile(OLECHAR const *pwcsName,IFillLockBytes **ppflb); WINOLEAPI StgOpenLayoutDocfile(OLECHAR const *pwcsDfName,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen); #define STGOPTIONS_VERSION 2 typedef struct tagSTGOPTIONS { USHORT usVersion; USHORT reserved; ULONG ulSectorSize; const WCHAR *pwcsTemplateFile; } STGOPTIONS; WINOLEAPI StgCreateStorageEx (const WCHAR *pwcsName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,STGOPTIONS *pStgOptions,void *reserved,REFIID riid,void **ppObjectOpen); WINOLEAPI StgOpenStorageEx (const WCHAR *pwcsName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,STGOPTIONS *pStgOptions,void *reserved,REFIID riid,void **ppObjectOpen); WINOLEAPI BindMoniker(LPMONIKER pmk,DWORD grfOpt,REFIID iidResult,LPVOID *ppvResult); WINOLEAPI CoInstall(IBindCtx *pbc,DWORD dwFlags,uCLSSPEC *pClassSpec,QUERYCONTEXT *pQuery,LPWSTR pszCodeBase); WINOLEAPI CoGetObject(LPCWSTR pszName,BIND_OPTS *pBindOptions,REFIID riid,void **ppv); WINOLEAPI MkParseDisplayName(LPBC pbc,LPCOLESTR szUserName,ULONG *pchEaten,LPMONIKER *ppmk); WINOLEAPI MonikerRelativePathTo(LPMONIKER pmkSrc,LPMONIKER pmkDest,LPMONIKER *ppmkRelPath,WINBOOL dwReserved); WINOLEAPI MonikerCommonPrefixWith(LPMONIKER pmkThis,LPMONIKER pmkOther,LPMONIKER *ppmkCommon); WINOLEAPI CreateBindCtx(DWORD reserved,LPBC *ppbc); WINOLEAPI CreateGenericComposite(LPMONIKER pmkFirst,LPMONIKER pmkRest,LPMONIKER *ppmkComposite); WINOLEAPI GetClassFile (LPCOLESTR szFilename,CLSID *pclsid); WINOLEAPI CreateClassMoniker(REFCLSID rclsid,LPMONIKER *ppmk); WINOLEAPI CreateFileMoniker(LPCOLESTR lpszPathName,LPMONIKER *ppmk); WINOLEAPI CreateItemMoniker(LPCOLESTR lpszDelim,LPCOLESTR lpszItem,LPMONIKER *ppmk); WINOLEAPI CreateAntiMoniker(LPMONIKER *ppmk); WINOLEAPI CreatePointerMoniker(LPUNKNOWN punk,LPMONIKER *ppmk); WINOLEAPI CreateObjrefMoniker(LPUNKNOWN punk,LPMONIKER *ppmk); WINOLEAPI GetRunningObjectTable(DWORD reserved,LPRUNNINGOBJECTTABLE *pprot); #include #include WINOLEAPI CreateStdProgressIndicator(HWND hwndParent,LPCOLESTR pszTitle,IBindStatusCallback *pIbscCaller,IBindStatusCallback **ppIbsc); #if (_WIN32_WINNT >= 0x0600) WINOLEAPI CoDisconnectContext(DWORD dwTimeout); #endif /*(_WIN32_WINNT >= 0x0600)*/ #if (_WIN32_WINNT >= 0x0601) WINOLEAPI CoGetApartmentType( APTTYPE *pAptType, APTTYPEQUALIFIER *pAptQualifier ); #endif /*(_WIN32_WINNT >= 0x0601)*/ #ifndef RC_INVOKED #include #endif #endif