123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605 |
- /*
- * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
- #ifndef __WRC_WRCTYPES_H
- #define __WRC_WRCTYPES_H
- #include <stdarg.h>
- #include "windef.h"
- #include "winbase.h"
- #include "winnls.h"
- #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
- #define GET_WORD(ptr) (((BYTE *)(ptr))[0] | (((BYTE *)(ptr))[1] << 8))
- #define GET_DWORD(ptr) (((BYTE *)(ptr))[0] | (((BYTE *)(ptr))[1] << 8) | (((BYTE *)(ptr))[2] << 16) | (((BYTE *)(ptr))[3] << 24))
- typedef struct
- {
- const char *file;
- int line;
- int col;
- } location_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;
- location_t loc;
- } 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 it's 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_usr = 256 + 6
- };
- /* 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;
- DWORD helpid; /* EX: */
- int gotstyle; /* Used to determine whether the default */
- int gotexstyle; /* styles must be set */
- int gothelpid;
- int is_ex;
- name_id_t *menu;
- name_id_t *dlgclass;
- string_t *title;
- font_id_t *font;
- lvc_t lvc;
- control_t *controls;
- } dialog_t;
- /* Menu structures */
- typedef struct menu_item {
- struct menu_item *next;
- struct menu_item *prev;
- struct menu_item *popup;
- int id;
- DWORD type;
- DWORD state;
- int helpid;
- string_t *name;
- int gotid;
- int gottype;
- int gotstate;
- int gothelpid;
- } menu_item_t;
- typedef struct menu {
- DWORD memopt;
- lvc_t lvc;
- int is_ex;
- menu_item_t *items;
- } menu_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 html {
- DWORD memopt;
- raw_data_t *data;
- } html_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 {
- unsigned fv:1;
- unsigned pv:1;
- unsigned fo:1;
- unsigned ff:1;
- unsigned ffm:1;
- unsigned ft:1;
- unsigned 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;
- string_t *str;
- 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;
- dlginit_t *dlgi;
- font_t *fnt;
- fontdir_t *fnd;
- icon_t *ico;
- icon_group_t *icog;
- menu_t *men;
- messagetable_t *msg;
- html_t *html;
- rcdata_t *rdt;
- stringtable_t *stt;
- toolbar_t *tbt;
- user_t *usr;
- versioninfo_t *ver;
- void *overlay; /* To catch all types at once... */
- } res;
- 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
|