Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
144 lines
3.7 KiB
C++
144 lines
3.7 KiB
C++
// [!RowsetFile] : Declaration of the [!Rowset]
|
|
|
|
[!if=(FileExists, "FALSE")]
|
|
#ifndef __[!Rowset]_H_
|
|
#define __[!Rowset]_H_
|
|
#include "resource.h" // main symbols
|
|
[!else]
|
|
[!AddIncludeFile(TargetFile, "resource.h")]
|
|
[!endif]
|
|
|
|
class C[!ShortName]WindowsFile:
|
|
public WIN32_FIND_DATA
|
|
{
|
|
public:
|
|
|
|
BEGIN_PROVIDER_COLUMN_MAP(C[!ShortName]WindowsFile)
|
|
PROVIDER_COLUMN_ENTRY("FileAttributes", 1, dwFileAttributes)
|
|
PROVIDER_COLUMN_ENTRY("FileSizeHigh", 2, nFileSizeHigh)
|
|
PROVIDER_COLUMN_ENTRY("FileSizeLow", 3, nFileSizeLow)
|
|
PROVIDER_COLUMN_ENTRY("FileName", 4, cFileName)
|
|
PROVIDER_COLUMN_ENTRY("AltFileName", 5, cAlternateFileName)
|
|
END_PROVIDER_COLUMN_MAP()
|
|
|
|
};
|
|
|
|
// [!Command]
|
|
class ATL_NO_VTABLE [!Command] :
|
|
[!if=(ThreadingModel, "Single")]
|
|
public CComObjectRootEx<CComSingleThreadModel>,
|
|
[!endif]
|
|
[!if=(ThreadingModel, "Apartment")]
|
|
public CComObjectRootEx<CComSingleThreadModel>,
|
|
[!endif]
|
|
[!if=(ThreadingModel, "Both")]
|
|
public CComObjectRootEx<CComMultiThreadModel>,
|
|
[!endif]
|
|
[!if=(ThreadingModel, "Free")]
|
|
public CComObjectRootEx<CComMultiThreadModel>,
|
|
[!endif]
|
|
public IAccessorImpl<[!Command]>,
|
|
public ICommandTextImpl<[!Command]>,
|
|
public ICommandPropertiesImpl<[!Command]>,
|
|
public IObjectWithSiteImpl<[!Command]>,
|
|
public IConvertTypeImpl<[!Command]>,
|
|
public IColumnsInfoImpl<[!Command]>
|
|
|
|
{
|
|
public:
|
|
|
|
BEGIN_COM_MAP([!Command])
|
|
COM_INTERFACE_ENTRY(ICommand)
|
|
COM_INTERFACE_ENTRY(IObjectWithSite)
|
|
COM_INTERFACE_ENTRY(IAccessor)
|
|
COM_INTERFACE_ENTRY(ICommandProperties)
|
|
COM_INTERFACE_ENTRY2(ICommandText, ICommand)
|
|
COM_INTERFACE_ENTRY(IColumnsInfo)
|
|
COM_INTERFACE_ENTRY(IConvertType)
|
|
END_COM_MAP()
|
|
|
|
// ICommand
|
|
public:
|
|
|
|
HRESULT FinalConstruct()
|
|
{
|
|
HRESULT hr = CConvertHelper::FinalConstruct();
|
|
if (FAILED (hr))
|
|
return hr;
|
|
hr = IAccessorImpl<[!Command]>::FinalConstruct();
|
|
if (FAILED(hr))
|
|
return hr;
|
|
return CUtlProps<[!Command]>::FInit();
|
|
}
|
|
void FinalRelease()
|
|
{
|
|
IAccessorImpl<[!Command]>::FinalRelease();
|
|
}
|
|
|
|
HRESULT WINAPI Execute(IUnknown * pUnkOuter, REFIID riid, DBPARAMS * pParams,
|
|
LONG * pcRowsAffected, IUnknown ** ppRowset);
|
|
|
|
static ATLCOLUMNINFO* GetColumnInfo([!Command]* pv, ULONG* pcInfo)
|
|
{
|
|
return C[!ShortName]WindowsFile::GetColumnInfo(pv,pcInfo);
|
|
}
|
|
|
|
BEGIN_PROPSET_MAP([!Command])
|
|
BEGIN_PROPERTY_SET(DBPROPSET_ROWSET)
|
|
PROPERTY_INFO_ENTRY(IAccessor)
|
|
PROPERTY_INFO_ENTRY(IColumnsInfo)
|
|
PROPERTY_INFO_ENTRY(IConvertType)
|
|
PROPERTY_INFO_ENTRY(IRowset)
|
|
PROPERTY_INFO_ENTRY(IRowsetIdentity)
|
|
PROPERTY_INFO_ENTRY(IRowsetInfo)
|
|
PROPERTY_INFO_ENTRY(IRowsetLocate)
|
|
PROPERTY_INFO_ENTRY(BOOKMARKS)
|
|
PROPERTY_INFO_ENTRY(BOOKMARKSKIPPED)
|
|
PROPERTY_INFO_ENTRY(BOOKMARKTYPE)
|
|
PROPERTY_INFO_ENTRY(CANFETCHBACKWARDS)
|
|
PROPERTY_INFO_ENTRY(CANHOLDROWS)
|
|
PROPERTY_INFO_ENTRY(CANSCROLLBACKWARDS)
|
|
PROPERTY_INFO_ENTRY(LITERALBOOKMARKS)
|
|
PROPERTY_INFO_ENTRY(ORDEREDBOOKMARKS)
|
|
END_PROPERTY_SET(DBPROPSET_ROWSET)
|
|
END_PROPSET_MAP()
|
|
|
|
};
|
|
|
|
class [!Rowset] : public CRowsetImpl< [!Rowset], C[!ShortName]WindowsFile, [!Command]>
|
|
{
|
|
public:
|
|
|
|
HRESULT Execute(DBPARAMS * pParams, LONG* pcRowsAffected)
|
|
{
|
|
USES_CONVERSION;
|
|
BOOL bFound = FALSE;
|
|
HANDLE hFile;
|
|
|
|
LPTSTR szDir = (m_strCommandText == _T("")) ? _T("*.*") : OLE2T(m_strCommandText);
|
|
|
|
C[!ShortName]WindowsFile wf;
|
|
hFile = FindFirstFile(szDir, &wf);
|
|
if (hFile == INVALID_HANDLE_VALUE)
|
|
return DB_E_ERRORSINCOMMAND;
|
|
LONG cFiles = 1;
|
|
BOOL bMoreFiles = TRUE;
|
|
while (bMoreFiles)
|
|
{
|
|
if (!m_rgRowData.Add(wf))
|
|
return E_OUTOFMEMORY;
|
|
bMoreFiles = FindNextFile(hFile, &wf);
|
|
cFiles++;
|
|
}
|
|
FindClose(hFile);
|
|
if (pcRowsAffected != NULL)
|
|
*pcRowsAffected = cFiles;
|
|
return S_OK;
|
|
}
|
|
};
|
|
|
|
|
|
[!if=(FileExists, "FALSE")]
|
|
#endif //__[!Rowset]_H_
|
|
[!endif]
|