Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
445 lines
14 KiB
C++
445 lines
14 KiB
C++
// --rulecls.h-----------------------------------------------------------------
|
|
//
|
|
// Rule class interface header.
|
|
//
|
|
// Copyright (C) Microsoft Corp. 1986-1998. All rights reserved.
|
|
//
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#if !defined(_RULECLS_H_)
|
|
#define _RULECLS_H_
|
|
|
|
// $$--LPACTIONS---------------------------------------------------------------
|
|
//
|
|
// Pointer to ACTIONS structure defined in edkmdb.h.
|
|
//
|
|
// ----------------------------------------------------------------------------
|
|
|
|
typedef ACTIONS FAR * LPACTIONS; // should be moved to edkmdb.h
|
|
|
|
// $$--IExchangeFolderRules----------------------------------------------------
|
|
//
|
|
// Definition of interface for folder rules class CFolderRules.
|
|
//
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IExchangeFolderRules
|
|
|
|
// Manifest for cursor position indicating we are at the end of the rules table.
|
|
|
|
#define RULE_PAST_END ((LONG) -1)
|
|
|
|
DECLARE_INTERFACE_(IExchangeFolderRules, IUnknown)
|
|
{
|
|
#ifndef NO_BASEINTERFACE_FUNCS
|
|
|
|
/* IUnknown methods */
|
|
|
|
STDMETHOD(QueryInterface)(
|
|
THIS_
|
|
REFIID riid,
|
|
LPVOID FAR * ppvObj
|
|
) PURE;
|
|
|
|
STDMETHOD_(ULONG, AddRef)(
|
|
THIS
|
|
) PURE;
|
|
|
|
STDMETHOD_(ULONG, Release)(
|
|
THIS
|
|
) PURE;
|
|
|
|
#endif
|
|
|
|
/* IExchangeFolderRules methods */
|
|
|
|
STDMETHOD(HrDelete)(
|
|
THIS
|
|
) PURE;
|
|
|
|
STDMETHOD(HrDisable)(
|
|
THIS
|
|
) PURE;
|
|
|
|
STDMETHOD(HrEnable)(
|
|
THIS
|
|
) PURE;
|
|
|
|
STDMETHOD(HrGet)(
|
|
THIS_
|
|
LPLONG lplState,
|
|
LPSRestriction FAR * lppRestriction,
|
|
LPACTIONS FAR * lppActions,
|
|
LPLONG lplLevel,
|
|
LPSTR FAR * lppszName
|
|
) PURE;
|
|
|
|
STDMETHOD(HrInsert)(
|
|
THIS_
|
|
LONG lState,
|
|
LPSRestriction lpRestriction,
|
|
LPACTIONS lpActions,
|
|
LONG lLevel,
|
|
LPSTR lpszName
|
|
) PURE;
|
|
|
|
STDMETHOD(HrSeek)(
|
|
THIS_
|
|
LONG lPos
|
|
) PURE;
|
|
|
|
STDMETHOD(HrTell)(
|
|
THIS_
|
|
LPLONG lplPos
|
|
) PURE;
|
|
};
|
|
|
|
// $$--LPFOLDERRULES-----------------------------------------------------------
|
|
//
|
|
// Pointer to IExchangeFolderRules interface.
|
|
//
|
|
// ----------------------------------------------------------------------------
|
|
|
|
typedef IExchangeFolderRules FAR* LPFOLDERRULES;
|
|
|
|
//
|
|
// Helper functions defined in module RULECLS.
|
|
//
|
|
|
|
// $--HrCopyActions------------------------------------------------------------
|
|
//
|
|
// DESCRIPTION: Make a copy of an ACTIONS structure and all its subelements.
|
|
//
|
|
// INPUT:
|
|
//
|
|
// [lpActsSrc] -- Ptr to ACTIONS structure to be copied.
|
|
// [lpObject] -- Ptr to an existing MAPI buffer allocated by
|
|
// MAPIAllocateBuffer(), or NULL if the returned structure
|
|
// is to be allocated using MAPIAllocateBuffer().
|
|
// OUTPUT:
|
|
//
|
|
// [lppActsDest] -- Ptr to be set to copy of ACTIONS structure.
|
|
//
|
|
// RETURNS: HRESULT -- NOERROR if successful;
|
|
// E_INVALIDARG if bad input;
|
|
// E_OUTOFMEMORY if insufficient memory;
|
|
// E_FAIL otherwise.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
STDAPI
|
|
HrCopyActions( // RETURNS: HRESULT
|
|
IN LPACTIONS lpActsSrc, // source action ptr
|
|
IN LPVOID lpObject, // ptr to existing MAPI buffer
|
|
OUT LPACTIONS FAR * lppActsDest // ptr to destination ACTIONS buffer
|
|
);
|
|
|
|
|
|
// $--HrCopyRestriction--------------------------------------------------------
|
|
//
|
|
// DESCRIPTION: Make a copy of an SRestriction structure and all its
|
|
// subelements.
|
|
//
|
|
// INPUT:
|
|
//
|
|
// [lpResSrc] -- Ptr to restriction to be copied.
|
|
// [lpObject] -- Ptr to an existing MAPI buffer allocated by
|
|
// MAPIAllocateBuffer(), or NULL if the returned structure
|
|
// is to be allocated using MAPIAllocateBuffer().
|
|
//
|
|
// OUTPUT:
|
|
//
|
|
// [lppResDest] -- Ptr to be set to copy of restriction.
|
|
//
|
|
// RETURNS: NOERROR if successful;
|
|
// E_INVALIDARG if bad input;
|
|
// E_OUTOFMEMORY if insufficient memory;
|
|
// E_FAIL otherwise.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
STDAPI
|
|
HrCopyRestriction( // RETURNS: HRESULT
|
|
IN LPSRestriction lpResSrc, // source restriction ptr
|
|
IN LPVOID lpObject, // ptr to existing MAPI buffer
|
|
OUT LPSRestriction FAR * lppResDest // dest restriction buffer ptr
|
|
);
|
|
|
|
|
|
// $--HrFolderRulesGetProviders------------------------------------------------
|
|
//
|
|
// DESCRIPTION: Get an array of rules provider names for a given folder.
|
|
//
|
|
// INPUT:
|
|
//
|
|
// [lpMDB] -- Pointer to message store containing folder.
|
|
// [cbentryid] -- Number of bytes in folder's entry identifier.
|
|
// [lpentryid] -- Folder's entry identifier.
|
|
//
|
|
// OUTPUT:
|
|
//
|
|
// [lpcProviders] -- Pointer to ulong that will be set to count of
|
|
// providers on successful return.
|
|
// [lpppszProviders] -- Pointer to array of string pointers that will be set
|
|
// to point at an array of provider name string pointers
|
|
// on successful return.
|
|
//
|
|
// RETURNS: NOERROR if successful;
|
|
// E_INVALIDARG if bad input;
|
|
// E_OUTOFMEMORY if not enough memory;
|
|
// E_NOINTERFACE if rules table does not exist on folder;
|
|
// E_FAIL otherwise.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
STDAPI
|
|
HrFolderRulesGetProviders( // RETURNS: HRESULT
|
|
IN LPMDB lpMDB, // MAPI MDB store ptr
|
|
IN ULONG cbentryid, // # bytes in entry ID
|
|
IN LPENTRYID lpentryid, // entry ID ptr
|
|
OUT LPULONG lpcProviders, // count of providers
|
|
OUT LPSTR FAR * FAR * lpppszProviders // ptr to array of providers
|
|
);
|
|
|
|
|
|
// $--HrFolderRulesOpen--------------------------------------------------------
|
|
//
|
|
// DESCRIPTION: Get a pointer to an object which implements the
|
|
// IExchangeFolderRules interface defined in rulecls.h.
|
|
//
|
|
// INPUT:
|
|
//
|
|
// [lpMDB] -- Pointer to message store containing folder.
|
|
// [cbentryid] -- Number of bytes in folder's entry identifier.
|
|
// [lpentryid] -- Folder's entry identifier.
|
|
// [lpszProvider] -- Provider for rules. Multiple providers may have
|
|
// rules on a folder. The IExchangeFolderRules interface
|
|
// provides access to the rules associated with a
|
|
// single specified provider.
|
|
//
|
|
// OUTPUT:
|
|
//
|
|
// [lppFolderRules] -- Pointer to object which supports interface.
|
|
//
|
|
// RETURNS: NOERROR if successful;
|
|
// E_INVALIDARG if bad input;
|
|
// E_OUTOFMEMORY if not enough memory;
|
|
// E_NOINTERFACE if rules table does not exist on folder;
|
|
// E_FAIL otherwise.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
STDAPI
|
|
HrFolderRulesOpen( // RETURNS: HRESULT
|
|
IN LPMDB lpMDB, // MAPI MDB store ptr
|
|
IN ULONG cbentryid, // # bytes in entry ID
|
|
IN LPENTRYID lpentryid, // entry ID ptr
|
|
IN LPSTR lpszProvider, // provider name
|
|
OUT LPFOLDERRULES FAR * lppFolderRules // ptr to folder rules buffer
|
|
);
|
|
|
|
|
|
// $--HrActionToString---------------------------------------------------------
|
|
//
|
|
// DESCRIPTION: Get a string representation of an ACTION.
|
|
//
|
|
// INPUT:
|
|
//
|
|
// [lpSession] -- MAPI session ptr.
|
|
// [lpAction] -- Ptr to ACTION.
|
|
//
|
|
// OUTPUT:
|
|
//
|
|
// [lppszString] -- Ptr to ptr that will be set to point at generated
|
|
// string representation on successful return.
|
|
//
|
|
// RETURNS: NOERROR if successful;
|
|
// E_INVALIDARG if bad input;
|
|
// E_OUTOFMEMORY if not enough memory;
|
|
// E_FAIL otherwise.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
STDAPI
|
|
HrActionToString( // RETURNS: HRESULT
|
|
IN LPMAPISESSION lpSession, // MAPI session ptr
|
|
IN LPACTION lpAction, // action ptr
|
|
OUT LPSTR FAR * lppszString // string ptr ptr
|
|
);
|
|
|
|
|
|
// $--HrRestrictionToString----------------------------------------------------
|
|
//
|
|
// DESCRIPTION: Get a string representation of an SRestriction.
|
|
//
|
|
// INPUT:
|
|
//
|
|
// [lpRestriction] -- Ptr to restriction.
|
|
//
|
|
// OUTPUT:
|
|
//
|
|
// [lppszString] -- Ptr to ptr that will be set to point at generated
|
|
// string representation on successful return.
|
|
//
|
|
// RETURNS: NOERROR if successful;
|
|
// E_INVALIDARG if bad input;
|
|
// E_OUTOFMEMORY if not enough memory;
|
|
// E_FAIL otherwise.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
STDAPI
|
|
HrRestrictionToString( // RETURNS: HRESULT
|
|
IN LPSRestriction lpRestriction, // restriction ptr
|
|
OUT LPSTR FAR * lppszString // string ptr ptr
|
|
);
|
|
|
|
|
|
// $--HrStringToAction---------------------------------------------------------
|
|
//
|
|
// DESCRIPTION: Generate an ACTION structure that describes the action
|
|
// provided in *lpszString.
|
|
//
|
|
// INPUT:
|
|
//
|
|
// [lpSession] -- Ptr to MAPI session.
|
|
// [lpFolder] -- Ptr to MAPI folder action applies to. MUST have been
|
|
// opened with MAPI_MODIFY access.
|
|
// [lpszString] -- Action string specifying ACTION to be generated.
|
|
// [lpObject] -- Ptr to an existing MAPI buffer allocated by
|
|
// MAPIAllocateBuffer(). NULL is not permitted. Ideally,
|
|
// this is a ptr to the parent ACTIONS structure.
|
|
//
|
|
// INPUT/OUTPUT:
|
|
//
|
|
// [lpAction] -- Ptr to ACTION structure that will be filled in. This
|
|
// is allocated by the caller. Ideally, this is a ptr to
|
|
// an ACTION array element that was allocated by the caller
|
|
// using a MAPIAllocateMore() that referenced the parent
|
|
// ACTIONS structure.
|
|
//
|
|
// RETURNS: NOERROR if successful;
|
|
// E_INVALIDARG if bad input;
|
|
// E_OUTOFMEMORY if out of memory;
|
|
// E_FAIL otherwise.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
STDAPI
|
|
HrStringToAction( // RETURNS: HRESULT
|
|
IN LPMAPISESSION lpSession, // ptr to MAPI session
|
|
IN LPMAPIFOLDER lpFolder, // ptr to MAPI folder
|
|
IN LPSTR lpszString, // string ptr
|
|
IN LPVOID lpObject, // ptr to existing MAPI buf
|
|
IN OUT LPACTION lpAction // ACTION ptr
|
|
);
|
|
|
|
|
|
// $--HrStringToRestriction----------------------------------------------------
|
|
//
|
|
// DESCRIPTION: Generate an SRestriction structure that describes the
|
|
// restriction condition provided in *lpszString.
|
|
//
|
|
// INPUT:
|
|
//
|
|
// [lpszString] -- Condition string specifying restriction to be generated.
|
|
// [lpObject] -- Ptr to an existing MAPI buffer allocated by
|
|
// MAPIAllocateBuffer(), or NULL if the returned structure
|
|
// is to be allocated using MAPIAllocateBuffer().
|
|
//
|
|
// OUTPUT:
|
|
//
|
|
// [lppRestriction] -- Ptr to ptr that will be set to point at generated
|
|
// restriction on successful return.
|
|
//
|
|
// RETURNS: NOERROR if successful;
|
|
// E_INVALIDARG if bad input;
|
|
// E_FAIL otherwise.
|
|
//
|
|
// Conditional expression grammar used for HrStringToRestriction()
|
|
// lpszString parameter:
|
|
//
|
|
// Condition ::= SimpleCondition |
|
|
// Condition "|" Condition |
|
|
// Condition "&" Condition |
|
|
// "(" Condition ")" |
|
|
// "!" Condition
|
|
//
|
|
// "|" is the logical OR operator.
|
|
// "&" is the logical AND operator.
|
|
// "!" is the logical NOT operator.
|
|
//
|
|
// Conditional expressions are evaluated from left to right with "|" and "&"
|
|
// having equal precedence. "!" is a unary operator that applies to the operand
|
|
// to its immediate right.
|
|
//
|
|
// SimpleCondition ::= BooleanCondition |
|
|
// NumericCondition |
|
|
// StringCondition |
|
|
// TimeCondition
|
|
//
|
|
// BooleanCondition ::= BoolTag "=" BooleanLiteral
|
|
//
|
|
// NumericCondition ::= NumericTag "=" NumericLiteral |
|
|
// NumericTag "#" NumericLiteral |
|
|
// NumericTag ">" NumericLiteral |
|
|
// NumericTag "<" NumericLiteral
|
|
//
|
|
// The meaning of the NumericCondition operators should be evident.
|
|
//
|
|
// StringCondition ::= StringTag "=" StringLiteral |
|
|
// StringTag "#" StringLiteral |
|
|
// StringTag "}" StringLiteral
|
|
//
|
|
// "=" is the equality operator.
|
|
// "#" is the inequality operator.
|
|
// "}" is the contains operator (a "}" b means a contains b).
|
|
//
|
|
// TimeCondition ::= TimeTag "=" TimeLiteral |
|
|
// TimeTag "#" TimeLiteral |
|
|
// TimeTag ">" TimeLiteral |
|
|
// TimeTag "<" TimeLiteral
|
|
//
|
|
// Note that time literals have a resolution of 1 second, so equality and
|
|
// inequality may not be the best conditional tests.
|
|
//
|
|
// BoolTag ::= PT_xxx for a property with a boolean (PT_BOOLEAN) value |
|
|
// "[B" HexNumber "]"
|
|
//
|
|
// NumericTag ::= PR_xxxx for a property with a numeric (PT_LONG) value |
|
|
// "[N" HexNumber "]"
|
|
//
|
|
// StringTag ::= PR_xxxx for a property with a string
|
|
// (PT_STRING8 or PT_UNICODE) value |
|
|
// "[S" HexNumber "]"
|
|
//
|
|
// TimeTag ::= PR_xxxx for a property with a time (PT_SYSTIME) value |
|
|
// "[T" HexNumber "]"
|
|
//
|
|
// BooleanLiteral ::= "0" |
|
|
// "1"
|
|
//
|
|
// NumericLiteral ::= DecimalNumber
|
|
//
|
|
// StringLiteral ::= String enclosed in quotes ("xxx").
|
|
//
|
|
// TimeLiteral ::= HH:MM{:SS} YYYY-MM-DD (24 hour clock, local time)
|
|
//
|
|
// DecimalNumber ::= DecimalDigit... |
|
|
// +DecimalDigit... |
|
|
// -DecimalDigit...
|
|
//
|
|
// HexNumber ::= HexDigit...
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
STDAPI
|
|
HrStringToRestriction( // RETURNS: HRESULT
|
|
IN LPSTR lpszString, // string
|
|
IN LPVOID lpObject, // ptr to existing MAPI buf
|
|
OUT LPSRestriction FAR * lppRestriction // restriction buffer ptr
|
|
);
|
|
|
|
|
|
#endif
|