|
|
/***********************************************************************
* * _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;
|