gdb/
[deliverable/binutils-gdb.git] / binutils / windint.h
CommitLineData
4a594fce 1/* windint.h -- internal header file for windres program.
cc643b88 2 Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2011
4a594fce
NC
3 Free Software Foundation, Inc.
4 Written by Kai Tietz, Onevision.
5
6 This file is part of GNU Binutils.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
32866df7 10 the Free Software Foundation; either version 3 of the License, or
4a594fce
NC
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
21 02110-1301, USA. */
22
23#include "winduni.h"
24
25#ifndef WINDINT_H
26#define WINDINT_H
27
28/* Use bfd_size_type to ensure a sufficient number of bits. */
29#ifndef DEFINED_RC_UINT_TYPE
30#define DEFINED_RC_UINT_TYPE
31typedef bfd_size_type rc_uint_type;
32#endif
33
34/* Resource directory structure. */
35
36typedef struct res_hdr
37{
38 rc_uint_type data_size;
39 rc_uint_type header_size;
40} res_hdr;
41
42struct __attribute__ ((__packed__)) bin_res_hdr
43{
44 bfd_byte data_size[4];
45 bfd_byte header_size[4];
46};
47#define BIN_RES_HDR_SIZE 8
48
49struct __attribute__ ((__packed__)) bin_res_id
50{
51 bfd_byte sig[2]; /* Has to be 0xffff for unnamed ids. */
52 bfd_byte id[2];
53};
54#define BIN_RES_ID 4
55
56/* This structure is used when converting resource information to
57 binary. */
58
59typedef struct bindata
60{
61 /* Next data. */
62 struct bindata *next;
63 /* Length of data. */
64 rc_uint_type length;
65 /* Data. */
66 bfd_byte *data;
67} bindata;
68
69/* This structure is used when converting resource information to
70 coff. */
71typedef struct coff_res_data
72{
73 /* Next data. */
74 struct coff_res_data *next;
75 /* Length of data. */
76 rc_uint_type length;
77 /* Data. */
78 const struct rc_res_resource *res;
79} coff_res_data;
80
81/* We represent resources internally as a tree, similar to the tree
82 used in the .rsrc section of a COFF file. The root is a
83 rc_res_directory structure. */
84
85typedef struct rc_res_directory
86{
87 /* Resource flags. According to the MS docs, this is currently
88 always zero. */
89 rc_uint_type characteristics;
90 /* Time/date stamp. */
91 rc_uint_type time;
92 /* Major version number. */
93 rc_uint_type major;
94 /* Minor version number. */
95 rc_uint_type minor;
96 /* Directory entries. */
97 struct rc_res_entry *entries;
98} rc_res_directory;
99
100/* A resource ID is stored in a rc_res_id structure. */
101
102typedef struct rc_res_id
103{
104 /* Non-zero if this entry has a name rather than an ID. */
105 rc_uint_type named : 1;
106 union
107 {
108 /* If the named field is non-zero, this is the name. */
109 struct
110 {
111 /* Length of the name. */
112 rc_uint_type length;
113 /* Pointer to the name, which is a Unicode string. */
114 unichar *name;
115 } n;
116 /* If the named field is zero, this is the ID. */
117 rc_uint_type id;
118 } u;
119} rc_res_id;
120
121/* Each entry in the tree is a rc_res_entry structure. We mix
122 directories and resources because in a COFF file all entries in a
123 directory are sorted together, whether the entries are
124 subdirectories or resources. */
125
126typedef struct rc_res_entry
127{
128 /* Next entry. */
129 struct rc_res_entry *next;
130 /* Resource ID. */
131 rc_res_id id;
132 /* Non-zero if this entry is a subdirectory rather than a leaf. */
133 rc_uint_type subdir : 1;
134 union
135 {
136 /* If the subdir field is non-zero, this is a pointer to the
137 subdirectory. */
138 rc_res_directory *dir;
139 /* If the subdir field is zero, this is a pointer to the resource
140 data. */
141 struct rc_res_resource *res;
142 } u;
143} rc_res_entry;
144
145/* Types of resources. */
146
147enum rc_res_type
148{
149 RES_TYPE_UNINITIALIZED,
150 RES_TYPE_ACCELERATOR,
151 RES_TYPE_BITMAP,
152 RES_TYPE_CURSOR,
153 RES_TYPE_GROUP_CURSOR,
154 RES_TYPE_DIALOG,
155 RES_TYPE_FONT,
156 RES_TYPE_FONTDIR,
157 RES_TYPE_ICON,
158 RES_TYPE_GROUP_ICON,
159 RES_TYPE_MENU,
160 RES_TYPE_MESSAGETABLE,
161 RES_TYPE_RCDATA,
162 RES_TYPE_STRINGTABLE,
163 RES_TYPE_USERDATA,
164 RES_TYPE_VERSIONINFO,
165 RES_TYPE_DLGINCLUDE,
166 RES_TYPE_PLUGPLAY,
167 RES_TYPE_VXD,
168 RES_TYPE_ANICURSOR,
169 RES_TYPE_ANIICON,
170 RES_TYPE_DLGINIT,
171 RES_TYPE_TOOLBAR
172};
173
174/* A res file and a COFF file store information differently. The
175 res_info structures holds data which in a res file is stored with
176 each resource, but in a COFF file is stored elsewhere. */
177
178typedef struct rc_res_res_info
179{
180 /* Language. In a COFF file, the third level of the directory is
181 keyed by the language, so the language of a resource is defined
182 by its location in the resource tree. */
183 rc_uint_type language;
184 /* Characteristics of the resource. Entirely user defined. In a
185 COFF file, the rc_res_directory structure has a characteristics
186 field, but I don't know if it's related to the one in the res
187 file. */
188 rc_uint_type characteristics;
189 /* Version of the resource. Entirely user defined. In a COFF file,
190 the rc_res_directory structure has a characteristics field, but I
191 don't know if it's related to the one in the res file. */
192 rc_uint_type version;
193 /* Memory flags. This is a combination of the MEMFLAG values
194 defined below. Most of these values are historical, and are not
195 meaningful for win32. I don't think there is any way to store
196 this information in a COFF file. */
197 rc_uint_type memflags;
198} rc_res_res_info;
199
200/* Binary layout of rc_res_info. */
201
202struct __attribute__ ((__packed__)) bin_res_info
203{
204 bfd_byte version[4];
205 bfd_byte memflags[2];
206 bfd_byte language[2];
207 bfd_byte version2[4];
208 bfd_byte characteristics[4];
209};
210#define BIN_RES_INFO_SIZE 16
211
212/* Each resource in a COFF file has some information which can does
213 not appear in a res file. */
214
215typedef struct rc_res_coff_info
216{
217 /* The code page used for the data. I don't really know what this
218 should be. It has something todo with ASCII to Unicode encoding. */
219 rc_uint_type codepage;
220 /* A resource entry in a COFF file has a reserved field, which we
221 record here when reading a COFF file. When writing a COFF file,
222 we set this field to zero. */
223 rc_uint_type reserved;
224} rc_res_coff_info;
225
226/* Resource data is stored in a rc_res_resource structure. */
227
228typedef struct rc_res_resource
229{
230 /* The type of resource. */
231 enum rc_res_type type;
232 /* The data for the resource. */
233 union
234 {
235 struct
236 {
237 rc_uint_type length;
238 const bfd_byte *data;
239 } data;
240 struct rc_accelerator *acc;
241 struct rc_cursor *cursor;
242 struct rc_group_cursor *group_cursor;
243 struct rc_dialog *dialog;
244 struct rc_fontdir *fontdir;
245 struct rc_group_icon *group_icon;
246 struct rc_menu *menu;
247 struct rc_rcdata_item *rcdata;
248 struct rc_stringtable *stringtable;
249 struct rc_rcdata_item *userdata;
250 struct rc_versioninfo *versioninfo;
251 struct rc_toolbar *toolbar;
252 } u;
253 /* Information from a res file. */
254 struct rc_res_res_info res_info;
255 /* Information from a COFF file. */
256 rc_res_coff_info coff_info;
257} rc_res_resource;
258
259#define SUBLANG_SHIFT 10
260
261/* Memory flags in the memflags field of a rc_res_resource. */
262
263#define MEMFLAG_MOVEABLE 0x10
264#define MEMFLAG_PURE 0x20
265#define MEMFLAG_PRELOAD 0x40
266#define MEMFLAG_DISCARDABLE 0x1000
267
268/* Standard resource type codes. These are used in the ID field of a
269 rc_res_entry structure. */
270
271#define RT_CURSOR 1
272#define RT_BITMAP 2
273#define RT_ICON 3
274#define RT_MENU 4
275#define RT_DIALOG 5
276#define RT_STRING 6
277#define RT_FONTDIR 7
278#define RT_FONT 8
279#define RT_ACCELERATOR 9
280#define RT_RCDATA 10
281#define RT_MESSAGETABLE 11
282#define RT_GROUP_CURSOR 12
283#define RT_GROUP_ICON 14
284#define RT_VERSION 16
285#define RT_DLGINCLUDE 17
286#define RT_PLUGPLAY 19
287#define RT_VXD 20
288#define RT_ANICURSOR 21
289#define RT_ANIICON 22
290#define RT_HTML 23
291#define RT_MANIFEST 24
292#define RT_DLGINIT 240
293#define RT_TOOLBAR 241
294
295/* An accelerator resource is a linked list of these structures. */
296
297typedef struct rc_accelerator
298{
299 /* Next accelerator. */
300 struct rc_accelerator *next;
301 /* Flags. A combination of the ACC values defined below. */
302 rc_uint_type flags;
303 /* Key value. */
304 rc_uint_type key;
305 /* Resource ID. */
306 rc_uint_type id;
307} rc_accelerator;
308
309struct __attribute__ ((__packed__)) bin_accelerator
310{
311 bfd_byte flags[2];
312 bfd_byte key[2];
313 bfd_byte id[2];
314 bfd_byte pad[2];
315};
316#define BIN_ACCELERATOR_SIZE 8
317
318/* Accelerator flags in the flags field of a rc_accelerator.
319 These are the same values that appear in a res file. I hope. */
320
321#define ACC_VIRTKEY 0x01
322#define ACC_NOINVERT 0x02
323#define ACC_SHIFT 0x04
324#define ACC_CONTROL 0x08
325#define ACC_ALT 0x10
326#define ACC_LAST 0x80
327
328/* A cursor resource. */
329
330typedef struct rc_cursor
331{
332 /* X coordinate of hotspot. */
333 bfd_signed_vma xhotspot;
334 /* Y coordinate of hotspot. */
335 bfd_signed_vma yhotspot;
336 /* Length of bitmap data. */
337 rc_uint_type length;
338 /* Data. */
339 const bfd_byte *data;
340} rc_cursor;
341
342struct __attribute__ ((__packed__)) bin_cursor
343{
344 bfd_byte xhotspot[2];
345 bfd_byte yhotspot[2];
346};
347#define BIN_CURSOR_SIZE 4
348
349/* A group_cursor resource is a list of rc_i_group_cursor structures. */
350
351typedef struct rc_group_cursor
352{
353 /* Next cursor in group. */
354 struct rc_group_cursor *next;
355 /* Width. */
356 rc_uint_type width;
357 /* Height. */
358 rc_uint_type height;
359 /* Planes. */
360 rc_uint_type planes;
361 /* Bits per pixel. */
362 rc_uint_type bits;
363 /* Number of bytes in cursor resource. */
364 rc_uint_type bytes;
365 /* Index of cursor resource. */
366 rc_uint_type index;
367} rc_group_cursor;
368
369struct __attribute__ ((__packed__)) bin_group_cursor_item
370{
371 bfd_byte width[2];
372 bfd_byte height[2];
373 bfd_byte planes[2];
374 bfd_byte bits[2];
375 bfd_byte bytes[4];
376 bfd_byte index[2];
377};
378#define BIN_GROUP_CURSOR_ITEM_SIZE 14
379
380struct __attribute__ ((__packed__)) bin_group_cursor
381{
382 bfd_byte sig1[2];
383 bfd_byte sig2[2];
384 bfd_byte nitems[2];
385 /* struct bin_group_cursor_item item[nitems]; */
386};
387#define BIN_GROUP_CURSOR_SIZE 6
388
389/* A dialog resource. */
390
391typedef struct rc_dialog
392{
393 /* Basic window style. */
394 unsigned int style;
395 /* Extended window style. */
396 rc_uint_type exstyle;
397 /* X coordinate. */
398 rc_uint_type x;
399 /* Y coordinate. */
400 rc_uint_type y;
401 /* Width. */
402 rc_uint_type width;
403 /* Height. */
404 rc_uint_type height;
405 /* Menu name. */
406 rc_res_id menu;
407 /* Class name. */
408 rc_res_id class;
409 /* Caption. */
410 unichar *caption;
411 /* Font point size. */
412 rc_uint_type pointsize;
413 /* Font name. */
414 unichar *font;
415 /* Extended information for a dialogex. */
416 struct rc_dialog_ex *ex;
417 /* Controls. */
418 struct rc_dialog_control *controls;
419} rc_dialog;
420
421struct __attribute__ ((__packed__)) bin_dialog
422{
423 bfd_byte style[4];
424 bfd_byte exstyle[4];
425 bfd_byte off[2];
426 bfd_byte x[2];
427 bfd_byte y[2];
428 bfd_byte width[2];
429 bfd_byte height[2];
430};
431#define BIN_DIALOG_SIZE 18
432
433/* An extended dialog has additional information. */
434
435typedef struct rc_dialog_ex
436{
437 /* Help ID. */
438 rc_uint_type help;
439 /* Font weight. */
440 rc_uint_type weight;
441 /* Whether the font is italic. */
442 bfd_byte italic;
443 /* Character set. */
444 bfd_byte charset;
445} rc_dialog_ex;
446
447struct __attribute__ ((__packed__)) bin_dialogex
448{
449 bfd_byte sig1[2];
450 bfd_byte sig2[2];
451 bfd_byte help[4];
452 bfd_byte exstyle[4];
453 bfd_byte style[4];
454 bfd_byte off[2];
455 bfd_byte x[2];
456 bfd_byte y[2];
457 bfd_byte width[2];
458 bfd_byte height[2];
459};
460#define BIN_DIALOGEX_SIZE 26
461
462struct __attribute__ ((__packed__)) bin_dialogfont
463{
464 bfd_byte pointsize[2];
465};
466#define BIN_DIALOGFONT_SIZE 2
467
468struct __attribute__ ((__packed__)) bin_dialogexfont
469{
470 bfd_byte pointsize[2];
471 bfd_byte weight[2];
472 bfd_byte italic[1];
473 bfd_byte charset[1];
474};
475#define BIN_DIALOGEXFONT_SIZE 6
476
477/* Window style flags, from the winsup Defines.h header file. These
478 can appear in the style field of a rc_dialog or a rc_dialog_control. */
479
480#define CW_USEDEFAULT 0x80000000
481#define WS_BORDER 0x800000L
482#define WS_CAPTION 0xc00000L
483#define WS_CHILD 0x40000000L
484#define WS_CHILDWINDOW 0x40000000L
485#define WS_CLIPCHILDREN 0x2000000L
486#define WS_CLIPSIBLINGS 0x4000000L
487#define WS_DISABLED 0x8000000L
488#define WS_DLGFRAME 0x400000L
489#define WS_GROUP 0x20000L
490#define WS_HSCROLL 0x100000L
491#define WS_ICONIC 0x20000000L
492#define WS_MAXIMIZE 0x1000000L
493#define WS_MAXIMIZEBOX 0x10000L
494#define WS_MINIMIZE 0x20000000L
495#define WS_MINIMIZEBOX 0x20000L
496#define WS_OVERLAPPED 0L
497#define WS_OVERLAPPEDWINDOW 0xcf0000L
498#define WS_POPUP 0x80000000L
499#define WS_POPUPWINDOW 0x80880000L
500#define WS_SIZEBOX 0x40000L
501#define WS_SYSMENU 0x80000L
502#define WS_TABSTOP 0x10000L
503#define WS_THICKFRAME 0x40000L
504#define WS_TILED 0L
505#define WS_TILEDWINDOW 0xcf0000L
506#define WS_VISIBLE 0x10000000L
507#define WS_VSCROLL 0x200000L
508#define MDIS_ALLCHILDSTYLES 0x1
509#define BS_3STATE 0x5L
510#define BS_AUTO3STATE 0x6L
511#define BS_AUTOCHECKBOX 0x3L
512#define BS_AUTORADIOBUTTON 0x9L
513#define BS_BITMAP 0x80L
514#define BS_BOTTOM 0x800L
515#define BS_CENTER 0x300L
516#define BS_CHECKBOX 0x2L
517#define BS_DEFPUSHBUTTON 0x1L
518#define BS_GROUPBOX 0x7L
519#define BS_ICON 0x40L
520#define BS_LEFT 0x100L
521#define BS_LEFTTEXT 0x20L
522#define BS_MULTILINE 0x2000L
523#define BS_NOTIFY 0x4000L
524#define BS_OWNERDRAW 0xbL
525#define BS_PUSHBOX 0xcL /* FIXME! What should this be? */
526#define BS_PUSHBUTTON 0L
527#define BS_PUSHLIKE 0x1000L
528#define BS_RADIOBUTTON 0x4L
529#define BS_RIGHT 0x200L
530#define BS_RIGHTBUTTON 0x20L
531#define BS_TEXT 0L
532#define BS_TOP 0x400L
533#define BS_USERBUTTON 0x8L
534#define BS_VCENTER 0xc00L
535#define CBS_AUTOHSCROLL 0x40L
536#define CBS_DISABLENOSCROLL 0x800L
537#define CBS_DROPDOWN 0x2L
538#define CBS_DROPDOWNLIST 0x3L
539#define CBS_HASSTRINGS 0x200L
540#define CBS_LOWERCASE 0x4000L
541#define CBS_NOINTEGRALHEIGHT 0x400L
542#define CBS_OEMCONVERT 0x80L
543#define CBS_OWNERDRAWFIXED 0x10L
544#define CBS_OWNERDRAWVARIABLE 0x20L
545#define CBS_SIMPLE 0x1L
546#define CBS_SORT 0x100L
547#define CBS_UPPERCASE 0x2000L
548#define ES_AUTOHSCROLL 0x80L
549#define ES_AUTOVSCROLL 0x40L
550#define ES_CENTER 0x1L
551#define ES_LEFT 0L
552#define ES_LOWERCASE 0x10L
553#define ES_MULTILINE 0x4L
554#define ES_NOHIDESEL 0x100L
555#define ES_NUMBER 0x2000L
556#define ES_OEMCONVERT 0x400L
557#define ES_PASSWORD 0x20L
558#define ES_READONLY 0x800L
559#define ES_RIGHT 0x2L
560#define ES_UPPERCASE 0x8L
561#define ES_WANTRETURN 0x1000L
562#define LBS_DISABLENOSCROLL 0x1000L
563#define LBS_EXTENDEDSEL 0x800L
564#define LBS_HASSTRINGS 0x40L
565#define LBS_MULTICOLUMN 0x200L
566#define LBS_MULTIPLESEL 0x8L
567#define LBS_NODATA 0x2000L
568#define LBS_NOINTEGRALHEIGHT 0x100L
569#define LBS_NOREDRAW 0x4L
570#define LBS_NOSEL 0x4000L
571#define LBS_NOTIFY 0x1L
572#define LBS_OWNERDRAWFIXED 0x10L
573#define LBS_OWNERDRAWVARIABLE 0x20L
574#define LBS_SORT 0x2L
575#define LBS_STANDARD 0xa00003L
576#define LBS_USETABSTOPS 0x80L
577#define LBS_WANTKEYBOARDINPUT 0x400L
578#define SBS_BOTTOMALIGN 0x4L
579#define SBS_HORZ 0L
580#define SBS_LEFTALIGN 0x2L
581#define SBS_RIGHTALIGN 0x4L
582#define SBS_SIZEBOX 0x8L
583#define SBS_SIZEBOXBOTTOMRIGHTALIGN 0x4L
584#define SBS_SIZEBOXTOPLEFTALIGN 0x2L
585#define SBS_SIZEGRIP 0x10L
586#define SBS_TOPALIGN 0x2L
587#define SBS_VERT 0x1L
588#define SS_BITMAP 0xeL
589#define SS_BLACKFRAME 0x7L
590#define SS_BLACKRECT 0x4L
591#define SS_CENTER 0x1L
592#define SS_CENTERIMAGE 0x200L
593#define SS_ENHMETAFILE 0xfL
594#define SS_ETCHEDFRAME 0x12L
595#define SS_ETCHEDHORZ 0x10L
596#define SS_ETCHEDVERT 0x11L
597#define SS_GRAYFRAME 0x8L
598#define SS_GRAYRECT 0x5L
599#define SS_ICON 0x3L
600#define SS_LEFT 0L
601#define SS_LEFTNOWORDWRAP 0xcL
602#define SS_NOPREFIX 0x80L
603#define SS_NOTIFY 0x100L
604#define SS_OWNERDRAW 0xdL
605#define SS_REALSIZEIMAGE 0x800L
606#define SS_RIGHT 0x2L
607#define SS_RIGHTJUST 0x400L
608#define SS_SIMPLE 0xbL
609#define SS_SUNKEN 0x1000L
610#define SS_USERITEM 0xaL
611#define SS_WHITEFRAME 0x9L
612#define SS_WHITERECT 0x6L
613#define DS_3DLOOK 0x4L
614#define DS_ABSALIGN 0x1L
615#define DS_CENTER 0x800L
616#define DS_CENTERMOUSE 0x1000L
617#define DS_CONTEXTHELP 0x2000L
618#define DS_CONTROL 0x400L
619#define DS_FIXEDSYS 0x8L
620#define DS_LOCALEDIT 0x20L
621#define DS_MODALFRAME 0x80L
622#define DS_NOFAILCREATE 0x10L
623#define DS_NOIDLEMSG 0x100L
624#define DS_SETFONT 0x40L
625#define DS_SETFOREGROUND 0x200L
626#define DS_SYSMODAL 0x2L
627
628/* A dialog control. */
629
630typedef struct rc_dialog_control
631{
632 /* Next control. */
633 struct rc_dialog_control *next;
634 /* ID. */
635 rc_uint_type id;
636 /* Style. */
637 rc_uint_type style;
638 /* Extended style. */
639 rc_uint_type exstyle;
640 /* X coordinate. */
641 rc_uint_type x;
642 /* Y coordinate. */
643 rc_uint_type y;
644 /* Width. */
645 rc_uint_type width;
646 /* Height. */
647 rc_uint_type height;
648 /* Class name. */
649 rc_res_id class;
650 /* Associated text. */
651 rc_res_id text;
652 /* Extra data for the window procedure. */
653 struct rc_rcdata_item *data;
654 /* Help ID. Only used in an extended dialog. */
655 rc_uint_type help;
656} rc_dialog_control;
657
658struct __attribute__ ((__packed__)) bin_dialog_control
659{
660 bfd_byte style[4];
661 bfd_byte exstyle[4];
662 bfd_byte x[2];
663 bfd_byte y[2];
664 bfd_byte width[2];
665 bfd_byte height[2];
666 bfd_byte id[2];
667};
668#define BIN_DIALOG_CONTROL_SIZE 18
669
670struct __attribute__ ((__packed__)) bin_dialogex_control
671{
672 bfd_byte help[4];
673 bfd_byte exstyle[4];
674 bfd_byte style[4];
675 bfd_byte x[2];
676 bfd_byte y[2];
677 bfd_byte width[2];
678 bfd_byte height[2];
679 bfd_byte id[4];
680};
681#define BIN_DIALOGEX_CONTROL_SIZE 24
682
683/* Control classes. These can be used as the ID field in a rc_dialog_control. */
684
685#define CTL_BUTTON 0x80
686#define CTL_EDIT 0x81
687#define CTL_STATIC 0x82
688#define CTL_LISTBOX 0x83
689#define CTL_SCROLLBAR 0x84
690#define CTL_COMBOBOX 0x85
691
692/* A fontdir resource is a list of rc_fontdir. */
693
694typedef struct rc_fontdir
695{
696 struct rc_fontdir *next;
697 /* Index of font entry. */
698 rc_uint_type index;
699 /* Length of font information. */
700 rc_uint_type length;
701 /* Font information. */
702 const bfd_byte *data;
703} rc_fontdir;
704
705struct __attribute__ ((__packed__)) bin_fontdir_item
706{
707 bfd_byte index[2];
708 bfd_byte header[54];
709 bfd_byte device_name[1];
710 /* bfd_byte face_name[]; */
711};
712
713/* A group_icon resource is a list of rc_group_icon. */
714
715typedef struct rc_group_icon
716{
717 /* Next icon in group. */
718 struct rc_group_icon *next;
719 /* Width. */
720 bfd_byte width;
721 /* Height. */
722 bfd_byte height;
723 /* Color count. */
724 bfd_byte colors;
725 /* Planes. */
726 rc_uint_type planes;
727 /* Bits per pixel. */
728 rc_uint_type bits;
729 /* Number of bytes in cursor resource. */
730 rc_uint_type bytes;
731 /* Index of cursor resource. */
732 rc_uint_type index;
733} rc_group_icon;
734
735struct __attribute__ ((__packed__)) bin_group_icon
736{
737 bfd_byte sig1[2];
738 bfd_byte sig2[2];
739 bfd_byte count[2];
740};
741#define BIN_GROUP_ICON_SIZE 6
742
743struct __attribute__ ((__packed__)) bin_group_icon_item
744{
745 bfd_byte width[1];
746 bfd_byte height[1];
747 bfd_byte colors[1];
748 bfd_byte pad[1];
749 bfd_byte planes[2];
750 bfd_byte bits[2];
751 bfd_byte bytes[4];
752 bfd_byte index[2];
753};
754#define BIN_GROUP_ICON_ITEM_SIZE 14
755
756/* A menu resource. */
757
758typedef struct rc_menu
759{
760 /* List of menuitems. */
761 struct rc_menuitem *items;
762 /* Help ID. I don't think there is any way to set this in an rc
763 file, but it can appear in the binary format. */
764 rc_uint_type help;
765} rc_menu;
766
767struct __attribute__ ((__packed__)) bin_menu
768{
769 bfd_byte sig1[2];
770 bfd_byte sig2[2];
771};
772#define BIN_MENU_SIZE 4
773
774struct __attribute__ ((__packed__)) bin_menuex
775{
776 bfd_byte sig1[2];
777 bfd_byte sig2[2];
778 bfd_byte help[4];
779};
780#define BIN_MENUEX_SIZE 8
781
782/* A menu resource is a list of rc_menuitem. */
783
784typedef struct rc_menuitem
785{
786 /* Next menu item. */
787 struct rc_menuitem *next;
788 /* Type. In a normal menu, rather than a menuex, this is the flags
789 field. */
790 rc_uint_type type;
791 /* State. This is only used in a menuex. */
792 rc_uint_type state;
793 /* Id. */
794 rc_uint_type id;
795 /* Unicode text. */
796 unichar *text;
797 /* Popup menu items for a popup. */
798 struct rc_menuitem *popup;
799 /* Help ID. This is only used in a menuex. */
800 rc_uint_type help;
801} rc_menuitem;
802
803struct __attribute__ ((__packed__)) bin_menuitem
804{
805 bfd_byte flags[2];
806 bfd_byte id[2];
807};
808#define BIN_MENUITEM_SIZE 4
809#define BIN_MENUITEM_POPUP_SIZE 2
810
811struct __attribute__ ((__packed__)) bin_menuitemex
812{
813 bfd_byte type[4];
814 bfd_byte state[4];
815 bfd_byte id[4];
816 bfd_byte flags[2];
817 /* unicode text */
818 /* if popup: align, bfd_byte help[4], align, bin_menuitemex[]; */
819};
820#define BIN_MENUITEMEX_SIZE 14
821
822/* Menu item flags. These can appear in the flags field of a rc_menuitem. */
823
824#define MENUITEM_GRAYED 0x001
825#define MENUITEM_INACTIVE 0x002
826#define MENUITEM_BITMAP 0x004
827#define MENUITEM_OWNERDRAW 0x100
828#define MENUITEM_CHECKED 0x008
829#define MENUITEM_POPUP 0x010
830#define MENUITEM_MENUBARBREAK 0x020
831#define MENUITEM_MENUBREAK 0x040
832#define MENUITEM_ENDMENU 0x080
833#define MENUITEM_HELP 0x4000
834
835/* An rcdata resource is a pointer to a list of rc_rcdata_item. */
836
837typedef struct rc_rcdata_item
838{
839 /* Next data item. */
840 struct rc_rcdata_item *next;
841 /* Type of data. */
842 enum
843 {
844 RCDATA_WORD,
845 RCDATA_DWORD,
846 RCDATA_STRING,
847 RCDATA_WSTRING,
848 RCDATA_BUFFER
849 } type;
850 union
851 {
852 rc_uint_type word;
853 rc_uint_type dword;
854 struct
855 {
856 rc_uint_type length;
857 const char *s;
858 } string;
859 struct
860 {
861 rc_uint_type length;
862 const unichar *w;
863 } wstring;
864 struct
865 {
866 rc_uint_type length;
867 const bfd_byte *data;
868 } buffer;
869 } u;
870} rc_rcdata_item;
871
872/* A stringtable resource is a pointer to a rc_stringtable. */
873
874typedef struct rc_stringtable
875{
876 /* Each stringtable resource is a list of 16 unicode strings. */
877 struct
878 {
879 /* Length of string. */
880 rc_uint_type length;
881 /* String data if length > 0. */
882 unichar *string;
883 } strings[16];
884} rc_stringtable;
885
886/* A versioninfo resource points to a rc_versioninfo. */
887
888typedef struct rc_versioninfo
889{
890 /* Fixed version information. */
891 struct rc_fixed_versioninfo *fixed;
892 /* Variable version information. */
893 struct rc_ver_info *var;
894} rc_versioninfo;
895
896struct __attribute__ ((__packed__)) bin_versioninfo
897{
898 bfd_byte size[2];
899 bfd_byte fixed_size[2];
900 bfd_byte sig2[2];
901};
902#define BIN_VERSIONINFO_SIZE 6
903
904/* The fixed portion of a versioninfo resource. */
905
906typedef struct rc_fixed_versioninfo
907{
908 /* The file version, which is two 32 bit integers. */
909 rc_uint_type file_version_ms;
910 rc_uint_type file_version_ls;
911 /* The product version, which is two 32 bit integers. */
912 rc_uint_type product_version_ms;
913 rc_uint_type product_version_ls;
914 /* The file flags mask. */
915 rc_uint_type file_flags_mask;
916 /* The file flags. */
917 rc_uint_type file_flags;
918 /* The OS type. */
919 rc_uint_type file_os;
920 /* The file type. */
921 rc_uint_type file_type;
922 /* The file subtype. */
923 rc_uint_type file_subtype;
924 /* The date, which in Windows is two 32 bit integers. */
925 rc_uint_type file_date_ms;
926 rc_uint_type file_date_ls;
927} rc_fixed_versioninfo;
928
929struct __attribute__ ((__packed__)) bin_fixed_versioninfo
930{
931 bfd_byte sig1[4];
932 bfd_byte sig2[4];
933 bfd_byte file_version[4];
934 bfd_byte file_version_ls[4];
935 bfd_byte product_version_ms[4];
936 bfd_byte product_version_ls[4];
937 bfd_byte file_flags_mask[4];
938 bfd_byte file_flags[4];
939 bfd_byte file_os[4];
940 bfd_byte file_type[4];
941 bfd_byte file_subtype[4];
942 bfd_byte file_date_ms[4];
943 bfd_byte file_date_ls[4];
944};
945#define BIN_FIXED_VERSIONINFO_SIZE 52
946
947/* A list of variable version information. */
948
949typedef struct rc_ver_info
950{
951 /* Next item. */
952 struct rc_ver_info *next;
953 /* Type of data. */
954 enum { VERINFO_STRING, VERINFO_VAR } type;
955 union
956 {
957 /* StringFileInfo data. */
958 struct
959 {
960 /* Language. */
961 unichar *language;
962 /* Strings. */
963 struct rc_ver_stringinfo *strings;
964 } string;
965 /* VarFileInfo data. */
966 struct
967 {
968 /* Key. */
969 unichar *key;
970 /* Values. */
971 struct rc_ver_varinfo *var;
972 } var;
973 } u;
974} rc_ver_info;
975
976struct __attribute__ ((__packed__)) bin_ver_info
977{
978 bfd_byte size[2];
979 bfd_byte sig1[2];
980 bfd_byte sig2[2];
981};
982#define BIN_VER_INFO_SIZE 6
983
984/* A list of string version information. */
985
986typedef struct rc_ver_stringinfo
987{
988 /* Next string. */
989 struct rc_ver_stringinfo *next;
990 /* Key. */
991 unichar *key;
992 /* Value. */
993 unichar *value;
994} rc_ver_stringinfo;
995
996/* A list of variable version information. */
997
998typedef struct rc_ver_varinfo
999{
1000 /* Next item. */
1001 struct rc_ver_varinfo *next;
1002 /* Language ID. */
1003 rc_uint_type language;
1004 /* Character set ID. */
1005 rc_uint_type charset;
1006} rc_ver_varinfo;
1007
1008typedef struct rc_toolbar_item
1009{
1010 struct rc_toolbar_item *next;
1011 struct rc_toolbar_item *prev;
1012 rc_res_id id;
1013} rc_toolbar_item;
1014
1015struct __attribute__ ((__packed__)) bin_messagetable_item
1016{
1017 bfd_byte length[2];
1018 bfd_byte flags[2];
1019 bfd_byte data[1];
1020};
1021#define BIN_MESSAGETABLE_ITEM_SIZE 4
1022
1023#define MESSAGE_RESOURCE_UNICODE 0x0001
1024
1025struct __attribute__ ((__packed__)) bin_messagetable_block
1026{
1027 bfd_byte lowid[4];
1028 bfd_byte highid[4];
1029 bfd_byte offset[4];
1030};
1031#define BIN_MESSAGETABLE_BLOCK_SIZE 12
1032
1033struct __attribute__ ((__packed__)) bin_messagetable
1034{
1035 bfd_byte cblocks[4];
1036 struct bin_messagetable_block items[1];
1037};
1038#define BIN_MESSAGETABLE_SIZE 8
1039
1040typedef struct rc_toolbar
1041{
1042 rc_uint_type button_width;
1043 rc_uint_type button_height;
1044 rc_uint_type nitems;
1045 rc_toolbar_item *items;
1046} rc_toolbar;
1047
1048struct __attribute__ ((__packed__)) bin_toolbar
1049{
1050 bfd_byte button_width[4];
1051 bfd_byte button_height[4];
1052 bfd_byte nitems[4];
1053 /* { bfd_byte id[4]; } * nitems; */
1054};
1055#define BIN_TOOLBAR_SIZE 12
1056
1057extern int target_is_bigendian;
1058
1059typedef struct windres_bfd
1060{
1061 bfd *abfd;
1062 asection *sec;
1063 rc_uint_type kind : 4;
1064} windres_bfd;
1065
1066#define WR_KIND_TARGET 0
1067#define WR_KIND_BFD 1
1068#define WR_KIND_BFD_BIN_L 2
1069#define WR_KIND_BFD_BIN_B 3
1070
1071#define WR_KIND(PTR) (PTR)->kind
1072#define WR_SECTION(PTR) (PTR)->sec
1073#define WR_BFD(PTR) (PTR)->abfd
1074
1075extern void set_windres_bfd_content (windres_bfd *, const void *, rc_uint_type, rc_uint_type);
1076extern void get_windres_bfd_content (windres_bfd *, void *, rc_uint_type, rc_uint_type);
1077
1078extern void windres_put_8 (windres_bfd *, void *, rc_uint_type);
1079extern void windres_put_16 (windres_bfd *, void *, rc_uint_type);
1080extern void windres_put_32 (windres_bfd *, void *, rc_uint_type);
1081extern rc_uint_type windres_get_8 (windres_bfd *, const void *, rc_uint_type);
1082extern rc_uint_type windres_get_16 (windres_bfd *, const void *, rc_uint_type);
1083extern rc_uint_type windres_get_32 (windres_bfd *, const void *, rc_uint_type);
1084
1085extern void set_windres_bfd (windres_bfd *, bfd *, asection *, rc_uint_type);
cc643b88 1086extern void set_windres_bfd_endianness (windres_bfd *, int);
4a594fce
NC
1087
1088#endif
This page took 0.240732 seconds and 4 git commands to generate.