ReactOS 0.4.17-dev-940-g8bd6e85
d3dxof.c File Reference
#include "d3dxof_private.h"
Include dependency graph for d3dxof.c:

Go to the source code of this file.

Macros

#define TOKEN_DWORD   41
 
#define TOKEN_FLOAT   42
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (d3dxof)
 
 WINE_DECLARE_DEBUG_CHANNEL (d3dxof_dump)
 
static HRESULT IDirectXFileDataReferenceImpl_Create (IDirectXFileDataReferenceImpl **ppObj)
 
static HRESULT IDirectXFileEnumObjectImpl_Create (IDirectXFileEnumObjectImpl **ppObj)
 
static HRESULT IDirectXFileSaveObjectImpl_Create (IDirectXFileSaveObjectImpl **ppObj)
 
HRESULT IDirectXFileImpl_Create (IUnknown *pUnkOuter, LPVOID *ppObj)
 
static IDirectXFileImpl * impl_from_IDirectXFile (IDirectXFile *iface)
 
static HRESULT WINAPI IDirectXFileImpl_QueryInterface (IDirectXFile *iface, REFIID riid, void **out)
 
static ULONG WINAPI IDirectXFileImpl_AddRef (IDirectXFile *iface)
 
static ULONG WINAPI IDirectXFileImpl_Release (IDirectXFile *iface)
 
static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject (IDirectXFile *iface, LPVOID pvSource, DXFILELOADOPTIONS dwLoadOptions, LPDIRECTXFILEENUMOBJECT *ppEnumObj)
 
static HRESULT WINAPI IDirectXFileImpl_CreateSaveObject (IDirectXFile *iface, const char *filename, DXFILEFORMAT format, LPDIRECTXFILESAVEOBJECT *out)
 
static HRESULT WINAPI IDirectXFileImpl_RegisterTemplates (IDirectXFile *iface, LPVOID pvData, DWORD cbSize)
 
static HRESULT IDirectXFileBinaryImpl_Create (IDirectXFileBinaryImpl **ppObj)
 
static IDirectXFileBinaryImpl * impl_from_IDirectXFileBinary (IDirectXFileBinary *iface)
 
static HRESULT WINAPI IDirectXFileBinaryImpl_QueryInterface (IDirectXFileBinary *iface, REFIID riid, void **out)
 
static ULONG WINAPI IDirectXFileBinaryImpl_AddRef (IDirectXFileBinary *iface)
 
static ULONG WINAPI IDirectXFileBinaryImpl_Release (IDirectXFileBinary *iface)
 
static HRESULT WINAPI IDirectXFileBinaryImpl_GetName (IDirectXFileBinary *iface, char *name, DWORD *length)
 
static HRESULT WINAPI IDirectXFileBinaryImpl_GetId (IDirectXFileBinary *iface, GUID *guid)
 
static HRESULT WINAPI IDirectXFileBinaryImpl_GetSize (IDirectXFileBinary *iface, DWORD *size)
 
static HRESULT WINAPI IDirectXFileBinaryImpl_GetMimeType (IDirectXFileBinary *iface, LPCSTR *mimetype)
 
static HRESULT WINAPI IDirectXFileBinaryImpl_Read (IDirectXFileBinary *iface, void *data, DWORD size, DWORD *count)
 
static HRESULT IDirectXFileDataImpl_Create (IDirectXFileDataImpl **ppObj)
 
static IDirectXFileDataImpl * impl_from_IDirectXFileData (IDirectXFileData *iface)
 
static HRESULT WINAPI IDirectXFileDataImpl_QueryInterface (IDirectXFileData *iface, REFIID riid, void **out)
 
static ULONG WINAPI IDirectXFileDataImpl_AddRef (IDirectXFileData *iface)
 
static ULONG WINAPI IDirectXFileDataImpl_Release (IDirectXFileData *iface)
 
