Module: wine Branch: master Commit: 607062f3c3431c3a2413b09838279b4f8dc3caaa URL: http://source.winehq.org/git/wine.git/?a=commit;h=607062f3c3431c3a2413b09838...
Author: Christian Costa titan.costa@wanadoo.fr Date: Sun Nov 23 21:30:00 2008 +0100
d3dxof: Support multi-dimentional array in templates.
---
dlls/d3dxof/d3dxof.c | 31 ++++++++++++++++++++++++------- 1 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c index 7c97771..79dc59b 100644 --- a/dlls/d3dxof/d3dxof.c +++ b/dlls/d3dxof/d3dxof.c @@ -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;