summaryrefslogtreecommitdiff
path: root/src/T2DLL/MMIO.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/T2DLL/MMIO.h')
-rw-r--r--src/T2DLL/MMIO.h322
1 files changed, 282 insertions, 40 deletions
diff --git a/src/T2DLL/MMIO.h b/src/T2DLL/MMIO.h
index 11303fa..b3993fe 100644
--- a/src/T2DLL/MMIO.h
+++ b/src/T2DLL/MMIO.h
@@ -1,54 +1,296 @@
-#pragma once
+/*
+ * The provenance of this file is really confusing.
+ * OPeNBooK9003 didn't write it, it came from some form of tutorial or
+ * example, and I've found some copies, but none that make sense here.
+ *
+ * - "Sam's Teach Yourself DirectX 7 Programming in 24 Hours"
+ * A book from 1999 - a year too new, and a DirectX version too new.
+ * - "DirectSound Wrapper Classes"
+ * https://www.codeproject.com/articles/12076/directsound-wrapper-classes
+ * Published in 2006 - 7 years too new.
+ * - "Chicken Tournament"
+ * https://github.com/shlusiak/Chicken-Tournament/blob/master/src/Resources/MMIO.h
+ * A game from 2003.
+ */
+
+//-----------------------------------------------------------------
+// MMIO Objects
+// C++ Header - MMIO.h
+//-----------------------------------------------------------------
+#ifndef __MMIO_H__
+#define __MMIO_H__
+
+//-----------------------------------------------------------------
+// Inclusions
+//-----------------------------------------------------------------
#include "common.h"
+#include <MMSystem.h>
-class CMMChunk {
+//-----------------------------------------------------------------
+// CMMChunk Class - Multimedia RIFF Chunk Object
+//-----------------------------------------------------------------
+class AFX_EXT_CLASS CMMChunk : public MMCKINFO
+{
+ // Protected Constructor(s)/Destructor
protected:
- CMMChunk();
-public:
- CMMChunk& operator=(const CMMChunk&);
+ CMMChunk() { };
};
-class CMMIdChunk {
+
+//-----------------------------------------------------------------
+// CMMIdChunk Class - Multimedia RIFF Id Chunk Object
+//-----------------------------------------------------------------
+class AFX_EXT_CLASS CMMIdChunk : public CMMChunk
+{
+ // Public Constructor(s)/Destructor
public:
- CMMIdChunk& operator=(const CMMIdChunk&);
- CMMIdChunk(char, char, char, char);
- CMMIdChunk(const char*, unsigned int);
+ CMMIdChunk(char c0, char c1, char c2, char c3);
+ CMMIdChunk(LPCSTR psz, UINT uiFlags = 0u);
};
-class CMMTypeChunk {
+
+//-----------------------------------------------------------------
+// CMMTypeChunk Class - Multimedia RIFF Type Chunk Object
+//-----------------------------------------------------------------
+class AFX_EXT_CLASS CMMTypeChunk : public CMMChunk
+{
+ // Public Constructor(s)/Destructor
public:
- CMMTypeChunk& operator=(const CMMTypeChunk&);
- CMMTypeChunk(char, char, char, char);
- CMMTypeChunk(const char*, unsigned int);
+ CMMTypeChunk(char c0, char c1, char c2, char c3);
+ CMMTypeChunk(LPCSTR psz, UINT uiFlags = 0u);
};
-class CMMIOInfo {
+
+//-----------------------------------------------------------------
+// CMMIOInfo Class - Multimedia RIFF I/O Info Object
+//-----------------------------------------------------------------
+class AFX_EXT_CLASS CMMIOInfo : public MMIOINFO
+{
+ // Public Constructor(s)/Destructor
public:
- CMMIOInfo& operator=(const CMMIOInfo&);
- CMMIOInfo();
+ CMMIOInfo();
};
-class CMMMemoryIOInfo {
+
+//-----------------------------------------------------------------
+// CMMMemoryIOInfo Class - Multimedia RIFF Memory I/O Info Object
+//-----------------------------------------------------------------
+class AFX_EXT_CLASS CMMMemoryIOInfo : public CMMIOInfo
+{
+ // Public Constructor(s)/Destructor
public:
- CMMMemoryIOInfo& operator=(const CMMMemoryIOInfo&);
- CMMMemoryIOInfo(long, unsigned long);
- CMMMemoryIOInfo(char*, long, unsigned long);
+ CMMMemoryIOInfo(LONG lBuffer, DWORD dwMinExpansion = 0);
+ CMMMemoryIOInfo(HPSTR pBuffer, LONG lBuffer, DWORD
+ dwMinExpansion = 0);
};
-class CMMIO {
+
+//-----------------------------------------------------------------
+// CMMIO Class - Multimedia RIFF I/O Object
+//-----------------------------------------------------------------
+class AFX_EXT_CLASS CMMIO : public CObject
+{
+ // Public Constructor(s)/Destructor
+public:
+ CMMIO();
+ CMMIO(HMMIO hmmio);
+ CMMIO(const char* pszFileName, DWORD dwOpenFlag =
+ MMIO_READ);
+ CMMIO(CMMMemoryIOInfo& mmioinfo);
+
+ // Public Methods
+public:
+ void Open(const char* pszFileName,
+ DWORD dwOpenFlags = MMIO_READ);
+ void Open(CMMMemoryIOInfo &mmioinfo);
+ MMRESULT Close(UINT uiFlags = 0u);
+
+ MMRESULT Ascend(CMMChunk &mmckInfo, UINT uiFlags = 0u);
+ MMRESULT Descend(CMMChunk &mmckInfo, UINT uiFlags = 0u);
+ MMRESULT Descend(CMMChunk &mmckInfo, CMMChunk &mmckParent,
+ UINT uiFlags = 0u);
+
+ LONG Read(HPSTR pData, LONG lLen);
+ LONG Write(const char* pData, LONG lLen);
+ LONG Seek(LONG lOffset, int iOrigin);
+
+ LRESULT SendMessage(UINT uiMsg, LPARAM lParam1,
+ LPARAM lParam2);
+ MMRESULT SetBuffer(LPSTR pBuffer, LONG lBuffer,
+ UINT uiFlags = 0u);
+
+ MMRESULT GetInfo(CMMIOInfo &, UINT uiFlags = 0);
+ MMRESULT SetInfo(CMMIOInfo &, UINT uiFlags = 0);
+ MMRESULT Advance(CMMIOInfo &, UINT uiFlags);
+
+ // Public Data
public:
- virtual ~CMMIO();
- CMMIO();
- CMMIO(HMMIO);
- CMMIO(const char*, unsigned long);
- CMMIO(CMMMemoryIOInfo&);
- unsigned int Close(unsigned int);
- long Read(char*, long);
- unsigned int Ascend(CMMChunk&, unsigned int);
- unsigned int Descend(CMMChunk&, unsigned int);
- unsigned int Descend(CMMChunk&, CMMChunk&, unsigned int);
- long Seek(long, int);
- long SendMessageA(unsigned int, long, long);
- unsigned int SetBuffer(char*, long, unsigned int);
- long Write(const char*, long);
- unsigned int GetInfo(CMMIOInfo&, unsigned int);
- unsigned int SetInfo(CMMIOInfo&, unsigned int);
- unsigned int Advance(CMMIOInfo&, unsigned int);
- void Open(const char*, unsigned long);
- void Open(CMMMemoryIOInfo&);
+ HMMIO m_hmmio;
};
+
+
+//-----------------------------------------------------------------
+// CMMIdChunk Inline Public Constructor(s)/Destructor
+//-----------------------------------------------------------------
+inline CMMIdChunk::CMMIdChunk(char c0, char c1, char c2, char c3)
+{
+ ckid = mmioFOURCC(c0, c1, c2, c3);
+}
+
+inline CMMIdChunk::CMMIdChunk(LPCSTR psz, UINT uiFlags)
+{
+ ckid = ::mmioStringToFOURCC(psz, uiFlags);
+}
+
+//-----------------------------------------------------------------
+// CMMTypeChunk Inline Public Constructor(s)/Destructor
+//-----------------------------------------------------------------
+inline CMMTypeChunk::CMMTypeChunk(char c0, char c1, char c2, char c3)
+{
+ fccType = mmioFOURCC(c0, c1, c2, c3);
+}
+
+inline CMMTypeChunk::CMMTypeChunk(LPCSTR psz, UINT uiFlags)
+{
+ fccType = ::mmioStringToFOURCC(psz, uiFlags);
+}
+
+//-----------------------------------------------------------------
+// CMMIOInfo Inline Public Constructor(s)/Destructor
+//-----------------------------------------------------------------
+inline CMMIOInfo::CMMIOInfo()
+{
+ ::ZeroMemory(this, sizeof(MMIOINFO));
+}
+
+//-----------------------------------------------------------------
+// CMMMemoryIOInfo Inline Public Constructor(s)/Destructor
+//-----------------------------------------------------------------
+inline CMMMemoryIOInfo::CMMMemoryIOInfo(LONG lBuffer,
+ DWORD dwMinExpansion)
+{
+ pIOProc = NULL;
+ fccIOProc = FOURCC_MEM;
+ pchBuffer = NULL;
+ cchBuffer = lBuffer;
+ adwInfo[0] = dwMinExpansion;
+}
+
+inline CMMMemoryIOInfo::CMMMemoryIOInfo(HPSTR pBuffer, LONG cchBuf,
+ DWORD dwMinExpansion)
+{
+ pIOProc = NULL;
+ fccIOProc = FOURCC_MEM;
+ pchBuffer = pBuffer;
+ cchBuffer = cchBuf;
+ adwInfo[0] = dwMinExpansion;
+}
+
+//-----------------------------------------------------------------
+// CMMIO Inline Public Constructor(s)/Destructor
+//-----------------------------------------------------------------
+inline CMMIO::CMMIO() : m_hmmio(NULL)
+{
+}
+
+inline
+CMMIO::CMMIO(HMMIO hmmio) : m_hmmio(hmmio)
+{
+}
+
+inline CMMIO::CMMIO(const char* pszFileName, DWORD dwOpenFlag)
+{
+ Open(pszFileName, dwOpenFlag);
+}
+
+inline CMMIO::CMMIO(CMMMemoryIOInfo &mmioinfo)
+{
+ Open(mmioinfo);
+}
+
+//-----------------------------------------------------------------
+// CMMIO Inline Public Methods
+//-----------------------------------------------------------------
+inline MMRESULT CMMIO::Close(UINT uiFlags)
+{
+ ASSERT(m_hmmio);
+
+ MMRESULT mmr = ::mmioClose(m_hmmio, uiFlags);
+ m_hmmio = NULL;
+ return mmr;
+}
+
+inline LONG CMMIO::Read(HPSTR pData, LONG lLen)
+{
+ ASSERT(m_hmmio);
+
+ return ::mmioRead(m_hmmio, pData, lLen);
+}
+
+inline MMRESULT CMMIO::Ascend(CMMChunk &mmckInfo, UINT uiFlags)
+{
+ ASSERT(m_hmmio);
+
+ return ::mmioAscend(m_hmmio, &mmckInfo, uiFlags);
+}
+
+inline MMRESULT CMMIO::Descend(CMMChunk &mmckInfo, UINT uiFlags)
+{
+ ASSERT(m_hmmio);
+
+ return ::mmioDescend(m_hmmio, &mmckInfo, 0, uiFlags);
+}
+
+inline MMRESULT CMMIO::Descend(CMMChunk &mmckInfo,
+ CMMChunk &mmckParent, UINT uiFlags)
+{
+ ASSERT(m_hmmio);
+
+ return ::mmioDescend(m_hmmio, &mmckInfo, &mmckParent, uiFlags);
+}
+
+inline LONG CMMIO::Seek(LONG lOffset, int iOrigin)
+{
+ ASSERT(m_hmmio);
+ return ::mmioSeek(m_hmmio, lOffset, iOrigin);
+}
+
+inline LRESULT CMMIO::SendMessage(UINT uiMsg, LPARAM lParam1,
+ LPARAM lParam2)
+{
+ ASSERT(m_hmmio);
+ return ::mmioSendMessage(m_hmmio, uiMsg, lParam1, lParam2);
+}
+
+inline MMRESULT CMMIO::SetBuffer(LPSTR pBuffer, LONG lBuffer,
+ UINT uiFlags)
+{
+ ASSERT(m_hmmio);
+
+ return ::mmioSetBuffer(m_hmmio, pBuffer, lBuffer, uiFlags);
+}
+
+inline LONG CMMIO::Write(const char* pData, LONG lLen)
+{
+ ASSERT(m_hmmio);
+
+ return ::mmioWrite(m_hmmio, pData, lLen);
+}
+
+inline MMRESULT CMMIO::GetInfo(CMMIOInfo &Info, UINT uiFlags)
+{
+ ASSERT(m_hmmio);
+
+ return ::mmioGetInfo(m_hmmio, &Info, uiFlags);
+}
+
+inline MMRESULT CMMIO::SetInfo(CMMIOInfo &Info, UINT uiFlags)
+{
+ ASSERT(m_hmmio);
+
+ return ::mmioSetInfo(m_hmmio, &Info, uiFlags);
+}
+
+inline MMRESULT CMMIO::Advance(CMMIOInfo &Info, UINT uiFlags)
+{
+ ASSERT(m_hmmio);
+
+ return ::mmioAdvance(m_hmmio, &Info, uiFlags);
+}
+
+#endif