Browse Source

Reorder wave.cpp

pull/914/head
Anders Jenbo 5 years ago
parent
commit
4251527eb4
  1. 174
      Source/wave.cpp
  2. 7
      Source/wave.h

174
Source/wave.cpp

@ -6,6 +6,20 @@
#include "all.h"
#include "../3rdParty/Storm/Source/storm.h"
static void WGetFileArchive(HANDLE hsFile, DWORD *retries, const char *FileName)
{
HANDLE archive;
if (*retries >= 5)
FileErrDlg(FileName);
if (hsFile && SFileGetFileArchive(hsFile, &archive) && archive != diabdat_mpq) {
Sleep(20);
(*retries)++;
} else if (!InsertCDDlg())
FileErrDlg(FileName);
}
void WCloseFile(HANDLE file)
{
SFileCloseFile(file);
@ -22,20 +36,6 @@ LONG WGetFileSize(HANDLE hsFile, DWORD *lpFileSizeHigh)
return ret;
}
void WGetFileArchive(HANDLE hsFile, DWORD *retries, const char *FileName)
{
HANDLE archive;
if (*retries >= 5)
FileErrDlg(FileName);
if (hsFile && SFileGetFileArchive(hsFile, &archive) && archive != diabdat_mpq) {
Sleep(20);
(*retries)++;
} else if (!InsertCDDlg())
FileErrDlg(FileName);
}
BOOL WOpenFile(const char *FileName, HANDLE *phsFile, BOOL mayNotExist)
{
DWORD retry = 0;
@ -76,71 +76,25 @@ int WSetFilePointer(HANDLE file1, int offset, HANDLE file2, int whence)
return result;
}
BOOL LoadWaveFormat(HANDLE hsFile, WAVEFORMATEX *pwfx)
{
BOOL ret;
MEMFILE wave_file;
AllocateMemFile(hsFile, &wave_file, 0);
ret = ReadWaveFile(&wave_file, pwfx, NULL);
FreeMemFile(&wave_file);
return ret;
}
void AllocateMemFile(HANDLE hsFile, MEMFILE *pMemFile, DWORD dwPos)
static void FillMemFile(MEMFILE *pMemFile)
{
DWORD length;
memset(pMemFile, 0, sizeof(*pMemFile));
pMemFile->end = WGetFileSize(hsFile, NULL);
length = 4096;
if (dwPos > length)
length = dwPos;
pMemFile->buf_len = length;
if (length >= pMemFile->end)
length = pMemFile->end;
pMemFile->buf_len = length;
pMemFile->buf = DiabloAllocPtr(length);
pMemFile->file = hsFile;
DWORD to_read;
WSetFilePointer(pMemFile->file, pMemFile->offset, NULL, FILE_BEGIN);
to_read = pMemFile->end - pMemFile->offset;
if (pMemFile->buf_len < to_read)
to_read = pMemFile->buf_len;
if (to_read)
WReadFile(pMemFile->file, pMemFile->buf, to_read);
pMemFile->dist = 0;
pMemFile->bytes_to_read = to_read;
}
void FreeMemFile(MEMFILE *pMemFile)
static void FreeMemFile(MEMFILE *pMemFile)
{
MemFreeDbg(pMemFile->buf);
}
BOOL ReadWaveFile(MEMFILE *pMemFile, WAVEFORMATEX *pwfx, CKINFO *chunk)
{
MMCKINFO hdr;
CKINFO fmt;
PCMWAVEFORMAT wf;
if (!ReadMemFile(pMemFile, &hdr, 12))
return FALSE;
if (hdr.ckid != FOURCC_RIFF || hdr.fccType != MAKEFOURCC('W', 'A', 'V', 'E'))
return FALSE;
if (!ReadWaveSection(pMemFile, MAKEFOURCC('f', 'm', 't', ' '), &fmt))
return FALSE;
if (fmt.dwSize < sizeof(PCMWAVEFORMAT))
return FALSE;
if (!ReadMemFile(pMemFile, &wf, sizeof(wf)))
return FALSE;
if (SeekMemFile(pMemFile, fmt.dwSize - sizeof(wf), FILE_CURRENT) == -1)
return FALSE;
pwfx->cbSize = 0;
pwfx->wFormatTag = wf.wf.wFormatTag;
pwfx->nChannels = wf.wf.nChannels;
pwfx->nSamplesPerSec = wf.wf.nSamplesPerSec;
pwfx->nAvgBytesPerSec = wf.wf.nAvgBytesPerSec;
pwfx->nBlockAlign = wf.wf.nBlockAlign;
pwfx->wBitsPerSample = wf.wBitsPerSample;
if (chunk == NULL)
return TRUE;
return ReadWaveSection(pMemFile, MAKEFOURCC('d', 'a', 't', 'a'), chunk);
}
BOOL ReadMemFile(MEMFILE *pMemFile, void *lpBuf, size_t length)
static BOOL ReadMemFile(MEMFILE *pMemFile, void *lpBuf, size_t length)
{
while (length) {
size_t to_copy;
@ -161,20 +115,7 @@ BOOL ReadMemFile(MEMFILE *pMemFile, void *lpBuf, size_t length)
return TRUE;
}
void FillMemFile(MEMFILE *pMemFile)
{
DWORD to_read;
WSetFilePointer(pMemFile->file, pMemFile->offset, NULL, FILE_BEGIN);
to_read = pMemFile->end - pMemFile->offset;
if (pMemFile->buf_len < to_read)
to_read = pMemFile->buf_len;
if (to_read)
WReadFile(pMemFile->file, pMemFile->buf, to_read);
pMemFile->dist = 0;
pMemFile->bytes_to_read = to_read;
}
int SeekMemFile(MEMFILE *pMemFile, ULONG lDist, DWORD dwMethod)
static int SeekMemFile(MEMFILE *pMemFile, ULONG lDist, DWORD dwMethod)
{
if (lDist < pMemFile->bytes_to_read) {
pMemFile->bytes_to_read -= lDist;
@ -185,7 +126,7 @@ int SeekMemFile(MEMFILE *pMemFile, ULONG lDist, DWORD dwMethod)
return pMemFile->offset;
}
BOOL ReadWaveSection(MEMFILE *pMemFile, DWORD id, CKINFO *chunk)
static BOOL ReadWaveSection(MEMFILE *pMemFile, DWORD id, CKINFO *chunk)
{
DWORD hdr[2];
@ -203,6 +144,65 @@ BOOL ReadWaveSection(MEMFILE *pMemFile, DWORD id, CKINFO *chunk)
return chunk->dwOffset != (DWORD)-1;
}
static BOOL ReadWaveFile(MEMFILE *pMemFile, WAVEFORMATEX *pwfx, CKINFO *chunk)
{
MMCKINFO hdr;
CKINFO fmt;
PCMWAVEFORMAT wf;
if (!ReadMemFile(pMemFile, &hdr, 12))
return FALSE;
if (hdr.ckid != FOURCC_RIFF || hdr.fccType != MAKEFOURCC('W', 'A', 'V', 'E'))
return FALSE;
if (!ReadWaveSection(pMemFile, MAKEFOURCC('f', 'm', 't', ' '), &fmt))
return FALSE;
if (fmt.dwSize < sizeof(PCMWAVEFORMAT))
return FALSE;
if (!ReadMemFile(pMemFile, &wf, sizeof(wf)))
return FALSE;
if (SeekMemFile(pMemFile, fmt.dwSize - sizeof(wf), FILE_CURRENT) == -1)
return FALSE;
pwfx->cbSize = 0;
pwfx->wFormatTag = wf.wf.wFormatTag;
pwfx->nChannels = wf.wf.nChannels;
pwfx->nSamplesPerSec = wf.wf.nSamplesPerSec;
pwfx->nAvgBytesPerSec = wf.wf.nAvgBytesPerSec;
pwfx->nBlockAlign = wf.wf.nBlockAlign;
pwfx->wBitsPerSample = wf.wBitsPerSample;
if (chunk == NULL)
return TRUE;
return ReadWaveSection(pMemFile, MAKEFOURCC('d', 'a', 't', 'a'), chunk);
}
BOOL LoadWaveFormat(HANDLE hsFile, WAVEFORMATEX *pwfx)
{
BOOL ret;
MEMFILE wave_file;
AllocateMemFile(hsFile, &wave_file, 0);
ret = ReadWaveFile(&wave_file, pwfx, NULL);
FreeMemFile(&wave_file);
return ret;
}
void AllocateMemFile(HANDLE hsFile, MEMFILE *pMemFile, DWORD dwPos)
{
DWORD length;
memset(pMemFile, 0, sizeof(*pMemFile));
pMemFile->end = WGetFileSize(hsFile, NULL);
length = 4096;
if (dwPos > length)
length = dwPos;
pMemFile->buf_len = length;
if (length >= pMemFile->end)
length = pMemFile->end;
pMemFile->buf_len = length;
pMemFile->buf = DiabloAllocPtr(length);
pMemFile->file = hsFile;
}
BYTE *LoadWaveFile(HANDLE hsFile, WAVEFORMATEX *pwfx, CKINFO *chunk)
{
MEMFILE wave_file;

7
Source/wave.h

@ -8,18 +8,11 @@
void WCloseFile(HANDLE file);
LONG WGetFileSize(HANDLE hsFile, DWORD *lpFileSizeHigh);
void WGetFileArchive(HANDLE hsFile, DWORD *retry, const char *FileName);
BOOL WOpenFile(const char *FileName, HANDLE *phsFile, BOOL mayNotExist);
void WReadFile(HANDLE hsFile, LPVOID buf, DWORD to_read);
int WSetFilePointer(HANDLE file1, int offset, HANDLE file2, int whence);
BOOL LoadWaveFormat(HANDLE hsFile, WAVEFORMATEX *pwfx);
void AllocateMemFile(HANDLE hsFile, MEMFILE *pMemFile, DWORD dwPos);
void FreeMemFile(MEMFILE *pMemFile);
BOOL ReadWaveFile(MEMFILE *pMemFile, WAVEFORMATEX *pwfx, CKINFO *chunk);
BOOL ReadMemFile(MEMFILE *pMemFile, void *lpBuf, size_t length);
void FillMemFile(MEMFILE *pMemFile);
int SeekMemFile(MEMFILE *pMemFile, ULONG lDist, DWORD dwMethod);
BOOL ReadWaveSection(MEMFILE *pMemFile, DWORD id, CKINFO *chunk);
BYTE *LoadWaveFile(HANDLE hsFile, WAVEFORMATEX *pwfx, CKINFO *chunk);
#endif /* __WAVE_H__ */

Loading…
Cancel
Save