msi: Directly register the typelib if it's not embedded in a PE module.
[wine/gsoc_dplay.git] / programs / winhlp32 / hlpfile.h
blob5097259d27033802e88a27f6484464abd855b4f2
1 /*
2 * Help Viewer
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
23 struct tagHelpFile;
25 typedef struct
27 char type[10];
28 char name[9];
29 char caption[51];
30 POINT origin;
31 SIZE size;
32 int style;
33 DWORD win_style;
34 COLORREF sr_color; /* color for scrollable region */
35 COLORREF nsr_color; /* color for non scrollable region */
36 } HLPFILE_WINDOWINFO;
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) */
45 DWORD cpMin;
46 DWORD cpMax;
47 struct tagHlpFileLink* next;
48 } HLPFILE_LINK;
50 typedef struct tagHlpFileMacro
52 LPCSTR lpszMacro;
53 struct tagHlpFileMacro* next;
54 } HLPFILE_MACRO;
56 typedef struct tagHlpFilePage
58 LPSTR lpszTitle;
59 HLPFILE_MACRO* first_macro;
61 HLPFILE_LINK* first_link;
63 unsigned wNumber;
64 unsigned offset;
65 DWORD reference;
66 struct tagHlpFilePage* next;
67 struct tagHlpFilePage* prev;
69 DWORD browse_bwd;
70 DWORD browse_fwd;
72 struct tagHlpFileFile* file;
73 } HLPFILE_PAGE;
75 typedef struct
77 LONG lMap;
78 unsigned long offset;
79 } HLPFILE_MAP;
81 typedef struct
83 LOGFONT LogFont;
84 HFONT hFont;
85 COLORREF color;
86 } HLPFILE_FONT;
88 typedef struct tagHlpFileFile
90 BYTE* file_buffer;
91 UINT file_buffer_size;
92 LPSTR lpszPath;
93 LPSTR lpszTitle;
94 LPSTR lpszCopyright;
95 HLPFILE_PAGE* first_page;
96 HLPFILE_PAGE* last_page;
97 HLPFILE_MACRO* first_macro;
98 BYTE* Context;
99 BYTE* kwbtree;
100 BYTE* kwdata;
101 unsigned wMapLen;
102 HLPFILE_MAP* Map;
103 unsigned long contents_start;
105 struct tagHlpFileFile* prev;
106 struct tagHlpFileFile* next;
108 unsigned wRefCount;
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 */
118 UINT num_phrases;
119 unsigned* phrases_offsets;
120 char* phrases_buffer;
122 BYTE** topic_map;
123 BYTE* topic_end;
124 UINT topic_maplen;
126 unsigned numBmps;
127 HBITMAP* bmps;
129 unsigned numFonts;
130 HLPFILE_FONT* fonts;
132 unsigned numWindows;
133 HLPFILE_WINDOWINFO* windows;
134 HICON hIcon;
136 BOOL has_popup_color;
137 COLORREF popup_color;
139 LPSTR help_on_file;
140 } HLPFILE;
143 * Compare function type for HLPFILE_BPTreeSearch function.
145 * PARAMS
146 * p [I] pointer to testing block (key + data)
147 * key [I] pointer to key value to look for
148 * leaf [I] whether this function called for index of leaf page
149 * next [O] pointer to pointer to next block
151 typedef int (*HLPFILE_BPTreeCompare)(void *p, const void *key,
152 int leaf, void **next);
155 * Callback function type for HLPFILE_BPTreeEnum function.
157 * PARAMS
158 * p [I] pointer to data block
159 * next [O] pointer to pointer to next block
160 * cookie [IO] cookie data
162 typedef void (*HLPFILE_BPTreeCallback)(void *p, void **next, void *cookie);
164 HLPFILE* HLPFILE_ReadHlpFile(LPCSTR lpszPath);
165 HLPFILE_PAGE* HLPFILE_Contents(HLPFILE* hlpfile, ULONG* relative);
166 HLPFILE_PAGE* HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash, ULONG* relative);
167 HLPFILE_PAGE* HLPFILE_PageByMap(HLPFILE* hlpfile, LONG lMap, ULONG* relative);
168 HLPFILE_PAGE* HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset, ULONG* relative);
169 LONG HLPFILE_Hash(LPCSTR lpszContext);
170 void HLPFILE_FreeHlpFile(HLPFILE*);
171 unsigned HLPFILE_HalfPointsToTwips(unsigned pts);
173 static inline unsigned HLPFILE_PointsToTwips(unsigned pts)
175 return HLPFILE_HalfPointsToTwips(2 * pts);
178 void* HLPFILE_BPTreeSearch(BYTE*, const void*, HLPFILE_BPTreeCompare);
179 void HLPFILE_BPTreeEnum(BYTE*, HLPFILE_BPTreeCallback cb, void *cookie);
181 struct RtfData {
182 BOOL in_text;
183 char* data; /* RTF stream start */
184 char* ptr; /* current position in stream */
185 unsigned allocated; /* overall allocated size */
186 unsigned char_pos; /* current char position (in richedit) */
187 char* where; /* pointer to feed back richedit */
188 unsigned font_scale; /* how to scale fonts */
189 HLPFILE_LINK*first_link;
190 HLPFILE_LINK*current_link;
191 BOOL force_color;
192 unsigned relative; /* offset within page to lookup for */
193 unsigned char_pos_rel; /* char_pos correspondinf to relative */
196 BOOL HLPFILE_BrowsePage(HLPFILE_PAGE*, struct RtfData* rd,
197 unsigned font_scale, unsigned relative);