12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097 |
- /* windint.h -- internal header file for windres program.
- Copyright (C) 1997-2017 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 int 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
|