Files
Work/avifile/MISCHDR.CPP
2024-08-07 09:12:07 -04:00

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;
}