|
|
/************************************************************************
* * WWHEEL.H * * Copyright (c) Microsoft Corporation 1993 * All rights reserved. * ************************************************************************* * * The WordWheel API * * ************************************************************************/
#ifndef __WWHEEL_H_
#define __WWHEEL_H_
#include <mvopsys.h>
//#include <itww.h>
#include <itgroup.h>
#include "common.h"
#include <wrapstor.h>
#include <orkin.h>
#ifdef __cplusplus
extern "C" { #endif
/*****************************************************************************
* * error handling defines * * many routines are structured to have a single exit point labelled * "cleanup". The following defines are a procedure-level "break" * that force execution to drop down to cleanup. * *****************************************************************************/ #ifdef _DEBUG
#define warning_abort { DPF("\nwarning, %s, line %u\n", \
(LPSTR)s_aszModule, __LINE__); goto cleanup; } #else
#define warning_abort { goto cleanup; }
#endif
#define assert_abort { assert(FALSE); goto cleanup; }
// Typedefs
//
typedef HANDLE HWHEEL;
// Critical structures that gets messed up in /Zp8
#pragma pack(1)
typedef struct tagWHEELINFO { DWORD magic; // magic value for verification
HBT hbt; // handle to btree subfile
HMAPBT hmapbt; // handle to map subfile
long lNumKws; // number of keywords in the word wheel.
LPIDX lpIndex; // index for searching.
HF hf; // handle to keyword index subfile
LPBYTE pOccHdr; // Header for occurrence properties
LPBYTE pKeyHdr; // Header for key properties
} WHEELINFO, FAR * PWHEELINFO;
typedef struct { DWORD magic; // magic value for verification
HANDLE hMergeData; // Handle to merge data info if using multiple titles
DWORD dwMergeLength; // Length in bytes of merge data for this wheel combo
LONG lNumEntries; // Total number of 'virtual' (could be filtered) entries (same as lNumKws if one title)
LPSTR lpszCacheData; // Key for cached data following
HANDLE hCacheData; // Results of last KeyIndexGet call
DWORD dwCacheNumItems; // Cached number of items from last KeyIndexGet call
DWORD wNumWheels; // Number of titles for merging
WHEELINFO pInfo[1]; // Info for each particular title
IITGroup* pIITGroup; // Group for filtering
LONG lNumRealEntries; // Real number of entries (without filtering).
LPSIPB lpsipb; // Stop word structure for full-text search
} WHEEL, FAR *PWHEEL;
typedef struct { WORD nTopics; DWORD dwOffset; } QREC;
// Critical structures that gets messed up in /Zp8
#pragma pack()
// Defines
//
// This must be at least as big as CBMAX_WWTITLE defined in ciextern.h
#define MAXWHEELNAME 80
// magic is "WW!\0"
#define WHEEL_MAGIC 0x00215757
#define WHEEL_INFO_MAGIC 0x00215758
#define PWHEEL_OK(p) ((p)!=NULL&&(p)->magic==WHEEL_MAGIC)
#define MERGEFILE_HEADERSIZE 1024
#define MERGEFILE_HEADERALIGN 32
#define MERGEFILE_FILEALIGN 8
#define MERGEFILE_ENTRYSIZE 32
typedef struct mergefile_tag { HFPB hfpb; WORD wNumRecords; LONG lctFile; LONG lHeaderBlockStart; char szHeader[MERGEFILE_HEADERSIZE]; } MERGEFILE, FAR * LPMERGEFILE;
#if 0
#define MERGEFILE_WW_TRE_EXT ".WWT"
#define MERGEFILE_WW_DAT_EXT ".WWD"
#define MERGEFILE_WW_IDX_EXT ".WWI"
#define MERGEFILE_WW_MAP_EXT ".WWM"
#define MERGEFILE_WW_STP_EXT ".WWS"
#define MERGEFILE_KW_TRE_EXT ".KWT"
#define MERGEFILE_KW_DAT_EXT ".KWD"
#define MERGEFILE_KW_IDX_EXT ".KWI"
#define MERGEFILE_KW_MAP_EXT ".KWM"
#define MERGEFILE_KW_STP_EXT ".STP"
#define WW_BTREE_FILENAME L"BTREE.WW3"
#define WW_DATA_FILENAME L"DATA.WW3"
#define WW_MAP_FILENAME L"MAP.WW3"
#define WW_PROP_FILENAME L"PROPERTY.WW3"
#define WW_INDEX_FILENAME L"FTI.WW3"
#define WW_STOP_FILENAME L"FTISTOP.WW3"
#endif
// Prototypes
//ERR FAR PASCAL EXPORT_API WordWheelQuery(HANDLE hWheel, DWORD dwFlags,LPCSTR lpstrQuery,LPVOID lpGroupLimit,LPVOID lpGroupHits);
HWHEEL FAR PASCAL EXPORT_API WordWheelOpen(IITDatabase* lpITDB, IStorage* pWWStorage, HRESULT* phr);
void FAR PASCAL EXPORT_API WordWheelClose(HWHEEL hWheel); long FAR PASCAL EXPORT_API WordWheelLength(HWHEEL hWheel, HRESULT* phr); long FAR PASCAL EXPORT_API WordWheelPrefix(HWHEEL hWheel,LPCVOID lpcvPrefix, BOOL fExactMatch, HRESULT* phr); HRESULT FAR PASCAL EXPORT_API WordWheelLookup(HWHEEL hWheel, long lIndex, LPVOID lpvKeyBuf, DWORD cbKeyBuf); //ERR FAR PASCAL EXPORT_API KeyIndexGetAddrs (HWHEEL hWheel, LPBYTE lpKey, int nStart, int nCount, LPBYTE lpAddrs);
//DWORD FAR PASCAL EXPORT_API KeyIndexGetData (HWHEEL hWheel, LPBYTE lpKey, int nWhich, LPBYTE lpMem, DWORD dwMaxLen, LPERRB lperrb);
//WORD FAR PASCAL EXPORT_API KeyIndexGetCount (HWHEEL,LPBYTE, LPERRB);
//ERR FAR PASCAL EXPORT_API WordWheelSetKeyFilter(HWHEEL, LPVOID);
//LPVOID FAR PASCAL EXPORT_API WordWheelGetKeyFilter(HWHEEL, LPERRB);
//ERR FAR PASCAL EXPORT_API WordWheelGetInfo (HWHEEL, PWWINFO);
HRESULT FAR PASCAL CheckWordWheelKeyType(HBT hbt, IITSortKey **ppITSortKey); DWORD FAR PASCAL CbKeyWordWheel(LPVOID lpvKey, IITSortKey *pITSortKey);
#ifdef __cplusplus
} #endif
#endif // __WWHEEL_H_
|