Allow two to five parameter in FONT statement of DIALOGEX resources.

This commit is contained in:
Nick Clifton 2002-04-15 14:12:41 +00:00
parent 272423870a
commit 45b9982791
8 changed files with 145 additions and 8 deletions

View file

@ -1,3 +1,18 @@
2002-04-15 Nick Clifton <nickc@cambridge.redhat.com>
* resrc.c (write_rc_dialog): If charset is non-default value
display all of the DIALOGEX parameters.
2002-04-15 Eric Kohl <ekohl@rz-online.de>
* rcparse.y: Allow two to five parameter in FONT statement of
DIALOGEX resources.
* resbin.c (bin_to_res_dialog): Fixed read/write code for dialogex
resource data.
(res_to_bin_dialog): Likewise.
* windres.h: Added misssing charset variable to dialog_ex
structure.
2002-04-10 Nick Clifton <nickc@cambridge.redhat.com>
* rcparse.y: Set MEMFLAG_PURE by default.

View file

@ -439,6 +439,27 @@ styles:
style |= DS_SETFONT;
dialog.pointsize = $3;
unicode_from_ascii ((int *) NULL, &dialog.font, $5);
if (dialog.ex != NULL)
{
dialog.ex->weight = 0;
dialog.ex->italic = 0;
dialog.ex->charset = 1;
}
}
| styles FONT numexpr ',' QUOTEDSTRING cnumexpr
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
unicode_from_ascii ((int *) NULL, &dialog.font, $5);
if (dialog.ex == NULL)
rcparse_warning (_("extended FONT requires DIALOGEX"));
else
{
dialog.ex->weight = $6;
dialog.ex->italic = 0;
dialog.ex->charset = 1;
}
}
| styles FONT numexpr ',' QUOTEDSTRING cnumexpr cnumexpr
{
@ -452,6 +473,22 @@ styles:
{
dialog.ex->weight = $6;
dialog.ex->italic = $7;
dialog.ex->charset = 1;
}
}
| styles FONT numexpr ',' QUOTEDSTRING cnumexpr cnumexpr cnumexpr
{
dialog.style |= DS_SETFONT;
style |= DS_SETFONT;
dialog.pointsize = $3;
unicode_from_ascii ((int *) NULL, &dialog.font, $5);
if (dialog.ex == NULL)
rcparse_warning (_("extended FONT requires DIALOGEX"));
else
{
dialog.ex->weight = $6;
dialog.ex->italic = $7;
dialog.ex->charset = $8;
}
}
| styles MENU id

View file

@ -30,6 +30,7 @@
/* Macros to swap in values. */
#define get_8(s) (*((unsigned char *)(s)))
#define get_16(be, s) ((be) ? bfd_getb16 (s) : bfd_getl16 (s))
#define get_32(be, s) ((be) ? bfd_getb32 (s) : bfd_getl32 (s))
@ -528,6 +529,7 @@ bin_to_res_dialog (data, length, big_endian)
{
d->ex->weight = 0;
d->ex->italic = 0;
d->ex->charset = 1; /* Default charset. */
}
}
else
@ -543,7 +545,8 @@ bin_to_res_dialog (data, length, big_endian)
if (length < off + 4)
toosmall (_("dialogex font information"));
d->ex->weight = get_16 (big_endian, data + off);
d->ex->italic = get_16 (big_endian, data + off + 2);
d->ex->italic = get_8 (data + off + 2);
d->ex->charset = get_8 (data + off + 3);
off += 4;
}
@ -1257,6 +1260,7 @@ bin_to_res_userdata (data, length, big_endian)
/* Macros to swap out values. */
#define put_8(v, s) (*((unsigned char *) (s)) = (unsigned char) (v))
#define put_16(be, v, s) ((be) ? bfd_putb16 ((v), (s)) : bfd_putl16 ((v), (s)))
#define put_32(be, v, s) ((be) ? bfd_putb32 ((v), (s)) : bfd_putl32 ((v), (s)))
@ -1626,12 +1630,14 @@ res_to_bin_dialog (dialog, big_endian)
if (dialog->ex == NULL)
{
put_16 (big_endian, 0, d->data + 2);
put_16 (big_endian, 0, d->data + 4);
put_8 (0, d->data + 4);
put_8 (1, d->data + 5);
}
else
{
put_16 (big_endian, dialog->ex->weight, d->data + 2);
put_16 (big_endian, dialog->ex->italic, d->data + 4);
put_8 (dialog->ex->italic, d->data + 4);
put_8 (dialog->ex->charset, d->data + 5);
}
}

View file

@ -2087,8 +2087,11 @@ write_rc_dialog (e, dialog)
unicode_print (e, dialog->font, -1);
fprintf (e, "\"");
if (dialog->ex != NULL
&& (dialog->ex->weight != 0 || dialog->ex->italic != 0))
fprintf (e, ", %d, %d", dialog->ex->weight, dialog->ex->italic);
&& (dialog->ex->weight != 0
|| dialog->ex->italic != 0
|| dialog->ex->charset != 1))
fprintf (e, ", %d, %d, %d",
dialog->ex->weight, dialog->ex->italic, dialog->ex->charset);
fprintf (e, "\n");
}

