27 #include "wine/winternl.h" 36 #define MAKEFOUR(a,b,c,d) ((DWORD)a + ((DWORD)b << 8) + ((DWORD)c << 16) + ((DWORD)d << 24)) 37 #define XOFFILE_FORMAT_MAGIC MAKEFOUR('x','o','f',' ') 38 #define XOFFILE_FORMAT_VERSION_302 MAKEFOUR('0','3','0','2') 39 #define XOFFILE_FORMAT_VERSION_303 MAKEFOUR('0','3','0','3') 40 #define XOFFILE_FORMAT_BINARY MAKEFOUR('b','i','n',' ') 41 #define XOFFILE_FORMAT_TEXT MAKEFOUR('t','x','t',' ') 42 #define XOFFILE_FORMAT_BINARY_MSZIP MAKEFOUR('b','z','i','p') 43 #define XOFFILE_FORMAT_TEXT_MSZIP MAKEFOUR('t','z','i','p') 44 #define XOFFILE_FORMAT_COMPRESSED MAKEFOUR('c','m','p',' ') 45 #define XOFFILE_FORMAT_FLOAT_BITS_32 MAKEFOUR('0','0','3','2') 46 #define XOFFILE_FORMAT_FLOAT_BITS_64 MAKEFOUR('0','0','6','4') 48 #define TOKEN_ERROR 0xffff 51 #define TOKEN_STRING 2 52 #define TOKEN_INTEGER 3 54 #define TOKEN_INTEGER_LIST 6 55 #define TOKEN_FLOAT_LIST 7 56 #define TOKEN_OBRACE 10 57 #define TOKEN_CBRACE 11 58 #define TOKEN_OPAREN 12 59 #define TOKEN_CPAREN 13 60 #define TOKEN_OBRACKET 14 61 #define TOKEN_CBRACKET 15 62 #define TOKEN_OANGLE 16 63 #define TOKEN_CANGLE 17 65 #define TOKEN_COMMA 19 66 #define TOKEN_SEMICOLON 20 67 #define TOKEN_TEMPLATE 31 69 #define TOKEN_DWORD 41 70 #define TOKEN_FLOAT 42 71 #define TOKEN_DOUBLE 43 73 #define TOKEN_UCHAR 45 74 #define TOKEN_SWORD 46 75 #define TOKEN_SDWORD 47 77 #define TOKEN_LPSTR 49 78 #define TOKEN_UNICODE 50 79 #define TOKEN_CSTRING 51 80 #define TOKEN_ARRAY 52 82 #define CLSIDFMT "<%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X>" 87 if (!fourcc)
return "'null'";
89 (
char)(fourcc), (
char)(fourcc >> 8),
90 (
char)(fourcc >> 16), (
char)(fourcc >> 24));
201 TRACE(
"header = '%s'\n",
string);
232 DWORD decomp_file_size;
233 WORD decomp_chunk_size;
234 WORD comp_chunk_size;
237 if (!
read_bytes(
buf, &decomp_file_size,
sizeof(decomp_file_size)))
240 TRACE(
"Compressed format %s detected: decompressed file size with xof header = %d\n",
244 decomp_file_size -= 16;
249 ERR(
"Out of memory\n");
252 *decomp_buffer_ptr = decomp_buffer;
254 while (
buf->rem_bytes)
256 if (!
read_bytes(
buf, &decomp_chunk_size,
sizeof(decomp_chunk_size)))
258 if (!
read_bytes(
buf, &comp_chunk_size,
sizeof(comp_chunk_size)))
261 TRACE(
"Process chunk: compressed_size = %d, decompressed_size = %d\n",
262 comp_chunk_size, decomp_chunk_size);
267 WARN(
"Error while decompressing MSZIP chunk %d\n",
err);
271 buf->rem_bytes -= comp_chunk_size;
272 buf->buffer += comp_chunk_size;
273 decomp_buffer += decomp_chunk_size;
276 if ((decomp_buffer - *decomp_buffer_ptr) != decomp_file_size)
277 ERR(
"Size of all decompressed chunks (%u) does not match decompressed file size (%u)\n",
278 (
DWORD)(decomp_buffer - *decomp_buffer_ptr), decomp_file_size);
281 buf->buffer = *decomp_buffer_ptr;
282 buf->rem_bytes = decomp_file_size;
285 TRACE(
"Header is correct\n");
292 #define DUMP_TOKEN(t) case t: TRACE(#t "\n"); break 466 if (
buf->rem_bytes < 38 || *
buf->buffer !=
'<')
469 while (
pos <
sizeof(tmp) - 2 && *(
buf->buffer+
pos) !=
'>')
478 TRACE(
"Wrong guid %s (%d)\n", tmp,
pos);
484 ret =
sscanf(tmp,
CLSIDFMT, &class_id.Data1, tab, tab+1, tab+2, tab+3, tab+4, tab+5, tab+6, tab+7, tab+8, tab+9);
487 TRACE(
"Wrong guid %s (%d)\n", tmp,
pos);
490 TRACE(
"Found guid %s (%d)\n", tmp,
pos);
492 class_id.Data2 = tab[0];
493 class_id.Data3 = tab[1];
494 class_id.Data4[0] = tab[2];
495 class_id.Data4[1] = tab[3];
496 class_id.Data4[2] = tab[4];
497 class_id.Data4[3] = tab[5];
498 class_id.Data4[4] = tab[6];
499 class_id.Data4[5] = tab[7];
500 class_id.Data4[6] = tab[8];
501 class_id.Data4[7] = tab[9];
516 if (!(((
c >=
'a') && (
c <=
'z')) || ((
c >=
'A') && (
c <=
'Z')) || ((
c >=
'0') && (
c <=
'9')) || (
c ==
'_') || (
c ==
'-')))
518 if (
pos <
sizeof(tmp))
522 tmp[
min(
pos,
sizeof(tmp) - 1)] = 0;
526 TRACE(
"Wrong name %s\n", tmp);
533 TRACE(
"Found name %s\n", tmp);
549 if (!((!
pos && (
c ==
'-')) || ((
c >=
'0') && (
c <=
'9')) || (!dot && (
c ==
'.'))))
553 if (
pos <
sizeof(tmp))
557 tmp[
min(
pos,
sizeof(tmp) - 1)] = 0;
562 sscanf(tmp,
"%f", &decimal);
564 TRACE(
"Found float %s - %f\n", tmp, decimal);
566 *(
float*)
buf->value = decimal;
580 if (!((
c >=
'0') && (
c <=
'9')))
582 if (
pos <
sizeof(tmp))
586 tmp[
min(
pos,
sizeof(tmp) - 1)] = 0;
591 sscanf(tmp,
"%d", &integer);
593 TRACE(
"Found integer %s - %d\n", tmp, integer);
607 if (*
buf->buffer !=
'"')
610 while ((
pos+1) <
buf->rem_bytes)
618 if (
pos <
sizeof(tmp))
622 tmp[
min(
pos,
sizeof(tmp) - 1)] = 0;
626 TRACE(
"Wrong string %s\n", tmp);
631 buf->rem_bytes -=
pos + 2;
633 TRACE(
"Found string %s\n", tmp);
650 if ((
c ==
'#') || (
c ==
'/'))
713 FIXME(
"Unrecognize element\n");
720 if (!
buf->list_nb_elements)
732 TRACE(
"Integer list (TOKEN_INTEGER_LIST) of size %d\n",
buf->list_nb_elements);
740 TRACE(
"Float list (TOKEN_FLOAT_LIST) of size %d\n",
buf->list_nb_elements);
744 if (
buf->list_nb_elements)
746 if (
buf->list_separator)
748 buf->list_nb_elements--;
775 char *
name = (
char*)
buf->value;
791 TRACE(
"integer = %u\n", integer);
803 sprintf(strguid,
CLSIDFMT, class_id.Data1, class_id.Data2, class_id.Data3, class_id.Data4[0],
804 class_id.Data4[1], class_id.Data4[2], class_id.Data4[3], class_id.Data4[4], class_id.Data4[5],
805 class_id.Data4[6], class_id.Data4[7]);
806 TRACE(
"guid = %s\n", strguid);
814 char *
string = (
char*)
buf->value;
821 TRACE(
"string = %s\n",
string);
864 if (
buf->token_present)
867 return buf->current_token;
872 return buf->current_token;
877 if (
buf->token_present)
878 return buf->current_token;
883 return buf->current_token;
913 xtemplate* cur_template = &
buf->pdxf->xtemplates[
buf->pdxf->nb_xtemplates];
953 cur_member = &
buf->pdxf->xtemplates[
buf->pdxf->nb_xtemplates].members[idx_member];
964 if (!
strcmp((
char*)
buf->value,
"indexColor"))
980 WARN(
"Reference to a nonexistent template '%s'\n", (
char*)
buf->value);
1000 FIXME(
"Too many dimensions (%d) for multi-dimensional array\n", nb_dims + 1);
1015 for (
i = 0;
i < idx_member;
i++)
1017 if (!
strcmp((
char*)
buf->value,
buf->pdxf->xtemplates[
buf->pdxf->nb_xtemplates].members[
i].name))
1019 if (
buf->pdxf->xtemplates[
buf->pdxf->nb_xtemplates].members[
i].nb_dims)
1021 ERR(
"Array cannot be used to specify variable array size\n");
1026 FIXME(
"Only DWORD supported to specify variable array size\n");
1032 if (
i == idx_member)
1034 ERR(
"Reference to unknown member %s\n", (
char*)
buf->value);
1046 cur_member->
nb_dims = nb_dims;
1054 buf->pdxf->xtemplates[
buf->pdxf->nb_xtemplates].nb_members = idx_member;
1081 strcpy(
buf->pdxf->xtemplates[
buf->pdxf->nb_xtemplates].name, (
char*)
buf->value);
1092 TRACE(
"%d - %s - %s\n",
buf->pdxf->nb_xtemplates,
buf->pdxf->xtemplates[
buf->pdxf->nb_xtemplates].name,
debugstr_guid(&
buf->pdxf->xtemplates[
buf->pdxf->nb_xtemplates].class_id));
1093 buf->pdxf->nb_xtemplates++;
1106 WARN(
"Template is not correct\n");
1111 TRACE(
"Template successfully parsed:\n");
1121 if ((
buf->cur_pos_data +
size) >
buf->capacity)
1124 ULONG new_capacity =
buf->capacity ? 2 *
buf->capacity : 100000;
1131 buf->capacity = new_capacity;
1145 buf->pxo->nb_members =
pt->nb_members;
1147 for (
i = 0;
i <
pt->nb_members;
i++)
1154 buf->pxo->members[
i].start =
buf->cur_pos_data;
1156 for (
k = 0;
k <
pt->members[
i].nb_dims;
k++)
1158 if (
pt->members[
i].dim_fixed[
k])
1159 nb_elems *=
pt->members[
i].dim_value[
k];
1161 nb_elems *= *(
DWORD*)(
buf->pxo->root->pdata +
buf->pxo->members[
pt->members[
i].dim_value[
k]].start);
1164 TRACE(
"Elements to consider: %u\n", nb_elems);
1166 for (
k = 0;
k < nb_elems;
k++)
1172 TRACE(
"Found sub-object %s\n",
buf->pdxf->xtemplates[
pt->members[
i].idx_template].name);
1176 for (
j = 0;
j <
buf->pdxf->nb_xtemplates;
j++)
1178 if (!
_strnicmp(
buf->pdxf->xtemplates[
pt->members[
i].idx_template].name,
buf->pdxf->xtemplates[
j].name, -1))
1180 buf->pxt[
buf->level] = &
buf->pdxf->xtemplates[
j];
1184 if (
j ==
buf->pdxf->nb_xtemplates)
1186 ERR(
"Unknown template %s\n", (
char*)
buf->value);
1190 TRACE(
"Enter %s\n",
buf->pdxf->xtemplates[
pt->members[
i].idx_template].name);
1211 buf->cur_pos_data += 2;
1216 buf->cur_pos_data += 4;
1220 FIXME(
"Token %d not supported\n",
pt->members[
i].type);
1232 *(
float *)(
buf->pdata +
buf->cur_pos_data) = *(
float *)
buf->
value;
1233 buf->cur_pos_data += 4;
1237 FIXME(
"Token %d not supported\n",
pt->members[
i].type);
1252 FIXME(
"Buffer too small %p %p %d\n",
buf->cur_pstrings,
buf->pstrings,
len);
1256 *(((
LPCSTR*)(
buf->pdata +
buf->cur_pos_data))) = (
char*)
buf->cur_pstrings;
1257 buf->cur_pstrings +=
len;
1258 buf->cur_pos_data +=
sizeof(
LPSTR);
1262 FIXME(
"Token %d not supported\n",
pt->members[
i].type);
1287 buf->pxo->members[
i].size =
buf->cur_pos_data -
buf->pxo->members[
i].start;
1295 buf->pxo->nb_children = 0;
1302 buf->pxo->size =
buf->cur_pos_data -
buf->pxo->pos_data;
1314 TRACE(
"Found optional reference %s\n", (
char*)
buf->value);
1315 for (
i = 0;
i < (
buf->nb_pxo_globals+1);
i++)
1317 for (
j = 0;
j < (
buf->pxo_globals[
i])[0].nb_subobjects;
j++)
1324 if (
i == (
buf->nb_pxo_globals+1))
1326 ERR(
"Reference to unknown object %s\n", (
char*)
buf->value);
1332 FIXME(
"Too many sub-objects\n");
1336 buf->pxo->children[
buf->pxo->nb_children] = &
buf->pxo_tab[
buf->pxo->root->nb_subobjects++];
1337 buf->pxo->children[
buf->pxo->nb_children]->ptarget = &(
buf->pxo_globals[
i])[
j];
1338 buf->pxo->children[
buf->pxo->nb_children]->binary =
FALSE;
1339 buf->pxo->nb_children++;
1347 FIXME(
"Too many sub-objects\n");
1351 buf->pxo =
buf->pxo->children[
buf->pxo->nb_children] = &
buf->pxo_tab[
buf->pxo->root->nb_subobjects];
1352 pxo->root->nb_subobjects++;
1354 TRACE(
"Enter optional %s\n", (
char*)
buf->value);
1363 buf->pxo->nb_children++;
1372 FIXME(
"Too many children %d\n",
buf->pxo->nb_children);
1383 buf->pxo->pos_data =
buf->cur_pos_data;
1386 buf->pxo->root =
buf->pxo_tab;
1392 for (
i = 0;
i <
buf->pdxf->nb_xtemplates;
i++)
1396 buf->pxt[
buf->level] = &
buf->pdxf->xtemplates[
i];
1397 memcpy(&
buf->pxo->type, &
buf->pdxf->xtemplates[
i].class_id, 16);
1401 if (
i ==
buf->pdxf->nb_xtemplates)
1403 ERR(
"Unknown template %s\n", (
char*)
buf->value);
1413 buf->pxo->name[0] = 0;
char children[MAX_CHILDREN][MAX_NAME_LEN]
#define MAX_STRINGS_BUFFER
ACPI_SIZE strlen(const char *String)
static BOOL is_guid(parse_buffer *buf)
GLuint GLuint GLsizei count
static BOOL parse_template(parse_buffer *buf)
static BOOL is_space(char c)
ULONG dim_value[MAX_ARRAY_DIM]
static BOOL is_string(parse_buffer *buf)
static BOOL read_bytes(parse_buffer *buf, LPVOID data, DWORD size)
#define XOFFILE_FORMAT_VERSION_302
static BOOL is_separator(char c)
#define DXFILEERR_BADFILETYPE
BOOL parse_templates(parse_buffer *buf, BOOL templates_only)
int mszip_decompress(int inlen, int outlen, char *inbuffer, char *outbuffer) DECLSPEC_HIDDEN
static WORD check_TOKEN(parse_buffer *buf)
const char * wine_dbg_sprintf(const char *format,...)
#define sprintf(buf, format,...)
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
static const char * debugstr_fourcc(DWORD fourcc)
member members[MAX_MEMBERS]
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
static BOOL parse_template_parts(parse_buffer *buf)
static PROTOCOLDATA * pdata
BOOL dim_fixed[MAX_ARRAY_DIM]
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
static BOOL check_buffer(parse_buffer *buf, ULONG size)
#define TOKEN_INTEGER_LIST
#define XOFFILE_FORMAT_MAGIC
static void rewind_bytes(parse_buffer *buf, DWORD size)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define _strnicmp(_String1, _String2, _MaxCount)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
HRESULT parse_header(parse_buffer *buf, BYTE **decomp_buffer_ptr)
#define XOFFILE_FORMAT_BINARY
static BOOL parse_object_parts(parse_buffer *buf, BOOL allow_optional)
static BOOL parse_template_members_list(parse_buffer *buf)
#define XOFFILE_FORMAT_TEXT
#define memcpy(s1, s2, n)
GLsizei const GLfloat * value
static void dump_template(xtemplate *templates_array, xtemplate *ptemplate)
#define XOFFILE_FORMAT_TEXT_MSZIP
static BOOL is_primitive_type(WORD token)
static BOOL parse_object_members_list(parse_buffer *buf)
static WORD get_operator_token(char c)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static BOOL is_keyword(parse_buffer *buf, const char *keyword)
#define XOFFILE_FORMAT_FLOAT_BITS_32
static void dump_TOKEN(WORD token)
const char int wine_dbg_printf(const char *format,...) __WINE_PRINTF_ATTR(1
static BOOL parse_template_option_info(parse_buffer *buf)
static const char * get_primitive_string(DWORD token)
_In_ XLATEOBJ _In_ XFORMOBJ * pxo
WINE_DEFAULT_DEBUG_CHANNEL(d3dxof_parsing)
char * strcpy(char *DstString, const char *SrcString)
#define DXFILEERR_BADFILEFLOATSIZE
int strcmp(const char *String1, const char *String2)
#define DXFILEERR_BADALLOC
static BOOL is_name(parse_buffer *buf)
#define DXFILEERR_BADFILEVERSION
static WORD get_TOKEN(parse_buffer *buf)
static BOOL is_float(parse_buffer *buf)
BOOL parse_object(parse_buffer *buf)
static WORD parse_TOKEN(parse_buffer *buf)
static WORD get_keyword_token(parse_buffer *buf)
#define XOFFILE_FORMAT_BINARY_MSZIP
#define HeapFree(x, y, z)
#define XOFFILE_FORMAT_FLOAT_BITS_64
static BOOL is_integer(parse_buffer *buf)
static BOOL is_operator(char c)
#define XOFFILE_FORMAT_VERSION_303