From 2104a50e3e7d2d543fa1ae5dc8393a985e1f786c Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Tue, 13 Jun 2000 21:21:43 +0000 Subject: [PATCH] * rcparse.y (control): ICON controls take an id as the first parameter, not an optional string. Also, call new convenience function that takes res_id's. * resrc.c (define_control): missing text means zero-length string, not zero ID. (define_icon_control): New. * windres.h: declare define_icon_control. --- binutils/ChangeLog | 10 +++++++++ binutils/rcparse.y | 52 +++++++++++++++++++--------------------------- binutils/resrc.c | 37 ++++++++++++++++++++++++++------- binutils/windres.h | 4 ++++ 4 files changed, 65 insertions(+), 38 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index e6988df5d24..d2d2080570c 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,13 @@ +2000-06-13 DJ Delorie + + * rcparse.y (control): ICON controls take an id as the first + parameter, not an optional string. Also, call new convenience + function that takes res_id's. + * resrc.c (define_control): missing text means zero-length string, + not zero ID. + (define_icon_control): New. + * windres.h: declare define_icon_control. + 2000-06-13 H.J. Lu * configure: Regenerate. diff --git a/binutils/rcparse.y b/binutils/rcparse.y index 03cbbdc5b67..39551c2bf7b 100644 --- a/binutils/rcparse.y +++ b/binutils/rcparse.y @@ -636,39 +636,29 @@ control: rcparse_warning (_("IEDIT requires DIALOGEX")); res_string_to_id (&$$->class, "HEDIT"); } - | ICON optstringc numexpr cnumexpr cnumexpr opt_control_data - { - $$ = define_control ($2, $3, $4, $5, 0, 0, CTL_STATIC, - SS_ICON | WS_CHILD | WS_VISIBLE, 0); - if ($6 != NULL) - { - if (dialog.ex == NULL) - rcparse_warning (_("control data requires DIALOGEX")); - $$->data = $6; - } - } - | ICON optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr + | ICON id cnumexpr 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 + opt_control_data + { + $$ = define_icon_control ($2, $3, $4, $5, 0, 0, 0, $8, + dialog.ex); + } + | ICON id cnumexpr cnumexpr cnumexpr cnumexpr cnumexpr icon_styleexpr optcnumexpr opt_control_data - { - $$ = define_control ($2, $3, $4, $5, $6, $7, CTL_STATIC, - style, $9); - if ($10 != NULL) - { - if (dialog.ex == NULL) - rcparse_warning (_("control data requires DIALOGEX")); - $$->data = $10; - } - } - | ICON optstringc numexpr cnumexpr cnumexpr cnumexpr cnumexpr + { + $$ = define_icon_control ($2, $3, $4, $5, style, $9, 0, $10, + dialog.ex); + } + | ICON id numexpr cnumexpr cnumexpr cnumexpr cnumexpr icon_styleexpr cnumexpr cnumexpr opt_control_data - { - $$ = define_control ($2, $3, $4, $5, $6, $7, CTL_STATIC, - style, $9); - if (dialog.ex == NULL) - rcparse_warning (_("help ID requires DIALOGEX")); - $$->help = $10; - $$->data = $11; - } + { + $$ = define_icon_control ($2, $3, $4, $5, style, $9, $10, $11, + dialog.ex); + } | IEDIT { default_style = ES_LEFT | WS_BORDER | WS_TABSTOP; diff --git a/binutils/resrc.c b/binutils/resrc.c index 814809e240a..a30719b1e95 100644 --- a/binutils/resrc.c +++ b/binutils/resrc.c @@ -847,19 +847,42 @@ 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) - res_string_to_id (&n->text, text); - else - { - n->text.named = 0; - n->text.u.id = 0; - } + if (text == NULL) + text = ""; + res_string_to_id (&n->text, text); n->data = NULL; n->help = 0; return n; } +struct dialog_control * +define_icon_control (iid, id, x, y, style, exstyle, help, data, ex) + struct res_id iid; + unsigned long id; + unsigned long x; + unsigned long y; + unsigned long style; + unsigned long exstyle; + unsigned long help; + struct rcdata_item *data; + struct dialog_ex *ex; +{ + struct dialog_control *n; + if (style == 0) + style = SS_ICON | WS_CHILD | WS_VISIBLE; + n = define_control (0, id, x, y, 0, 0, CTL_STATIC, style, exstyle); + n->text = iid; + if (help && !ex) + rcparse_warning (_("help ID requires DIALOGEX")); + if (data && !ex) + rcparse_warning (_("control data requires DIALOGEX")); + n->help = help; + n->data = data; + + return n; +} + /* Define a font resource. */ void diff --git a/binutils/windres.h b/binutils/windres.h index ba736129828..8adc1ef3571 100644 --- a/binutils/windres.h +++ b/binutils/windres.h @@ -812,6 +812,10 @@ extern struct dialog_control *define_control PARAMS ((const char *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long)); +extern struct dialog_control *define_icon_control + PARAMS ((struct res_id, unsigned long, unsigned long, + unsigned long, unsigned long, unsigned long, unsigned long, + struct rcdata_item *, struct dialog_ex *)); extern void define_font PARAMS ((struct res_id, const struct res_res_info *, const char *)); extern void define_icon -- 2.30.2