| /* windint.h -- internal header file for windres program. | |
| Copyright (C) 1997-2023 Free Software Foundation, Inc. | |
| Written by Kai Tietz, Onevision. | |
| This file is part of GNU Binutils. | |
| This program is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published by | |
| the Free Software Foundation; either version 3 of the License, or | |
| (at your option) any later version. | |
| This program 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 General Public License for more details. | |
| You should have received a copy of the GNU General Public License | |
| along with this program; if not, write to the Free Software | |
| Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA | |
| 02110-1301, USA. */ | |
| #include "winduni.h" | |
| #ifndef WINDINT_H | |
| #define WINDINT_H | |
| /* Use bfd_size_type to ensure a sufficient number of bits. */ | |
| #ifndef DEFINED_RC_UINT_TYPE | |
| #define DEFINED_RC_UINT_TYPE | |
| typedef bfd_size_type rc_uint_type; | |
| #endif | |
| /* Resource directory structure. */ | |
| typedef struct res_hdr | |
| { | |
| rc_uint_type data_size; | |
| rc_uint_type header_size; | |
| } res_hdr; | |
| struct __attribute__ ((__packed__)) bin_res_hdr | |
| { | |
| bfd_byte data_size[4]; | |
| bfd_byte header_size[4]; | |
| }; | |
| #define BIN_RES_HDR_SIZE 8 | |
| struct __attribute__ ((__packed__)) bin_res_id | |
| { | |
| bfd_byte sig[2]; /* Has to be 0xffff for unnamed ids. */ | |
| bfd_byte id[2]; | |
| }; | |
| #define BIN_RES_ID 4 | |
| /* This structure is used when converting resource information to | |
| binary. */ | |
| typedef struct bindata | |
| { | |
| /* Next data. */ | |
| struct bindata *next; | |
| /* Length of data. */ | |
| rc_uint_type length; | |
| /* Data. */ | |
| bfd_byte *data; | |
| } bindata; | |
| /* This structure is used when converting resource information to | |
| coff. */ | |
| typedef struct coff_res_data | |
| { | |
| /* Next data. */ | |
| struct coff_res_data *next; | |
| /* Length of data. */ | |
| rc_uint_type length; | |
| /* Data. */ | |
| const struct rc_res_resource *res; | |
| } coff_res_data; | |
| /* We represent resources internally as a tree, similar to the tree | |
| used in the .rsrc section of a COFF file. The root is a | |
| rc_res_directory structure. */ | |
| typedef struct rc_res_directory | |
| { | |
| /* Resource flags. According to the MS docs, this is currently | |
| always zero. */ | |
| rc_uint_type characteristics; | |
| /* Time/date stamp. */ | |
| rc_uint_type time; | |
| /* Major version number. */ | |
| rc_uint_type major; | |
| /* Minor version number. */ | |
| rc_uint_type minor; | |
| /* Directory entries. */ | |
| struct rc_res_entry *entries; | |
| } rc_res_directory; | |
| /* A resource ID is stored in a rc_res_id structure. */ | |
| typedef struct rc_res_id | |
| { | |
| /* Non-zero if this entry has a name rather than an ID. */ | |
| rc_uint_type named : 1; | |
| union | |
| { | |
| /* If the named field is non-zero, this is the name. */ | |
| struct | |
| { | |
| /* Length of the name. */ | |
| rc_uint_type length; | |
| /* Pointer to the name, which is a Unicode string. */ | |
| unichar *name; | |
| } n; | |
| /* If the named field is zero, this is the ID. */ | |
| rc_uint_type id; | |
| } u; | |
| } rc_res_id; | |
| /* Each entry in the tree is a rc_res_entry structure. We mix | |
| directories and resources because in a COFF file all entries in a | |
| directory are sorted together, whether the entries are | |
| subdirectories or resources. */ | |
| typedef struct rc_res_entry | |
| { | |
| /* Next entry. */ | |
| struct rc_res_entry *next; | |
| /* Resource ID. */ | |
| rc_res_id id; | |
| /* Non-zero if this entry is a subdirectory rather than a leaf. */ | |
| rc_uint_type subdir : 1; | |
| union | |
| { | |
| /* If the subdir field is non-zero, this is a pointer to the | |
| subdirectory. */ | |
| rc_res_directory *dir; | |
| /* If the subdir field is zero, this is a pointer to the resource | |
| data. */ | |
| struct rc_res_resource *res; | |
| } u; | |
| } rc_res_entry; | |
| /* Types of resources. */ | |
| enum rc_res_type | |
| { | |
| RES_TYPE_UNINITIALIZED, | |
| RES_TYPE_ACCELERATOR, | |
| RES_TYPE_BITMAP, | |
| RES_TYPE_CURSOR, | |
| RES_TYPE_GROUP_CURSOR, | |
| RES_TYPE_DIALOG, | |
| RES_TYPE_FONT, | |
| RES_TYPE_FONTDIR, | |
| RES_TYPE_ICON, | |
| RES_TYPE_GROUP_ICON, | |
| RES_TYPE_MENU, | |
| RES_TYPE_MESSAGETABLE, | |
| RES_TYPE_RCDATA, | |
| RES_TYPE_STRINGTABLE, | |
| RES_TYPE_USERDATA, | |
| RES_TYPE_VERSIONINFO, | |
| RES_TYPE_DLGINCLUDE, | |
| RES_TYPE_PLUGPLAY, | |
| RES_TYPE_VXD, | |
| RES_TYPE_ANICURSOR, | |
| RES_TYPE_ANIICON, | |
| RES_TYPE_DLGINIT, | |
| RES_TYPE_TOOLBAR | |
| }; | |
| /* A res file and a COFF file store information differently. The | |
| res_info structures holds data which in a res file is stored with | |
| each resource, but in a COFF file is stored elsewhere. */ | |
| typedef struct rc_res_res_info | |
| { | |
| /* Language. In a COFF file, the third level of the directory is | |
| keyed by the language, so the language of a resource is defined | |
| by its location in the resource tree. */ | |
| rc_uint_type language; | |
| /* Characteristics of the resource. Entirely user defined. In a | |
| COFF file, the rc_res_directory structure has a characteristics | |
| field, but I don't know if it's related to the one in the res | |
| file. */ | |
| rc_uint_type characteristics; | |
| /* Version of the resource. Entirely user defined. In a COFF file, | |
| the rc_res_directory structure has a characteristics field, but I | |
| don't know if it's related to the one in the res file. */ | |
| rc_uint_type version; | |
| /* Memory flags. This is a combination of the MEMFLAG values | |
| defined below. Most of these values are historical, and are not | |
| meaningful for win32. I don't think there is any way to store | |
| this information in a COFF file. */ | |
| rc_uint_type memflags; | |
| } rc_res_res_info; | |
| /* Binary layout of rc_res_info. */ | |
| struct __attribute__ ((__packed__)) bin_res_info | |
| { | |
| bfd_byte version[4]; | |
| bfd_byte memflags[2]; | |
| bfd_byte language[2]; | |
| bfd_byte version2[4]; | |
| bfd_byte characteristics[4]; | |
| }; | |
| #define BIN_RES_INFO_SIZE 16 | |
| /* Each resource in a COFF file has some information which can does | |
| not appear in a res file. */ | |
| typedef struct rc_res_coff_info | |
| { | |
| /* The code page used for the data. I don't really know what this | |
| should be. It has something todo with ASCII to Unicode encoding. */ | |
| rc_uint_type codepage; | |
| /* A resource entry in a COFF file has a reserved field, which we | |
| record here when reading a COFF file. When writing a COFF file, | |
| we set this field to zero. */ | |
| rc_uint_type reserved; | |
| } rc_res_coff_info; | |
| /* Resource data is stored in a rc_res_resource structure. */ | |
| typedef struct rc_res_resource | |
| { | |
| /* The type of resource. */ | |
| enum rc_res_type type; | |
| /* The data for the resource. */ | |
| union | |
| { | |
| struct | |
| { | |
| rc_uint_type length; | |
| const bfd_byte *data; | |
| } data; | |
| struct rc_accelerator *acc; | |
| struct rc_cursor *cursor; | |
| struct rc_group_cursor *group_cursor; | |
| struct rc_dialog *dialog; | |
| struct rc_fontdir *fontdir; | |
| struct rc_group_icon *group_icon; | |
| struct rc_menu *menu; | |
| struct rc_rcdata_item *rcdata; | |
| struct rc_stringtable *stringtable; | |
| struct rc_rcdata_item *userdata; | |
| struct rc_versioninfo *versioninfo; | |
| struct rc_toolbar *toolbar; | |
| } u; | |
| /* Information from a res file. */ | |
| struct rc_res_res_info res_info; | |
| /* Information from a COFF file. */ | |
| rc_res_coff_info coff_info; | |
| } rc_res_resource; | |
| #define SUBLANG_SHIFT 10 | |
| /* Memory flags in the memflags field of a rc_res_resource. */ | |
| #define MEMFLAG_MOVEABLE 0x10 | |
| #define MEMFLAG_PURE 0x20 | |
| #define MEMFLAG_PRELOAD 0x40 | |
| #define MEMFLAG_DISCARDABLE 0x1000 | |
| /* Standard resource type codes. These are used in the ID field of a | |
| rc_res_entry structure. */ | |
| #define RT_CURSOR 1 | |
| #define RT_BITMAP 2 | |
| #define RT_ICON 3 | |
| #define RT_MENU 4 | |
| #define RT_DIALOG 5 | |
| #define RT_STRING 6 | |
| #define RT_FONTDIR 7 | |
| #define RT_FONT 8 | |
| #define RT_ACCELERATOR 9 | |
| #define RT_RCDATA 10 | |
| #define RT_MESSAGETABLE 11 | |
| #define RT_GROUP_CURSOR 12 | |
| #define RT_GROUP_ICON 14 | |
| #define RT_VERSION 16 | |
| #define RT_DLGINCLUDE 17 | |
| #define RT_PLUGPLAY 19 | |
| #define RT_VXD 20 | |
| #define RT_ANICURSOR 21 | |
| #define RT_ANIICON 22 | |
| #define RT_HTML 23 | |
| #define RT_MANIFEST 24 | |
| #define RT_DLGINIT 240 | |
| #define RT_TOOLBAR 241 | |
| /* An accelerator resource is a linked list of these structures. */ | |
| typedef struct rc_accelerator | |
| { | |
| /* Next accelerator. */ | |
| struct rc_accelerator *next; | |
| /* Flags. A combination of the ACC values defined below. */ | |
| rc_uint_type flags; | |
| /* Key value. */ | |
| rc_uint_type key; | |
| /* Resource ID. */ | |
| rc_uint_type id; | |
| } rc_accelerator; | |
| struct __attribute__ ((__packed__)) bin_accelerator | |
| { | |
| bfd_byte flags[2]; | |
| bfd_byte key[2]; | |
| bfd_byte id[2]; | |
| bfd_byte pad[2]; | |
| }; | |
| #define BIN_ACCELERATOR_SIZE 8 | |
| /* Accelerator flags in the flags field of a rc_accelerator. | |
| These are the same values that appear in a res file. I hope. */ | |
| #define ACC_VIRTKEY 0x01 | |
| #define ACC_NOINVERT 0x02 | |
| #define ACC_SHIFT 0x04 | |
| #define ACC_CONTROL 0x08 | |
| #define ACC_ALT 0x10 | |
| #define ACC_LAST 0x80 | |
| /* A cursor resource. */ | |
| typedef struct rc_cursor | |
| { | |
| /* X coordinate of hotspot. */ | |
| bfd_signed_vma xhotspot; | |
| /* Y coordinate of hotspot. */ | |
| bfd_signed_vma yhotspot; | |
| /* Length of bitmap data. */ | |
| rc_uint_type length; | |
| /* Data. */ | |
| const bfd_byte *data; | |
| } rc_cursor; | |
| struct __attribute__ ((__packed__)) bin_cursor | |
| { | |
| bfd_byte xhotspot[2]; | |
| bfd_byte yhotspot[2]; | |
| }; | |
| #define BIN_CURSOR_SIZE 4 | |
| /* A group_cursor resource is a list of rc_i_group_cursor structures. */ | |
| typedef struct rc_group_cursor | |
| { | |
| /* Next cursor in group. */ | |
| struct rc_group_cursor *next; | |
| /* Width. */ | |
| rc_uint_type width; | |
| /* Height. */ | |
| rc_uint_type height; | |
| /* Planes. */ | |
| rc_uint_type planes; | |
| /* Bits per pixel. */ | |
| rc_uint_type bits; | |
| /* Number of bytes in cursor resource. */ | |
| rc_uint_type bytes; | |
| /* Index of cursor resource. */ | |
| rc_uint_type index; | |
| } rc_group_cursor; | |
| struct __attribute__ ((__packed__)) bin_group_cursor_item | |
| { | |
| bfd_byte width[2]; | |
| bfd_byte height[2]; | |
| bfd_byte planes[2]; | |
| bfd_byte bits[2]; | |
| bfd_byte bytes[4]; | |
| bfd_byte index[2]; | |
| }; | |
| #define BIN_GROUP_CURSOR_ITEM_SIZE 14 | |
| struct __attribute__ ((__packed__)) bin_group_cursor | |
| { | |
| bfd_byte sig1[2]; | |
| bfd_byte sig2[2]; | |
| bfd_byte nitems[2]; | |
| /* struct bin_group_cursor_item item[nitems]; */ | |
| }; | |
| #define BIN_GROUP_CURSOR_SIZE 6 | |
| /* A dialog resource. */ | |
| typedef struct rc_dialog | |
| { | |
| /* Basic window style. */ | |
| unsigned int style; | |
| /* Extended window style. */ | |
| rc_uint_type exstyle; | |
| /* X coordinate. */ | |
| rc_uint_type x; | |
| /* Y coordinate. */ | |
| rc_uint_type y; | |
| /* Width. */ | |
| rc_uint_type width; | |
| /* Height. */ | |
| rc_uint_type height; | |
| /* Menu name. */ | |
| rc_res_id menu; | |
| /* Class name. */ | |
| rc_res_id class; | |
| /* Caption. */ | |
| unichar *caption; | |
| /* Font point size. */ | |
| rc_uint_type pointsize; | |
| /* Font name. */ | |
| unichar *font; | |
| /* Extended information for a dialogex. */ | |
| struct rc_dialog_ex *ex; | |
| /* Controls. */ | |
| struct rc_dialog_control *controls; | |
| } rc_dialog; | |
| struct __attribute__ ((__packed__)) bin_dialog | |
| { | |
| bfd_byte style[4]; | |
| bfd_byte exstyle[4]; | |
| bfd_byte off[2]; | |
| bfd_byte x[2]; | |
| bfd_byte y[2]; | |
| bfd_byte width[2]; | |
| bfd_byte height[2]; | |
| }; | |
| #define BIN_DIALOG_SIZE 18 | |
| /* An extended dialog has additional information. */ | |
| typedef struct rc_dialog_ex | |
| { | |
| /* Help ID. */ | |
| rc_uint_type help; | |
| /* Font weight. */ | |
| rc_uint_type weight; | |
| /* Whether the font is italic. */ | |
| bfd_byte italic; | |
| /* Character set. */ | |
| bfd_byte charset; | |
| } rc_dialog_ex; | |
| struct __attribute__ ((__packed__)) bin_dialogex | |
| { | |
| bfd_byte sig1[2]; | |
| bfd_byte sig2[2]; | |
| bfd_byte help[4]; | |
| bfd_byte exstyle[4]; | |
| bfd_byte style[4]; | |
| bfd_byte off[2]; | |
| bfd_byte x[2]; | |
| bfd_byte y[2]; | |
| bfd_byte width[2]; | |
| bfd_byte height[2]; | |
| }; | |
| #define BIN_DIALOGEX_SIZE 26 | |
| struct __attribute__ ((__packed__)) bin_dialogfont | |
| { | |
| bfd_byte pointsize[2]; | |
| }; | |
| #define BIN_DIALOGFONT_SIZE 2 | |
| struct __attribute__ ((__packed__)) bin_dialogexfont | |
| { | |
| bfd_byte pointsize[2]; | |
| bfd_byte weight[2]; | |
| bfd_byte italic[1]; | |
| bfd_byte charset[1]; | |
| }; | |
| #define BIN_DIALOGEXFONT_SIZE 6 | |
| /* Window style flags, from the winsup Defines.h header file. These | |
| can appear in the style field of a rc_dialog or a rc_dialog_control. */ | |
| #define CW_USEDEFAULT 0x80000000 | |
| #define WS_BORDER 0x800000L | |
| #define WS_CAPTION 0xc00000L | |
| #define WS_CHILD 0x40000000L | |
| #define WS_CHILDWINDOW 0x40000000L | |
| #define WS_CLIPCHILDREN 0x2000000L | |
| #define WS_CLIPSIBLINGS 0x4000000L | |
| #define WS_DISABLED 0x8000000L | |
| #define WS_DLGFRAME 0x400000L | |
| #define WS_GROUP 0x20000L | |
| #define WS_HSCROLL 0x100000L | |
| #define WS_ICONIC 0x20000000L | |
| #define WS_MAXIMIZE 0x1000000L | |
| #define WS_MAXIMIZEBOX 0x10000L | |
| #define WS_MINIMIZE 0x20000000L | |
| #define WS_MINIMIZEBOX 0x20000L | |
| #define WS_OVERLAPPED 0L | |
| #define WS_OVERLAPPEDWINDOW 0xcf0000L | |
| #define WS_POPUP 0x80000000L | |
| #define WS_POPUPWINDOW 0x80880000L | |
| #define WS_SIZEBOX 0x40000L | |
| #define WS_SYSMENU 0x80000L | |
| #define WS_TABSTOP 0x10000L | |
| #define WS_THICKFRAME 0x40000L | |
| #define WS_TILED 0L | |
| #define WS_TILEDWINDOW 0xcf0000L | |
| #define WS_VISIBLE 0x10000000L | |
| #define WS_VSCROLL 0x200000L | |
| #define MDIS_ALLCHILDSTYLES 0x1 | |
| #define BS_3STATE 0x5L | |
| #define BS_AUTO3STATE 0x6L | |
| #define BS_AUTOCHECKBOX 0x3L | |
| #define BS_AUTORADIOBUTTON 0x9L | |
| #define BS_BITMAP 0x80L | |
| #define BS_BOTTOM 0x800L | |
| #define BS_CENTER 0x300L | |
| #define BS_CHECKBOX 0x2L | |
| #define BS_DEFPUSHBUTTON 0x1L | |
| #define BS_GROUPBOX 0x7L | |
| #define BS_ICON 0x40L | |
| #define BS_LEFT 0x100L | |
| #define BS_LEFTTEXT 0x20L | |
| #define BS_MULTILINE 0x2000L | |
| #define BS_NOTIFY 0x4000L | |
| #define BS_OWNERDRAW 0xbL | |
| #define BS_PUSHBOX 0xcL /* FIXME! What should this be? */ | |
| #define BS_PUSHBUTTON 0L | |
| #define BS_PUSHLIKE 0x1000L | |
| #define BS_RADIOBUTTON 0x4L | |
| #define BS_RIGHT 0x200L | |
| #define BS_RIGHTBUTTON 0x20L | |
| #define BS_TEXT 0L | |
| #define BS_TOP 0x400L | |
| #define BS_USERBUTTON 0x8L | |
| #define BS_VCENTER 0xc00L | |
| #define CBS_AUTOHSCROLL 0x40L | |
| #define CBS_DISABLENOSCROLL 0x800L | |
| #define CBS_DROPDOWN 0x2L | |
| #define CBS_DROPDOWNLIST 0x3L | |
| #define CBS_HASSTRINGS 0x200L | |
| #define CBS_LOWERCASE 0x4000L | |
| #define CBS_NOINTEGRALHEIGHT 0x400L | |
| #define CBS_OEMCONVERT 0x80L | |
| #define CBS_OWNERDRAWFIXED 0x10L | |
| #define CBS_OWNERDRAWVARIABLE 0x20L | |
| #define CBS_SIMPLE 0x1L | |
| #define CBS_SORT 0x100L | |
| #define CBS_UPPERCASE 0x2000L | |
| #define ES_AUTOHSCROLL 0x80L | |
| #define ES_AUTOVSCROLL 0x40L | |
| #define ES_CENTER 0x1L | |
| #define ES_LEFT 0L | |
| #define ES_LOWERCASE 0x10L | |
| #define ES_MULTILINE 0x4L | |
| #define ES_NOHIDESEL 0x100L | |
| #define ES_NUMBER 0x2000L | |
| #define ES_OEMCONVERT 0x400L | |
| #define ES_PASSWORD 0x20L | |
| #define ES_READONLY 0x800L | |
| #define ES_RIGHT 0x2L | |
| #define ES_UPPERCASE 0x8L | |
| #define ES_WANTRETURN 0x1000L | |
| #define LBS_DISABLENOSCROLL 0x1000L | |
| #define LBS_EXTENDEDSEL 0x800L | |
| #define LBS_HASSTRINGS 0x40L | |
| #define LBS_MULTICOLUMN 0x200L | |
| #define LBS_MULTIPLESEL 0x8L | |
| #define LBS_NODATA 0x2000L | |
| #define LBS_NOINTEGRALHEIGHT 0x100L | |
| #define LBS_NOREDRAW 0x4L | |
| #define LBS_NOSEL 0x4000L | |
| #define LBS_NOTIFY 0x1L | |
| #define LBS_OWNERDRAWFIXED 0x10L | |
| #define LBS_OWNERDRAWVARIABLE 0x20L | |
| #define LBS_SORT 0x2L | |
| #define LBS_STANDARD 0xa00003L | |
| #define LBS_USETABSTOPS 0x80L | |
| #define LBS_WANTKEYBOARDINPUT 0x400L | |
| #define SBS_BOTTOMALIGN 0x4L | |
| #define SBS_HORZ 0L | |
| #define SBS_LEFTALIGN 0x2L | |
| #define SBS_RIGHTALIGN 0x4L | |
| #define SBS_SIZEBOX 0x8L | |
| #define SBS_SIZEBOXBOTTOMRIGHTALIGN 0x4L | |
| #define SBS_SIZEBOXTOPLEFTALIGN 0x2L | |
| #define SBS_SIZEGRIP 0x10L | |
| #define SBS_TOPALIGN 0x2L | |
| #define SBS_VERT 0x1L | |
| #define SS_BITMAP 0xeL | |
| #define SS_BLACKFRAME 0x7L | |
| #define SS_BLACKRECT 0x4L | |
| #define SS_CENTER 0x1L | |
| #define SS_CENTERIMAGE 0x200L | |
| #define SS_ENHMETAFILE 0xfL | |
| #define SS_ETCHEDFRAME 0x12L | |
| #define SS_ETCHEDHORZ 0x10L | |
| #define SS_ETCHEDVERT 0x11L | |
| #define SS_GRAYFRAME 0x8L | |
| #define SS_GRAYRECT 0x5L | |
| #define SS_ICON 0x3L | |
| #define SS_LEFT 0L | |
| #define SS_LEFTNOWORDWRAP 0xcL | |
| #define SS_NOPREFIX 0x80L | |
| #define SS_NOTIFY 0x100L | |
| #define SS_OWNERDRAW 0xdL | |
| #define SS_REALSIZEIMAGE 0x800L | |
| #define SS_RIGHT 0x2L | |
| #define SS_RIGHTJUST 0x400L | |
| #define SS_SIMPLE 0xbL | |
| #define SS_SUNKEN 0x1000L | |
| #define SS_USERITEM 0xaL | |
| #define SS_WHITEFRAME 0x9L | |
| #define SS_WHITERECT 0x6L | |
| #define DS_3DLOOK 0x4L | |
| #define DS_ABSALIGN 0x1L | |
| #define DS_CENTER 0x800L | |
| #define DS_CENTERMOUSE 0x1000L | |
| #define DS_CONTEXTHELP 0x2000L | |
| #define DS_CONTROL 0x400L | |
| #define DS_FIXEDSYS 0x8L | |
| #define DS_LOCALEDIT 0x20L | |
| #define DS_MODALFRAME 0x80L | |
| #define DS_NOFAILCREATE 0x10L | |
| #define DS_NOIDLEMSG 0x100L | |
| #define DS_SETFONT 0x40L | |
| #define DS_SETFOREGROUND 0x200L | |
| #define DS_SYSMODAL 0x2L | |
| /* A dialog control. */ | |
| typedef struct rc_dialog_control | |
| { | |
| /* Next control. */ | |
| struct rc_dialog_control *next; | |
| /* ID. */ | |
| rc_uint_type id; | |
| /* Style. */ | |
| rc_uint_type style; | |
| /* Extended style. */ | |
| rc_uint_type exstyle; | |
| /* X coordinate. */ | |
| rc_uint_type x; | |
| /* Y coordinate. */ | |
| rc_uint_type y; | |
| /* Width. */ | |
| rc_uint_type width; | |
| /* Height. */ | |
| rc_uint_type height; | |
| /* Class name. */ | |
| rc_res_id class; | |
| /* Associated text. */ | |
| rc_res_id text; | |
| /* Extra data for the window procedure. */ | |
| struct rc_rcdata_item *data; | |
| /* Help ID. Only used in an extended dialog. */ | |
| rc_uint_type help; | |
| } rc_dialog_control; | |
| struct __attribute__ ((__packed__)) bin_dialog_control | |
| { | |
| bfd_byte style[4]; | |
| bfd_byte exstyle[4]; | |
| bfd_byte x[2]; | |
| bfd_byte y[2]; | |
| bfd_byte width[2]; | |
| bfd_byte height[2]; | |
| bfd_byte id[2]; | |
| }; | |
| #define BIN_DIALOG_CONTROL_SIZE 18 | |
| struct __attribute__ ((__packed__)) bin_dialogex_control | |
| { | |
| bfd_byte help[4]; | |
| bfd_byte exstyle[4]; | |
| bfd_byte style[4]; | |
| bfd_byte x[2]; | |
| bfd_byte y[2]; | |
| bfd_byte width[2]; | |
| bfd_byte height[2]; | |
| bfd_byte id[4]; | |
| }; | |
| #define BIN_DIALOGEX_CONTROL_SIZE 24 | |
| /* Control classes. These can be used as the ID field in a rc_dialog_control. */ | |
| #define CTL_BUTTON 0x80 | |
| #define CTL_EDIT 0x81 | |
| #define CTL_STATIC 0x82 | |
| #define CTL_LISTBOX 0x83 | |
| #define CTL_SCROLLBAR 0x84 | |
| #define CTL_COMBOBOX 0x85 | |
| /* A fontdir resource is a list of rc_fontdir. */ | |
| typedef struct rc_fontdir | |
| { | |
| struct rc_fontdir *next; | |
| /* Index of font entry. */ | |
| rc_uint_type index; | |
| /* Length of font information. */ | |
| rc_uint_type length; | |
| /* Font information. */ | |
| const bfd_byte *data; | |
| } rc_fontdir; | |
| struct __attribute__ ((__packed__)) bin_fontdir_item | |
| { | |
| bfd_byte index[2]; | |
| bfd_byte header[54]; | |
| bfd_byte device_name[1]; | |
| /* bfd_byte face_name[]; */ | |
| }; | |
| /* A group_icon resource is a list of rc_group_icon. */ | |
| typedef struct rc_group_icon | |
| { | |
| /* Next icon in group. */ | |
| struct rc_group_icon *next; | |
| /* Width. */ | |
| bfd_byte width; | |
| /* Height. */ | |
| bfd_byte height; | |
| /* Color count. */ | |
| bfd_byte colors; | |
| /* Planes. */ | |
| rc_uint_type planes; | |
| /* Bits per pixel. */ | |
| rc_uint_type bits; | |
| /* Number of bytes in cursor resource. */ | |
| rc_uint_type bytes; | |
| /* Index of cursor resource. */ | |
| rc_uint_type index; | |
| } rc_group_icon; | |
| struct __attribute__ ((__packed__)) bin_group_icon | |
| { | |
| bfd_byte sig1[2]; | |
| bfd_byte sig2[2]; | |
| bfd_byte count[2]; | |
| }; | |
| #define BIN_GROUP_ICON_SIZE 6 | |
| struct __attribute__ ((__packed__)) bin_group_icon_item | |
| { | |
| bfd_byte width[1]; | |
| bfd_byte height[1]; | |
| bfd_byte colors[1]; | |
| bfd_byte pad[1]; | |
| bfd_byte planes[2]; | |
| bfd_byte bits[2]; | |
| bfd_byte bytes[4]; | |
| bfd_byte index[2]; | |
| }; | |
| #define BIN_GROUP_ICON_ITEM_SIZE 14 | |
| /* A menu resource. */ | |
| typedef struct rc_menu | |
| { | |
| /* List of menuitems. */ | |
| struct rc_menuitem *items; | |
| /* Help ID. I don't think there is any way to set this in an rc | |
| file, but it can appear in the binary format. */ | |
| rc_uint_type help; | |
| } rc_menu; | |
| struct __attribute__ ((__packed__)) bin_menu | |
| { | |
| bfd_byte sig1[2]; | |
| bfd_byte sig2[2]; | |
| }; | |
| #define BIN_MENU_SIZE 4 | |
| struct __attribute__ ((__packed__)) bin_menuex | |
| { | |
| bfd_byte sig1[2]; | |
| bfd_byte sig2[2]; | |
| bfd_byte help[4]; | |
| }; | |
| #define BIN_MENUEX_SIZE 8 | |
| /* A menu resource is a list of rc_menuitem. */ | |
| typedef struct rc_menuitem | |
| { | |
| /* Next menu item. */ | |
| struct rc_menuitem *next; | |
| /* Type. In a normal menu, rather than a menuex, this is the flags | |
| field. */ | |
| rc_uint_type type; | |
| /* State. This is only used in a menuex. */ | |
| rc_uint_type state; | |
| /* Id. */ | |
| rc_uint_type id; | |
| /* Unicode text. */ | |
| unichar *text; | |
| /* Popup menu items for a popup. */ | |
| struct rc_menuitem *popup; | |
| /* Help ID. This is only used in a menuex. */ | |
| rc_uint_type help; | |
| } rc_menuitem; | |
| struct __attribute__ ((__packed__)) bin_menuitem | |
| { | |
| bfd_byte flags[2]; | |
| bfd_byte id[2]; | |
| }; | |
| #define BIN_MENUITEM_SIZE 4 | |
| #define BIN_MENUITEM_POPUP_SIZE 2 | |
| struct __attribute__ ((__packed__)) bin_menuitemex | |
| { | |
| bfd_byte type[4]; | |
| bfd_byte state[4]; | |
| bfd_byte id[4]; | |
| bfd_byte flags[2]; | |
| /* unicode text */ | |
| /* if popup: align, bfd_byte help[4], align, bin_menuitemex[]; */ | |
| }; | |
| #define BIN_MENUITEMEX_SIZE 14 | |
| /* Menu item flags. These can appear in the flags field of a rc_menuitem. */ | |
| #define MENUITEM_GRAYED 0x001 | |
| #define MENUITEM_INACTIVE 0x002 | |
| #define MENUITEM_BITMAP 0x004 | |
| #define MENUITEM_OWNERDRAW 0x100 | |
| #define MENUITEM_CHECKED 0x008 | |
| #define MENUITEM_POPUP 0x010 | |
| #define MENUITEM_MENUBARBREAK 0x020 | |
| #define MENUITEM_MENUBREAK 0x040 | |
| #define MENUITEM_ENDMENU 0x080 | |
| #define MENUITEM_HELP 0x4000 | |
| /* An rcdata resource is a pointer to a list of rc_rcdata_item. */ | |
| typedef struct rc_rcdata_item | |
| { | |
| /* Next data item. */ | |
| struct rc_rcdata_item *next; | |
| /* Type of data. */ | |
| enum | |
| { | |
| RCDATA_WORD, | |
| RCDATA_DWORD, | |
| RCDATA_STRING, | |
| RCDATA_WSTRING, | |
| RCDATA_BUFFER | |
| } type; | |
| union | |
| { | |
| rc_uint_type word; | |
| rc_uint_type dword; | |
| struct | |
| { | |
| rc_uint_type length; | |
| const char *s; | |
| } string; | |
| struct | |
| { | |
| rc_uint_type length; | |
| const unichar *w; | |
| } wstring; | |
| struct | |
| { | |
| rc_uint_type length; | |
| const bfd_byte *data; | |
| } buffer; | |
| } u; | |
| } rc_rcdata_item; | |
| /* A stringtable resource is a pointer to a rc_stringtable. */ | |
| typedef struct rc_stringtable | |
| { | |
| /* Each stringtable resource is a list of 16 unicode strings. */ | |
| struct | |
| { | |
| /* Length of string. */ | |
| rc_uint_type length; | |
| /* String data if length > 0. */ | |
| unichar *string; | |
| } strings[16]; | |
| } rc_stringtable; | |
| /* A versioninfo resource points to a rc_versioninfo. */ | |
| typedef struct rc_versioninfo | |
| { | |
| /* Fixed version information. */ | |
| struct rc_fixed_versioninfo *fixed; | |
| /* Variable version information. */ | |
| struct rc_ver_info *var; | |
| } rc_versioninfo; | |
| struct __attribute__ ((__packed__)) bin_versioninfo | |
| { | |
| bfd_byte size[2]; | |
| bfd_byte fixed_size[2]; | |
| bfd_byte sig2[2]; | |
| }; | |
| #define BIN_VERSIONINFO_SIZE 6 | |
| /* The fixed portion of a versioninfo resource. */ | |
| typedef struct rc_fixed_versioninfo | |
| { | |
| /* The file version, which is two 32 bit integers. */ | |
| rc_uint_type file_version_ms; | |
| rc_uint_type file_version_ls; | |
| /* The product version, which is two 32 bit integers. */ | |
| rc_uint_type product_version_ms; | |
| rc_uint_type product_version_ls; | |
| /* The file flags mask. */ | |
| rc_uint_type file_flags_mask; | |
| /* The file flags. */ | |
| rc_uint_type file_flags; | |
| /* The OS type. */ | |
| rc_uint_type file_os; | |
| /* The file type. */ | |
| rc_uint_type file_type; | |
| /* The file subtype. */ | |
| rc_uint_type file_subtype; | |
| /* The date, which in Windows is two 32 bit integers. */ | |
| rc_uint_type file_date_ms; | |
| rc_uint_type file_date_ls; | |
| } rc_fixed_versioninfo; | |
| struct __attribute__ ((__packed__)) bin_fixed_versioninfo | |
| { | |
| bfd_byte sig1[4]; | |
| bfd_byte sig2[4]; | |
| bfd_byte file_version[4]; | |
| bfd_byte file_version_ls[4]; | |
| bfd_byte product_version_ms[4]; | |
| bfd_byte product_version_ls[4]; | |
| bfd_byte file_flags_mask[4]; | |
| bfd_byte file_flags[4]; | |
| bfd_byte file_os[4]; | |
| bfd_byte file_type[4]; | |
| bfd_byte file_subtype[4]; | |
| bfd_byte file_date_ms[4]; | |
| bfd_byte file_date_ls[4]; | |
| }; | |
| #define BIN_FIXED_VERSIONINFO_SIZE 52 | |
| /* A list of string version information. */ | |
| typedef struct rc_ver_stringtable | |
| { | |
| /* Next item. */ | |
| struct rc_ver_stringtable *next; | |
| /* Language. */ | |
| unichar *language; | |
| /* Strings. */ | |
| struct rc_ver_stringinfo *strings; | |
| } rc_ver_stringtable; | |
| /* A list of variable version information. */ | |
| typedef struct rc_ver_info | |
| { | |
| /* Next item. */ | |
| struct rc_ver_info *next; | |
| /* Type of data. */ | |
| enum { VERINFO_STRING, VERINFO_VAR } type; | |
| union | |
| { | |
| /* StringFileInfo data. */ | |
| struct | |
| { | |
| /* String tables. */ | |
| struct rc_ver_stringtable *stringtables; | |
| } string; | |
| /* VarFileInfo data. */ | |
| struct | |
| { | |
| /* Key. */ | |
| unichar *key; | |
| /* Values. */ | |
| struct rc_ver_varinfo *var; | |
| } var; | |
| } u; | |
| } rc_ver_info; | |
| struct __attribute__ ((__packed__)) bin_ver_info | |
| { | |
| bfd_byte size[2]; | |
| bfd_byte sig1[2]; | |
| bfd_byte sig2[2]; | |
| }; | |
| #define BIN_VER_INFO_SIZE 6 | |
| /* A list of string version information. */ | |
| typedef struct rc_ver_stringinfo | |
| { | |
| /* Next string. */ | |
| struct rc_ver_stringinfo *next; | |
| /* Key. */ | |
| unichar *key; | |
| /* Value. */ | |
| unichar *value; | |
| } rc_ver_stringinfo; | |
| /* A list of variable version information. */ | |
| typedef struct rc_ver_varinfo | |
| { | |
| /* Next item. */ | |
| struct rc_ver_varinfo *next; | |
| /* Language ID. */ | |
| rc_uint_type language; | |
| /* Character set ID. */ | |
| rc_uint_type charset; | |
| } rc_ver_varinfo; | |
| typedef struct rc_toolbar_item | |
| { | |
| struct rc_toolbar_item *next; | |
| struct rc_toolbar_item *prev; | |
| rc_res_id id; | |
| } rc_toolbar_item; | |
| struct __attribute__ ((__packed__)) bin_messagetable_item | |
| { | |
| bfd_byte length[2]; | |
| bfd_byte flags[2]; | |
| bfd_byte data[1]; | |
| }; | |
| #define BIN_MESSAGETABLE_ITEM_SIZE 4 | |
| #define MESSAGE_RESOURCE_UNICODE 0x0001 | |
| struct __attribute__ ((__packed__)) bin_messagetable_block | |
| { | |
| bfd_byte lowid[4]; | |
| bfd_byte highid[4]; | |
| bfd_byte offset[4]; | |
| }; | |
| #define BIN_MESSAGETABLE_BLOCK_SIZE 12 | |
| struct __attribute__ ((__packed__)) bin_messagetable | |
| { | |
| bfd_byte cblocks[4]; | |
| struct bin_messagetable_block items[1]; | |
| }; | |
| #define BIN_MESSAGETABLE_SIZE 8 | |
| typedef struct rc_toolbar | |
| { | |
| rc_uint_type button_width; | |
| rc_uint_type button_height; | |
| rc_uint_type nitems; | |
| rc_toolbar_item *items; | |
| } rc_toolbar; | |
| struct __attribute__ ((__packed__)) bin_toolbar | |
| { | |
| bfd_byte button_width[4]; | |
| bfd_byte button_height[4]; | |
| bfd_byte nitems[4]; | |
| /* { bfd_byte id[4]; } * nitems; */ | |
| }; | |
| #define BIN_TOOLBAR_SIZE 12 | |
| extern bool target_is_bigendian; | |
| typedef struct windres_bfd | |
| { | |
| bfd *abfd; | |
| asection *sec; | |
| rc_uint_type kind : 4; | |
| } windres_bfd; | |
| #define WR_KIND_TARGET 0 | |
| #define WR_KIND_BFD 1 | |
| #define WR_KIND_BFD_BIN_L 2 | |
| #define WR_KIND_BFD_BIN_B 3 | |
| #define WR_KIND(PTR) (PTR)->kind | |
| #define WR_SECTION(PTR) (PTR)->sec | |
| #define WR_BFD(PTR) (PTR)->abfd | |
| extern void set_windres_bfd_content (windres_bfd *, const void *, rc_uint_type, rc_uint_type); | |
| extern void get_windres_bfd_content (windres_bfd *, void *, rc_uint_type, rc_uint_type); | |
| extern void windres_put_8 (windres_bfd *, void *, rc_uint_type); | |
| extern void windres_put_16 (windres_bfd *, void *, rc_uint_type); | |
| extern void windres_put_32 (windres_bfd *, void *, rc_uint_type); | |
| extern rc_uint_type windres_get_8 (windres_bfd *, const void *, rc_uint_type); | |
| extern rc_uint_type windres_get_16 (windres_bfd *, const void *, rc_uint_type); | |
| extern rc_uint_type windres_get_32 (windres_bfd *, const void *, rc_uint_type); | |
| extern void set_windres_bfd (windres_bfd *, bfd *, asection *, rc_uint_type); | |
| extern void set_windres_bfd_endianness (windres_bfd *, int); | |
| #endif |