51 lines
1.2 KiB
C++
51 lines
1.2 KiB
C++
#include <avifile/mischdr.hpp>
|
|
|
|
AVIMiscHeader::AVIMiscHeader(void)
|
|
{
|
|
mMiscHeaders.insert(&String("ISFT"));
|
|
mMiscHeaders.insert(&String("strn"));
|
|
}
|
|
|
|
AVIMiscHeader::~AVIMiscHeader()
|
|
{
|
|
}
|
|
|
|
bool AVIMiscHeader::read(File &inFile)
|
|
{
|
|
String miscLiteral("xxxx");
|
|
String miscHeader;
|
|
DWORD miscCount;
|
|
WORD returnCode;
|
|
MiscType miscType;
|
|
|
|
returnCode=FALSE;
|
|
miscHeader.reserve(miscLiteral.length()+1);
|
|
inFile.read(miscHeader,miscLiteral.length());
|
|
miscType=miscEvaluate(miscHeader);
|
|
switch(miscType)
|
|
{
|
|
case MiscSTRN :
|
|
case MiscISFT :
|
|
inFile.read(miscCount);
|
|
inFile+=miscCount;
|
|
inFile.read(miscHeader,5);
|
|
inFile.read(miscCount);
|
|
inFile+=miscCount;
|
|
returnCode=TRUE;
|
|
break;
|
|
case MiscUnknown : // another level will handle this, just put the string back into the read buffer
|
|
// ::OutputDebugString(String("[AVIMiscHeader::operator<<] Don't know how to handle header '")+miscHeader+String("'\n"));
|
|
inFile-=miscLiteral.length();
|
|
break;
|
|
}
|
|
return returnCode;
|
|
}
|
|
|
|
AVIMiscHeader::MiscType AVIMiscHeader::miscEvaluate(const String &headerLiteral)
|
|
{
|
|
for(int headerIndex=0;headerIndex<mMiscHeaders.size();headerIndex++)
|
|
if(headerLiteral==mMiscHeaders[headerIndex])return MiscType(headerIndex);
|
|
return MiscUnknown;
|
|
}
|
|
|