4 * Copyright 1996 Ulrich Schmid
5 * 2002, 2008 Eric Pouech
6 * 2007 Kirill K. Smirnov
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
34 COLORREF sr_color
; /* color for scrollable region */
35 COLORREF nsr_color
; /* color for non scrollable region */
38 typedef struct tagHlpFileLink
40 enum {hlp_link_link
, hlp_link_popup
, hlp_link_macro
} cookie
;
41 LPCSTR string
; /* name of the file to for the link (NULL if same file) */
42 LONG hash
; /* topic index */
43 unsigned bClrChange
: 1; /* true if the link is green & underlined */
44 unsigned window
; /* window number for displaying the link (-1 is current) */
47 struct tagHlpFileLink
* next
;
50 typedef struct tagHlpFileMacro
53 struct tagHlpFileMacro
* next
;
56 typedef struct tagHlpFilePage
59 HLPFILE_MACRO
* first_macro
;
61 HLPFILE_LINK
* first_link
;
66 struct tagHlpFilePage
* next
;
67 struct tagHlpFilePage
* prev
;
72 struct tagHlpFileFile
* file
;
88 typedef struct tagHlpFileFile
91 UINT file_buffer_size
;
95 HLPFILE_PAGE
* first_page
;
96 HLPFILE_PAGE
* last_page
;
97 HLPFILE_MACRO
* first_macro
;
103 unsigned long contents_start
;
105 struct tagHlpFileFile
* prev
;
106 struct tagHlpFileFile
* next
;
110 unsigned short version
;
111 unsigned short flags
;
112 unsigned short charset
;
113 unsigned short tbsize
; /* topic block size */
114 unsigned short dsize
; /* decompress size */
115 unsigned short compressed
;
116 unsigned hasPhrases
; /* file has |Phrases */
117 unsigned hasPhrases40
; /* file has |PhrIndex/|PhrImage */
119 unsigned* phrases_offsets
;
120 char* phrases_buffer
;
133 HLPFILE_WINDOWINFO
* windows
;
138 * Compare function type for HLPFILE_BPTreeSearch function.
141 * p [I] pointer to testing block (key + data)
142 * key [I] pointer to key value to look for
143 * leaf [I] whether this function called for index of leaf page
144 * next [O] pointer to pointer to next block
146 typedef int (*HLPFILE_BPTreeCompare
)(void *p
, const void *key
,
147 int leaf
, void **next
);
150 * Callback function type for HLPFILE_BPTreeEnum function.
153 * p [I] pointer to data block
154 * next [O] pointer to pointer to next block
155 * cookie [IO] cookie data
157 typedef void (*HLPFILE_BPTreeCallback
)(void *p
, void **next
, void *cookie
);
159 HLPFILE
* HLPFILE_ReadHlpFile(LPCSTR lpszPath
);
160 HLPFILE_PAGE
* HLPFILE_Contents(HLPFILE
* hlpfile
, ULONG
* relative
);
161 HLPFILE_PAGE
* HLPFILE_PageByHash(HLPFILE
* hlpfile
, LONG lHash
, ULONG
* relative
);
162 HLPFILE_PAGE
* HLPFILE_PageByMap(HLPFILE
* hlpfile
, LONG lMap
, ULONG
* relative
);
163 HLPFILE_PAGE
* HLPFILE_PageByOffset(HLPFILE
* hlpfile
, LONG offset
, ULONG
* relative
);
164 LONG
HLPFILE_Hash(LPCSTR lpszContext
);
165 void HLPFILE_FreeHlpFile(HLPFILE
*);
166 unsigned HLPFILE_HalfPointsToTwips(unsigned pts
);
168 static inline unsigned HLPFILE_PointsToTwips(unsigned pts
)
170 return HLPFILE_HalfPointsToTwips(2 * pts
);
173 void* HLPFILE_BPTreeSearch(BYTE
*, const void*, HLPFILE_BPTreeCompare
);
174 void HLPFILE_BPTreeEnum(BYTE
*, HLPFILE_BPTreeCallback cb
, void *cookie
);
178 char* data
; /* RTF stream start */
179 char* ptr
; /* current position in stream */
180 unsigned allocated
; /* overall allocated size */
181 unsigned char_pos
; /* current char position (in richedit) */
182 char* where
; /* pointer to feed back richedit */
183 unsigned font_scale
; /* how to scale fonts */
184 HLPFILE_LINK
*first_link
;
185 HLPFILE_LINK
*current_link
;
187 unsigned relative
; /* offset within page to lookup for */
188 unsigned char_pos_rel
; /* char_pos correspondinf to relative */
191 BOOL
HLPFILE_BrowsePage(HLPFILE_PAGE
*, struct RtfData
* rd
,
192 unsigned font_scale
, unsigned relative
);