|
|
/*************************************************************************
* * * 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()
|