/* resbin.c -- manipulate the Windows binary resource format.
- Copyright 1997 Free Software Foundation, Inc.
+ Copyright 1997, 1998, 1999 Free Software Foundation, Inc.
Written by Ian Lance Taylor, Cygnus Support.
This file is part of GNU Binutils.
d = (struct dialog *) res_alloc (sizeof *d);
version = get_16 (big_endian, data);
- if (version != 0xffff)
+ if (version != 1)
{
d->ex = NULL;
d->style = get_32 (big_endian, data);
int signature;
signature = get_16 (big_endian, data + 2);
- if (signature != 1)
+ if (signature != 0xffff)
fatal (_("unexpected dialog signature %d"), signature);
d->ex = (struct dialog_ex *) res_alloc (sizeof (struct dialog_ex));
toosmall (_("dialogex control"));
dc->help = get_32 (big_endian, data + off);
dc->exstyle = get_32 (big_endian, data + off + 4);
- dc->style = get_32 (big_endian, data + off + 18);
+ dc->style = get_32 (big_endian, data + off + 8);
off += 12;
}
dc->y = get_16 (big_endian, data + off + 2);
dc->width = get_16 (big_endian, data + off + 4);
dc->height = get_16 (big_endian, data + off + 6);
- dc->id = get_16 (big_endian, data + off + 8);
- off += 10;
+ if (d->ex != NULL)
+ dc->id = get_32 (big_endian, data + off + 8);
+ else
+ dc->id = get_16 (big_endian, data + off + 8);
+
+ off += 10 + (d->ex != NULL ? 2 : 0);
sublen = get_resid (&dc->class, data + off, length - off, big_endian);
off += sublen;
}
else
{
- put_16 (big_endian, 0xffff, first->data);
- put_16 (big_endian, 1, first->data + 2);
+ put_16 (big_endian, 1, first->data);
+ put_16 (big_endian, 0xffff, first->data + 2);
+
if (dialog->ex == NULL)
put_32 (big_endian, 0, first->data + 4);
else
dword_align_bin (&pp, &length);
d = (struct bindata *) reswr_alloc (sizeof *d);
- d->length = dialogex ? 22 : 18;
+ d->length = dialogex ? 24 : 18;
d->data = (unsigned char *) reswr_alloc (d->length);
length += d->length;
put_16 (big_endian, dc->y, d->data + dcoff + 2);
put_16 (big_endian, dc->width, d->data + dcoff + 4);
put_16 (big_endian, dc->height, d->data + dcoff + 6);
- put_16 (big_endian, dc->id, d->data + dcoff + 8);
+
+ if (dialogex)
+ put_32 (big_endian, dc->id, d->data + dcoff + 8);
+ else
+ put_16 (big_endian, dc->id, d->data + dcoff + 8);
*pp = d;
pp = &d->next;
length += sublen;
}
}
-
put_16 (big_endian, c, first->data + off);
return first;
vslen += 6;
vsslen = 6;
- put_16 (big_endian, 0, vssd->data + 2);
put_16 (big_endian, 1, vssd->data + 4);
*pp = vssd;
vsslen += length - hold;
*pp = unicode_to_bin (vs->value, big_endian);
+ put_16 (big_endian, (*pp)->length / 2, vssd->data + 2);
length += (*pp)->length;
vilen += (*pp)->length;
vslen += (*pp)->length;