Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

147 lines
6.0 KiB

/*************************************************************************
* *
* GROUP.H *
* *
* Copyright (C) Microsoft Corporation 1990-1995 *
* All Rights reserved. *
* *
**************************************************************************
* *
* Module Intent *
* All typedefs and defines needed for group *
* *
**************************************************************************
* *
* Current Owner: GarrG *
* *
**************************************************************************
* *
* Released by Development: (date) *
* *
**************************************************************************
* Requires:
* mverror.h
*/
#include <_mvutil.h>
// Critical structures that gets messed up in /Zp8
#pragma pack(1)
#define FILE_HDR_SIZE 40
/*************************************************************************
* Basic defines.
*************************************************************************/
#if defined( __cplusplus )
extern "C" {
#endif
/*
* Various files stamps.
* This is to distinguish one file's type from another
*/
#define GROUP_STAMP 0x3333
#define GROUPVER ((WORD)20)
#define VALIDATE_GROUP(lpGroup) {\
if (lpGroup == NULL || (lpGroup->version < 7 || lpGroup->version > GROUPVER) || lpGroup->FileStamp != GROUP_STAMP)\
return E_FAIL;\
return S_OK;\
}
#define GROUPISBITSET(lpGroup, dwBit) \
(lpGroup->lpbGrpBitVect[((dwBit) / 8)] & (1 << ((dwBit) % 8)))
/*************************************************************************
*
* Group Structure & Global Functions
*
*************************************************************************/
#define GROUP_HDR_SIZE FILE_HDR_SIZE
typedef DWORD LIBITGROUP;
/* Information that goes into the group file */
#define GROUP_HEADER \
unsigned short FileStamp; /* Group stamp */ \
WORD version; /* Version number */ \
DWORD dwSize; /* Group size in bytes */ \
DWORD maxItem; /* Largest item in group */ \
DWORD minItem; /* Smallest item in group */ \
DWORD lcItem; /* Item's count */ \
DWORD maxItemAllGroup; /* Maximum item of all groups */ \
WORD fFlag
typedef struct GROUP_HDR {
GROUP_HEADER;
} GROUP_HDR;
#define BITVECT_GROUP 0 // Normal bit vector group
#define HILO_GROUP 1 // HiLo group : no associated bit vector, only hi
// &lo values
#define TRIMMED_GROUP 2 // Trimmed group : bit vector only contains bytes
// between lo & hi
#define DISKCOMP_GROUP 3 // Disk Compression used
// Must be expanded upon readin, becomes BITVECT_GROUP
#define DISKCOMP_TRIMMED_GROUP 4 // Disk Compression used
// Must be expanded upon readin, becomes TRIMMED_GROUP
/* Group structure */
/* Regular bit vector group */
typedef struct tagGroup {
GROUP_HEADER;
LPERRB lperr; // Pointer to error buffer
LPBYTE lpbGrpBitVect; // Pointer to group bit vector
HANDLE hGrpBitVect; // Handle to "lpbGrpBitVect".
HANDLE hGroup; // Handle to this structure.
LPSTR lszGroupName; // Group name
DWORD dwIndex; // Group index
struct tagGroup FAR * lpGrpNext; // Next group in the linked list
DWORD dwCount; // for faster GroupFind
UINT nCache; // for faster GroupFind = # of bytes for dwCount
WORD wFlag;
} _GROUP, // winsock2.h defines GROUP
FAR *_LPGROUP;
#define GROUP_EXPAND 1
#define GROUP_BLOCK_SIZE 256
#define LCBITGROUPMAX ((DWORD)0x10000000) // This is the number of bits
// that can fit into 32 Meg
// all of the functions provided by the Group.lib
// in groupcom.c
ERR FAR PASCAL GroupAddItem(LPVOID, DWORD);
_LPGROUP FAR PASCAL GroupInitiate(DWORD, LPERRB);
DWORD FAR PASCAL LrgbBitCount(LPBYTE, DWORD);
PUBLIC DWORD FAR PASCAL LrgbBitFind(LPBYTE, DWORD, BYTE FAR *);
_LPGROUP FAR PASCAL GroupCreate (DWORD, DWORD, LPERRB);
VOID FAR PASCAL GroupFree(_LPGROUP lpGroup);
PUBLIC int PASCAL FAR GroupFileBuild
(HFPB hfpbSysFile, LPSTR lszGrpFilename, _LPGROUP lpGroup);
ERR FAR PASCAL GroupRemoveItem(_LPGROUP lpGroup, DWORD dwGrpItem);
int PASCAL FAR GroupTrimmed (_LPGROUP lpGroup);
PUBLIC _LPGROUP FAR PASCAL GroupOr(_LPGROUP lpGroup1,_LPGROUP lpGroup2, LPERRB lperr);
PUBLIC _LPGROUP FAR PASCAL GroupNot(_LPGROUP lpGroup,LPERRB lperr);
PUBLIC _LPGROUP FAR PASCAL GroupAnd(_LPGROUP lpGroup1,_LPGROUP lpGroup2, LPERRB lperr);
PUBLIC DWORD FAR PASCAL GroupFind(_LPGROUP lpGroup, DWORD dwCount, LPERRB lperrb);
PUBLIC DWORD FAR PASCAL GroupFindOffset(_LPGROUP lpGroup, DWORD dwCount, LPERRB lperrb);
PUBLIC _LPGROUP PASCAL FAR GroupDuplicate (_LPGROUP lpGroup,LPERRB lperr);
PUBLIC ERR PASCAL FAR GroupCopy (_LPGROUP lpGroupDst, _LPGROUP lpGroupSrc);
PUBLIC BOOL FAR PASCAL GroupIsBitSet (_LPGROUP lpGroup, DWORD dwTopicNum);
_LPGROUP PASCAL FAR GroupMake (LPBYTE lpBits, DWORD dwSize, DWORD dwItems);
_LPGROUP PASCAL FAR GroupBufferCreate (HANDLE h, LPERRB lperrb);
#if defined( __cplusplus )
}
#endif
// Critical structures that gets messed up in /Zp8
#pragma pack()