d3dxof: Support multi-dimentional array in templates.

This commit is contained in:
Christian Costa 2008-11-23 21:30:00 +01:00 committed by Alexandre Julliard
parent c880ccea1a
commit 607062f3c3
1 changed files with 24 additions and 7 deletions

View File

@ -1100,11 +1100,6 @@ static BOOL parse_template_members_list(parse_buffer * buf)
{
while (check_TOKEN(buf) == TOKEN_OBRACKET)
{
if (nb_dims)
{
FIXME("No support for multi-dimensional array yet\n");
return FALSE;
}
get_TOKEN(buf);
if (check_TOKEN(buf) == TOKEN_INTEGER)
{
@ -1114,11 +1109,33 @@ static BOOL parse_template_members_list(parse_buffer * buf)
}
else
{
int i;
if (get_TOKEN(buf) != TOKEN_NAME)
return FALSE;
for (i = 0; i < idx_member; i++)
{
if (!strcmp((char*)buf->value, buf->pdxf->xtemplates[buf->pdxf->nb_xtemplates].members[i].name))
{
if (buf->pdxf->xtemplates[buf->pdxf->nb_xtemplates].members[i].nb_dims)
{
ERR("Array cannot be used to specify variable array size\n");
return FALSE;
}
if (buf->pdxf->xtemplates[buf->pdxf->nb_xtemplates].members[i].type != TOKEN_DWORD)
{
FIXME("Only DWORD supported to specify variable array size\n");
return FALSE;
}
break;
}
}
if (i == idx_member)
{
ERR("Reference to unknown member %s\n", (char*)buf->value);
return FALSE;
}
cur_member->dim_fixed[nb_dims] = FALSE;
/* Hack: Assume array size is specified in previous member */
cur_member->dim_value[nb_dims] = idx_member - 1;
cur_member->dim_value[nb_dims] = i;
}
if (get_TOKEN(buf) != TOKEN_CBRACKET)
return FALSE;