static HRESULT WINAPI IDirectXFileDataImpl_GetName (IDirectXFileData *iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
 
static HRESULT WINAPI IDirectXFileDataImpl_GetId (IDirectXFileData *iface, LPGUID pGuid)
 
static HRESULT WINAPI IDirectXFileDataImpl_GetData (IDirectXFileData *iface, LPCSTR szMember, DWORD *pcbSize, void **ppvData)
 
static HRESULT WINAPI IDirectXFileDataImpl_GetType (IDirectXFileData *iface, const GUID **pguid)
 
static HRESULT WINAPI IDirectXFileDataImpl_GetNextObject (IDirectXFileData *iface, LPDIRECTXFILEOBJECT *ppChildObj)
 
static HRESULT WINAPI IDirectXFileDataImpl_AddDataObject (IDirectXFileData *iface, LPDIRECTXFILEDATA data)
 
static HRESULT WINAPI IDirectXFileDataImpl_AddDataReference (IDirectXFileData *iface, const char *reference, const GUID *guidref)
 
static HRESULT WINAPI IDirectXFileDataImpl_AddBinaryObject (IDirectXFileData *iface, const char *name, const GUID *guid, const char *mimetype, void *data, DWORD size)
 
static IDirectXFileDataReferenceImpl * impl_from_IDirectXFileDataReference (IDirectXFileDataReference *iface)
 
static HRESULT WINAPI IDirectXFileDataReferenceImpl_QueryInterface (IDirectXFileDataReference *iface, REFIID riid, void **out)
 
static ULONG WINAPI IDirectXFileDataReferenceImpl_AddRef (IDirectXFileDataReference *iface)
 
static ULONG WINAPI IDirectXFileDataReferenceImpl_Release (IDirectXFileDataReference *iface)
 
static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetName (IDirectXFileDataReference *iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
 
static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetId (IDirectXFileDataReference *iface, GUID *guid)
 
static HRESULT WINAPI IDirectXFileDataReferenceImpl_Resolve (IDirectXFileDataReference *iface, LPDIRECTXFILEDATA *ppDataObj)
 
static IDirectXFileEnumObjectImpl * impl_from_IDirectXFileEnumObject (IDirectXFileEnumObject *iface)
 
static HRESULT WINAPI IDirectXFileEnumObjectImpl_QueryInterface (IDirectXFileEnumObject *iface, REFIID riid, void **out)
 
static ULONG WINAPI IDirectXFileEnumObjectImpl_AddRef (IDirectXFileEnumObject *iface)
 
static ULONG WINAPI IDirectXFileEnumObjectImpl_Release (IDirectXFileEnumObject *iface)
 
static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject (IDirectXFileEnumObject *iface, LPDIRECTXFILEDATA *ppDataObj)
 
static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectById (IDirectXFileEnumObject *iface, REFGUID guid, LPDIRECTXFILEDATA *data)
 
static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectByName (IDirectXFileEnumObject *iface, const char *name, LPDIRECTXFILEDATA *data)
 
static IDirectXFileSaveObjectImpl * impl_from_IDirectXFileSaveObject (IDirectXFileSaveObject *iface)
 
static HRESULT WINAPI IDirectXFileSaveObjectImpl_QueryInterface (IDirectXFileSaveObject *iface, REFIID riid, void **out)
 
static ULONG WINAPI IDirectXFileSaveObjectImpl_AddRef (IDirectXFileSaveObject *iface)
 
static ULONG WINAPI IDirectXFileSaveObjectImpl_Release (IDirectXFileSaveObject *iface)
 
static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveTemplates (IDirectXFileSaveObject *iface, DWORD count, const GUID **templates)
 
static HRESULT WINAPI IDirectXFileSaveObjectImpl_CreateDataObject (IDirectXFileSaveObject *iface, REFGUID template, const char *name, const GUID *guid, DWORD size, void *data, LPDIRECTXFILEDATA *dataobj)
 
static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveData (IDirectXFileSaveObject *iface, LPDIRECTXFILEDATA data)
 

Variables

static const struct IDirectXFileVtbl IDirectXFile_Vtbl
 
static const struct IDirectXFileBinaryVtbl IDirectXFileBinary_Vtbl
 
static const struct IDirectXFileDataVtbl IDirectXFileData_Vtbl
 
static const struct IDirectXFileDataReferenceVtbl IDirectXFileDataReference_Vtbl
 
static const struct IDirectXFileEnumObjectVtbl IDirectXFileEnumObject_Vtbl
 
static const struct IDirectXFileSaveObjectVtbl IDirectXFileSaveObject_Vtbl
 

Macro Definition Documentation

◆ TOKEN_DWORD

#define TOKEN_DWORD   41

Definition at line 37 of file d3dxof.c.

◆ TOKEN_FLOAT

#define TOKEN_FLOAT   42

Definition at line 38 of file d3dxof.c.

Function Documentation

◆ IDirectXFileBinaryImpl_AddRef()

static ULONG WINAPI IDirectXFileBinaryImpl_AddRef ( IDirectXFileBinary *  iface)
static

Definition at line 409 of file d3dxof.c.

410{
412 ULONG refcount = InterlockedIncrement(&object->ref);
413
414 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
415
416 return refcount;
417}
#define InterlockedIncrement
Definition: armddk.h:53
static IDirectXFileBinaryImpl * impl_from_IDirectXFileBinary(IDirectXFileBinary *iface)
Definition: d3dxof.c:377
#define TRACE(s)
Definition: solgame.cpp:4
uint32_t ULONG
Definition: typedefs.h:59

◆ IDirectXFileBinaryImpl_Create()

static HRESULT IDirectXFileBinaryImpl_Create ( IDirectXFileBinaryImpl **  ppObj)
static

Definition at line 359 of file d3dxof.c.

360{
362
363 TRACE("(%p)\n", ppObj);
364
366 if (!object)
367 return DXFILEERR_BADALLOC;
368
369 object->IDirectXFileBinary_iface.lpVtbl = &IDirectXFileBinary_Vtbl;
370 object->ref = 1;
371
372 *ppObj = object;
373
374 return DXFILE_OK;
375}
static const struct IDirectXFileBinaryVtbl IDirectXFileBinary_Vtbl
Definition: d3dxof.c:27
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define DXFILEERR_BADALLOC
Definition: dxfile.h:274
#define DXFILE_OK
Definition: dxfile.h:268

Referenced by IDirectXFileDataImpl_GetNextObject().

◆ IDirectXFileBinaryImpl_GetId()

static HRESULT WINAPI IDirectXFileBinaryImpl_GetId ( IDirectXFileBinary *  iface,
GUID *  guid 
)
static

Definition at line 440 of file d3dxof.c.

441{
442 FIXME("iface %p, guid %p stub!\n", iface, guid);
443
444 return DXFILEERR_BADVALUE;
445}
#define FIXME(fmt,...)
Definition: precomp.h:53
GUID guid
Definition: version.c:147
#define DXFILEERR_BADVALUE
Definition: dxfile.h:271

◆ IDirectXFileBinaryImpl_GetMimeType()

static HRESULT WINAPI IDirectXFileBinaryImpl_GetMimeType ( IDirectXFileBinary *  iface,
LPCSTR *  mimetype 
)
static

Definition at line 454 of file d3dxof.c.

455{
456 FIXME("iface %p, mimetype %p stub!\n", iface, mimetype);
457
458 return DXFILEERR_BADVALUE;
459}

◆ IDirectXFileBinaryImpl_GetName()

static HRESULT WINAPI IDirectXFileBinaryImpl_GetName ( IDirectXFileBinary *  iface,
char *  name,
DWORD *  length 
)
static

Definition at line 432 of file d3dxof.c.

434{
435 FIXME("iface %p, name %p, length %p stub!\n", iface, name, length);
436
437 return DXFILEERR_BADVALUE;
438}
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
Definition: name.c:39

◆ IDirectXFileBinaryImpl_GetSize()

static HRESULT WINAPI IDirectXFileBinaryImpl_GetSize ( IDirectXFileBinary *  iface,
DWORD *  size 
)
static

Definition at line 447 of file d3dxof.c.

448{
449 FIXME("iface %p, size %p stub!\n", iface, size);
450
451 return DXFILEERR_BADVALUE;
452}
GLsizeiptr size
Definition: glext.h:5919

◆ IDirectXFileBinaryImpl_QueryInterface()

static HRESULT WINAPI IDirectXFileBinaryImpl_QueryInterface ( IDirectXFileBinary *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 382 of file d3dxof.c.

384{
386
387 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
388
390 || IsEqualGUID(riid, &IID_IDirectXFileObject)
391 || IsEqualGUID(riid, &IID_IDirectXFileBinary))
392 {
393 *out = &object->IDirectXFileBinary_iface;
394 }
395 else
396 {
397 *out = NULL;
398 /* Do not print an error for interfaces that can be queried to
399 * retrieve the type of the object */
400 if (!IsEqualGUID(riid, &IID_IDirectXFileData) && !IsEqualGUID(riid, &IID_IDirectXFileDataReference))
401 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
402 return E_NOINTERFACE;
403 }
404
405 IUnknown_AddRef((IUnknown *)*out);
406 return S_OK;
407}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ IDirectXFileBinaryImpl_Read()

static HRESULT WINAPI IDirectXFileBinaryImpl_Read ( IDirectXFileBinary *  iface,
void *  data,
DWORD  size,
DWORD *  count 
)
static

Definition at line 461 of file d3dxof.c.

463{
464 FIXME("iface %p, data %p, size %lu, count %p stub!\n", iface, data, size, count);
465
466 return DXFILEERR_BADVALUE;
467}
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950

◆ IDirectXFileBinaryImpl_Release()

static ULONG WINAPI IDirectXFileBinaryImpl_Release ( IDirectXFileBinary *  iface)
static

Definition at line 419 of file d3dxof.c.

420{
422 ULONG refcount = InterlockedDecrement(&object->ref);
423
424 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
425
426 if (!refcount)
427 HeapFree(GetProcessHeap(), 0, object);
428
429 return refcount;
430}
#define InterlockedDecrement
Definition: armddk.h:52
#define HeapFree(x, y, z)
Definition: compat.h:735

◆ IDirectXFileDataImpl_AddBinaryObject()

static HRESULT WINAPI IDirectXFileDataImpl_AddBinaryObject ( IDirectXFileData *  iface,
const char *  name,
const GUID *  guid,
const char *  mimetype,
void *  data,
DWORD  size 
)
static

Definition at line 733 of file d3dxof.c.

735{
736 FIXME("iface %p, name %s, guid %s, mimetype %s, data %p, size %lu stub!\n", iface, debugstr_a(name),
737 debugstr_guid(guid), debugstr_a(mimetype), data, size);
738
739 return DXFILEERR_BADVALUE;
740}
#define debugstr_a
Definition: kernel32.h:31

◆ IDirectXFileDataImpl_AddDataObject()

static HRESULT WINAPI IDirectXFileDataImpl_AddDataObject ( IDirectXFileData *  iface,
LPDIRECTXFILEDATA  data 
)
static

Definition at line 717 of file d3dxof.c.

718{
719 FIXME("iface %p, data %p stub!\n", iface, data);
720
721 return DXFILEERR_BADVALUE;
722}

◆ IDirectXFileDataImpl_AddDataReference()

static HRESULT WINAPI IDirectXFileDataImpl_AddDataReference ( IDirectXFileData *  iface,
const char *  reference,
const GUID *  guidref 
)
static

Definition at line 724 of file d3dxof.c.

726{
727 FIXME("iface %p, reference %s, guid reference %s stub!\n", iface, debugstr_a(reference),
728 debugstr_guid(guidref));
729
730 return DXFILEERR_BADVALUE;
731}
GLint reference
Definition: glext.h:11729

◆ IDirectXFileDataImpl_AddRef()

static ULONG WINAPI IDirectXFileDataImpl_AddRef ( IDirectXFileData *  iface)
static

Definition at line 531 of file d3dxof.c.

532{
534 ULONG refcount = InterlockedIncrement(&data->ref);
535
536 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
537
538 return refcount;
539}
static IDirectXFileDataImpl * impl_from_IDirectXFileData(IDirectXFileData *iface)
Definition: d3dxof.c:499

◆ IDirectXFileDataImpl_Create()

static HRESULT IDirectXFileDataImpl_Create ( IDirectXFileDataImpl **  ppObj)
static

Definition at line 481 of file d3dxof.c.

482{
484
485 TRACE("(%p)\n", ppObj);
486
488 if (!object)
489 return DXFILEERR_BADALLOC;
490
491 object->IDirectXFileData_iface.lpVtbl = &IDirectXFileData_Vtbl;
492 object->ref = 1;
493
494 *ppObj = object;
495
496 return S_OK;
497}
static const struct IDirectXFileDataVtbl IDirectXFileData_Vtbl
Definition: d3dxof.c:28

Referenced by IDirectXFileDataImpl_GetNextObject(), IDirectXFileDataReferenceImpl_Resolve(), and IDirectXFileEnumObjectImpl_GetNextDataObject().

◆ IDirectXFileDataImpl_GetData()

static HRESULT WINAPI IDirectXFileDataImpl_GetData ( IDirectXFileData *  iface,
LPCSTR  szMember,
DWORD *  pcbSize,
void **  ppvData 
)
static

Definition at line 608 of file d3dxof.c.

609{
611
612 TRACE("(%p/%p)->(%s,%p,%p)\n", This, iface, debugstr_a(szMember), pcbSize, ppvData);
613
614 if (!pcbSize || !ppvData)
615 return DXFILEERR_BADVALUE;
616
617 if (szMember)
618 {
619 ULONG i;
620 for (i = 0; i < This->pobj->nb_members; i++)
621 if (!strcmp(This->pobj->members[i].name, szMember))
622 break;
623 if (i == This->pobj->nb_members)
624 {
625 WARN("Unknown member '%s'\n", szMember);
627 }
628 *pcbSize = This->pobj->members[i].size;
629 *ppvData = This->pobj->root->pdata + This->pobj->members[i].start;
630 }
631 else
632 {
633 *pcbSize = This->pobj->size;
634 *ppvData = This->pobj->root->pdata + This->pobj->pos_data;
635 }
636
637 return DXFILE_OK;
638}
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3324
#define DXFILEERR_BADDATAREFERENCE
Definition: dxfile.h:289
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
Definition: glfuncs.h:248

◆ IDirectXFileDataImpl_GetId()

static HRESULT WINAPI IDirectXFileDataImpl_GetId ( IDirectXFileData *  iface,
LPGUID  pGuid 
)
static

Definition at line 593 of file d3dxof.c.

594{
596
597 TRACE("(%p/%p)->(%p)\n", This, iface, pGuid);
598
599 if (!pGuid)
600 return DXFILEERR_BADVALUE;
601
602 *pGuid = This->pobj->class_id;
603
604 return DXFILE_OK;
605}

◆ IDirectXFileDataImpl_GetName()

static HRESULT WINAPI IDirectXFileDataImpl_GetName ( IDirectXFileData *  iface,
LPSTR  pstrNameBuf,
LPDWORD  pdwBufLen 
)
static

Definition at line 566 of file d3dxof.c.

567{
569 DWORD len;
570
571 TRACE("(%p/%p)->(%p,%p)\n", This, iface, pstrNameBuf, pdwBufLen);
572
573 if (!pdwBufLen)
574 return DXFILEERR_BADVALUE;
575
576 len = strlen(This->pobj->name);
577 if (len)
578 len++;
579
580 if (pstrNameBuf) {
581 if (*pdwBufLen < len)
582 return DXFILEERR_BADVALUE;
583 CopyMemory(pstrNameBuf, This->pobj->name, len);
584 /* Even if we return a size of 0, an empty string with a null byte must be returned */
585 if (*pdwBufLen && !len)
586 pstrNameBuf[0] = 0;
587 }
588 *pdwBufLen = len;
589
590 return DXFILE_OK;
591}
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
#define CopyMemory
Definition: minwinbase.h:29

◆ IDirectXFileDataImpl_GetNextObject()

static HRESULT WINAPI IDirectXFileDataImpl_GetNextObject ( IDirectXFileData *  iface,
LPDIRECTXFILEOBJECT *  ppChildObj 
)
static

Definition at line 656 of file d3dxof.c.

657{
658 HRESULT hr;
660
661 TRACE("(%p/%p)->(%p)\n", This, iface, ppChildObj);
662
663 if (This->cur_enum_object >= This->pobj->nb_children)
664 {
665 *ppChildObj = NULL;
667 }
668
669 if (This->from_ref && (This->level >= 1))
670 {
671 /* Only 2 levels can be enumerated if the object is obtained from a reference */
672 *ppChildObj = NULL;
674 }
675
676 if (This->pobj->children[This->cur_enum_object]->binary)
677 {
679
681 if (FAILED(hr))
682 return hr;
683
684 *ppChildObj = (LPDIRECTXFILEOBJECT)&object->IDirectXFileBinary_iface;
685 }
686 else if (This->pobj->children[This->cur_enum_object]->ptarget)
687 {
689
691 if (FAILED(hr))
692 return hr;
693
694 object->ptarget = This->pobj->children[This->cur_enum_object++]->ptarget;
695
696 *ppChildObj = (LPDIRECTXFILEOBJECT)&object->IDirectXFileDataReference_iface;
697 }
698 else
699 {
701
703 if (FAILED(hr))
704 return hr;
705
706 object->pobj = This->pobj->children[This->cur_enum_object++];
707 object->cur_enum_object = 0;
708 object->from_ref = This->from_ref;
709 object->level = This->level + 1;
710
711 *ppChildObj = (LPDIRECTXFILEOBJECT)&object->IDirectXFileData_iface;
712 }
713
714 return DXFILE_OK;
715}
static HRESULT IDirectXFileDataImpl_Create(IDirectXFileDataImpl **ppObj)
Definition: d3dxof.c:481
static HRESULT IDirectXFileDataReferenceImpl_Create(IDirectXFileDataReferenceImpl **ppObj)
Definition: d3dxof.c:757
static HRESULT IDirectXFileBinaryImpl_Create(IDirectXFileBinaryImpl **ppObj)
Definition: d3dxof.c:359
HRESULT hr
Definition: delayimp.cpp:582
struct IDirectXFileObject * LPDIRECTXFILEOBJECT
Definition: dxfile.h:57
#define DXFILEERR_NOMOREOBJECTS
Definition: dxfile.h:291
#define FAILED(hr)
Definition: intsafe.h:51

◆ IDirectXFileDataImpl_GetType()

static HRESULT WINAPI IDirectXFileDataImpl_GetType ( IDirectXFileData *  iface,
const GUID **  pguid 
)
static

Definition at line 640 of file d3dxof.c.

641{
643 static GUID guid;
644
645 TRACE("(%p/%p)->(%p)\n", This, iface, pguid);
646
647 if (!pguid)
648 return DXFILEERR_BADVALUE;
649
650 guid = This->pobj->type;
651 *pguid = &guid;
652
653 return DXFILE_OK;
654}

◆ IDirectXFileDataImpl_QueryInterface()

static HRESULT WINAPI IDirectXFileDataImpl_QueryInterface ( IDirectXFileData *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 504 of file d3dxof.c.

506{
508
509 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
510
512 || IsEqualGUID(riid, &IID_IDirectXFileObject)
513 || IsEqualGUID(riid, &IID_IDirectXFileData))
514 {
515 *out = &data->IDirectXFileData_iface;
516 }
517 else
518 {
519 *out = NULL;
520 /* Do not print an error for interfaces that can be queried to
521 * retrieve the type of the object */
522 if (!IsEqualGUID(riid, &IID_IDirectXFileBinary) && !IsEqualGUID(riid, &IID_IDirectXFileDataReference))
523 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
524 return E_NOINTERFACE;
525 }
526
527 IUnknown_AddRef((IUnknown *)*out);
528 return S_OK;
529}

◆ IDirectXFileDataImpl_Release()

static ULONG WINAPI IDirectXFileDataImpl_Release ( IDirectXFileData *  iface)
static

Definition at line 541 of file d3dxof.c.

542{
544 ULONG refcount = InterlockedDecrement(&data->ref);
545
546 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
547
548 if (!refcount)
549 {
550 if (!data->level && !data->from_ref)
551 {
552 HeapFree(GetProcessHeap(), 0, data->pstrings);
553 if (data->pobj)
554 {
555 HeapFree(GetProcessHeap(), 0, data->pobj->pdata);
556 HeapFree(GetProcessHeap(), 0, data->pobj);
557 }
558 }
560 }
561
562 return refcount;
563}

◆ IDirectXFileDataReferenceImpl_AddRef()

static ULONG WINAPI IDirectXFileDataReferenceImpl_AddRef ( IDirectXFileDataReference *  iface)
static

Definition at line 807 of file d3dxof.c.

808{
810 ULONG refcount = InterlockedIncrement(&object->ref);
811
812 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
813
814 return refcount;
815}
static IDirectXFileDataReferenceImpl * impl_from_IDirectXFileDataReference(IDirectXFileDataReference *iface)
Definition: d3dxof.c:775

◆ IDirectXFileDataReferenceImpl_Create()

static HRESULT IDirectXFileDataReferenceImpl_Create ( IDirectXFileDataReferenceImpl **  ppObj)
static

Definition at line 757 of file d3dxof.c.

758{
760
761 TRACE("(%p)\n", ppObj);
762
764 if (!object)
765 return DXFILEERR_BADALLOC;
766
767 object->IDirectXFileDataReference_iface.lpVtbl = &IDirectXFileDataReference_Vtbl;
768 object->ref = 1;
769
770 *ppObj = object;
771
772 return S_OK;
773}
static const struct IDirectXFileDataReferenceVtbl IDirectXFileDataReference_Vtbl
Definition: d3dxof.c:29

Referenced by IDirectXFileDataImpl_GetNextObject().

◆ IDirectXFileDataReferenceImpl_GetId()

static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetId ( IDirectXFileDataReference *  iface,
GUID *  guid 
)
static

Definition at line 858 of file d3dxof.c.

860{
862
863 TRACE("iface %p, guid %p.\n", iface, guid);
864
865 if (!guid)
866 return DXFILEERR_BADVALUE;
867
868 *guid = object->ptarget->class_id;
869
870 return DXFILE_OK;
871}

◆ IDirectXFileDataReferenceImpl_GetName()

static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetName ( IDirectXFileDataReference *  iface,
LPSTR  pstrNameBuf,
LPDWORD  pdwBufLen 
)
static

Definition at line 831 of file d3dxof.c.

832{
834 DWORD len;
835
836 TRACE("(%p/%p)->(%p,%p)\n", This, iface, pstrNameBuf, pdwBufLen);
837
838 if (!pdwBufLen)
839 return DXFILEERR_BADVALUE;
840
841 len = strlen(This->ptarget->name);
842 if (len)
843 len++;
844
845 if (pstrNameBuf) {
846 if (*pdwBufLen < len)
847 return DXFILEERR_BADVALUE;
848 CopyMemory(pstrNameBuf, This->ptarget->name, len);
849 /* Even if we return a size of 0, an empty string with a null byte must be returned */
850 if (*pdwBufLen && !len)
851 pstrNameBuf[0] = 0;
852 }
853 *pdwBufLen = len;
854
855 return DXFILE_OK;
856}

◆ IDirectXFileDataReferenceImpl_QueryInterface()

static HRESULT WINAPI IDirectXFileDataReferenceImpl_QueryInterface ( IDirectXFileDataReference *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 780 of file d3dxof.c.

782{
784
785 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
786
788 || IsEqualGUID(riid, &IID_IDirectXFileObject)
789 || IsEqualGUID(riid, &IID_IDirectXFileDataReference))
790 {
791 *out = &object->IDirectXFileDataReference_iface;
792 }
793 else
794 {
795 /* Do not print an error for interfaces that can be queried to
796 * retrieve the type of the object */
797 *out = NULL;
798 if (!IsEqualGUID(riid, &IID_IDirectXFileData) && !IsEqualGUID(riid, &IID_IDirectXFileBinary))
799 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
800 return E_NOINTERFACE;
801 }
802
803 IUnknown_AddRef((IUnknown *)*out);
804 return S_OK;
805}

◆ IDirectXFileDataReferenceImpl_Release()

static ULONG WINAPI IDirectXFileDataReferenceImpl_Release ( IDirectXFileDataReference *  iface)
static

Definition at line 817 of file d3dxof.c.

818{
820 ULONG refcount = InterlockedDecrement(&object->ref);
821
822 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
823
824 if (!refcount)
825 HeapFree(GetProcessHeap(), 0, object);
826
827 return refcount;
828}

◆ IDirectXFileDataReferenceImpl_Resolve()

static HRESULT WINAPI IDirectXFileDataReferenceImpl_Resolve ( IDirectXFileDataReference *  iface,
LPDIRECTXFILEDATA *  ppDataObj 
)
static

Definition at line 874 of file d3dxof.c.

875{
878 HRESULT hr;
879
880 TRACE("(%p/%p)->(%p)\n", This, iface, ppDataObj);
881
882 if (!ppDataObj)
883 return DXFILEERR_BADVALUE;
884
886 if (FAILED(hr))
887 return hr;
888
889 object->pobj = This->ptarget;
890 object->cur_enum_object = 0;
891 object->level = 0;
892 object->from_ref = TRUE;
893
894 *ppDataObj = &object->IDirectXFileData_iface;
895
896 return DXFILE_OK;
897}
#define TRUE
Definition: types.h:120

◆ IDirectXFileEnumObjectImpl_AddRef()

static ULONG WINAPI IDirectXFileEnumObjectImpl_AddRef ( IDirectXFileEnumObject *  iface)
static

Definition at line 955 of file d3dxof.c.

956{
958 ULONG refcount = InterlockedIncrement(&object->ref);
959
960 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
961
962 return refcount;
963}
static IDirectXFileEnumObjectImpl * impl_from_IDirectXFileEnumObject(IDirectXFileEnumObject *iface)
Definition: d3dxof.c:927

◆ IDirectXFileEnumObjectImpl_Create()

static HRESULT IDirectXFileEnumObjectImpl_Create ( IDirectXFileEnumObjectImpl **  ppObj)
static

Definition at line 909 of file d3dxof.c.

910{
912
913 TRACE("(%p)\n", ppObj);
914
916 if (!object)
917 return DXFILEERR_BADALLOC;
918
919 object->IDirectXFileEnumObject_iface.lpVtbl = &IDirectXFileEnumObject_Vtbl;
920 object->ref = 1;
921
922 *ppObj = object;
923
924 return S_OK;
925}
static const struct IDirectXFileEnumObjectVtbl IDirectXFileEnumObject_Vtbl
Definition: d3dxof.c:30

Referenced by IDirectXFileImpl_CreateEnumObject().

◆ IDirectXFileEnumObjectImpl_GetDataObjectById()

static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectById ( IDirectXFileEnumObject *  iface,
REFGUID  guid,
LPDIRECTXFILEDATA *  data 
)
static

Definition at line 1071 of file d3dxof.c.

1073{
1074 FIXME("iface %p, guid %s, data %p stub!\n", iface, debugstr_guid(guid), data);
1075
1076 return DXFILEERR_BADVALUE;
1077}

◆ IDirectXFileEnumObjectImpl_GetDataObjectByName()

static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectByName ( IDirectXFileEnumObject *  iface,
const char *  name,
LPDIRECTXFILEDATA *  data 
)
static

Definition at line 1079 of file d3dxof.c.

1081{
1082 FIXME("iface %p, name %s, data %p stub!\n", iface, debugstr_a(name), data);
1083
1084 return DXFILEERR_BADVALUE;
1085}

◆ IDirectXFileEnumObjectImpl_GetNextDataObject()

static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject ( IDirectXFileEnumObject *  iface,
LPDIRECTXFILEDATA *  ppDataObj 
)
static

Definition at line 988 of file d3dxof.c.

989{
992 HRESULT hr;
993
994 if (!ppDataObj)
995 return E_POINTER;
996
997 *ppDataObj = NULL;
998
999 TRACE("(%p/%p)->(%p)\n", This, iface, ppDataObj);
1000
1001 if (This->nb_xobjects >= MAX_OBJECTS)
1002 {
1003 ERR("Too many objects\n");
1005 }
1006
1007 /* Check if there are templates defined before the object */
1008 if (!parse_templates(&This->buf, TRUE))
1009 return DXFILEERR_PARSEERROR;
1010
1011 if (!This->buf.rem_bytes)
1013
1015 if (FAILED(hr))
1016 return hr;
1017
1018 object->pobj = HeapAlloc(GetProcessHeap(), 0, sizeof(xobject)*MAX_SUBOBJECTS);
1019 if (!object->pobj)
1020 {
1022 goto error;
1023 }
1024
1025 object->pstrings = HeapAlloc(GetProcessHeap(), 0, MAX_STRINGS_BUFFER);
1026 if (!object->pstrings)
1027 {
1029 goto error;
1030 }
1031
1032 object->cur_enum_object = 0;
1033 object->level = 0;
1034 object->from_ref = FALSE;
1035
1036 This->buf.pxo_globals = This->xobjects;
1037 This->buf.nb_pxo_globals = This->nb_xobjects;
1038 This->buf.level = 0;
1039 This->buf.pdata = NULL;
1040 This->buf.capacity = 0;
1041 This->buf.cur_pos_data = 0;
1042 This->buf.cur_pstrings = This->buf.pstrings = object->pstrings;
1043 This->buf.pxo = This->xobjects[This->nb_xobjects] = This->buf.pxo_tab = object->pobj;
1044 This->buf.pxo->pdata = NULL;
1045 This->buf.pxo->nb_subobjects = 1;
1046
1047 if (!parse_object(&This->buf))
1048 {
1049 WARN("Object is not correct\n");
1051 goto error;
1052 }
1053
1054 *ppDataObj = &object->IDirectXFileData_iface;
1055
1056 /* Get a reference to created object */
1057 This->pRefObjects[This->nb_xobjects] = &object->IDirectXFileData_iface;
1058 IDirectXFileData_AddRef(This->pRefObjects[This->nb_xobjects]);
1059
1060 This->nb_xobjects++;
1061
1062 return DXFILE_OK;
1063
1064error:
1065
1066 IDirectXFileData_Release(&object->IDirectXFileData_iface);
1067
1068 return hr;
1069}
#define ERR(fmt,...)
Definition: precomp.h:57
BOOL parse_object(parse_buffer *buf)
Definition: parsing.c:1361
#define MAX_SUBOBJECTS
#define MAX_STRINGS_BUFFER
#define MAX_OBJECTS
BOOL parse_templates(parse_buffer *buf, BOOL templates_only)
Definition: parsing.c:1080
#define FALSE
Definition: types.h:117
#define IDirectXFileData_AddRef(p)
Definition: dxfile.h:184
#define DXFILEERR_PARSEERROR
Definition: dxfile.h:286
#define IDirectXFileData_Release(p)
Definition: dxfile.h:185
#define error(str)
Definition: mkdosfs.c:1605
#define E_POINTER
Definition: winerror.h:3480

◆ IDirectXFileEnumObjectImpl_QueryInterface()

static HRESULT WINAPI IDirectXFileEnumObjectImpl_QueryInterface ( IDirectXFileEnumObject *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 932 of file d3dxof.c.

934{
936
937 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
938
940 || IsEqualGUID(riid, &IID_IDirectXFileEnumObject))
941 {
942 *out = &object->IDirectXFileEnumObject_iface;
943 }
944 else
945 {
946 *out = NULL;
947 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
948 return E_NOINTERFACE;
949 }
950
951 IUnknown_AddRef((IUnknown *)*out);
952 return S_OK;
953}

◆ IDirectXFileEnumObjectImpl_Release()

static ULONG WINAPI IDirectXFileEnumObjectImpl_Release ( IDirectXFileEnumObject *  iface)
static

Definition at line 965 of file d3dxof.c.

966{
968 ULONG refcount = InterlockedDecrement(&object->ref);
969
970 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
971
972 if (!refcount)
973 {
974 unsigned int i;
975
976 for (i = 0; i < object->nb_xobjects; ++i)
977 IDirectXFileData_Release(object->pRefObjects[i]);
978 if (object->mapped_memory)
979 UnmapViewOfFile(object->mapped_memory);
980 HeapFree(GetProcessHeap(), 0, object->decomp_buffer);
981 HeapFree(GetProcessHeap(), 0, object);
982 }
983
984 return refcount;
985}
#define UnmapViewOfFile
Definition: compat.h:746

◆ IDirectXFileImpl_AddRef()

static ULONG WINAPI IDirectXFileImpl_AddRef ( IDirectXFile *  iface)
static

Definition at line 96 of file d3dxof.c.

97{
99 ULONG refcount = InterlockedIncrement(&object->ref);
100
101 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
102
103 return refcount;
104}
static IDirectXFileImpl * impl_from_IDirectXFile(IDirectXFile *iface)
Definition: d3dxof.c:69

◆ IDirectXFileImpl_Create()

HRESULT IDirectXFileImpl_Create ( IUnknown *  pUnkOuter,
LPVOID *  ppObj 
)

Definition at line 40 of file d3dxof.c.

41{
43
44 TRACE("(%p,%p)\n", pUnkOuter, ppObj);
45
47 if (!object)
48 return DXFILEERR_BADALLOC;
49
50 object->IDirectXFile_iface.lpVtbl = &IDirectXFile_Vtbl;
51 object->ref = 1;
52
53 /* Reserve first template to handle the case sensitive legacy type indexColor */
54 object->nb_xtemplates = 1;
55 strcpy(object->xtemplates[0].name, "indexColor");
56 object->xtemplates[0].nb_members = 2;
57 object->xtemplates[0].members[0].type = TOKEN_DWORD;
58 object->xtemplates[0].members[0].nb_dims = 0;
59 object->xtemplates[0].members[1].type = TOKEN_FLOAT;
60 object->xtemplates[0].members[1].nb_dims = 1;
61 object->xtemplates[0].members[1].dim_fixed[0] = TRUE;
62 object->xtemplates[0].members[1].dim_value[0] = 4;
63
64 *ppObj = &object->IDirectXFile_iface;
65
66 return S_OK;
67}
#define TOKEN_FLOAT
Definition: d3dxof.c:38
#define TOKEN_DWORD
Definition: d3dxof.c:37
static const struct IDirectXFileVtbl IDirectXFile_Vtbl
Definition: d3dxof.c:26
strcpy
Definition: string.h:131

Referenced by DirectXFileCreate().

◆ IDirectXFileImpl_CreateEnumObject()

static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject ( IDirectXFile *  iface,
LPVOID  pvSource,
DXFILELOADOPTIONS  dwLoadOptions,
LPDIRECTXFILEENUMOBJECT *  ppEnumObj 
)
static

Definition at line 120 of file d3dxof.c.

121{
124 HRESULT hr;
127 DWORD bytes_written;
128
129 TRACE("iface %p, source %p, load_options %#lx, out %p.\n", iface, pvSource, dwLoadOptions, ppEnumObj);
130
131 if (!ppEnumObj)
132 return DXFILEERR_BADVALUE;
133
134 /* Only lowest 4 bits are relevant in DXFILELOADOPTIONS */
135 dwLoadOptions &= 0xF;
136
138 if (FAILED(hr))
139 return hr;
140
141 if (dwLoadOptions == DXFILELOAD_FROMFILE)
142 {
143 HANDLE hFile, file_mapping;
144
145 TRACE("Open source file '%s'\n", (char*)pvSource);
146
149 {
150 TRACE("File '%s' not found\n", (char*)pvSource);
152 }
153
155
156 file_mapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
158 if (!file_mapping)
159 {
161 goto error;
162 }
163
164 object->mapped_memory = MapViewOfFile(file_mapping, FILE_MAP_READ, 0, 0, 0);
165 CloseHandle(file_mapping);
166 if (!object->mapped_memory)
167 {
169 goto error;
170 }
171 file_buffer = object->mapped_memory;
172 }
173 else if (dwLoadOptions == DXFILELOAD_FROMRESOURCE)
174 {
175 HRSRC resource_info;
177 LPDXFILELOADRESOURCE lpdxflr = pvSource;
178
179 TRACE("Source in resource (module = %p, name = %s, type = %s)\n", lpdxflr->hModule, debugstr_a(lpdxflr->lpName), debugstr_a(lpdxflr->lpType));
180
181 resource_info = FindResourceA(lpdxflr->hModule, lpdxflr->lpName, lpdxflr->lpType);
182 if (!resource_info)
183 {
185 goto error;
186 }
187
188 file_size = SizeofResource(lpdxflr->hModule, resource_info);
189
190 resource_data = LoadResource(lpdxflr->hModule, resource_info);
191 if (!resource_data)
192 {
194 goto error;
195 }
196
198 if (!file_buffer)
199 {
201 goto error;
202 }
203 }
204 else if (dwLoadOptions == DXFILELOAD_FROMMEMORY)
205 {
206 LPDXFILELOADMEMORY lpdxflm = pvSource;
207
208 TRACE("Source in memory at %p with size %ld.\n", lpdxflm->lpMemory, lpdxflm->dSize);
209
210 file_buffer = lpdxflm->lpMemory;
211 file_size = lpdxflm->dSize;
212 }
213 else
214 {
215 FIXME("Source type %ld not handled yet.\n", dwLoadOptions);
217 goto error;
218 }
219
220 TRACE("File size is %lu bytes.\n", file_size);
221
222 if (TRACE_ON(d3dxof_dump))
223 {
224 static USHORT num;
225 char tmp[12];
226 HANDLE file;
227 sprintf(tmp, "file%05u.x", num++);
228
231 {
232 WriteFile(file, file_buffer, file_size, &bytes_written, NULL);
234 }
235 }
236
237 object->pDirectXFile = This;
238
239 object->buf.pdxf = This;
240 object->buf.token_present = FALSE;
241 object->buf.buffer = file_buffer;
242 object->buf.rem_bytes = file_size;
243 hr = parse_header(&object->buf, &object->decomp_buffer);
244 if (FAILED(hr))
245 goto error;
246
247 /* Check if there are templates defined before the object */
248 if (!parse_templates(&object->buf, TRUE))
249 {
251 goto error;
252 }
253
254 if (TRACE_ON(d3dxof))
255 {
256 ULONG i;
257 TRACE("Registered templates (%lu):\n", This->nb_xtemplates);
258 for (i = 1; i < This->nb_xtemplates; i++)
259 TRACE("%s - %s\n", This->xtemplates[i].name, debugstr_guid(&This->xtemplates[i].class_id));
260 }
261
262 *ppEnumObj = &object->IDirectXFileEnumObject_iface;
263
264 return DXFILE_OK;
265
266error:
267 IDirectXFileEnumObject_Release(&object->IDirectXFileEnumObject_iface);
268 *ppEnumObj = NULL;
269
270 return hr;
271}
static HRESULT IDirectXFileEnumObjectImpl_Create(IDirectXFileEnumObjectImpl **ppObj)
Definition: d3dxof.c:909
HRESULT parse_header(parse_buffer *buf, BYTE **decomp_buffer_ptr)
Definition: parsing.c:164
#define CloseHandle
Definition: compat.h:739
#define PAGE_READONLY
Definition: compat.h:138
#define OPEN_EXISTING
Definition: compat.h:775
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:740
#define GENERIC_READ
Definition: compat.h:135
#define TRACE_ON(x)
Definition: compat.h:75
#define FILE_MAP_READ
Definition: compat.h:776
#define MapViewOfFile
Definition: compat.h:745
#define FILE_SHARE_READ
Definition: compat.h:136
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
Definition: rw.c:25
HRSRC WINAPI FindResourceA(HMODULE hModule, LPCSTR name, LPCSTR type)
Definition: res.c:155
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:568
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
#define DXFILEERR_RESOURCENOTFOUND
Definition: dxfile.h:278
#define IDirectXFileEnumObject_Release(p)
Definition: dxfile.h:107
#define DXFILELOAD_FROMFILE
Definition: dxfile.h:37
#define DXFILEERR_FILENOTFOUND
Definition: dxfile.h:277
#define DXFILEERR_NOTDONEYET
Definition: dxfile.h:276
#define DXFILEERR_BADFILETYPE
Definition: dxfile.h:281
#define DXFILELOAD_FROMRESOURCE
Definition: dxfile.h:38
#define DXFILELOAD_FROMMEMORY
Definition: dxfile.h:39
#define DXFILEERR_BADRESOURCE
Definition: dxfile.h:280
HANDLE NTAPI CreateFileMappingA(IN HANDLE hFile, IN LPSECURITY_ATTRIBUTES lpFileMappingAttributes, IN DWORD flProtect, IN DWORD dwMaximumSizeHigh, IN DWORD dwMaximumSizeLow, IN LPCSTR lpName)
Definition: filemap.c:23
GLuint GLuint num
Definition: glext.h:9618
#define CREATE_ALWAYS
Definition: disk.h:72
#define sprintf
Definition: sprintf.c:45
_In_ HANDLE hFile
Definition: mswsock.h:90
#define GENERIC_WRITE
Definition: nt_native.h:90
unsigned short USHORT
Definition: pedump.c:61
static unsigned int file_size
Definition: regtests2xml.c:47
static char * file_buffer
Definition: regtests2xml.c:46
LPVOID lpMemory
Definition: dxfile.h:50
HMODULE hModule
Definition: dxfile.h:44
Definition: fci.c:123
unsigned char * LPBYTE
Definition: typedefs.h:53

◆ IDirectXFileImpl_CreateSaveObject()

static HRESULT WINAPI IDirectXFileImpl_CreateSaveObject ( IDirectXFile *  iface,
const char *  filename,
DXFILEFORMAT  format,
LPDIRECTXFILESAVEOBJECT *  out 
)
static

Definition at line 273 of file d3dxof.c.

275{
277 HRESULT hr;
278
279 FIXME("iface %p, filename %s, format %lu, out %p partial stub!\n", iface, debugstr_a(filename),
280 format, out);
281
282 if (!filename || !out)
283 return E_POINTER;
284
286 if (SUCCEEDED(hr))
287 *out = &object->IDirectXFileSaveObject_iface;
288 return hr;
289}
static HRESULT IDirectXFileSaveObjectImpl_Create(IDirectXFileSaveObjectImpl **ppObj)
Definition: d3dxof.c:1097
#define SUCCEEDED(hr)
Definition: intsafe.h:50
const char * filename
Definition: ioapi.h:137

◆ IDirectXFileImpl_QueryInterface()

static HRESULT WINAPI IDirectXFileImpl_QueryInterface ( IDirectXFile *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 74 of file d3dxof.c.

75{
77
78 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
79
81 || IsEqualGUID(riid, &IID_IDirectXFile))
82 {
83 *out = &object->IDirectXFile_iface;
84 }
85 else
86 {
87 *out = NULL;
88 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
89 return E_NOINTERFACE;
90 }
91
92 IUnknown_AddRef((IUnknown *)*out);
93 return S_OK;
94}

◆ IDirectXFileImpl_RegisterTemplates()

static HRESULT WINAPI IDirectXFileImpl_RegisterTemplates ( IDirectXFile *  iface,
LPVOID  pvData,
DWORD  cbSize 
)
static

Definition at line 291 of file d3dxof.c.

292{
295 HRESULT hr;
296 LPBYTE decomp_buffer = NULL;
297 DWORD bytes_written;
298
299 ZeroMemory(&buf, sizeof(buf));
300 buf.buffer = pvData;
301 buf.rem_bytes = cbSize;
302 buf.pdxf = This;
303
304 TRACE("iface %p, data %p, size %lu.\n", iface, pvData, cbSize);
305
306 if (!pvData)
307 return DXFILEERR_BADVALUE;
308
309 if (TRACE_ON(d3dxof_dump))
310 {
311 static USHORT num;
312 char tmp[16];
313 HANDLE file;
314 sprintf(tmp, "template%05u.x", num++);
315
318 {
319 WriteFile(file, pvData, cbSize, &bytes_written, NULL);
321 }
322 }
323
324 hr = parse_header(&buf, &decomp_buffer);
325 if (FAILED(hr))
326 goto cleanup;
327
328 if (!parse_templates(&buf, FALSE))
329 {
331 goto cleanup;
332 }
333
334 if (TRACE_ON(d3dxof))
335 {
336 unsigned int i;
337
338 TRACE("Registered templates (%lu):\n", This->nb_xtemplates);
339 for (i = 1; i < This->nb_xtemplates; ++i)
340 TRACE("%s - %s\n", This->xtemplates[i].name, debugstr_guid(&This->xtemplates[i].class_id));
341 }
342
343 hr = DXFILE_OK;
344cleanup:
345 HeapFree(GetProcessHeap(), 0, decomp_buffer);
346 return hr;
347}
static void cleanup(void)
Definition: main.c:1335
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define ZeroMemory
Definition: minwinbase.h:31
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
Definition: netsh.h:116

◆ IDirectXFileImpl_Release()

static ULONG WINAPI IDirectXFileImpl_Release ( IDirectXFile *  iface)
static

Definition at line 106 of file d3dxof.c.

107{
109 ULONG refcount = InterlockedDecrement(&object->ref);
110
111 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
112
113 if (!refcount)
114 HeapFree(GetProcessHeap(), 0, object);
115
116 return refcount;
117}

◆ IDirectXFileSaveObjectImpl_AddRef()

static ULONG WINAPI IDirectXFileSaveObjectImpl_AddRef ( IDirectXFileSaveObject *  iface)
static

Definition at line 1142 of file d3dxof.c.

1143{
1145 ULONG refcount = InterlockedIncrement(&object->ref);
1146
1147 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
1148
1149 return refcount;
1150}
static IDirectXFileSaveObjectImpl * impl_from_IDirectXFileSaveObject(IDirectXFileSaveObject *iface)
Definition: d3dxof.c:1115

◆ IDirectXFileSaveObjectImpl_Create()

static HRESULT IDirectXFileSaveObjectImpl_Create ( IDirectXFileSaveObjectImpl **  ppObj)
static

Definition at line 1097 of file d3dxof.c.

1098{
1100
1101 TRACE("(%p)\n", ppObj);
1102
1104 if (!object)
1105 return DXFILEERR_BADALLOC;
1106
1107 object->IDirectXFileSaveObject_iface.lpVtbl = &IDirectXFileSaveObject_Vtbl;
1108 object->ref = 1;
1109
1110 *ppObj = object;
1111
1112 return S_OK;
1113}
static const struct IDirectXFileSaveObjectVtbl IDirectXFileSaveObject_Vtbl
Definition: d3dxof.c:31

Referenced by IDirectXFileImpl_CreateSaveObject().

◆ IDirectXFileSaveObjectImpl_CreateDataObject()

static HRESULT WINAPI IDirectXFileSaveObjectImpl_CreateDataObject ( IDirectXFileSaveObject *  iface,
REFGUID  template,
const char *  name,
const GUID *  guid,
DWORD  size,
void *  data,
LPDIRECTXFILEDATA *  dataobj 
)
static

Definition at line 1173 of file d3dxof.c.

1175{
1176 FIXME("iface %p, template %s, name %s, guid %s, size %lu, data %p, dataobj %p stub!\n",
1177 iface, debugstr_guid(template), debugstr_a(name), debugstr_guid(guid), size, data, dataobj);
1178
1179 return DXFILEERR_BADVALUE;
1180}

◆ IDirectXFileSaveObjectImpl_QueryInterface()

static HRESULT WINAPI IDirectXFileSaveObjectImpl_QueryInterface ( IDirectXFileSaveObject *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 1120 of file d3dxof.c.

1122{
1124
1125 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
1126
1128 || IsEqualGUID(riid, &IID_IDirectXFileSaveObject))
1129 {
1130 *out = &object->IDirectXFileSaveObject_iface;
1131 }
1132 else
1133 {
1134 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
1135 return E_NOINTERFACE;
1136 }
1137
1138 IUnknown_AddRef((IUnknown *)*out);
1139 return S_OK;
1140}

◆ IDirectXFileSaveObjectImpl_Release()

static ULONG WINAPI IDirectXFileSaveObjectImpl_Release ( IDirectXFileSaveObject *  iface)
static

Definition at line 1152 of file d3dxof.c.

1153{
1155 ULONG refcount = InterlockedDecrement(&object->ref);
1156
1157 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
1158
1159 if (!refcount)
1160 HeapFree(GetProcessHeap(), 0, object);
1161
1162 return refcount;
1163}

◆ IDirectXFileSaveObjectImpl_SaveData()

static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveData ( IDirectXFileSaveObject *  iface,
LPDIRECTXFILEDATA  data 
)
static

Definition at line 1182 of file d3dxof.c.

1183{
1184 FIXME("iface %p, data %p stub!\n", iface, data);
1185
1186 return DXFILEERR_BADVALUE;
1187}

◆ IDirectXFileSaveObjectImpl_SaveTemplates()

static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveTemplates ( IDirectXFileSaveObject *  iface,
DWORD  count,
const GUID **  templates 
)
static

Definition at line 1165 of file d3dxof.c.

1167{
1168 FIXME("iface %p, count %lu, templates %p stub!\n", iface, count, templates);
1169
1170 return DXFILE_OK;
1171}
char templates[]
Definition: meshbuilder.c:39

◆ impl_from_IDirectXFile()

static IDirectXFileImpl * impl_from_IDirectXFile ( IDirectXFile *  iface)
inlinestatic

Definition at line 69 of file d3dxof.c.

70{
71 return CONTAINING_RECORD(iface, IDirectXFileImpl, IDirectXFile_iface);
72}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by IDirectXFileImpl_AddRef(), IDirectXFileImpl_CreateEnumObject(), IDirectXFileImpl_QueryInterface(), IDirectXFileImpl_RegisterTemplates(), and IDirectXFileImpl_Release().

◆ impl_from_IDirectXFileBinary()

static IDirectXFileBinaryImpl * impl_from_IDirectXFileBinary ( IDirectXFileBinary *  iface)
inlinestatic

Definition at line 377 of file d3dxof.c.

378{
379 return CONTAINING_RECORD(iface, IDirectXFileBinaryImpl, IDirectXFileBinary_iface);
380}

Referenced by IDirectXFileBinaryImpl_AddRef(), IDirectXFileBinaryImpl_QueryInterface(), and IDirectXFileBinaryImpl_Release().

◆ impl_from_IDirectXFileData()

◆ impl_from_IDirectXFileDataReference()

static IDirectXFileDataReferenceImpl * impl_from_IDirectXFileDataReference ( IDirectXFileDataReference *  iface)
inlinestatic

◆ impl_from_IDirectXFileEnumObject()

static IDirectXFileEnumObjectImpl * impl_from_IDirectXFileEnumObject ( IDirectXFileEnumObject *  iface)
inlinestatic

◆ impl_from_IDirectXFileSaveObject()

static IDirectXFileSaveObjectImpl * impl_from_IDirectXFileSaveObject ( IDirectXFileSaveObject *  iface)
inlinestatic

Definition at line 1115 of file d3dxof.c.

1116{
1117 return CONTAINING_RECORD(iface, IDirectXFileSaveObjectImpl, IDirectXFileSaveObject_iface);
1118}

Referenced by IDirectXFileSaveObjectImpl_AddRef(), IDirectXFileSaveObjectImpl_QueryInterface(), and IDirectXFileSaveObjectImpl_Release().

◆ WINE_DECLARE_DEBUG_CHANNEL()

WINE_DECLARE_DEBUG_CHANNEL ( d3dxof_dump  )

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( d3dxof  )

Variable Documentation

◆ IDirectXFile_Vtbl

static const IDirectXFileVtbl IDirectXFile_Vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI IDirectXFileImpl_RegisterTemplates(IDirectXFile *iface, LPVOID pvData, DWORD cbSize)
Definition: d3dxof.c:291
static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile *iface, LPVOID pvSource, DXFILELOADOPTIONS dwLoadOptions, LPDIRECTXFILEENUMOBJECT *ppEnumObj)
Definition: d3dxof.c:120
static HRESULT WINAPI IDirectXFileImpl_QueryInterface(IDirectXFile *iface, REFIID riid, void **out)
Definition: d3dxof.c:74
static ULONG WINAPI IDirectXFileImpl_AddRef(IDirectXFile *iface)
Definition: d3dxof.c:96
static ULONG WINAPI IDirectXFileImpl_Release(IDirectXFile *iface)
Definition: d3dxof.c:106
static HRESULT WINAPI IDirectXFileImpl_CreateSaveObject(IDirectXFile *iface, const char *filename, DXFILEFORMAT format, LPDIRECTXFILESAVEOBJECT *out)
Definition: d3dxof.c:273

Definition at line 26 of file d3dxof.c.

Referenced by IDirectXFileImpl_Create().

◆ IDirectXFileBinary_Vtbl

static const IDirectXFileBinaryVtbl IDirectXFileBinary_Vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI IDirectXFileBinaryImpl_GetId(IDirectXFileBinary *iface, GUID *guid)
Definition: d3dxof.c:440
static HRESULT WINAPI IDirectXFileBinaryImpl_GetSize(IDirectXFileBinary *iface, DWORD *size)
Definition: d3dxof.c:447
static ULONG WINAPI IDirectXFileBinaryImpl_Release(IDirectXFileBinary *iface)
Definition: d3dxof.c:419
static HRESULT WINAPI IDirectXFileBinaryImpl_QueryInterface(IDirectXFileBinary *iface, REFIID riid, void **out)
Definition: d3dxof.c:382
static ULONG WINAPI IDirectXFileBinaryImpl_AddRef(IDirectXFileBinary *iface)
Definition: d3dxof.c:409
static HRESULT WINAPI IDirectXFileBinaryImpl_Read(IDirectXFileBinary *iface, void *data, DWORD size, DWORD *count)
Definition: d3dxof.c:461
static HRESULT WINAPI IDirectXFileBinaryImpl_GetName(IDirectXFileBinary *iface, char *name, DWORD *length)
Definition: d3dxof.c:432
static HRESULT WINAPI IDirectXFileBinaryImpl_GetMimeType(IDirectXFileBinary *iface, LPCSTR *mimetype)
Definition: d3dxof.c:454

Definition at line 27 of file d3dxof.c.

Referenced by IDirectXFileBinaryImpl_Create().

◆ IDirectXFileData_Vtbl

static const IDirectXFileDataVtbl IDirectXFileData_Vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI IDirectXFileDataImpl_GetName(IDirectXFileData *iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
Definition: d3dxof.c:566
static HRESULT WINAPI IDirectXFileDataImpl_GetId(IDirectXFileData *iface, LPGUID pGuid)
Definition: d3dxof.c:593
static HRESULT WINAPI IDirectXFileDataImpl_GetNextObject(IDirectXFileData *iface, LPDIRECTXFILEOBJECT *ppChildObj)
Definition: d3dxof.c:656
static HRESULT WINAPI IDirectXFileDataImpl_AddBinaryObject(IDirectXFileData *iface, const char *name, const GUID *guid, const char *mimetype, void *data, DWORD size)
Definition: d3dxof.c:733
static ULONG WINAPI IDirectXFileDataImpl_AddRef(IDirectXFileData *iface)
Definition: d3dxof.c:531
static ULONG WINAPI IDirectXFileDataImpl_Release(IDirectXFileData *iface)
Definition: d3dxof.c:541
static HRESULT WINAPI IDirectXFileDataImpl_GetType(IDirectXFileData *iface, const GUID **pguid)
Definition: d3dxof.c:640
static HRESULT WINAPI IDirectXFileDataImpl_QueryInterface(IDirectXFileData *iface, REFIID riid, void **out)
Definition: d3dxof.c:504
static HRESULT WINAPI IDirectXFileDataImpl_AddDataReference(IDirectXFileData *iface, const char *reference, const GUID *guidref)
Definition: d3dxof.c:724
static HRESULT WINAPI IDirectXFileDataImpl_AddDataObject(IDirectXFileData *iface, LPDIRECTXFILEDATA data)
Definition: d3dxof.c:717
static HRESULT WINAPI IDirectXFileDataImpl_GetData(IDirectXFileData *iface, LPCSTR szMember, DWORD *pcbSize, void **ppvData)
Definition: d3dxof.c:608

Definition at line 28 of file d3dxof.c.

Referenced by IDirectXFileDataImpl_Create().

◆ IDirectXFileDataReference_Vtbl

static const IDirectXFileDataReferenceVtbl IDirectXFileDataReference_Vtbl
static
Initial value:
=
{
}
static ULONG WINAPI IDirectXFileDataReferenceImpl_AddRef(IDirectXFileDataReference *iface)
Definition: d3dxof.c:807
static HRESULT WINAPI IDirectXFileDataReferenceImpl_QueryInterface(IDirectXFileDataReference *iface, REFIID riid, void **out)
Definition: d3dxof.c:780
static HRESULT WINAPI IDirectXFileDataReferenceImpl_Resolve(IDirectXFileDataReference *iface, LPDIRECTXFILEDATA *ppDataObj)
Definition: d3dxof.c:874
static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetId(IDirectXFileDataReference *iface, GUID *guid)
Definition: d3dxof.c:858
static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetName(IDirectXFileDataReference *iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
Definition: d3dxof.c:831
static ULONG WINAPI IDirectXFileDataReferenceImpl_Release(IDirectXFileDataReference *iface)
Definition: d3dxof.c:817

Definition at line 29 of file d3dxof.c.

Referenced by IDirectXFileDataReferenceImpl_Create().

◆ IDirectXFileEnumObject_Vtbl

static const IDirectXFileEnumObjectVtbl IDirectXFileEnumObject_Vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileEnumObject *iface, LPDIRECTXFILEDATA *ppDataObj)
Definition: d3dxof.c:988
static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectByName(IDirectXFileEnumObject *iface, const char *name, LPDIRECTXFILEDATA *data)
Definition: d3dxof.c:1079
static ULONG WINAPI IDirectXFileEnumObjectImpl_Release(IDirectXFileEnumObject *iface)
Definition: d3dxof.c:965
static ULONG WINAPI IDirectXFileEnumObjectImpl_AddRef(IDirectXFileEnumObject *iface)
Definition: d3dxof.c:955
static HRESULT WINAPI IDirectXFileEnumObjectImpl_QueryInterface(IDirectXFileEnumObject *iface, REFIID riid, void **out)
Definition: d3dxof.c:932
static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectById(IDirectXFileEnumObject *iface, REFGUID guid, LPDIRECTXFILEDATA *data)
Definition: d3dxof.c:1071

Definition at line 30 of file d3dxof.c.

Referenced by IDirectXFileEnumObjectImpl_Create().

◆ IDirectXFileSaveObject_Vtbl

static const IDirectXFileSaveObjectVtbl IDirectXFileSaveObject_Vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveData(IDirectXFileSaveObject *iface, LPDIRECTXFILEDATA data)
Definition: d3dxof.c:1182
static HRESULT WINAPI IDirectXFileSaveObjectImpl_QueryInterface(IDirectXFileSaveObject *iface, REFIID riid, void **out)
Definition: d3dxof.c:1120
static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveTemplates(IDirectXFileSaveObject *iface, DWORD count, const GUID **templates)
Definition: d3dxof.c:1165
static ULONG WINAPI IDirectXFileSaveObjectImpl_Release(IDirectXFileSaveObject *iface)
Definition: d3dxof.c:1152
static ULONG WINAPI IDirectXFileSaveObjectImpl_AddRef(IDirectXFileSaveObject *iface)
Definition: d3dxof.c:1142
static HRESULT WINAPI IDirectXFileSaveObjectImpl_CreateDataObject(IDirectXFileSaveObject *iface, REFGUID template, const char *name, const GUID *guid, DWORD size, void *data, LPDIRECTXFILEDATA *dataobj)
Definition: d3dxof.c:1173

Definition at line 31 of file d3dxof.c.

Referenced by IDirectXFileSaveObjectImpl_Create().