Kirill K. Smirnov : winhelp: Read keywords.
Alexandre Julliard
julliard at winehq.org
Thu Dec 13 08:23:11 CST 2007
Module: wine
Branch: master
Commit: 6a2ad1b4796285384e9555e1dccdf52be2749e03
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6a2ad1b4796285384e9555e1dccdf52be2749e03
Author: Kirill K. Smirnov <lich at math.spbu.ru>
Date: Thu Dec 13 00:56:09 2007 +0300
winhelp: Read keywords.
---
programs/winhelp/hlpfile.c | 35 +++++++++++++++++++++++++++++++++++
programs/winhelp/hlpfile.h | 2 ++
2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/programs/winhelp/hlpfile.c b/programs/winhelp/hlpfile.c
index 88cfabb..ff041ec 100644
--- a/programs/winhelp/hlpfile.c
+++ b/programs/winhelp/hlpfile.c
@@ -86,6 +86,7 @@ static BOOL HLPFILE_UncompressLZ77_Phrases(HLPFILE*);
static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE*);
static BOOL HLPFILE_Uncompress_Topic(HLPFILE*);
static BOOL HLPFILE_GetContext(HLPFILE*);
+static BOOL HLPFILE_GetKeywords(HLPFILE*);
static BOOL HLPFILE_GetMap(HLPFILE*);
static BOOL HLPFILE_AddPage(HLPFILE*, BYTE*, BYTE*, unsigned);
static BOOL HLPFILE_AddParagraph(HLPFILE*, BYTE *, BYTE*, unsigned*);
@@ -393,6 +394,7 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath)
ref = GET_UINT(buf, 0xc);
} while (ref != 0xffffffff);
+ HLPFILE_GetKeywords(hlpfile);
HLPFILE_GetMap(hlpfile);
if (hlpfile->version <= 16) return TRUE;
return HLPFILE_GetContext(hlpfile);
@@ -2026,6 +2028,39 @@ static BOOL HLPFILE_GetContext(HLPFILE *hlpfile)
/***********************************************************************
*
+ * HLPFILE_GetKeywords
+ */
+static BOOL HLPFILE_GetKeywords(HLPFILE *hlpfile)
+{
+ BYTE *cbuf, *cend;
+ unsigned clen;
+
+ if (!HLPFILE_FindSubFile("|KWBTREE", &cbuf, &cend)) return FALSE;
+ clen = cend - cbuf;
+ hlpfile->kwbtree = HeapAlloc(GetProcessHeap(), 0, clen);
+ if (!hlpfile->kwbtree) return FALSE;
+ memcpy(hlpfile->kwbtree, cbuf, clen);
+
+ if (!HLPFILE_FindSubFile("|KWDATA", &cbuf, &cend))
+ {
+ WINE_ERR("corrupted help file: kwbtree present but kwdata absent\n");
+ HeapFree(GetProcessHeap(), 0, hlpfile->kwbtree);
+ return FALSE;
+ }
+ clen = cend - cbuf;
+ hlpfile->kwdata = HeapAlloc(GetProcessHeap(), 0, clen);
+ if (!hlpfile->kwdata)
+ {
+ HeapFree(GetProcessHeap(), 0, hlpfile->kwdata);
+ return FALSE;
+ }
+ memcpy(hlpfile->kwdata, cbuf, clen);
+
+ return TRUE;
+}
+
+/***********************************************************************
+ *
* HLPFILE_GetMap
*/
static BOOL HLPFILE_GetMap(HLPFILE *hlpfile)
diff --git a/programs/winhelp/hlpfile.h b/programs/winhelp/hlpfile.h
index 8c9e201..7e6e6e5 100644
--- a/programs/winhelp/hlpfile.h
+++ b/programs/winhelp/hlpfile.h
@@ -124,6 +124,8 @@ typedef struct tagHlpFileFile
HLPFILE_PAGE* first_page;
HLPFILE_MACRO* first_macro;
BYTE* Context;
+ BYTE* kwbtree;
+ BYTE* kwdata;
unsigned wMapLen;
HLPFILE_MAP* Map;
unsigned long contents_start;
More information about the wine-cvs
mailing list