545 lines
10 KiB
C
545 lines
10 KiB
C
/*
|
|
* General type definitions
|
|
*
|
|
* Copyright 1998 Bertho A. Stultiens (BS)
|
|
*
|
|
*/
|
|
|
|
#ifndef __WRC_WRCTYPES_H
|
|
#define __WRC_WRCTYPES_H
|
|
|
|
#include "windef.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_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
|
|
|
|
|
|
/* 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;
|
|
short *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, /* Not implemented, no layout available */
|
|
res_aniico, /* 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 {
|
|
int size;
|
|
char *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;
|
|
|
|
/* RC structures for types read from file or supplied binary */
|
|
typedef struct font {
|
|
DWORD memopt;
|
|
raw_data_t *data;
|
|
} font_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;
|
|
|
|
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;
|
|
|
|
typedef struct bitmap {
|
|
DWORD memopt;
|
|
raw_data_t *data;
|
|
} bitmap_t;
|
|
|
|
typedef struct rcdata {
|
|
DWORD memopt;
|
|
lvc_t lvc;
|
|
raw_data_t *data;
|
|
} rcdata_t;
|
|
|
|
typedef struct user {
|
|
DWORD memopt;
|
|
name_id_t *type;
|
|
raw_data_t *data;
|
|
} user_t;
|
|
|
|
typedef struct messagetable {
|
|
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;
|
|
} 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;
|
|
lvc_t lvc;
|
|
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;
|
|
bitmap_t *bmp;
|
|
cursor_t *cur;
|
|
cursor_group_t *curg;
|
|
dialog_t *dlg;
|
|
dialogex_t *dlgex;
|
|
dlginit_t *dlgi;
|
|
font_t *fnt;
|
|
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
|
|
|
|
|