winecoreaudio: Implement MIX_Open and MIX_GetNumDevs.
[wine] / programs / winhelp / hlpfile.h
1 /*
2  * Help Viewer
3  *
4  * Copyright    1996 Ulrich Schmid
5  *              2002 Eric Pouech
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21
22 struct tagHelpFile;
23
24 typedef struct 
25 {
26     char        type[10];
27     char        name[9];
28     char        caption[51];
29     POINT       origin;
30     SIZE        size;
31     int         style;
32     DWORD       win_style;
33     COLORREF    sr_color;       /* color for scrollable region */
34     COLORREF    nsr_color;      /* color for non scrollable region */
35 } HLPFILE_WINDOWINFO;
36
37 typedef struct
38 {
39     enum {hlp_link_link, hlp_link_popup, hlp_link_macro} cookie;
40     LPCSTR      lpszString;     /* name of the file to for the link (NULL if same file) */
41     LONG        lHash;          /* topic index */
42     unsigned    bClrChange : 1, /* true if the link is green & underlined */
43                 wRefCount;      /* number of internal references to this object */
44     unsigned    window;         /* window number for displaying the link (-1 is current) */
45 } HLPFILE_LINK;
46
47 enum para_type {para_normal_text, para_debug_text, para_bitmap, para_metafile};
48
49 typedef struct tagHlpFileParagraph
50 {
51     enum para_type              cookie;
52
53     union
54     {
55         struct
56         {
57             LPSTR                       lpszText;
58             unsigned                    wFont;
59             unsigned                    wIndent;
60             unsigned                    wHSpace;
61             unsigned                    wVSpace;
62         } text;
63         struct
64         {
65             unsigned                    pos;    /* 0: center, 1: left, 2: right */
66             union 
67             {
68                 struct 
69                 {
70                     HBITMAP             hBitmap;
71                 } bmp;
72                 METAFILEPICT            mfp;
73             } u;
74         } gfx; /* for bitmaps and metafiles */
75     } u;
76
77     HLPFILE_LINK*               link;
78
79     struct tagHlpFileParagraph* next;
80 } HLPFILE_PARAGRAPH;
81
82 typedef struct tagHlpFileMacro
83 {
84     LPCSTR                      lpszMacro;
85     struct tagHlpFileMacro*     next;
86 } HLPFILE_MACRO;
87
88 typedef struct tagHlpFilePage
89 {
90     LPSTR                       lpszTitle;
91     HLPFILE_PARAGRAPH*          first_paragraph;
92     HLPFILE_MACRO*              first_macro;
93
94     unsigned                    wNumber;
95     unsigned                    offset;
96     struct tagHlpFilePage*      next;
97     struct tagHlpFilePage*      prev;
98
99     DWORD                       browse_bwd;
100     DWORD                       browse_fwd;
101
102     struct tagHlpFileFile*      file;
103 } HLPFILE_PAGE;
104
105 typedef struct
106 {
107     LONG                        lHash;
108     unsigned long               offset;
109 } HLPFILE_CONTEXT;
110
111 typedef struct
112 {
113     LONG                        lMap;
114     unsigned long               offset;
115 } HLPFILE_MAP;
116
117 typedef struct
118 {
119     LOGFONT                     LogFont;
120     HFONT                       hFont;
121     COLORREF                    color;
122 } HLPFILE_FONT;
123
124 typedef struct tagHlpFileFile
125 {
126     LPSTR                       lpszPath;
127     LPSTR                       lpszTitle;
128     LPSTR                       lpszCopyright;
129     HLPFILE_PAGE*               first_page;
130     HLPFILE_MACRO*              first_macro;
131     unsigned                    wContextLen;
132     HLPFILE_CONTEXT*            Context;
133     unsigned                    wMapLen;
134     HLPFILE_MAP*                Map;
135     unsigned long               contents_start;
136
137     struct tagHlpFileFile*      prev;
138     struct tagHlpFileFile*      next;
139
140     unsigned                    wRefCount;
141
142     unsigned short              version;
143     unsigned short              flags;
144     unsigned                    hasPhrases; /* Phrases or PhrIndex/PhrImage */
145
146     unsigned                    numBmps;
147     HBITMAP*                    bmps;
148
149     unsigned                    numFonts;
150     HLPFILE_FONT*               fonts;
151
152     unsigned                    numWindows;
153     HLPFILE_WINDOWINFO*         windows;
154 } HLPFILE;
155
156 HLPFILE*      HLPFILE_ReadHlpFile(LPCSTR lpszPath);
157 HLPFILE_PAGE* HLPFILE_Contents(HLPFILE* hlpfile);
158 HLPFILE_PAGE* HLPFILE_PageByHash(HLPFILE* hlpfile, LONG lHash);
159 HLPFILE_PAGE* HLPFILE_PageByMap(HLPFILE* hlpfile, LONG lMap);
160 HLPFILE_PAGE* HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset);
161 LONG          HLPFILE_Hash(LPCSTR lpszContext);
162 void          HLPFILE_FreeLink(HLPFILE_LINK* link);
163 void          HLPFILE_FreeHlpFile(HLPFILE*);