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