1 /* windres.h -- header file for windres program. 2 Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005 3 Free Software Foundation, Inc. 4 Written by Ian Lance Taylor, Cygnus Support. 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 10 the Free Software Foundation; either version 2 of the License, or 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 "ansidecl.h" 24 25 /* This is the header file for the windres program. It defines 26 structures and declares functions used within the program. */ 27 28 #include "winduni.h" 29 30 /* We represent resources internally as a tree, similar to the tree 31 used in the .rsrc section of a COFF file. The root is a 32 res_directory structure. */ 33 34 struct res_directory 35 { 36 /* Resource flags. According to the MS docs, this is currently 37 always zero. */ 38 unsigned long characteristics; 39 /* Time/date stamp. */ 40 unsigned long time; 41 /* Major version number. */ 42 unsigned short major; 43 /* Minor version number. */ 44 unsigned short minor; 45 /* Directory entries. */ 46 struct res_entry *entries; 47 }; 48 49 /* A resource ID is stored in a res_id structure. */ 50 51 struct res_id 52 { 53 /* Non-zero if this entry has a name rather than an ID. */ 54 unsigned int named : 1; 55 union 56 { 57 /* If the named field is non-zero, this is the name. */ 58 struct 59 { 60 /* Length of the name. */ 61 int length; 62 /* Pointer to the name, which is a Unicode string. */ 63 unichar *name; 64 } n; 65 /* If the named field is zero, this is the ID. */ 66 unsigned long id; 67 } u; 68 }; 69 70 /* Each entry in the tree is a res_entry structure. We mix 71 directories and resources because in a COFF file all entries in a 72 directory are sorted together, whether the entries are 73 subdirectories or resources. */ 74 75 struct res_entry 76 { 77 /* Next entry. */ 78 struct res_entry *next; 79 /* Resource ID. */ 80 struct res_id id; 81 /* Non-zero if this entry is a subdirectory rather than a leaf. */ 82 unsigned int subdir : 1; 83 union 84 { 85 /* If the subdir field is non-zero, this is a pointer to the 86 subdirectory. */ 87 struct res_directory *dir; 88 /* If the subdir field is zero, this is a pointer to the resource 89 data. */ 90 struct res_resource *res; 91 } u; 92 }; 93 94 /* Types of resources. */ 95 96 enum res_type 97 { 98 RES_TYPE_UNINITIALIZED, 99 RES_TYPE_ACCELERATOR, 100 RES_TYPE_BITMAP, 101 RES_TYPE_CURSOR, 102 RES_TYPE_GROUP_CURSOR, 103 RES_TYPE_DIALOG, 104 RES_TYPE_FONT, 105 RES_TYPE_FONTDIR, 106 RES_TYPE_ICON, 107 RES_TYPE_GROUP_ICON, 108 RES_TYPE_MENU, 109 RES_TYPE_MESSAGETABLE, 110 RES_TYPE_RCDATA, 111 RES_TYPE_STRINGTABLE, 112 RES_TYPE_USERDATA, 113 RES_TYPE_VERSIONINFO 114 }; 115 116 /* A res file and a COFF file store information differently. The 117 res_info structures holds data which in a res file is stored with 118 each resource, but in a COFF file is stored elsewhere. */ 119 120 struct res_res_info 121 { 122 /* Language. In a COFF file, the third level of the directory is 123 keyed by the language, so the language of a resource is defined 124 by its location in the resource tree. */ 125 unsigned short language; 126 /* Characteristics of the resource. Entirely user defined. In a 127 COFF file, the res_directory structure has a characteristics 128 field, but I don't know if it's related to the one in the res 129 file. */ 130 unsigned long characteristics; 131 /* Version of the resource. Entirely user defined. In a COFF file, 132 the res_directory structure has a characteristics field, but I 133 don't know if it's related to the one in the res file. */ 134 unsigned long version; 135 /* Memory flags. This is a combination of the MEMFLAG values 136 defined below. Most of these values are historical, and are not 137 meaningful for win32. I don't think there is any way to store 138 this information in a COFF file. */ 139 unsigned short memflags; 140 }; 141 142 /* Each resource in a COFF file has some information which can does 143 not appear in a res file. */ 144 145 struct res_coff_info 146 { 147 /* The code page used for the data. I don't really know what this 148 should be. */ 149 unsigned long codepage; 150 /* A resource entry in a COFF file has a reserved field, which we 151 record here when reading a COFF file. When writing a COFF file, 152 we set this field to zero. */ 153 unsigned long reserved; 154 }; 155 156 /* Resource data is stored in a res_resource structure. */ 157 158 struct res_resource 159 { 160 /* The type of resource. */ 161 enum res_type type; 162 /* The data for the resource. */ 163 union 164 { 165 struct 166 { 167 unsigned long length; 168 const unsigned char *data; 169 } data; 170 struct accelerator *acc; 171 struct cursor *cursor; 172 struct group_cursor *group_cursor; 173 struct dialog *dialog; 174 struct fontdir *fontdir; 175 struct group_icon *group_icon; 176 struct menu *menu; 177 struct rcdata_item *rcdata; 178 struct stringtable *stringtable; 179 struct rcdata_item *userdata; 180 struct versioninfo *versioninfo; 181 } u; 182 /* Information from a res file. */ 183 struct res_res_info res_info; 184 /* Information from a COFF file. */ 185 struct res_coff_info coff_info; 186 }; 187 188 #define SUBLANG_SHIFT 10 189 190 /* Memory flags in the memflags field of a struct res_resource. */ 191 192 #define MEMFLAG_MOVEABLE 0x10 193 #define MEMFLAG_PURE 0x20 194 #define MEMFLAG_PRELOAD 0x40 195 #define MEMFLAG_DISCARDABLE 0x1000 196 197 /* Standard resource type codes. These are used in the ID field of a 198 res_entry structure. */ 199 200 #define RT_CURSOR 1 201 #define RT_BITMAP 2 202 #define RT_ICON 3 203 #define RT_MENU 4 204 #define RT_DIALOG 5 205 #define RT_STRING 6 206 #define RT_FONTDIR 7 207 #define RT_FONT 8 208 #define RT_ACCELERATOR 9 209 #define RT_RCDATA 10 210 #define RT_MESSAGETABLE 11 211 #define RT_GROUP_CURSOR 12 212 #define RT_GROUP_ICON 14 213 #define RT_VERSION 16 214 #define RT_DLGINCLUDE 17 215 #define RT_PLUGPLAY 19 216 #define RT_VXD 20 217 #define RT_ANICURSOR 21 218 #define RT_ANIICON 22 219 220 /* An accelerator resource is a linked list of these structures. */ 221 222 struct accelerator 223 { 224 /* Next accelerator. */ 225 struct accelerator *next; 226 /* Flags. A combination of the ACC values defined below. */ 227 unsigned short flags; 228 /* Key value. */ 229 unsigned short key; 230 /* Resource ID. */ 231 unsigned short id; 232 }; 233 234 /* Accelerator flags in the flags field of a struct accelerator. 235 These are the same values that appear in a res file. I hope. */ 236 237 #define ACC_VIRTKEY 0x01 238 #define ACC_NOINVERT 0x02 239 #define ACC_SHIFT 0x04 240 #define ACC_CONTROL 0x08 241 #define ACC_ALT 0x10 242 #define ACC_LAST 0x80 243 244 /* A cursor resource. */ 245 246 struct cursor 247 { 248 /* X coordinate of hotspot. */ 249 short xhotspot; 250 /* Y coordinate of hotspot. */ 251 short yhotspot; 252 /* Length of bitmap data. */ 253 unsigned long length; 254 /* Data. */ 255 const unsigned char *data; 256 }; 257 258 /* A group_cursor resource is a list of group_cursor structures. */ 259 260 struct group_cursor 261 { 262 /* Next cursor in group. */ 263 struct group_cursor *next; 264 /* Width. */ 265 unsigned short width; 266 /* Height. */ 267 unsigned short height; 268 /* Planes. */ 269 unsigned short planes; 270 /* Bits per pixel. */ 271 unsigned short bits; 272 /* Number of bytes in cursor resource. */ 273 unsigned long bytes; 274 /* Index of cursor resource. */ 275 unsigned short index; 276 }; 277 278 /* A dialog resource. */ 279 280 struct dialog 281 { 282 /* Basic window style. */ 283 unsigned long style; 284 /* Extended window style. */ 285 unsigned long exstyle; 286 /* X coordinate. */ 287 unsigned short x; 288 /* Y coordinate. */ 289 unsigned short y; 290 /* Width. */ 291 unsigned short width; 292 /* Height. */ 293 unsigned short height; 294 /* Menu name. */ 295 struct res_id menu; 296 /* Class name. */ 297 struct res_id class; 298 /* Caption. */ 299 unichar *caption; 300 /* Font point size. */ 301 unsigned short pointsize; 302 /* Font name. */ 303 unichar *font; 304 /* Extended information for a dialogex. */ 305 struct dialog_ex *ex; 306 /* Controls. */ 307 struct dialog_control *controls; 308 }; 309 310 /* An extended dialog has additional information. */ 311 312 struct dialog_ex 313 { 314 /* Help ID. */ 315 unsigned long help; 316 /* Font weight. */ 317 unsigned short weight; 318 /* Whether the font is italic. */ 319 unsigned char italic; 320 /* Character set. */ 321 unsigned char charset; 322 }; 323 324 /* Window style flags, from the winsup Defines.h header file. These 325 can appear in the style field of a struct dialog or a struct 326 dialog_control. */ 327 328 #define CW_USEDEFAULT (0x80000000) 329 #define WS_BORDER (0x800000L) 330 #define WS_CAPTION (0xc00000L) 331 #define WS_CHILD (0x40000000L) 332 #define WS_CHILDWINDOW (0x40000000L) 333 #define WS_CLIPCHILDREN (0x2000000L) 334 #define WS_CLIPSIBLINGS (0x4000000L) 335 #define WS_DISABLED (0x8000000L) 336 #define WS_DLGFRAME (0x400000L) 337 #define WS_GROUP (0x20000L) 338 #define WS_HSCROLL (0x100000L) 339 #define WS_ICONIC (0x20000000L) 340 #define WS_MAXIMIZE (0x1000000L) 341 #define WS_MAXIMIZEBOX (0x10000L) 342 #define WS_MINIMIZE (0x20000000L) 343 #define WS_MINIMIZEBOX (0x20000L) 344 #define WS_OVERLAPPED (0L) 345 #define WS_OVERLAPPEDWINDOW (0xcf0000L) 346 #define WS_POPUP (0x80000000L) 347 #define WS_POPUPWINDOW (0x80880000L) 348 #define WS_SIZEBOX (0x40000L) 349 #define WS_SYSMENU (0x80000L) 350 #define WS_TABSTOP (0x10000L) 351 #define WS_THICKFRAME (0x40000L) 352 #define WS_TILED (0L) 353 #define WS_TILEDWINDOW (0xcf0000L) 354 #define WS_VISIBLE (0x10000000L) 355 #define WS_VSCROLL (0x200000L) 356 #define MDIS_ALLCHILDSTYLES (0x1) 357 #define BS_3STATE (0x5L) 358 #define BS_AUTO3STATE (0x6L) 359 #define BS_AUTOCHECKBOX (0x3L) 360 #define BS_AUTORADIOBUTTON (0x9L) 361 #define BS_BITMAP (0x80L) 362 #define BS_BOTTOM (0x800L) 363 #define BS_CENTER (0x300L) 364 #define BS_CHECKBOX (0x2L) 365 #define BS_DEFPUSHBUTTON (0x1L) 366 #define BS_GROUPBOX (0x7L) 367 #define BS_ICON (0x40L) 368 #define BS_LEFT (0x100L) 369 #define BS_LEFTTEXT (0x20L) 370 #define BS_MULTILINE (0x2000L) 371 #define BS_NOTIFY (0x4000L) 372 #define BS_OWNERDRAW (0xbL) 373 #define BS_PUSHBOX (0xcL) /* FIXME! What should this be? */ 374 #define BS_PUSHBUTTON (0L) 375 #define BS_PUSHLIKE (0x1000L) 376 #define BS_RADIOBUTTON (0x4L) 377 #define BS_RIGHT (0x200L) 378 #define BS_RIGHTBUTTON (0x20L) 379 #define BS_TEXT (0L) 380 #define BS_TOP (0x400L) 381 #define BS_USERBUTTON (0x8L) 382 #define BS_VCENTER (0xc00L) 383 #define CBS_AUTOHSCROLL (0x40L) 384 #define CBS_DISABLENOSCROLL (0x800L) 385 #define CBS_DROPDOWN (0x2L) 386 #define CBS_DROPDOWNLIST (0x3L) 387 #define CBS_HASSTRINGS (0x200L) 388 #define CBS_LOWERCASE (0x4000L) 389 #define CBS_NOINTEGRALHEIGHT (0x400L) 390 #define CBS_OEMCONVERT (0x80L) 391 #define CBS_OWNERDRAWFIXED (0x10L) 392 #define CBS_OWNERDRAWVARIABLE (0x20L) 393 #define CBS_SIMPLE (0x1L) 394 #define CBS_SORT (0x100L) 395 #define CBS_UPPERCASE (0x2000L) 396 #define ES_AUTOHSCROLL (0x80L) 397 #define ES_AUTOVSCROLL (0x40L) 398 #define ES_CENTER (0x1L) 399 #define ES_LEFT (0L) 400 #define ES_LOWERCASE (0x10L) 401 #define ES_MULTILINE (0x4L) 402 #define ES_NOHIDESEL (0x100L) 403 #define ES_NUMBER (0x2000L) 404 #define ES_OEMCONVERT (0x400L) 405 #define ES_PASSWORD (0x20L) 406 #define ES_READONLY (0x800L) 407 #define ES_RIGHT (0x2L) 408 #define ES_UPPERCASE (0x8L) 409 #define ES_WANTRETURN (0x1000L) 410 #define LBS_DISABLENOSCROLL (0x1000L) 411 #define LBS_EXTENDEDSEL (0x800L) 412 #define LBS_HASSTRINGS (0x40L) 413 #define LBS_MULTICOLUMN (0x200L) 414 #define LBS_MULTIPLESEL (0x8L) 415 #define LBS_NODATA (0x2000L) 416 #define LBS_NOINTEGRALHEIGHT (0x100L) 417 #define LBS_NOREDRAW (0x4L) 418 #define LBS_NOSEL (0x4000L) 419 #define LBS_NOTIFY (0x1L) 420 #define LBS_OWNERDRAWFIXED (0x10L) 421 #define LBS_OWNERDRAWVARIABLE (0x20L) 422 #define LBS_SORT (0x2L) 423 #define LBS_STANDARD (0xa00003L) 424 #define LBS_USETABSTOPS (0x80L) 425 #define LBS_WANTKEYBOARDINPUT (0x400L) 426 #define SBS_BOTTOMALIGN (0x4L) 427 #define SBS_HORZ (0L) 428 #define SBS_LEFTALIGN (0x2L) 429 #define SBS_RIGHTALIGN (0x4L) 430 #define SBS_SIZEBOX (0x8L) 431 #define SBS_SIZEBOXBOTTOMRIGHTALIGN (0x4L) 432 #define SBS_SIZEBOXTOPLEFTALIGN (0x2L) 433 #define SBS_SIZEGRIP (0x10L) 434 #define SBS_TOPALIGN (0x2L) 435 #define SBS_VERT (0x1L) 436 #define SS_BITMAP (0xeL) 437 #define SS_BLACKFRAME (0x7L) 438 #define SS_BLACKRECT (0x4L) 439 #define SS_CENTER (0x1L) 440 #define SS_CENTERIMAGE (0x200L) 441 #define SS_ENHMETAFILE (0xfL) 442 #define SS_ETCHEDFRAME (0x12L) 443 #define SS_ETCHEDHORZ (0x10L) 444 #define SS_ETCHEDVERT (0x11L) 445 #define SS_GRAYFRAME (0x8L) 446 #define SS_GRAYRECT (0x5L) 447 #define SS_ICON (0x3L) 448 #define SS_LEFT (0L) 449 #define SS_LEFTNOWORDWRAP (0xcL) 450 #define SS_NOPREFIX (0x80L) 451 #define SS_NOTIFY (0x100L) 452 #define SS_OWNERDRAW (0xdL) 453 #define SS_REALSIZEIMAGE (0x800L) 454 #define SS_RIGHT (0x2L) 455 #define SS_RIGHTJUST (0x400L) 456 #define SS_SIMPLE (0xbL) 457 #define SS_SUNKEN (0x1000L) 458 #define SS_USERITEM (0xaL) 459 #define SS_WHITEFRAME (0x9L) 460 #define SS_WHITERECT (0x6L) 461 #define DS_3DLOOK (0x4L) 462 #define DS_ABSALIGN (0x1L) 463 #define DS_CENTER (0x800L) 464 #define DS_CENTERMOUSE (0x1000L) 465 #define DS_CONTEXTHELP (0x2000L) 466 #define DS_CONTROL (0x400L) 467 #define DS_FIXEDSYS (0x8L) 468 #define DS_LOCALEDIT (0x20L) 469 #define DS_MODALFRAME (0x80L) 470 #define DS_NOFAILCREATE (0x10L) 471 #define DS_NOIDLEMSG (0x100L) 472 #define DS_SETFONT (0x40L) 473 #define DS_SETFOREGROUND (0x200L) 474 #define DS_SYSMODAL (0x2L) 475 476 /* A dialog control. */ 477 478 struct dialog_control 479 { 480 /* Next control. */ 481 struct dialog_control *next; 482 /* ID. */ 483 unsigned short id; 484 /* Style. */ 485 unsigned long style; 486 /* Extended style. */ 487 unsigned long exstyle; 488 /* X coordinate. */ 489 unsigned short x; 490 /* Y coordinate. */ 491 unsigned short y; 492 /* Width. */ 493 unsigned short width; 494 /* Height. */ 495 unsigned short height; 496 /* Class name. */ 497 struct res_id class; 498 /* Associated text. */ 499 struct res_id text; 500 /* Extra data for the window procedure. */ 501 struct rcdata_item *data; 502 /* Help ID. Only used in an extended dialog. */ 503 unsigned long help; 504 }; 505 506 /* Control classes. These can be used as the ID field in a struct 507 dialog_control. */ 508 509 #define CTL_BUTTON 0x80 510 #define CTL_EDIT 0x81 511 #define CTL_STATIC 0x82 512 #define CTL_LISTBOX 0x83 513 #define CTL_SCROLLBAR 0x84 514 #define CTL_COMBOBOX 0x85 515 516 /* A fontdir resource is a list of fontdir structures. */ 517 518 struct fontdir 519 { 520 struct fontdir *next; 521 /* Index of font entry. */ 522 short index; 523 /* Length of font information. */ 524 unsigned long length; 525 /* Font information. */ 526 const unsigned char *data; 527 }; 528 529 /* A group_icon resource is a list of group_icon structures. */ 530 531 struct group_icon 532 { 533 /* Next icon in group. */ 534 struct group_icon *next; 535 /* Width. */ 536 unsigned char width; 537 /* Height. */ 538 unsigned char height; 539 /* Color count. */ 540 unsigned char colors; 541 /* Planes. */ 542 unsigned short planes; 543 /* Bits per pixel. */ 544 unsigned short bits; 545 /* Number of bytes in cursor resource. */ 546 unsigned long bytes; 547 /* Index of cursor resource. */ 548 unsigned short index; 549 }; 550 551 /* A menu resource. */ 552 553 struct menu 554 { 555 /* List of menuitems. */ 556 struct menuitem *items; 557 /* Help ID. I don't think there is any way to set this in an rc 558 file, but it can appear in the binary format. */ 559 unsigned long help; 560 }; 561 562 /* A menu resource is a list of menuitem structures. */ 563 564 struct menuitem 565 { 566 /* Next menuitem. */ 567 struct menuitem *next; 568 /* Type. In a normal menu, rather than a menuex, this is the flags 569 field. */ 570 unsigned long type; 571 /* State. This is only used in a menuex. */ 572 unsigned long state; 573 /* Id. */ 574 unsigned short id; 575 /* Unicode text. */ 576 unichar *text; 577 /* Popup menu items for a popup. */ 578 struct menuitem *popup; 579 /* Help ID. This is only used in a menuex. */ 580 unsigned long help; 581 }; 582 583 /* Menu item flags. These can appear in the flags field of a struct 584 menuitem. */ 585 586 #define MENUITEM_GRAYED 0x001 587 #define MENUITEM_INACTIVE 0x002 588 #define MENUITEM_BITMAP 0x004 589 #define MENUITEM_OWNERDRAW 0x100 590 #define MENUITEM_CHECKED 0x008 591 #define MENUITEM_POPUP 0x010 592 #define MENUITEM_MENUBARBREAK 0x020 593 #define MENUITEM_MENUBREAK 0x040 594 #define MENUITEM_ENDMENU 0x080 595 #define MENUITEM_HELP 0x4000 596 597 /* An rcdata resource is a pointer to a list of rcdata_item 598 structures. */ 599 600 struct rcdata_item 601 { 602 /* Next data item. */ 603 struct rcdata_item *next; 604 /* Type of data. */ 605 enum 606 { 607 RCDATA_WORD, 608 RCDATA_DWORD, 609 RCDATA_STRING, 610 RCDATA_WSTRING, 611 RCDATA_BUFFER 612 } type; 613 union 614 { 615 unsigned int word; 616 unsigned long dword; 617 struct 618 { 619 unsigned long length; 620 const char *s; 621 } string; 622 struct 623 { 624 unsigned long length; 625 const unichar *w; 626 } wstring; 627 struct 628 { 629 unsigned long length; 630 const unsigned char *data; 631 } buffer; 632 } u; 633 }; 634 635 /* A stringtable resource is a pointer to a stringtable structure. */ 636 637 struct stringtable 638 { 639 /* Each stringtable resource is a list of 16 unicode strings. */ 640 struct 641 { 642 /* Length of string. */ 643 int length; 644 /* String data if length > 0. */ 645 unichar *string; 646 } strings[16]; 647 }; 648 649 /* A versioninfo resource points to a versioninfo structure. */ 650 651 struct versioninfo 652 { 653 /* Fixed version information. */ 654 struct fixed_versioninfo *fixed; 655 /* Variable version information. */ 656 struct ver_info *var; 657 }; 658 659 /* The fixed portion of a versioninfo resource. */ 660 661 struct fixed_versioninfo 662 { 663 /* The file version, which is two 32 bit integers. */ 664 unsigned long file_version_ms; 665 unsigned long file_version_ls; 666 /* The product version, which is two 32 bit integers. */ 667 unsigned long product_version_ms; 668 unsigned long product_version_ls; 669 /* The file flags mask. */ 670 unsigned long file_flags_mask; 671 /* The file flags. */ 672 unsigned long file_flags; 673 /* The OS type. */ 674 unsigned long file_os; 675 /* The file type. */ 676 unsigned long file_type; 677 /* The file subtype. */ 678 unsigned long file_subtype; 679 /* The date, which in Windows is two 32 bit integers. */ 680 unsigned long file_date_ms; 681 unsigned long file_date_ls; 682 }; 683 684 /* A list of variable version information. */ 685 686 struct ver_info 687 { 688 /* Next item. */ 689 struct ver_info *next; 690 /* Type of data. */ 691 enum { VERINFO_STRING, VERINFO_VAR } type; 692 union 693 { 694 /* StringFileInfo data. */ 695 struct 696 { 697 /* Language. */ 698 unichar *language; 699 /* Strings. */ 700 struct ver_stringinfo *strings; 701 } string; 702 /* VarFileInfo data. */ 703 struct 704 { 705 /* Key. */ 706 unichar *key; 707 /* Values. */ 708 struct ver_varinfo *var; 709 } var; 710 } u; 711 }; 712 713 /* A list of string version information. */ 714 715 struct ver_stringinfo 716 { 717 /* Next string. */ 718 struct ver_stringinfo *next; 719 /* Key. */ 720 unichar *key; 721 /* Value. */ 722 unichar *value; 723 }; 724 725 /* A list of variable version information. */ 726 727 struct ver_varinfo 728 { 729 /* Next item. */ 730 struct ver_varinfo *next; 731 /* Language ID. */ 732 unsigned short language; 733 /* Character set ID. */ 734 unsigned short charset; 735 }; 736 737 /* This structure is used when converting resource information to 738 binary. */ 739 740 struct bindata 741 { 742 /* Next data. */ 743 struct bindata *next; 744 /* Length of data. */ 745 unsigned long length; 746 /* Data. */ 747 unsigned char *data; 748 }; 749 750 extern int verbose; 751 752 /* Function declarations. */ 753 754 extern struct res_directory *read_rc_file 755 (const char *, const char *, const char *, int, int); 756 extern struct res_directory *read_res_file (const char *); 757 extern struct res_directory *read_coff_rsrc (const char *, const char *); 758 extern void write_rc_file (const char *, const struct res_directory *); 759 extern void write_res_file (const char *, const struct res_directory *); 760 extern void write_coff_file 761 (const char *, const char *, const struct res_directory *); 762 763 extern struct res_resource *bin_to_res 764 (struct res_id, const unsigned char *, unsigned long, int); 765 extern struct bindata *res_to_bin (const struct res_resource *, int); 766 767 extern FILE *open_file_search 768 (const char *, const char *, const char *, char **); 769 770 extern void *res_alloc (size_t); 771 extern void *reswr_alloc (size_t); 772 773 /* Resource ID handling. */ 774 775 extern int res_id_cmp (struct res_id, struct res_id); 776 extern void res_id_print (FILE *, struct res_id, int); 777 extern void res_ids_print (FILE *, int, const struct res_id *); 778 extern void res_string_to_id (struct res_id *, const char *); 779 780 /* Manipulation of the resource tree. */ 781 782 extern struct res_resource *define_resource 783 (struct res_directory **, int, const struct res_id *, int); 784 extern struct res_resource *define_standard_resource 785 (struct res_directory **, int, struct res_id, int, int); 786 787 extern int extended_dialog (const struct dialog *); 788 extern int extended_menu (const struct menu *); 789 790 /* Communication between the rc file support and the parser and lexer. */ 791 792 extern int yydebug; 793 extern FILE *yyin; 794 extern char *rc_filename; 795 extern int rc_lineno; 796 797 extern int yyparse (void); 798 extern int yylex (void); 799 extern void yyerror (const char *); 800 extern void rcparse_warning (const char *); 801 extern void rcparse_set_language (int); 802 extern void rcparse_discard_strings (void); 803 extern void rcparse_rcdata (void); 804 extern void rcparse_normal (void); 805 806 extern void define_accelerator 807 (struct res_id, const struct res_res_info *, struct accelerator *); 808 extern void define_bitmap 809 (struct res_id, const struct res_res_info *, const char *); 810 extern void define_cursor 811 (struct res_id, const struct res_res_info *, const char *); 812 extern void define_dialog 813 (struct res_id, const struct res_res_info *, const struct dialog *); 814 extern struct dialog_control *define_control 815 (const struct res_id, unsigned long, unsigned long, unsigned long, 816 unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); 817 extern struct dialog_control *define_icon_control 818 (struct res_id, unsigned long, unsigned long, unsigned long, unsigned long, 819 unsigned long, unsigned long, struct rcdata_item *, struct dialog_ex *); 820 extern void define_font 821 (struct res_id, const struct res_res_info *, const char *); 822 extern void define_icon 823 (struct res_id, const struct res_res_info *, const char *); 824 extern void define_menu 825 (struct res_id, const struct res_res_info *, struct menuitem *); 826 extern struct menuitem *define_menuitem 827 (const char *, int, unsigned long, unsigned long, unsigned long, 828 struct menuitem *); 829 extern void define_messagetable 830 (struct res_id, const struct res_res_info *, const char *); 831 extern void define_rcdata 832 (struct res_id, const struct res_res_info *, struct rcdata_item *); 833 extern void define_rcdata_file 834 (struct res_id, const struct res_res_info *, const char *); 835 extern struct rcdata_item *define_rcdata_string 836 (const char *, unsigned long); 837 extern struct rcdata_item *define_rcdata_number (unsigned long, int); 838 extern void define_stringtable 839 (const struct res_res_info *, unsigned long, const char *); 840 extern void define_user_data 841 (struct res_id, struct res_id, const struct res_res_info *, 842 struct rcdata_item *); 843 extern void define_user_file 844 (struct res_id, struct res_id, const struct res_res_info *, const char *); 845 extern void define_versioninfo 846 (struct res_id, int, struct fixed_versioninfo *, struct ver_info *); 847 extern struct ver_info *append_ver_stringfileinfo 848 (struct ver_info *, const char *, struct ver_stringinfo *); 849 extern struct ver_info *append_ver_varfileinfo 850 (struct ver_info *, const char *, struct ver_varinfo *); 851 extern struct ver_stringinfo *append_verval 852 (struct ver_stringinfo *, const char *, const char *); 853 extern struct ver_varinfo *append_vertrans 854 (struct ver_varinfo *, unsigned long, unsigned long); 855