Kirill K. Smirnov : winhlp32: Load internal file containing pagenum-> topicoffset mapping.

Alexandre Julliard julliard at winehq.org
Tue Aug 19 08:46:59 CDT 2008


Module: wine
Branch: master
Commit: deb98a4e83837fa8d575c32302edb1516d21dc2b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=deb98a4e83837fa8d575c32302edb1516d21dc2b

Author: Kirill K. Smirnov <lich at math.spbu.ru>
Date:   Wed Aug  6 19:47:11 2008 +0400

winhlp32: Load internal file containing pagenum->topicoffset mapping.

---

 programs/winhlp32/hlpfile.c |   23 +++++++++++++++++++++++
 programs/winhlp32/hlpfile.h |    2 ++
 2 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/programs/winhlp32/hlpfile.c b/programs/winhlp32/hlpfile.c
index 05d5347..c941bbd 100644
--- a/programs/winhlp32/hlpfile.c
+++ b/programs/winhlp32/hlpfile.c
@@ -63,6 +63,7 @@ static BOOL  HLPFILE_Uncompress_Topic(HLPFILE*);
 static BOOL  HLPFILE_GetContext(HLPFILE*);
 static BOOL  HLPFILE_GetKeywords(HLPFILE*);
 static BOOL  HLPFILE_GetMap(HLPFILE*);
+static BOOL  HLPFILE_GetTOMap(HLPFILE*);
 static BOOL  HLPFILE_AddPage(HLPFILE*, const BYTE*, const BYTE*, unsigned, unsigned);
 static BOOL  HLPFILE_SkipParagraph(HLPFILE*, const BYTE*, const BYTE*, unsigned*);
 static void  HLPFILE_Uncompress2(HLPFILE*, const BYTE*, const BYTE*, BYTE*, const BYTE*);
@@ -293,6 +294,8 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath)
 
     if (!HLPFILE_SystemCommands(hlpfile)) return FALSE;
 
+    if (hlpfile->version <= 16 && !HLPFILE_GetTOMap(hlpfile)) return FALSE;
+
     /* load phrases support */
     if (!HLPFILE_UncompressLZ77_Phrases(hlpfile))
         HLPFILE_Uncompress_Phrases40(hlpfile);
@@ -2577,6 +2580,26 @@ static BOOL HLPFILE_GetMap(HLPFILE *hlpfile)
 
 /***********************************************************************
  *
+ *           HLPFILE_GetTOMap
+ */
+static BOOL HLPFILE_GetTOMap(HLPFILE *hlpfile)
+{
+    BYTE                *cbuf, *cend;
+    unsigned            clen;
+
+    if (!HLPFILE_FindSubFile(hlpfile, "|TOMAP",  &cbuf, &cend))
+    {WINE_WARN("no tomap section\n"); return FALSE;}
+
+    clen = cend - cbuf - 9;
+    hlpfile->TOMap = HeapAlloc(GetProcessHeap(), 0, clen);
+    if (!hlpfile->TOMap) return FALSE;
+    memcpy(hlpfile->TOMap, cbuf+9, clen);
+    hlpfile->wTOMapLen = clen/4;
+    return TRUE;
+}
+
+/***********************************************************************
+ *
  *           DeleteMacro
  */
 static void HLPFILE_DeleteMacro(HLPFILE_MACRO* macro)
diff --git a/programs/winhlp32/hlpfile.h b/programs/winhlp32/hlpfile.h
index 5097259..b0d1f23 100644
--- a/programs/winhlp32/hlpfile.h
+++ b/programs/winhlp32/hlpfile.h
@@ -100,6 +100,8 @@ typedef struct tagHlpFileFile
     BYTE*                       kwdata;
     unsigned                    wMapLen;
     HLPFILE_MAP*                Map;
+    unsigned                    wTOMapLen;
+    unsigned*                   TOMap;
     unsigned long               contents_start;
 
     struct tagHlpFileFile*      prev;




More information about the wine-cvs mailing list