| /* | 
 |  * 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 "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_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 |