home *** CD-ROM | disk | FTP | other *** search
- /***********************************************************************
- *
- * ABP.H
- *
- * Definitions for Sample Address Book Provider
- *
- * Copyright 1992-1995 Microsoft Corporation. All Rights Reserved.
- *
- ***********************************************************************/
-
-
- #ifdef _WIN32
- #define INC_OLE2 /* Get the OLE2 stuff */
- #define INC_RPC /* harmless on Windows NT; Windows 95 needs it */
- #endif
- #include <windows.h>
- #include <windowsx.h>
- #include <limits.h>
- #include <mapiwin.h>
- #include <mapidbg.h>
-
- #include <mapidefs.h>
- #include <mapicode.h>
- #include <mapitags.h>
- #include <mapiguid.h>
- #include <mapispi.h>
- #include <mapiutil.h>
- #include <mapival.h>
-
- #include <memory.h>
- #include <commdlg.h>
-
- /*
- * IUnknown base members
- */
- #define SAB_IUnknown \
- LONG lcInit; \
- HRESULT hResult; \
- UINT idsLastError; \
- HINSTANCE hLibrary; \
- LPALLOCATEBUFFER lpAllocBuff; \
- LPALLOCATEMORE lpAllocMore; \
- LPFREEBUFFER lpFreeBuff; \
- LPMALLOC lpMalloc; \
- CRITICAL_SECTION cs
-
- #define SAB_IUnkWithLogon \
- SAB_IUnknown; \
- LPABLOGON lpABLogon
-
- #define SAB_Wrapped \
- SAB_IUnkWithLogon; \
- LPMAPIPROP lpPropData
-
- /*
- * Definition of all the objects referred to in the various source modules
- * of this provider.
- */
-
- /*
- * Declaration of IABProvider object implementation
- * Code for this is in ABP.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABP
-
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABP_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABPROVIDER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABP_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABPROVIDER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
-
- DECLARE_MAPI_INTERFACE(ABP_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABPROVIDER_METHODS(IMPL)
- };
-
-
- /*
- * Declaration of IABLogon object implementation
- * Code for this is in ABP.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABPLOGON
-
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABPLOGON_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABLOGON_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABPLOGON_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABLOGON_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
-
- DECLARE_MAPI_INTERFACE(ABPLOGON_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IABLOGON_METHODS(IMPL)
- };
-
-
- /*
- * Declaration of IABContainer object implementation
- * Code for this is in ROOT.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ROOT
-
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ROOT_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ROOT_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
-
- DECLARE_MAPI_INTERFACE(ROOT_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- };
-
- #define ROOT_ValidateObject(Method, pThis) \
- { \
- HRESULT hResult; \
- if (IsBadReadPtr(pThis, sizeof(ROOT))) \
- { \
- hResult = ResultFromScode(E_INVALIDARG); \
- DebugTraceResult(ROOT##_##Method, hResult); \
- return hResult; \
- } \
- \
- if (pThis->lpVtbl != &vtblROOT) \
- { \
- hResult = ResultFromScode(E_INVALIDARG); \
- DebugTraceResult(ROOT##_##Method, hResult); \
- return hResult; \
- } \
- }
-
-
-
- /*
- * Declaration of IABContainer object implementation
- * Code for this is in ABCONT.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABCNT
-
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABC_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABC_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
-
- DECLARE_MAPI_INTERFACE(ABC_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- };
-
- #define ABC_ValidateObject(Method, pThis) \
- { \
- HRESULT hResult; \
- if (IsBadReadPtr(pThis, sizeof(ABC))) \
- { \
- hResult = ResultFromScode(E_INVALIDARG); \
- DebugTraceResult(ABC##_##Method, hResult); \
- return hResult; \
- } \
- \
- if (pThis->lpVtbl != &vtblABC) \
- { \
- hResult = ResultFromScode(E_INVALIDARG); \
- DebugTraceResult(ABC##_##Method, hResult); \
- return hResult; \
- } \
- }
-
-
- /*
- * Declaration of IMAPIContainer object implementation
- * Code for this is in ABSEARCH.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABSRCH
-
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABSRCH_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABSRCH_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- MAPI_IABCONTAINER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
-
- DECLARE_MAPI_INTERFACE(ABSRCH_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAPICONTAINER_METHODS(IMPL)
- };
-
- #define ABSRCH_ValidateObject(Method, pThis) \
- { \
- HRESULT hResult; \
- if (IsBadReadPtr(pThis, sizeof(ABSRCH))) \
- { \
- hResult = ResultFromScode(E_INVALIDARG); \
- DebugTraceResult(ABSRCH##_##Method, hResult); \
- return hResult; \
- } \
- \
- if (pThis->lpVtbl != &vtblABSRCH) \
- { \
- hResult = ResultFromScode(E_INVALIDARG); \
- DebugTraceResult(ABSRCH##_##Method, hResult); \
- return hResult; \
- } \
- }
-
-
-
- /*
- * Declaration of IMailUser object implementation
- * Code for this is in ABUSER.C
- */
- #undef INTERFACE
- #define INTERFACE struct _ABUSER
-
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, ABU_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAILUSER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, ABU_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAILUSER_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
-
- DECLARE_MAPI_INTERFACE(ABU_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- MAPI_IMAILUSER_METHODS(IMPL)
- };
-
- #define ABU_ValidateObject(Method, pThis) \
- { \
- HRESULT hResult; \
- if (IsBadReadPtr(pThis, sizeof(ABUSER))) \
- { \
- hResult = ResultFromScode(E_INVALIDARG); \
- DebugTraceResult(ABU##_##Method, hResult); \
- return hResult; \
- } \
- \
- if (pThis->lpVtbl != &vtblABU) \
- { \
- hResult = ResultFromScode(E_INVALIDARG); \
- DebugTraceResult(ABU##_##Method, hResult); \
- return hResult; \
- } \
- }
-
- /*
- * Declaration of IMAPIProp object implementation
- * Code for this is in WRAP.C
- */
- #undef INTERFACE
- #define INTERFACE struct _WRAP
-
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, WRAP_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, WRAP_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
-
- DECLARE_MAPI_INTERFACE(WRAP_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPIPROP_METHODS(IMPL)
- };
-
-
-
- #undef INTERFACE
- #define INTERFACE struct _IVTABC
-
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IVTABC_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPITABLE_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IVTABC_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPITABLE_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
-
- DECLARE_MAPI_INTERFACE(IVTABC_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_IMAPITABLE_METHODS(IMPL)
- };
-
-
- /*
- * Internal utility functions that allow access to data stored in the Init object
- */
- void
- RemoveLogonObject(LPABPROVIDER lpABProvider, LPVOID lpvABLogon, LPFREEBUFFER lpFreeBuff);
-
- void
- FindLogonObject(LPABPROVIDER lpABProvider, LPMAPIUID lpMuidToFind, LPABLOGON * lppABLogon);
-
- /*
- * Internal utility functions that allow access to data stored in the logon object
- */
-
- LPMAPIUID
- LpMuidFromLogon(LPABLOGON lpABLogon);
-
- HRESULT
- HrLpszGetCurrentFileName(LPABLOGON lpABLogon, LPSTR * lppszFileName);
-
- HRESULT
- HrReplaceCurrentFileName(LPABLOGON lpABLogon, LPSTR lpstrT);
-
- void
- GenerateContainerDN(LPABLOGON lpABLogon, LPSTR lpszName);
-
- BOOL
- FEqualSABFiles( LPABLOGON lpABLogon,
- LPSTR lpszFileName);
-
- /*
- *
- * Functions that return new objects
- *
- */
-
- /*
- * Creates a new ABPLogon object (see ABLOGON.C)
- */
- HRESULT
- HrNewABLogon( LPABLOGON * lppABLogon,
- LPABPROVIDER lpABP,
- LPMAPISUP lpMAPISup,
- LPSTR lpszSABFile,
- LPMAPIUID lpmuid,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
- /*
- * Creates a new ROOT container object (see ROOT.C)
- */
- HRESULT
- HrNewROOT(LPABCONT * lppROOT,
- ULONG * lpulObjType,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
- /*
- * Creates a new directory container object (see ABCONT.C)
- */
- HRESULT
- HrNewSampDirectory( LPABCONT * lppABC,
- ULONG * lpulObjType,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
- /*
- * Creates the search object associated with the SampDirectory (see ABSEARCH.C)
- */
- HRESULT
- HrNewSearch(LPMAPICONTAINER * lppABSearch,
- LPABLOGON lpABLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
- /*
- * Creates a new Mail User object (see ABUSER.C)
- */
- HRESULT
- HrNewSampUser( LPMAILUSER * lppMAPIPropEntry,
- ULONG * lpulObjectType,
- ULONG cbEntryID,
- LPENTRYID lpEntryID,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
- /*
- * Creates a new one-off templateID object (see TID.C)
- */
- HRESULT
- HrNewOOTID( LPMAPIPROP * lppMAPIPropNew,
- ULONG cbTemplateId,
- LPENTRYID lpTemplateId,
- ULONG ulTemplateFlags,
- LPMAPIPROP lpMAPIPropData,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
- /*
- * Creates a new one-off mail user object (see OOUSER.C)
- */
- HRESULT
- HrNewSampOOUser(LPMAILUSER * lppMAPIPropEntry,
- ULONG * lpulObjectType,
- ULONG cbEntryID,
- LPENTRYID lpEntryID,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
- /*
- * Creates a new status object for this provider (see STATUS.C)
- */
- HRESULT
- HrNewStatusObject(LPMAPISTATUS * lppABS,
- ULONG * lpulObjType,
- ULONG ulFlags,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
- /*
- * Creates a new templateID object that's associated with
- * a SAB mailuser object.
- */
- HRESULT
- HrNewTID ( LPMAPIPROP * lppMAPIPropNew,
- ULONG cbTemplateId,
- LPENTRYID lpTemplateId,
- ULONG ulTemplateFlags,
- LPMAPIPROP lpMAPIPropData,
- LPABLOGON lpABPLogon,
- LPCIID lpInterface,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
-
- /*
- * Creates a new contents table object
- */
- HRESULT
- HrNewIVTAbc (LPMAPITABLE * lppIVTAbc,
- LPABLOGON lpABLogon,
- LPABCONT lpABC,
- HINSTANCE hLibrary,
- LPALLOCATEBUFFER lpAllocBuff,
- LPALLOCATEMORE lpAllocMore,
- LPFREEBUFFER lpFreeBuff,
- LPMALLOC lpMalloc );
-
- /*
- * Creates/Updates the SAB's root hierarchy
- */
- HRESULT
- HrBuildRootHier(LPABLOGON lpABLogon, LPMAPITABLE * lppMAPITable);
-
-
- /*
- * Sets an error string associated with a particular hResult on an object.
- * It's used in conjunction with the method GetLastError.
- */
- VOID SetErrorIDS (LPVOID lpObject, HRESULT hResult, UINT ids);
-
-
- /*
- * Loads a string from a resource. Optionally allocates room for the string
- * if lpAllocBuff is not NULL. See ABP.C.
- */
- SCODE ScLoadString( UINT ids,
- ULONG ulcch,
- LPALLOCATEBUFFER lpAllocBuff,
- HINSTANCE hLibrary,
- LPSTR * lppsz);
-
- /*
- * The sample ABPs MAPIUID
- *
- * This MAPIUID must be unique (see the Service Provider Writer's Guide on
- * Constructing Entry IDs)
- */
- #define MUIDABSAMPLE {0x81,0x2b,0x1f,0x40,0xbe,0xa3,0x10,0x19,0x9d,0x6e,0x00,0xdd,0x01,0x0f,0x54,0x02}
-
- #define SZEMAILTYPE "MSPEER"
- #define MAX_DISPLAY_NAME 45
-
- /*
- * Browse record
- *
- * The .SAB files are made up of the following records.
- */
-
- #define MAX_NAME_SIZE 30
- #define MAX_EMA_SIZE 50
-
- #pragma pack(4)
- typedef struct _ABCREC
- {
-
- char rgchDisplayName[MAX_NAME_SIZE + 1];
- char rgchEmailAddress[MAX_EMA_SIZE + 1];
-
- } ABCREC, *LPABCREC;
- #pragma pack()
-
- /*
- * Defines of various entryid types
- */
- #define SAMP_DIRECTORY 0x00000000
- #define SAMP_USER 0x00000001
- #define SAMP_UNKNOWN 0x00000002
- #define SAMP_OOUSER 0x00000003
-
- /*
- * The version of this ABPs entryids
- */
- #define SAMP_VERSION 0x000000002
-
- /*
- * Directory entry id structure
- *
- * This entryid is permanent.
- */
- typedef struct _dir_entryid
- {
-
- BYTE abFlags[4];
- MAPIUID muid;
- ULONG ulVersion;
- ULONG ulType;
- MAPIUID muidID;
-
- } DIR_ENTRYID, *LPDIR_ENTRYID;
-
- /*
- * Mail user entry id structure
- *
- * This entryid is permanent.
- */
- #pragma pack(4)
- typedef struct _usr_entryid
- {
-
- BYTE abFlags[4];
- MAPIUID muid;
- ULONG ulVersion;
- ULONG ulType;
- ABCREC abcrec;
-
- } USR_ENTRYID, *LPUSR_ENTRYID;
- #pragma pack()
-
- /*
- * One off user entry id structure
- *
- * This entryid is permanent.
- */
- typedef struct _oousr_entryid
- {
- BYTE abFlags[4];
- MAPIUID muid;
- ULONG ulVersion;
- ULONG ulType;
-
- } OOUSR_ENTRYID, *LPOOUSR_ENTRYID;
-
-
- /*
- * Externs used throughout various modules within this provider.
- * They actually get defined in abp.c
- */
-
- extern LCID lcidUser;
-
- extern MAPIUID muidABSample;
-
- extern MAPIUID muidSABProviderID;
-
- extern DTBLLABEL dtbllabel;
-
- extern DTBLPAGE dtblpage;
-
- extern DTBLGROUPBOX dtblgroupbox;
-
- extern CHAR szNoFilter[];
-
- extern LPSTR lpszEMT;
-
- extern CHAR szAddrTypeFilter[];
-
- extern CHAR szFileNameFilter[];
-
- #define PR_LISTBOX_TABLE PROP_TAG(PT_OBJECT,0x6605)
- #define PR_COMBOBOX_TABLE PROP_TAG(PT_OBJECT,0x6607)
- #define PR_DDLISTBOX_TABLE PROP_TAG(PT_OBJECT,0x6609)
-
-
- /*
- * Properties defined for our one-off entry
- */
- #define PR_SERVER_NAME PROP_TAG(PT_TSTRING,0x660b)
- #define PR_SHARE_NAME PROP_TAG(PT_TSTRING,0x660c)
- #define PR_PATH_NAME PROP_TAG(PT_TSTRING,0x660d)
-
- #define MAX_SERVER_NAME 15
- #define MAX_SHARE_NAME 12
-
- /*
- * MACROs for Win16
- */
-
- #ifdef WIN16
-
-
- #define lstrcatA lstrcat
- #define wsprintfA wsprintf
- #define CharUpperBuffA CharUpperBuff
-
- #endif /*WIN16*/
-