Allow resource IDs to be strings or numbers.
Add a test for this.
This commit is contained in:
parent
ed234cf863
commit
7adbf450a7
@ -1,3 +1,12 @@
|
||||
2003-03-31 Ian Lance Taylor <ian@airs.com>
|
||||
|
||||
* rcparse.y: Replace uses of 'optstringrc' with 'optresid'.
|
||||
(optresid): Handle a resource id that can be a string or a number.
|
||||
* resrc.c (define_control): Replace 'text' parameter with 'iid' a
|
||||
struct res_id.
|
||||
(define_icon_control): Pass a struct res_id to define_control.
|
||||
* windres.h (define_control): Change prototype.
|
||||
|
||||
2003-03-24 Elias Athanasopoulos <elathan@phys.uoa.gr>
|
||||
|
||||
* objcopy (OPTION_FORMATS_INFO): Define.
|
||||
@ -27,7 +36,7 @@
|
||||
libbfd.h.
|
||||
* Makefile.in: Regenerate.
|
||||
|
||||
2003-03-22 Danny Smith <dannysmith@users.sourceforge,net>
|
||||
2003-03-22 Danny Smith <dannysmith@users.sourceforge.net>
|
||||
|
||||
* dlltool.c (gen_def_file): Put demangled name comments on
|
||||
own line preceding export name.
|
||||
|
@ -1,5 +1,5 @@
|
||||
%{ /* rcparse.y -- parser for Windows rc files
|
||||
Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor, Cygnus Support.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
@ -135,11 +135,11 @@ static unsigned long class;
|
||||
%type <vervar> vertrans
|
||||
%type <res_info> suboptions memflags_move_discard memflags_move
|
||||
%type <memflags> memflag
|
||||
%type <id> id resref
|
||||
%type <id> id optresidc resref
|
||||
%type <il> exstyle parennumber
|
||||
%type <il> numexpr posnumexpr cnumexpr optcnumexpr cposnumexpr
|
||||
%type <is> acc_options acc_option menuitem_flags menuitem_flag
|
||||
%type <s> optstringc file_name resname
|
||||
%type <s> file_name resname
|
||||
%type <i> sizednumexpr sizedposnumexpr
|
||||
|
||||
%left '|'
|
||||
@ -596,7 +596,7 @@ control:
|
||||
{
|
||||
$$ = $3;
|
||||
}
|
||||
| CONTROL optstringc numexpr cnumexpr control_styleexpr cnumexpr
|
||||
| CONTROL optresidc numexpr cnumexpr control_styleexpr cnumexpr
|
||||
cnumexpr cnumexpr cnumexpr optcnumexpr opt_control_data
|
||||
{
|
||||
$$ = define_control ($2, $3, $6, $7, $8, $9, $4, style, $10);
|
||||
@ -607,7 +607,7 @@ control:
|
||||
$$->data = $11;
|
||||
}
|
||||
}
|
||||
| CONTROL optstringc numexpr cnumexpr control_styleexpr cnumexpr
|
||||
| CONTROL optresidc numexpr cnumexpr control_styleexpr cnumexpr
|
||||
cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data
|
||||
{
|
||||
$$ = define_control ($2, $3, $6, $7, $8, $9, $4, style, $10);
|
||||
@ -616,7 +616,7 @@ control:
|
||||
$$->help = $11;
|
||||
$$->data = $12;
|
||||
}
|
||||
| CONTROL optstringc numexpr ',' QUOTEDSTRING control_styleexpr
|
||||
| CONTROL optresidc numexpr ',' QUOTEDSTRING control_styleexpr
|
||||
cnumexpr cnumexpr cnumexpr cnumexpr optcnumexpr opt_control_data
|
||||
{
|
||||
$$ = define_control ($2, $3, $7, $8, $9, $10, 0, style, $11);
|
||||
@ -629,7 +629,7 @@ control:
|
||||
$$->class.named = 1;
|
||||
unicode_from_ascii (&$$->class.u.n.length, &$$->class.u.n.name, $5);
|
||||
}
|
||||
| CONTROL optstringc numexpr ',' QUOTEDSTRING control_styleexpr
|
||||
| CONTROL optresidc numexpr ',' QUOTEDSTRING control_styleexpr
|
||||
cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data
|
||||
{
|
||||
$$ = define_control ($2, $3, $7, $8, $9, $10, 0, style, $11);
|
||||
@ -809,13 +809,13 @@ control:
|
||||
{
|
||||
$$ = $3;
|
||||
}
|
||||
| USERBUTTON QUOTEDSTRING ',' numexpr ',' numexpr ',' numexpr ','
|
||||
| USERBUTTON resref numexpr ',' numexpr ',' numexpr ','
|
||||
numexpr ',' numexpr ','
|
||||
{ style = WS_CHILD | WS_VISIBLE; }
|
||||
styleexpr optcnumexpr
|
||||
{
|
||||
$$ = define_control ($2, $4, $6, $8, $10, $12, CTL_BUTTON,
|
||||
style, $16);
|
||||
$$ = define_control ($2, $3, $5, $7, $9, $11, CTL_BUTTON,
|
||||
style, $15);
|
||||
}
|
||||
;
|
||||
|
||||
@ -827,7 +827,7 @@ control:
|
||||
style. CLASS is the class of the control. */
|
||||
|
||||
control_params:
|
||||
optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr
|
||||
optresidc numexpr cnumexpr cnumexpr cnumexpr cnumexpr
|
||||
opt_control_data
|
||||
{
|
||||
$$ = define_control ($1, $2, $3, $4, $5, $6, class,
|
||||
@ -839,7 +839,7 @@ control_params:
|
||||
$$->data = $7;
|
||||
}
|
||||
}
|
||||
| optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr
|
||||
| optresidc numexpr cnumexpr cnumexpr cnumexpr cnumexpr
|
||||
control_params_styleexpr optcnumexpr opt_control_data
|
||||
{
|
||||
$$ = define_control ($1, $2, $3, $4, $5, $6, class, style, $8);
|
||||
@ -850,7 +850,7 @@ control_params:
|
||||
$$->data = $9;
|
||||
}
|
||||
}
|
||||
| optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr
|
||||
| optresidc numexpr cnumexpr cnumexpr cnumexpr cnumexpr
|
||||
control_params_styleexpr cnumexpr cnumexpr opt_control_data
|
||||
{
|
||||
$$ = define_control ($1, $2, $3, $4, $5, $6, class, style, $8);
|
||||
@ -861,18 +861,23 @@ control_params:
|
||||
}
|
||||
;
|
||||
|
||||
optstringc:
|
||||
optresidc:
|
||||
/* empty */
|
||||
{
|
||||
$$ = NULL;
|
||||
res_string_to_id (&$$, "");
|
||||
}
|
||||
| posnumexpr ','
|
||||
{
|
||||
$$.named = 0;
|
||||
$$.u.id = $1;
|
||||
}
|
||||
| QUOTEDSTRING
|
||||
{
|
||||
$$ = $1;
|
||||
res_string_to_id (&$$, $1);
|
||||
}
|
||||
| QUOTEDSTRING ','
|
||||
{
|
||||
$$ = $1;
|
||||
res_string_to_id (&$$, $1);
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* resrc.c -- read and write Windows rc files.
|
||||
Copyright 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor, Cygnus Support.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
@ -818,8 +818,8 @@ define_dialog (id, resinfo, dialog)
|
||||
merely allocates and fills in a structure. */
|
||||
|
||||
struct dialog_control *
|
||||
define_control (text, id, x, y, width, height, class, style, exstyle)
|
||||
const char *text;
|
||||
define_control (iid, id, x, y, width, height, class, style, exstyle)
|
||||
struct res_id iid;
|
||||
unsigned long id;
|
||||
unsigned long x;
|
||||
unsigned long y;
|
||||
@ -842,9 +842,7 @@ define_control (text, id, x, y, width, height, class, style, exstyle)
|
||||
n->height = height;
|
||||
n->class.named = 0;
|
||||
n->class.u.id = class;
|
||||
if (text == NULL)
|
||||
text = "";
|
||||
res_string_to_id (&n->text, text);
|
||||
n->text = iid;
|
||||
n->data = NULL;
|
||||
n->help = 0;
|
||||
|
||||
@ -864,9 +862,12 @@ define_icon_control (iid, id, x, y, style, exstyle, help, data, ex)
|
||||
struct dialog_ex *ex;
|
||||
{
|
||||
struct dialog_control *n;
|
||||
struct res_id tid;
|
||||
|
||||
if (style == 0)
|
||||
style = SS_ICON | WS_CHILD | WS_VISIBLE;
|
||||
n = define_control (0, id, x, y, 0, 0, CTL_STATIC, style, exstyle);
|
||||
res_string_to_id (&tid, "");
|
||||
n = define_control (tid, id, x, y, 0, 0, CTL_STATIC, style, exstyle);
|
||||
n->text = iid;
|
||||
if (help && !ex)
|
||||
rcparse_warning (_("help ID requires DIALOGEX"));
|
||||
|
@ -1,3 +1,8 @@
|
||||
2003-03-31 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* binutils-all/windres/dialogid.rc: New test source file.
|
||||
* binutils-all/windres/dialogid.rsd: New test expected results.
|
||||
|
||||
2002-11-07 Casper S. Hornstrup <chorns@users.sourceforge.net>
|
||||
|
||||
* binutils-all/dlltool.exp: New file for testing dlltool.
|
||||
|
9
binutils/testsuite/binutils-all/windres/dialogid.rc
Normal file
9
binutils/testsuite/binutils-all/windres/dialogid.rc
Normal file
@ -0,0 +1,9 @@
|
||||
// Test created based on bug report submitted to binutils mailing list
|
||||
// See: http://sources.redhat.com/ml/binutils/2003-03/msg00312.html
|
||||
|
||||
101 DIALOGEX 0, 0, 200, 200
|
||||
|
||||
BEGIN
|
||||
CONTROL 108, -1, "Static", 77, 11, 11, 83, 162
|
||||
CONTROL "stringid", 102, "Static", 0x5000120e, 5, 5, 10, 10
|
||||
END
|
13
binutils/testsuite/binutils-all/windres/dialogid.rsd
Normal file
13
binutils/testsuite/binutils-all/windres/dialogid.rsd
Normal file
@ -0,0 +1,13 @@
|
||||
0000 00000000 20000000 ffff0000 ffff0000 .... ...........
|
||||
0010 00000000 00000000 00000000 00000000 ................
|
||||
0020 86000000 20000000 ffff0500 ffff6500 .... .........e.
|
||||
0030 00000000 30100904 00000000 00000000 ....0...........
|
||||
0040 0100ffff 00000000 00000000 00008880 ................
|
||||
0050 02000000 0000c800 c8000000 00000000 ................
|
||||
0060 00000000 00000000 4d000050 0b000b00 ........M..P....
|
||||
0070 5300a200 ffff0000 53007400 61007400 S.......S.t.a.t.
|
||||
0080 69006300 0000ffff 6c000000 00000000 i.c.....l.......
|
||||
0090 00000000 0e120050 05000500 0a000a00 .......P........
|
||||
00a0 66000000 53007400 61007400 69006300 f...S.t.a.t.i.c.
|
||||
00b0 00007300 74007200 69006e00 67006900 ..s.t.r.i.n.g.i.
|
||||
00c0 64000000 00000000 d.......
|
@ -1,5 +1,5 @@
|
||||
/* windres.h -- header file for windres program.
|
||||
Copyright 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
|
||||
Copyright 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor, Cygnus Support.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
@ -795,6 +795,7 @@ extern int yydebug;
|
||||
extern FILE *yyin;
|
||||
extern char *rc_filename;
|
||||
extern int rc_lineno;
|
||||
|
||||
extern int yyparse PARAMS ((void));
|
||||
extern int yylex PARAMS ((void));
|
||||
extern void yyerror PARAMS ((const char *));
|
||||
@ -813,7 +814,7 @@ extern void define_cursor
|
||||
extern void define_dialog
|
||||
PARAMS ((struct res_id, const struct res_res_info *, const struct dialog *));
|
||||
extern struct dialog_control *define_control
|
||||
PARAMS ((const char *, unsigned long, unsigned long, unsigned long,
|
||||
PARAMS ((struct res_id, unsigned long, unsigned long, unsigned long,
|
||||
unsigned long, unsigned long, unsigned long, unsigned long,
|
||||
unsigned long));
|
||||
extern struct dialog_control *define_icon_control
|
||||
@ -835,7 +836,8 @@ extern void define_rcdata
|
||||
PARAMS ((struct res_id, const struct res_res_info *, struct rcdata_item *));
|
||||
extern struct rcdata_item *define_rcdata_string
|
||||
PARAMS ((const char *, unsigned long));
|
||||
extern struct rcdata_item *define_rcdata_number PARAMS ((unsigned long, int));
|
||||
extern struct rcdata_item *define_rcdata_number
|
||||
PARAMS ((unsigned long, int));
|
||||
extern void define_stringtable
|
||||
PARAMS ((const struct res_res_info *, unsigned long, const char *));
|
||||
extern void define_user_data
|
||||
|
Loading…
Reference in New Issue
Block a user