198 lines
4.3 KiB
C
198 lines
4.3 KiB
C
/***********************************************************************
|
|
*
|
|
* _ABCTBL.H
|
|
*
|
|
* Header file for code in ABCTBL.C
|
|
*
|
|
* Copyright 1992, 1993 Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
***********************************************************************/
|
|
|
|
/*
|
|
* BookMark structure
|
|
*/
|
|
|
|
#define MAX_BOOKMARKS 10
|
|
|
|
#define BK_PEGGEDTOEND ((ULONG)0x00000001)
|
|
|
|
typedef struct _ABCBK
|
|
{
|
|
|
|
ULONG ulFlags; /* Flags */
|
|
FILETIME filetime; /* Time of file when bookmark created */
|
|
ULONG ulPosition; /* Position of record in file */
|
|
ABCREC abcrec; /* Record associated with this bookmark */
|
|
|
|
} ABCBK, *LPABCBK;
|
|
|
|
#define CBABCBK sizeof(ABCBK)
|
|
|
|
/*
|
|
* Function Prototypes
|
|
*/
|
|
|
|
/*
|
|
* Reuses methods:
|
|
* ROOT_QueryInterface
|
|
* ROOT_AddRef
|
|
* ROOT_GetLastError
|
|
* IVTROOT_RegisterNotification
|
|
*/
|
|
|
|
#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)
|
|
};
|
|
|
|
/*
|
|
* _IVTABC is the structure returned to the client when
|
|
* the contents table is retrieved from the ab container
|
|
* object (ABCONT.C).
|
|
*
|
|
* The first thing in the structure must be a jump table
|
|
* with all the IMAPITable methods in it.
|
|
*
|
|
*/
|
|
typedef struct _IVTABC
|
|
{
|
|
const IVTABC_Vtbl FAR * lpVtbl;
|
|
|
|
/*
|
|
* Need to be the same as other objects
|
|
* since this object reuses methods from
|
|
* other objects.
|
|
*/
|
|
|
|
FAB_IUnkWithLogon;
|
|
|
|
/*
|
|
* Private data
|
|
*/
|
|
|
|
/* The list of active columns */
|
|
LPSPropTagArray lpPTAColSet;
|
|
|
|
/* HANDLE of file that I'm browsing... */
|
|
HANDLE hFile;
|
|
|
|
/* FILETIME time the file was last changed */
|
|
FILETIME filetime;
|
|
|
|
/* Size of file */
|
|
ULONG ulMaxPos;
|
|
|
|
/* Current position in file */
|
|
ULONG ulPosition;
|
|
|
|
/* BookMark array... */
|
|
LPABCBK rglpABCBK[MAX_BOOKMARKS];
|
|
|
|
/*
|
|
* Restriction stuff
|
|
*/
|
|
|
|
ULONG ulRstrDenom;
|
|
|
|
/* Partial Name to match */
|
|
LPTSTR lpszPartialName;
|
|
|
|
/* 2 bit arrays of what's been checked, and what (of them) matches */
|
|
BYTE *rgChecked;
|
|
BYTE *rgMatched;
|
|
|
|
ULONG ulConnectMic;
|
|
UINT cAdvise; /* Count of registered notifications */
|
|
LPMAPIADVISESINK * parglpAdvise; /* Registered notifications */
|
|
FTG ftg; /* Idle function tag */
|
|
LPTSTR lpszFileName;
|
|
|
|
|
|
} IVTABC, *LPIVTABC;
|
|
|
|
#define CBIVTABC sizeof(IVTABC)
|
|
|
|
|
|
|
|
/*
|
|
* Record for PR_INSTANCE_KEY. Need enough information to find the record quickly as
|
|
* well as determine if the record is still valid.
|
|
*/
|
|
typedef struct _abcrecinstance
|
|
{
|
|
ULONG ulRecordPosition;
|
|
FILETIME filetime;
|
|
TCHAR rgchzFileName[1]; /* Get's sized accordingly */
|
|
|
|
} ABCRecInstance, FAR * LPABCRecInstance;
|
|
|
|
/*
|
|
* Private macros
|
|
*/
|
|
|
|
/* Counts the number of bits in a byte */
|
|
#define CBitsB(b, cbits) { \
|
|
\
|
|
cbits = 0; \
|
|
\
|
|
cbits = ((b) & 0x55) + ((b>>1) & 0x55); \
|
|
cbits = (cbits & 0x33) + ((cbits>>2) & 0x33); \
|
|
cbits = (cbits & 0x0f) + (cbits>>4); \
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
* Functions prototypes
|
|
*/
|
|
|
|
// Creates a new IVTAbc object
|
|
HRESULT
|
|
NewIVTAbc (LPVOID * lppIVTAbc, LPABPLOGON lpABPLogon, LPABCNT lpABC);
|
|
|
|
// Internal functions
|
|
HRESULT HrOpenFile(LPIVTABC lpIVTAbc);
|
|
void FreeANRBitmaps(LPIVTABC lpIVTAbc);
|
|
HRESULT HrValidateEntry (LPIVTABC lpIVTAbc, ULONG ulNewPos);
|
|
BOOL FNameMatch (LPIVTABC lpIVTAbc, LPTSTR rgchDisplayName);
|
|
BOOL FMatched (LPIVTABC lpIVTAbc, ULONG ulNewPos);
|
|
BOOL FChecked (LPIVTABC lpIVTAbc, ULONG ulNewPos);
|
|
|
|
|
|
/*
|
|
* Default column set
|
|
*/
|
|
enum { ivalvtPR_DISPLAY_NAME,
|
|
ivalvtPR_ENTRYID,
|
|
ivalvtPR_ADDRTYPE,
|
|
ivalvtPR_EMAIL_ADDRESS,
|
|
ivalvtPR_OBJECT_TYPE,
|
|
ivalvtPR_DISPLAY_TYPE,
|
|
ivalvtPR_INSTANCE_KEY,
|
|
cvalvtMax };
|
|
|
|
|
|
|
|
/*
|
|
* Externs defined for use in the three table modules
|
|
*/
|
|
|
|
extern const IVTABC_Vtbl vtblIVTABC;
|
|
extern const LPSPropTagArray ptagaivtabcColSet;
|