[TASKMGR]
[reactos.git] / base / applications / winhlp32 / hlpfile.h
1 /*
2 * Help Viewer
3 *
4 * Copyright 1996 Ulrich Schmid
5 * 2002, 2008 Eric Pouech
6 * 2007 Kirill K. Smirnov
7 *
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.
12 *
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.
17 *
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
21 */
22
23 struct tagHelpFile;
24
25 typedef struct
26 {
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;
37
38 typedef struct tagHlpFileLink
39 {
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 bHotSpot : 1; /* true if the link is an hotspot (actually HLPFILE_HOTSPOTLINK) */
45 unsigned window; /* window number for displaying the link (-1 is current) */
46 DWORD cpMin;
47 DWORD cpMax;
48 struct tagHlpFileLink* next;
49 } HLPFILE_LINK;
50
51 typedef struct tagHlpFileHotSpotLink
52 {
53 HLPFILE_LINK link;
54 unsigned x;
55 unsigned y;
56 unsigned width;
57 unsigned height;
58 } HLPFILE_HOTSPOTLINK;
59
60 typedef struct tagHlpFileMacro
61 {
62 LPCSTR lpszMacro;
63 struct tagHlpFileMacro* next;
64 } HLPFILE_MACRO;
65
66 typedef struct tagHlpFilePage
67 {
68 LPSTR lpszTitle;
69 HLPFILE_MACRO* first_macro;
70
71 HLPFILE_LINK* first_link;
72
73 unsigned wNumber;
74 unsigned offset;
75 DWORD reference;
76 struct tagHlpFilePage* next;
77 struct tagHlpFilePage* prev;
78
79 DWORD browse_bwd;
80 DWORD browse_fwd;
81
82 struct tagHlpFileFile* file;
83 } HLPFILE_PAGE;
84
85 typedef struct
86 {
87 LONG lMap;
88 unsigned long offset;
89 } HLPFILE_MAP;
90
91 typedef struct
92 {
93 LOGFONT LogFont;
94 HFONT hFont;
95 COLORREF color;
96 } HLPFILE_FONT;
97
98 typedef struct tagHlpFileFile
99 {
100 BYTE* file_buffer;
101 UINT file_buffer_size;
102 LPSTR lpszPath;
103 LPSTR lpszTitle;
104 LPSTR lpszCopyright;
105 HLPFILE_PAGE* first_page;
106 HLPFILE_PAGE* last_page;
107 HLPFILE_MACRO* first_macro;
108 BYTE* Context;
109 BYTE* kwbtree;
110 BYTE* kwdata;
111 unsigned wMapLen;
112 HLPFILE_MAP* Map;
113 unsigned wTOMapLen;
114 unsigned* TOMap;
115 unsigned long contents_start;
116
117 struct tagHlpFileFile* prev;
118 struct tagHlpFileFile* next;
119
120 unsigned wRefCount;
121
122 unsigned short version;
123 unsigned short flags;
124 unsigned short charset;
125 unsigned short tbsize; /* topic block size */
126 unsigned short dsize; /* decompress size */
127 unsigned short compressed;
128 unsigned hasPhrases; /* file has |Phrases */
129 unsigned hasPhrases40; /* file has |PhrIndex/|PhrImage */
130 UINT num_phrases;
131 unsigned* phrases_offsets;
132 char* phrases_buffer;
133
134 BYTE** topic_map;
135 BYTE* topic_end;
136 UINT topic_maplen;
137
138 unsigned numBmps;
139 HBITMAP* bmps;
140
141 unsigned numFonts;
142 HLPFILE_FONT* fonts;
143
144 unsigned numWindows;
145 HLPFILE_WINDOWINFO* windows;
146 HICON hIcon;
147
148 BOOL has_popup_color;
149 COLORREF popup_color;
150
151 LPSTR help_on_file;
152 } HLPFILE;
153
154 /*
155 * Compare function type for HLPFILE_BPTreeSearch function.
156 *
157 * PARAMS
158 * p [I] pointer to testing block (key + data)
159 * key [I] pointer to key value to look for
160 * leaf [I] whether this function called for index of leaf page
161 * next [O] pointer to pointer to next block
162 */
163 typedef int (*HLPFILE_BPTreeCompare)(void *p, const void *key,
164 int leaf, void **next);
165
166 /*
167 * Callback function type for HLPFILE_BPTreeEnum function.
168 *
169 * PARAMS
170 * p [I] pointer to data block
171 * next [O] pointer to pointer to next block
172 * cookie [IO] cookie data
173 */
174 typedef void (*HLPFILE_BPTreeCallback)(void *p, void **next, void *cookie);
175
176 HLPFILE* HLPFILE_ReadHlpFile(LPCSTR lpszPath);
177 HLPFILE_PAGE* HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash, ULONG* relative);
178 HLPFILE_PAGE* HLPFILE_PageByMap(HLPFILE* hlpfile, LONG lMap, ULONG* relative);
179 HLPFILE_PAGE* HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset, ULONG* relative);
180 LONG HLPFILE_Hash(LPCSTR lpszContext);
181 void HLPFILE_FreeHlpFile(HLPFILE*);
182
183 void HLPFILE_BPTreeEnum(BYTE*, HLPFILE_BPTreeCallback cb, void *cookie);
184
185 struct RtfData {
186 BOOL in_text;
187 char* data; /* RTF stream start */
188 char* ptr; /* current position in stream */
189 unsigned allocated; /* overall allocated size */
190 unsigned char_pos; /* current char position (in richedit) */
191 char* where; /* pointer to feed back richedit */
192 unsigned font_scale; /* how to scale fonts */
193 HLPFILE_LINK*first_link;
194 HLPFILE_LINK*current_link;
195 BOOL force_color;
196 unsigned relative; /* offset within page to lookup for */
197 unsigned char_pos_rel; /* char_pos correspondinf to relative */
198 };
199
200 BOOL HLPFILE_BrowsePage(HLPFILE_PAGE*, struct RtfData* rd,
201 unsigned font_scale, unsigned relative);