View file

@ -1,3 +1,9 @@
2002-04-15 Eric Kohl <ekohl@rz-online.de>
* binutils-all/windres/dlgfont.rc: New test case: Checks FONT
statement in DIALOG and DIALOGEX resources.
* binutils-all/windres/dlgfont.rsd: Expected output.
2002-04-11 Nick Clifton <nickc@cambridge.redhat.com>
* binutils-all/ar.exp (long_filenames): Use 'file delete' instead

View file

@ -0,0 +1,29 @@
101 DIALOG DISCARDABLE 0, 0, 186, 95
FONT 8, "Tahoma"
BEGIN
DEFPUSHBUTTON "OK", 1, 129, 7, 50, 14
END
102 DIALOGEX DISCARDABLE 0, 0, 186, 95
FONT 8, "Tahoma"
BEGIN
DEFPUSHBUTTON "OK", 1, 129, 7, 50, 14
END
103 DIALOGEX DISCARDABLE 0, 0, 186, 95
FONT 8, "Tahoma", 0
BEGIN
DEFPUSHBUTTON "OK", 1, 129, 7, 50, 14
END
104 DIALOGEX DISCARDABLE 0, 0, 186, 95
FONT 8, "Tahoma", 0, 0
BEGIN
DEFPUSHBUTTON "OK", 1, 129, 7, 50, 14
END
105 DIALOGEX DISCARDABLE 0, 0, 186, 95
FONT 8, "Tahoma", 0, 0, 1
BEGIN
DEFPUSHBUTTON "OK", 1, 129, 7, 50, 14
END

View file

@ -0,0 +1,39 @@
0000 00000000 20000000 ffff0000 ffff0000 .... ...........
0010 00000000 00000000 00000000 00000000 ................
0020 46000000 20000000 ffff0500 ffff6500 F... .........e.
0030 00000000 30100904 00000000 00000000 ....0...........
0040 40008880 00000000 01000000 0000ba00 @...............
0050 5f000000 00000000 08005400 61006800 _.........T.a.h.
0060 6f006d00 61000000 01000150 00000000 o.m.a......P....
0070 81000700 32000e00 0100ffff 80004f00 ....2.........O.
0080 4b000000 00000000 58000000 20000000 K.......X... ...
0090 ffff0500 ffff6600 00000000 30100904 ......f.....0...
00a0 00000000 00000000 0100ffff 00000000 ................
00b0 00000000 40008880 01000000 0000ba00 ....@...........
00c0 5f000000 00000000 08000000 00015400 _.............T.
00d0 61006800 6f006d00 61000000 00000000 a.h.o.m.a.......
00e0 00000000 01000150 81000700 32000e00 .......P....2...
00f0 01000000 ffff8000 4f004b00 00000000 ........O.K.....
0100 58000000 20000000 ffff0500 ffff6700 X... .........g.
0110 00000000 30100904 00000000 00000000 ....0...........
0120 0100ffff 00000000 00000000 40008880 ............@...
0130 01000000 0000ba00 5f000000 00000000 ........_.......
0140 08000000 00015400 61006800 6f006d00 ......T.a.h.o.m.
0150 61000000 00000000 00000000 01000150 a..............P
0160 81000700 32000e00 01000000 ffff8000 ....2...........
0170 4f004b00 00000000 58000000 20000000 O.K.....X... ...
0180 ffff0500 ffff6800 00000000 30100904 ......h.....0...
0190 00000000 00000000 0100ffff 00000000 ................
01a0 00000000 40008880 01000000 0000ba00 ....@...........
01b0 5f000000 00000000 08000000 00015400 _.............T.
01c0 61006800 6f006d00 61000000 00000000 a.h.o.m.a.......
01d0 00000000 01000150 81000700 32000e00 .......P....2...
01e0 01000000 ffff8000 4f004b00 00000000 ........O.K.....
01f0 58000000 20000000 ffff0500 ffff6900 X... .........i.
0200 00000000 30100904 00000000 00000000 ....0...........
0210 0100ffff 00000000 00000000 40008880 ............@...
0220 01000000 0000ba00 5f000000 00000000 ........_.......
0230 08000000 00015400 61006800 6f006d00 ......T.a.h.o.m.
0240 61000000 00000000 00000000 01000150 a..............P
0250 81000700 32000e00 01000000 ffff8000 ....2...........
0260 4f004b00 00000000 O.K.....

View file

@ -1,5 +1,5 @@
/* windres.h -- header file for windres program.
Copyright 1997, 1998, 2000 Free Software Foundation, Inc.
Copyright 1997, 1998, 2000, 2002 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of GNU Binutils.
@ -315,7 +315,9 @@ struct dialog_ex
/* Font weight. */
unsigned short weight;
/* Whether the font is italic. */
unsigned short italic;
unsigned char italic;
/* Character set. */
unsigned char charset;
};
/* Window style flags, from the winsup Defines.h header file. These
@ -519,7 +521,7 @@ struct fontdir
short index;
/* Length of font information. */
unsigned long length;
/* Font information. */
/* Font information. */
const unsigned char *data;
};