diff options
Diffstat (limited to 'binutils/rcparse.y')
-rw-r--r-- | binutils/rcparse.y | 54 |
1 files changed, 48 insertions, 6 deletions
diff --git a/binutils/rcparse.y b/binutils/rcparse.y index 39551c2..b67338f 100644 --- a/binutils/rcparse.y +++ b/binutils/rcparse.y @@ -136,11 +136,11 @@ static unsigned long class; %type <vervar> vertrans %type <res_info> suboptions memflags_move_discard memflags_move %type <memflags> memflag -%type <id> id +%type <id> id 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 +%type <s> optstringc file_name resname %type <i> sizednumexpr sizedposnumexpr %left '|' @@ -636,24 +636,24 @@ control: rcparse_warning (_("IEDIT requires DIALOGEX")); res_string_to_id (&$$->class, "HEDIT"); } - | ICON id cnumexpr cnumexpr cnumexpr opt_control_data + | ICON resref numexpr cnumexpr cnumexpr opt_control_data { $$ = define_icon_control ($2, $3, $4, $5, 0, 0, 0, $6, dialog.ex); } - | ICON id cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr + | ICON resref numexpr cnumexpr cnumexpr cnumexpr cnumexpr opt_control_data { $$ = define_icon_control ($2, $3, $4, $5, 0, 0, 0, $8, dialog.ex); } - | ICON id cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr + | ICON resref numexpr cnumexpr cnumexpr cnumexpr cnumexpr icon_styleexpr optcnumexpr opt_control_data { $$ = define_icon_control ($2, $3, $4, $5, style, $9, 0, $10, dialog.ex); } - | ICON id numexpr cnumexpr cnumexpr cnumexpr cnumexpr + | ICON resref numexpr cnumexpr cnumexpr cnumexpr cnumexpr icon_styleexpr cnumexpr cnumexpr opt_control_data { $$ = define_icon_control ($2, $3, $4, $5, style, $9, $10, $11, @@ -809,6 +809,10 @@ optstringc: { $$ = NULL; } + | QUOTEDSTRING + { + $$ = $1; + } | QUOTEDSTRING ',' { $$ = $1; @@ -1262,6 +1266,44 @@ id: } ; +/* A resource reference. */ + +resname: + QUOTEDSTRING + { + $$ = $1; + } + | QUOTEDSTRING ',' + { + $$ = $1; + } + | STRING ',' + { + $$ = $1; + } + ; + + +resref: + posnumexpr ',' + { + $$.named = 0; + $$.u.id = $1; + } + | resname + { + char *copy, *s; + + /* It seems that resource ID's are forced to upper case. */ + copy = xstrdup ($1); + for (s = copy; *s != '\0'; s++) + if (islower ((unsigned char) *s)) + *s = toupper ((unsigned char) *s); + res_string_to_id (&$$, copy); + free (copy); + } + ; + /* Generic suboptions. These may appear before the BEGIN in any multiline statement. */ |