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