French translation of the README file.
[wine] / tools / wrc / wrctypes.h
1 /*
2  * General type definitions
3  *
4  * Copyright 1998 Bertho A. Stultiens (BS)
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #ifndef __WRC_WRCTYPES_H
22 #define __WRC_WRCTYPES_H
23
24 #include "windef.h"
25
26 #ifndef MAKELANGID
27 #include "winnls.h"
28 #endif
29
30 #ifndef VS_FFI_SIGNATURE
31 #include "winver.h"
32 #endif
33
34 /* Memory/load flags */
35 #define WRC_MO_MOVEABLE         0x0010
36 #define WRC_MO_PURE             0x0020
37 #define WRC_MO_PRELOAD          0x0040
38 #define WRC_MO_DISCARDABLE      0x1000
39
40 /* Resource type IDs */
41 #define WRC_RT_CURSOR           (1)
42 #define WRC_RT_BITMAP           (2)
43 #define WRC_RT_ICON             (3)
44 #define WRC_RT_MENU             (4)
45 #define WRC_RT_DIALOG           (5)
46 #define WRC_RT_STRING           (6)
47 #define WRC_RT_FONTDIR          (7)
48 #define WRC_RT_FONT             (8)
49 #define WRC_RT_ACCELERATOR      (9)
50 #define WRC_RT_RCDATA           (10)
51 #define WRC_RT_MESSAGETABLE     (11)
52 #define WRC_RT_GROUP_CURSOR     (12)
53 #define WRC_RT_GROUP_ICON       (14)
54 #define WRC_RT_VERSION          (16)
55 #define WRC_RT_DLGINCLUDE       (17)
56 #define WRC_RT_PLUGPLAY         (19)
57 #define WRC_RT_VXD              (20)
58 #define WRC_RT_ANICURSOR        (21)
59 #define WRC_RT_ANIICON          (22)
60 #define WRC_RT_HTML             (23)
61 #define WRC_RT_DLGINIT          (240)
62 #define WRC_RT_TOOLBAR          (241)
63
64 /* Default class type IDs */
65 #define CT_BUTTON       0x80
66 #define CT_EDIT         0x81
67 #define CT_STATIC       0x82
68 #define CT_LISTBOX      0x83
69 #define CT_SCROLLBAR    0x84
70 #define CT_COMBOBOX     0x85
71
72 /* Byteordering defines */
73 #define WRC_BO_NATIVE   0x00
74 #define WRC_BO_LITTLE   0x01
75 #define WRC_BO_BIG      0x02
76
77 #define WRC_LOBYTE(w)           ((WORD)(w) & 0xff)
78 #define WRC_HIBYTE(w)           (((WORD)(w) >> 8) & 0xff)
79 #define WRC_LOWORD(d)           ((DWORD)(d) & 0xffff)
80 #define WRC_HIWORD(d)           (((DWORD)(d) >> 16) & 0xffff)
81 #define BYTESWAP_WORD(w)        ((WORD)(((WORD)WRC_LOBYTE(w) << 8) + (WORD)WRC_HIBYTE(w)))
82 #define BYTESWAP_DWORD(d)       ((DWORD)(((DWORD)BYTESWAP_WORD(WRC_LOWORD(d)) << 16) + ((DWORD)BYTESWAP_WORD(WRC_HIWORD(d)))))
83
84 /* Binary resource structure */
85 #define RES_BLOCKSIZE   512
86
87 typedef struct res {
88         int     allocsize;      /* Allocated datablock size */
89         int     size;           /* Actual size of data */
90         int     dataidx;        /* Tag behind the resource-header */
91         char    *data;
92 } res_t;
93
94 /* Resource strings are slightly more complex because they include '\0' */
95 enum str_e {str_char, str_unicode};
96
97 typedef struct string {
98         int             size;
99         enum str_e      type;
100         union {
101                 char *cstr;
102                 short *wstr;
103         } str;
104 } string_t;
105
106 /* Resources are identified either by name or by number */
107 enum name_e {name_str, name_ord};
108
109 typedef struct name_id {
110         union {
111                 string_t *s_name;
112                 int     i_name;
113         } name;
114         enum name_e type;
115 } name_id_t;
116
117 /* Language definitions */
118 typedef struct language {
119         int     id;
120         int     sub;
121 } language_t;
122
123 typedef DWORD characts_t;
124 typedef DWORD version_t;
125
126 typedef struct lvc {
127         language_t      *language;
128         version_t       *version;
129         characts_t      *characts;
130 } lvc_t;
131
132 typedef struct font_id {
133         string_t        *name;
134         int             size;
135         int             weight;
136         int             italic;
137 } font_id_t;
138
139 /* control styles */
140 typedef struct style {
141         DWORD                   or_mask;
142         DWORD                   and_mask;
143 } style_t;
144
145 /* resource types */
146 /* These are in the same order (and ordinal) as the RT_xxx
147  * defines. This is _required_.
148  * I rolled my own numbers for the win32 extension that are
149  * documented, but generate either old RT_xxx numbers, or
150  * don't have an ordinal associated (user type).
151  * I don't know any specs for those noted such, for that matter,
152  * I don't even know whether they can be generated other than by
153  * using a user-type resource.
154  */
155 enum res_e {
156         res_0 = 0,
157         res_cur,
158         res_bmp,
159         res_ico,
160         res_men,
161         res_dlg,
162         res_stt,
163         res_fntdir,
164         res_fnt,
165         res_acc,
166         res_rdt,
167         res_msg,
168         res_curg,
169         res_13,         /* Hm, wonder why its not used... */
170         res_icog,
171         res_15,
172         res_ver,
173         res_dlginc,     /* Not implemented, no layout available */
174         res_18,
175         res_pnp,        /* Not implemented, no layout available */
176         res_vxd,        /* Not implemented, no layout available */
177         res_anicur,
178         res_aniico,
179         res_html,       /* Not implemented, no layout available */
180
181         res_dlginit = WRC_RT_DLGINIT,   /* 240 */
182         res_toolbar = WRC_RT_TOOLBAR,   /* 241 */
183
184         res_menex = 256 + 4,
185         res_dlgex,
186         res_usr
187 };
188
189 /* Raw bytes in a row... */
190 typedef struct raw_data {
191         unsigned int    size;
192         char            *data;
193         lvc_t           lvc;            /* Localized data */
194 } raw_data_t;
195
196 /* Dialog structures */
197 typedef struct control {
198         struct control  *next;          /* List of controls */
199         struct control  *prev;
200         name_id_t       *ctlclass;      /* ControlClass */
201         name_id_t       *title;         /* Title of control */
202         int             id;
203         int             x;              /* Position */
204         int             y;
205         int             width;          /* Size */
206         int             height;
207         style_t         *style;         /* Style */
208         style_t         *exstyle;
209         DWORD           helpid;         /* EX: */
210         int             gotstyle;       /* Used to determine whether the default */
211         int             gotexstyle;     /* styles must be set */
212         int             gothelpid;
213         raw_data_t      *extra;         /* EX: number of extra bytes in resource */
214 } control_t;
215
216 typedef struct dialog {
217         DWORD           memopt;
218         int             x;              /* Position */
219         int             y;
220         int             width;          /* Size */
221         int             height;
222         style_t         *style;         /* Style */
223         style_t         *exstyle;
224         int             gotstyle;       /* Used to determine whether the default */
225         int             gotexstyle;     /* styles must be set */
226         name_id_t       *menu;
227         name_id_t       *dlgclass;
228         string_t        *title;
229         font_id_t       *font;
230         lvc_t           lvc;
231         control_t       *controls;
232 } dialog_t;
233
234 /* DialogEx structures */
235 typedef struct dialogex {
236         DWORD           memopt;
237         int             x;              /* Position */
238         int             y;
239         int             width;          /* Size */
240         int             height;
241         style_t         *style;         /* Style */
242         style_t         *exstyle;
243         DWORD           helpid;         /* EX: */
244         int             gotstyle;       /* Used to determine whether the default */
245         int             gotexstyle;     /* styles must be set */
246         int             gothelpid;
247         name_id_t       *menu;
248         name_id_t       *dlgclass;
249         string_t        *title;
250         font_id_t       *font;
251         lvc_t           lvc;
252         control_t       *controls;
253 } dialogex_t;
254
255 /* Menu structures */
256 typedef struct menu_item {
257         struct menu_item *next;
258         struct menu_item *prev;
259         struct menu_item *popup;
260         int             id;
261         DWORD           state;
262         string_t        *name;
263 } menu_item_t;
264
265 typedef struct menu {
266         DWORD           memopt;
267         lvc_t           lvc;
268         menu_item_t     *items;
269 } menu_t;
270
271 /* MenuEx structures */
272 typedef struct menuex_item {
273         struct menuex_item *next;
274         struct menuex_item *prev;
275         struct menuex_item *popup;
276         int             id;
277         DWORD           type;
278         DWORD           state;
279         int             helpid;
280         string_t        *name;
281         int             gotid;
282         int             gottype;
283         int             gotstate;
284         int             gothelpid;
285 } menuex_item_t;
286
287 typedef struct menuex {
288         DWORD           memopt;
289         lvc_t           lvc;
290         menuex_item_t   *items;
291 } menuex_t;
292
293 typedef struct itemex_opt
294 {
295         int     id;
296         DWORD   type;
297         DWORD   state;
298         int     helpid;
299         int     gotid;
300         int     gottype;
301         int     gotstate;
302         int     gothelpid;
303 } itemex_opt_t;
304
305 /*
306  * Font resources
307  */
308 typedef struct font {
309         DWORD           memopt;
310         raw_data_t      *data;
311 } font_t;
312
313 typedef struct fontdir {
314         DWORD           memopt;
315         raw_data_t      *data;
316 } fontdir_t;
317
318 /*
319  * Icon resources
320  */
321 typedef struct icon_header {
322         WORD    reserved;       /* Don't know, should be 0 I guess */
323         WORD    type;           /* Always 1 for icons */
324         WORD    count;          /* Number of packed icons in resource */
325 } icon_header_t;
326
327 typedef struct icon_dir_entry {
328         BYTE    width;          /* From the SDK doc. */
329         BYTE    height;
330         BYTE    nclr;
331         BYTE    reserved;
332         WORD    planes;
333         WORD    bits;
334         DWORD   ressize;
335         DWORD   offset;
336 } icon_dir_entry_t;
337
338 typedef struct icon {
339         struct icon     *next;
340         struct icon     *prev;
341         lvc_t           lvc;
342         int             id;     /* Unique icon id within resource file */
343         int             width;  /* Field from the IconDirEntry */
344         int             height;
345         int             nclr;
346         int             planes;
347         int             bits;
348         raw_data_t      *data;
349 } icon_t;
350
351 typedef struct icon_group {
352         DWORD           memopt;
353         lvc_t           lvc;
354         icon_t          *iconlist;
355         int             nicon;
356 } icon_group_t;
357
358 /*
359  * Cursor resources
360  */
361 typedef struct cursor_header {
362         WORD    reserved;       /* Don't know, should be 0 I guess */
363         WORD    type;           /* Always 2 for cursors */
364         WORD    count;          /* Number of packed cursors in resource */
365 } cursor_header_t;
366
367 typedef struct cursor_dir_entry {
368         BYTE    width;          /* From the SDK doc. */
369         BYTE    height;
370         BYTE    nclr;
371         BYTE    reserved;
372         WORD    xhot;
373         WORD    yhot;
374         DWORD   ressize;
375         DWORD   offset;
376 } cursor_dir_entry_t;
377
378 typedef struct cursor {
379         struct cursor   *next;
380         struct cursor   *prev;
381         lvc_t           lvc;
382         int             id;     /* Unique icon id within resource file */
383         int             width;  /* Field from the CursorDirEntry */
384         int             height;
385         int             nclr;
386         int             planes;
387         int             bits;
388         int             xhot;
389         int             yhot;
390         raw_data_t      *data;
391 } cursor_t;
392
393 typedef struct cursor_group {
394         DWORD           memopt;
395         lvc_t           lvc;
396         cursor_t        *cursorlist;
397         int             ncursor;
398 } cursor_group_t;
399
400 /*
401  * Animated cursors and icons
402  */
403 typedef struct aniheader {
404         DWORD   structsize;     /* Header size (36 bytes) */
405         DWORD   frames;         /* Number of unique icons in this cursor */
406         DWORD   steps;          /* Number of blits before the animation cycles */
407         DWORD   cx;             /* reserved, must be 0? */
408         DWORD   cy;             /* reserved, must be 0? */
409         DWORD   bitcount;       /* reserved, must be 0? */
410         DWORD   planes;         /* reserved, must be 0? */
411         DWORD   rate;           /* Default rate (1/60th of a second) if "rate" not present */
412         DWORD   flags;          /* Animation flag (1==AF_ICON, although both icons and cursors set this) */
413 } aniheader_t;
414
415 typedef struct riff_tag {
416         BYTE    tag[4];
417         DWORD   size;
418 } riff_tag_t;
419
420 typedef struct ani_curico {
421         DWORD           memopt;
422         raw_data_t      *data;
423 } ani_curico_t;
424
425 typedef struct ani_any {
426         enum res_e      type;
427         union {
428                 ani_curico_t    *ani;
429                 cursor_group_t  *curg;
430                 icon_group_t    *icog;
431         } u;
432 } ani_any_t;
433
434 /*
435  * Bitmaps
436  */
437 typedef struct bitmap {
438         DWORD           memopt;
439         raw_data_t      *data;
440 } bitmap_t;
441
442 typedef struct rcdata {
443         DWORD           memopt;
444         raw_data_t      *data;
445 } rcdata_t;
446
447 typedef struct user {
448         DWORD           memopt;
449         name_id_t       *type;
450         raw_data_t      *data;
451 } user_t;
452
453 /*
454  * Messagetables
455  */
456 typedef struct msgtab_block {
457         DWORD   idlo;           /* Lowest id in the set */
458         DWORD   idhi;           /* Highest is in the set */
459         DWORD   offset;         /* Offset from resource start to first entry */
460 } msgtab_block_t;
461
462 typedef struct msgtab_entry {
463         WORD    length;         /* Length of the data in bytes */
464         WORD    flags;          /* 0 for char, 1 for WCHAR */
465 /*      {char}|{WCHAR} data[...]; */
466 } msgtab_entry_t;
467
468 typedef struct messagetable {
469         DWORD           memopt;
470         raw_data_t      *data;
471 } messagetable_t;
472
473 /* StringTable structures */
474 typedef struct stt_entry {
475         string_t                *str;
476         int                     id;
477         DWORD                   memopt;
478         characts_t              *characts;
479         version_t               *version;
480 } stt_entry_t;
481
482 typedef struct stringtable {
483         struct stringtable      *next;
484         struct stringtable      *prev;
485         DWORD                   memopt;
486         lvc_t                   lvc;
487         int                     idbase;
488         int                     nentries;
489         stt_entry_t             *entries;
490 } stringtable_t;
491
492 /* VersionInfo structures */
493 enum ver_val_e {val_str, val_words, val_block};
494
495 struct ver_block;       /* Forward ref */
496
497 typedef struct ver_words {
498         WORD    *words;
499         int     nwords;
500 } ver_words_t;
501
502 typedef struct ver_value {
503         struct ver_value        *next;
504         struct ver_value        *prev;
505         string_t                *key;
506         union {
507                 string_t                *str;
508                 ver_words_t             *words;
509                 struct ver_block        *block;
510         } value;
511         enum ver_val_e          type;
512 } ver_value_t;
513
514 typedef struct ver_block {
515         struct ver_block        *next;
516         struct ver_block        *prev;
517         string_t                *name;
518         ver_value_t             *values;
519 } ver_block_t;
520
521 typedef struct versioninfo {
522         int     filever_maj1;
523         int     filever_maj2;
524         int     filever_min1;
525         int     filever_min2;
526         int     prodver_maj1;
527         int     prodver_maj2;
528         int     prodver_min1;
529         int     prodver_min2;
530         int     fileos;
531         int     fileflags;
532         int     fileflagsmask;
533         int     filetype;
534         int     filesubtype;
535         struct {
536                 int fv:1;
537                 int pv:1;
538                 int fo:1;
539                 int ff:1;
540                 int ffm:1;
541                 int ft:1;
542                 int fst:1;
543         } gotit;
544         ver_block_t     *blocks;
545         lvc_t           lvc;
546         DWORD           memopt;
547 } versioninfo_t;
548
549 /* Accelerator structures */
550 #define WRC_AF_VIRTKEY  0x0001
551 #define WRC_AF_NOINVERT 0x0002
552 #define WRC_AF_SHIFT    0x0004
553 #define WRC_AF_CONTROL  0x0008
554 #define WRC_AF_ALT      0x0010
555 #define WRC_AF_ASCII    0x4000
556
557 typedef struct event {
558         struct event    *next;
559         struct event    *prev;
560         int             flags;
561         int             key;
562         int             id;
563 } event_t;
564
565 typedef struct accelerator {
566         DWORD           memopt;
567         lvc_t           lvc;
568         event_t         *events;
569 } accelerator_t;
570
571 /* Toolbar structures */
572 typedef struct toolbar_item {
573         struct toolbar_item     *next;
574         struct toolbar_item     *prev;
575         int                     id;
576 } toolbar_item_t;
577
578 typedef struct toolbar {
579         DWORD           memopt;
580         lvc_t           lvc;
581         int             button_width;
582         int             button_height;
583         int             nitems;
584         toolbar_item_t  *items;
585 } toolbar_t;
586
587 typedef struct dlginit {
588         DWORD           memopt;
589         raw_data_t      *data;
590 } dlginit_t;
591
592
593 /* A top-level resource node */
594 typedef struct resource {
595         struct resource *next;
596         struct resource *prev;
597         enum res_e      type;
598         name_id_t       *name;  /* resource's name */
599         language_t      *lan;   /* Only used as a sorting key and c-name creation*/
600         union {
601                 accelerator_t   *acc;
602                 ani_curico_t    *ani;
603                 bitmap_t        *bmp;
604                 cursor_t        *cur;
605                 cursor_group_t  *curg;
606                 dialog_t        *dlg;
607                 dialogex_t      *dlgex;
608                 dlginit_t       *dlgi;
609                 font_t          *fnt;
610                 fontdir_t       *fnd;
611                 icon_t          *ico;
612                 icon_group_t    *icog;
613                 menu_t          *men;
614                 menuex_t        *menex;
615                 messagetable_t  *msg;
616                 rcdata_t        *rdt;
617                 stringtable_t   *stt;
618                 toolbar_t       *tbt;
619                 user_t          *usr;
620                 versioninfo_t   *ver;
621                 void            *overlay; /* To catch all types at once... */
622         } res;
623         res_t           *binres;        /* To binary converted resource */
624         char            *c_name;        /* BaseName in output */
625         DWORD           memopt;
626 } resource_t;
627
628 /* Resource count */
629 typedef struct res32_count {
630         int                     count;
631         resource_t              **rsc;
632 } res32_count_t;
633
634 typedef struct res_count {
635         name_id_t               type;
636         int                     count;          /* win16 mode */
637         resource_t              **rscarray;
638         int                     count32;
639         res32_count_t           *rsc32array;    /* win32 mode */
640         int                     n_id_entries;
641         int                     n_name_entries;
642 } res_count_t;
643
644 typedef struct style_pair {
645         style_t                 *style;
646         style_t                 *exstyle;
647 } style_pair_t;
648
649 #endif
650
651