| /* | |
| * General type definitions | |
| * | |
| * Copyright 1998 Bertho A. Stultiens (BS) | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #ifndef __WRC_WRCTYPES_H | |
| #define __WRC_WRCTYPES_H | |
| #include <stdarg.h> | |
| #include "windef.h" | |
| #include "winbase.h" | |
| #ifndef MAKELANGID | |
| #include "winnls.h" | |
| #endif | |
| #ifndef VS_FFI_SIGNATURE | |
| #include "winver.h" | |
| #endif | |
| /* Memory/load flags */ | |
| #define WRC_MO_MOVEABLE 0x0010 | |
| #define WRC_MO_PURE 0x0020 | |
| #define WRC_MO_PRELOAD 0x0040 | |
| #define WRC_MO_DISCARDABLE 0x1000 | |
| /* Resource type IDs */ | |
| #define WRC_RT_CURSOR (1) | |
| #define WRC_RT_BITMAP (2) | |
| #define WRC_RT_ICON (3) | |
| #define WRC_RT_MENU (4) | |
| #define WRC_RT_DIALOG (5) | |
| #define WRC_RT_STRING (6) | |
| #define WRC_RT_FONTDIR (7) | |
| #define WRC_RT_FONT (8) | |
| #define WRC_RT_ACCELERATOR (9) | |
| #define WRC_RT_RCDATA (10) | |
| #define WRC_RT_MESSAGETABLE (11) | |
| #define WRC_RT_GROUP_CURSOR (12) | |
| #define WRC_RT_GROUP_ICON (14) | |
| #define WRC_RT_VERSION (16) | |
| #define WRC_RT_DLGINCLUDE (17) | |
| #define WRC_RT_PLUGPLAY (19) | |
| #define WRC_RT_VXD (20) | |
| #define WRC_RT_ANICURSOR (21) | |
| #define WRC_RT_ANIICON (22) | |
| #define WRC_RT_HTML (23) | |
| #define WRC_RT_DLGINIT (240) | |
| #define WRC_RT_TOOLBAR (241) | |
| /* Default class type IDs */ | |
| #define CT_BUTTON 0x80 | |
| #define CT_EDIT 0x81 | |
| #define CT_STATIC 0x82 | |
| #define CT_LISTBOX 0x83 | |
| #define CT_SCROLLBAR 0x84 | |
| #define CT_COMBOBOX 0x85 | |
| /* Byteordering defines */ | |
| #define WRC_BO_NATIVE 0x00 | |
| #define WRC_BO_LITTLE 0x01 | |
| #define WRC_BO_BIG 0x02 | |
| #define WRC_LOBYTE(w) ((WORD)(w) & 0xff) | |
| #define WRC_HIBYTE(w) (((WORD)(w) >> 8) & 0xff) | |
| #define WRC_LOWORD(d) ((DWORD)(d) & 0xffff) | |
| #define WRC_HIWORD(d) (((DWORD)(d) >> 16) & 0xffff) | |
| #define BYTESWAP_WORD(w) ((WORD)(((WORD)WRC_LOBYTE(w) << 8) + (WORD)WRC_HIBYTE(w))) | |
| #define BYTESWAP_DWORD(d) ((DWORD)(((DWORD)BYTESWAP_WORD(WRC_LOWORD(d)) << 16) + ((DWORD)BYTESWAP_WORD(WRC_HIWORD(d))))) | |
| /* Binary resource structure */ | |
| #define RES_BLOCKSIZE 512 | |
| typedef struct res { | |
| int allocsize; /* Allocated datablock size */ | |
| int size; /* Actual size of data */ | |
| int dataidx; /* Tag behind the resource-header */ | |
| char *data; | |
| } res_t; | |
| /* Resource strings are slightly more complex because they include '\0' */ | |
| enum str_e {str_char, str_unicode}; | |
| typedef struct string { | |
| int size; | |
| enum str_e type; | |
| union { | |
| char *cstr; | |
| WCHAR *wstr; | |
| } str; | |
| } string_t; | |
| /* Resources are identified either by name or by number */ | |
| enum name_e {name_str, name_ord}; | |
| typedef struct name_id { | |
| union { | |
| string_t *s_name; | |
| int i_name; | |
| } name; | |
| enum name_e type; | |
| } name_id_t; | |
| /* Language definitions */ | |
| typedef struct language { | |
| int id; | |
| int sub; | |
| } language_t; | |
| typedef DWORD characts_t; | |
| typedef DWORD version_t; | |
| typedef struct lvc { | |
| language_t *language; | |
| version_t *version; | |
| characts_t *characts; | |
| } lvc_t; | |
| typedef struct font_id { | |
| string_t *name; | |
| int size; | |
| int weight; | |
| int italic; | |
| } font_id_t; | |
| /* control styles */ | |
| typedef struct style { | |
| DWORD or_mask; | |
| DWORD and_mask; | |
| } style_t; | |
| /* resource types */ | |
| /* These are in the same order (and ordinal) as the RT_xxx | |
| * defines. This is _required_. | |
| * I rolled my own numbers for the win32 extension that are | |
| * documented, but generate either old RT_xxx numbers, or | |
| * don't have an ordinal associated (user type). | |
| * I don't know any specs for those noted such, for that matter, | |
| * I don't even know whether they can be generated other than by | |
| * using a user-type resource. | |
| */ | |
| enum res_e { | |
| res_0 = 0, | |
| res_cur, | |
| res_bmp, | |
| res_ico, | |
| res_men, | |
| res_dlg, | |
| res_stt, | |
| res_fntdir, | |
| res_fnt, | |
| res_acc, | |
| res_rdt, | |
| res_msg, | |
| res_curg, | |
| res_13, /* Hm, wonder why its not used... */ | |
| res_icog, | |
| res_15, | |
| res_ver, | |
| res_dlginc, /* Not implemented, no layout available */ | |
| res_18, | |
| res_pnp, /* Not implemented, no layout available */ | |
| res_vxd, /* Not implemented, no layout available */ | |
| res_anicur, | |
| res_aniico, | |
| res_html, /* Not implemented, no layout available */ | |
| res_dlginit = WRC_RT_DLGINIT, /* 240 */ | |
| res_toolbar = WRC_RT_TOOLBAR, /* 241 */ | |
| res_menex = 256 + 4, | |
| res_dlgex, | |
| res_usr | |
| }; | |
| /* Raw bytes in a row... */ | |
| typedef struct raw_data { | |
| unsigned int size; | |
| char *data; | |
| lvc_t lvc; /* Localized data */ | |
| } raw_data_t; | |
| /* Dialog structures */ | |
| typedef struct control { | |
| struct control *next; /* List of controls */ | |
| struct control *prev; | |
| name_id_t *ctlclass; /* ControlClass */ | |
| name_id_t *title; /* Title of control */ | |
| int id; | |
| int x; /* Position */ | |
| int y; | |
| int width; /* Size */ | |
| int height; | |
| style_t *style; /* Style */ | |
| style_t *exstyle; | |
| DWORD helpid; /* EX: */ | |
| int gotstyle; /* Used to determine whether the default */ | |
| int gotexstyle; /* styles must be set */ | |
| int gothelpid; | |
| raw_data_t *extra; /* EX: number of extra bytes in resource */ | |
| } control_t; | |
| typedef struct dialog { | |
| DWORD memopt; | |
| int x; /* Position */ | |
| int y; | |
| int width; /* Size */ | |
| int height; | |
| style_t *style; /* Style */ | |
| style_t *exstyle; | |
| int gotstyle; /* Used to determine whether the default */ | |
| int gotexstyle; /* styles must be set */ | |
| name_id_t *menu; | |
| name_id_t *dlgclass; | |
| string_t *title; | |
| font_id_t *font; | |
| lvc_t lvc; | |
| control_t *controls; | |
| } dialog_t; | |
| /* DialogEx structures */ | |
| typedef struct dialogex { | |
| DWORD memopt; | |
| int x; /* Position */ | |
| int y; | |
| int width; /* Size */ | |
| int height; | |
| style_t *style; /* Style */ | |
| style_t *exstyle; | |
| DWORD helpid; /* EX: */ | |
| int gotstyle; /* Used to determine whether the default */ | |
| int gotexstyle; /* styles must be set */ | |
| int gothelpid; | |
| name_id_t *menu; | |
| name_id_t *dlgclass; | |
| string_t *title; | |
| font_id_t *font; | |
| lvc_t lvc; | |
| control_t *controls; | |
| } dialogex_t; | |
| /* Menu structures */ | |
| typedef struct menu_item { | |
| struct menu_item *next; | |
| struct menu_item *prev; | |
| struct menu_item *popup; | |
| int id; | |
| DWORD state; | |
| string_t *name; | |
| } menu_item_t; | |
| typedef struct menu { | |
| DWORD memopt; | |
| lvc_t lvc; | |
| menu_item_t *items; | |
| } menu_t; | |
| /* MenuEx structures */ | |
| typedef struct menuex_item { | |
| struct menuex_item *next; | |
| struct menuex_item *prev; | |
| struct menuex_item *popup; | |
| int id; | |
| DWORD type; | |
| DWORD state; | |
| int helpid; | |
| string_t *name; | |
| int gotid; | |
| int gottype; | |
| int gotstate; | |
| int gothelpid; | |
| } menuex_item_t; | |
| typedef struct menuex { | |
| DWORD memopt; | |
| lvc_t lvc; | |
| menuex_item_t *items; | |
| } menuex_t; | |
| typedef struct itemex_opt | |
| { | |
| int id; | |
| DWORD type; | |
| DWORD state; | |
| int helpid; | |
| int gotid; | |
| int gottype; | |
| int gotstate; | |
| int gothelpid; | |
| } itemex_opt_t; | |
| /* | |
| * Font resources | |
| */ | |
| typedef struct font { | |
| DWORD memopt; | |
| raw_data_t *data; | |
| } font_t; | |
| typedef struct fontdir { | |
| DWORD memopt; | |
| raw_data_t *data; | |
| } fontdir_t; | |
| /* | |
| * Icon resources | |
| */ | |
| typedef struct icon_header { | |
| WORD reserved; /* Don't know, should be 0 I guess */ | |
| WORD type; /* Always 1 for icons */ | |
| WORD count; /* Number of packed icons in resource */ | |
| } icon_header_t; | |
| typedef struct icon_dir_entry { | |
| BYTE width; /* From the SDK doc. */ | |
| BYTE height; | |
| BYTE nclr; | |
| BYTE reserved; | |
| WORD planes; | |
| WORD bits; | |
| DWORD ressize; | |
| DWORD offset; | |
| } icon_dir_entry_t; | |
| typedef struct icon { | |
| struct icon *next; | |
| struct icon *prev; | |
| lvc_t lvc; | |
| int id; /* Unique icon id within resource file */ | |
| int width; /* Field from the IconDirEntry */ | |
| int height; | |
| int nclr; | |
| int planes; | |
| int bits; | |
| raw_data_t *data; | |
| } icon_t; | |
| typedef struct icon_group { | |
| DWORD memopt; | |
| lvc_t lvc; | |
| icon_t *iconlist; | |
| int nicon; | |
| } icon_group_t; | |
| /* | |
| * Cursor resources | |
| */ | |
| typedef struct cursor_header { | |
| WORD reserved; /* Don't know, should be 0 I guess */ | |
| WORD type; /* Always 2 for cursors */ | |
| WORD count; /* Number of packed cursors in resource */ | |
| } cursor_header_t; | |
| typedef struct cursor_dir_entry { | |
| BYTE width; /* From the SDK doc. */ | |
| BYTE height; | |
| BYTE nclr; | |
| BYTE reserved; | |
| WORD xhot; | |
| WORD yhot; | |
| DWORD ressize; | |
| DWORD offset; | |
| } cursor_dir_entry_t; | |
| typedef struct cursor { | |
| struct cursor *next; | |
| struct cursor *prev; | |
| lvc_t lvc; | |
| int id; /* Unique icon id within resource file */ | |
| int width; /* Field from the CursorDirEntry */ | |
| int height; | |
| int nclr; | |
| int planes; | |
| int bits; | |
| int xhot; | |
| int yhot; | |
| raw_data_t *data; | |
| } cursor_t; | |
| typedef struct cursor_group { | |
| DWORD memopt; | |
| lvc_t lvc; | |
| cursor_t *cursorlist; | |
| int ncursor; | |
| } cursor_group_t; | |
| /* | |
| * Animated cursors and icons | |
| */ | |
| typedef struct aniheader { | |
| DWORD structsize; /* Header size (36 bytes) */ | |
| DWORD frames; /* Number of unique icons in this cursor */ | |
| DWORD steps; /* Number of blits before the animation cycles */ | |
| DWORD cx; /* reserved, must be 0? */ | |
| DWORD cy; /* reserved, must be 0? */ | |
| DWORD bitcount; /* reserved, must be 0? */ | |
| DWORD planes; /* reserved, must be 0? */ | |
| DWORD rate; /* Default rate (1/60th of a second) if "rate" not present */ | |
| DWORD flags; /* Animation flag (1==AF_ICON, although both icons and cursors set this) */ | |
| } aniheader_t; | |
| typedef struct riff_tag { | |
| BYTE tag[4]; | |
| DWORD size; | |
| } riff_tag_t; | |
| typedef struct ani_curico { | |
| DWORD memopt; | |
| raw_data_t *data; | |
| } ani_curico_t; | |
| typedef struct ani_any { | |
| enum res_e type; | |
| union { | |
| ani_curico_t *ani; | |
| cursor_group_t *curg; | |
| icon_group_t *icog; | |
| } u; | |
| } ani_any_t; | |
| /* | |
| * Bitmaps | |
| */ | |
| typedef struct bitmap { | |
| DWORD memopt; | |
| raw_data_t *data; | |
| } bitmap_t; | |
| typedef struct rcdata { | |
| DWORD memopt; | |
| raw_data_t *data; | |
| } rcdata_t; | |
| typedef struct { | |
| DWORD memopt; | |
| name_id_t *type; | |
| raw_data_t *data; | |
| } user_t; | |
| /* | |
| * Messagetables | |
| */ | |
| typedef struct msgtab_block { | |
| DWORD idlo; /* Lowest id in the set */ | |
| DWORD idhi; /* Highest is in the set */ | |
| DWORD offset; /* Offset from resource start to first entry */ | |
| } msgtab_block_t; | |
| typedef struct msgtab_entry { | |
| WORD length; /* Length of the data in bytes */ | |
| WORD flags; /* 0 for char, 1 for WCHAR */ | |
| /* {char}|{WCHAR} data[...]; */ | |
| } msgtab_entry_t; | |
| typedef struct messagetable { | |
| DWORD memopt; | |
| raw_data_t *data; | |
| } messagetable_t; | |
| /* StringTable structures */ | |
| typedef struct stt_entry { | |
| string_t *str; | |
| int id; | |
| DWORD memopt; | |
| characts_t *characts; | |
| version_t *version; | |
| } stt_entry_t; | |
| typedef struct stringtable { | |
| struct stringtable *next; | |
| struct stringtable *prev; | |
| DWORD memopt; | |
| lvc_t lvc; | |
| int idbase; | |
| int nentries; | |
| stt_entry_t *entries; | |
| } stringtable_t; | |
| /* VersionInfo structures */ | |
| enum ver_val_e {val_str, val_words, val_block}; | |
| struct ver_block; /* Forward ref */ | |
| typedef struct ver_words { | |
| WORD *words; | |
| int nwords; | |
| } ver_words_t; | |
| typedef struct ver_value { | |
| struct ver_value *next; | |
| struct ver_value *prev; | |
| string_t *key; | |
| union { | |
| string_t *str; | |
| ver_words_t *words; | |
| struct ver_block *block; | |
| } value; | |
| enum ver_val_e type; | |
| } ver_value_t; | |
| typedef struct ver_block { | |
| struct ver_block *next; | |
| struct ver_block *prev; | |
| string_t *name; | |
| ver_value_t *values; | |
| } ver_block_t; | |
| typedef struct versioninfo { | |
| int filever_maj1; | |
| int filever_maj2; | |
| int filever_min1; | |
| int filever_min2; | |
| int prodver_maj1; | |
| int prodver_maj2; | |
| int prodver_min1; | |
| int prodver_min2; | |
| int fileos; | |
| int fileflags; | |
| int fileflagsmask; | |
| int filetype; | |
| int filesubtype; | |
| struct { | |
| int fv:1; | |
| int pv:1; | |
| int fo:1; | |
| int ff:1; | |
| int ffm:1; | |
| int ft:1; | |
| int fst:1; | |
| } gotit; | |
| ver_block_t *blocks; | |
| lvc_t lvc; | |
| DWORD memopt; | |
| } versioninfo_t; | |
| /* Accelerator structures */ | |
| #define WRC_AF_VIRTKEY 0x0001 | |
| #define WRC_AF_NOINVERT 0x0002 | |
| #define WRC_AF_SHIFT 0x0004 | |
| #define WRC_AF_CONTROL 0x0008 | |
| #define WRC_AF_ALT 0x0010 | |
| #define WRC_AF_ASCII 0x4000 | |
| typedef struct event { | |
| struct event *next; | |
| struct event *prev; | |
| int flags; | |
| int key; | |
| int id; | |
| } event_t; | |
| typedef struct accelerator { | |
| DWORD memopt; | |
| lvc_t lvc; | |
| event_t *events; | |
| } accelerator_t; | |
| /* Toolbar structures */ | |
| typedef struct toolbar_item { | |
| struct toolbar_item *next; | |
| struct toolbar_item *prev; | |
| int id; | |
| } toolbar_item_t; | |
| typedef struct toolbar { | |
| DWORD memopt; | |
| lvc_t lvc; | |
| int button_width; | |
| int button_height; | |
| int nitems; | |
| toolbar_item_t *items; | |
| } toolbar_t; | |
| typedef struct dlginit { | |
| DWORD memopt; | |
| raw_data_t *data; | |
| } dlginit_t; | |
| /* A top-level resource node */ | |
| typedef struct resource { | |
| struct resource *next; | |
| struct resource *prev; | |
| enum res_e type; | |
| name_id_t *name; /* resource's name */ | |
| language_t *lan; /* Only used as a sorting key and c-name creation*/ | |
| union { | |
| accelerator_t *acc; | |
| ani_curico_t *ani; | |
| bitmap_t *bmp; | |
| cursor_t *cur; | |
| cursor_group_t *curg; | |
| dialog_t *dlg; | |
| dialogex_t *dlgex; | |
| dlginit_t *dlgi; | |
| font_t *fnt; | |
| fontdir_t *fnd; | |
| icon_t *ico; | |
| icon_group_t *icog; | |
| menu_t *men; | |
| menuex_t *menex; | |
| messagetable_t *msg; | |
| rcdata_t *rdt; | |
| stringtable_t *stt; | |
| toolbar_t *tbt; | |
| user_t *usr; | |
| versioninfo_t *ver; | |
| void *overlay; /* To catch all types at once... */ | |
| } res; | |
| res_t *binres; /* To binary converted resource */ | |
| char *c_name; /* BaseName in output */ | |
| DWORD memopt; | |
| } resource_t; | |
| /* Resource count */ | |
| typedef struct res32_count { | |
| int count; | |
| resource_t **rsc; | |
| } res32_count_t; | |
| typedef struct res_count { | |
| name_id_t type; | |
| int count; /* win16 mode */ | |
| resource_t **rscarray; | |
| int count32; | |
| res32_count_t *rsc32array; /* win32 mode */ | |
| int n_id_entries; | |
| int n_name_entries; | |
| } res_count_t; | |
| typedef struct style_pair { | |
| style_t *style; | |
| style_t *exstyle; | |
| } style_pair_t; | |
| #endif |