Files
Work/image/DIRENTRY.CPP
2024-08-07 09:16:27 -04:00

69 lines
2.3 KiB
C++

#include <image/direntry.hpp>
#include <image/resdrstr.hpp>
#include <common/stdio.hpp>
ImageResourceDirectoryEntry::operator String(void)
{
String resDirString;
resDirString.reserve(256);
::sprintf(resDirString,"offName:%ld nameIsString:%ld name:%ld resID:%ld offData:%ld offDir:%ld dataIsDir:%ld",
offsetName(),nameIsString(),name(),resID(),offsetData(),offsetDirectory(),dataIsDirectory());
return resDirString;
}
void ImageResourceDirectoryEntry::read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView)
{
pureView.read((char*)&((IMAGE_RESOURCE_DIRECTORY_ENTRY&)*this),sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
pureView.push();
if(nameIsString())
{
ImageResourceDirString resDirString;
pureView.push();
pureView.seek(resBase+offsetName(),PureViewOfFile::SeekSet);
resDirString.read(pureView);
mResourceName=resDirString.name();
pureView.pop();
}
if(dataIsDirectory())
{
if(mResourceName.isNull())mResourceName=getResource(name());
// if(!mResourceName.isNull())::OutputDebugString(mResourceName+String("\n"));
pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet);
mImageResourceDirectory.read(resBase,deltaOffset,pureView);
}
else
{
pureView.seek(resBase+offsetDirectory(),PureViewOfFile::SeekSet);
mImageResourceDataEntry.read(deltaOffset,pureView);
}
pureView.pop();
}
String ImageResourceDirectoryEntry::getResource(DWORD resIndex)
{
if(resIndex>=mResStrings.size())return mResStrings[0];
return mResStrings[resIndex];
}
void ImageResourceDirectoryEntry::createResStrings(void)
{
mResStrings.insert(&StrPointer("???_0"));
mResStrings.insert(&StrPointer("CURSOR"));
mResStrings.insert(&StrPointer("BITMAP"));
mResStrings.insert(&StrPointer("ICON"));
mResStrings.insert(&StrPointer("MENU"));
mResStrings.insert(&StrPointer("DIALOG"));
mResStrings.insert(&StrPointer("STRING"));
mResStrings.insert(&StrPointer("FONTDIR"));
mResStrings.insert(&StrPointer("FONT"));
mResStrings.insert(&StrPointer("ACCELERATORS"));
mResStrings.insert(&StrPointer("RCDATA"));
mResStrings.insert(&StrPointer("MESSAGETABLE"));
mResStrings.insert(&StrPointer("GROUP_CURSOR"));
mResStrings.insert(&StrPointer("???_13"));
mResStrings.insert(&StrPointer("GROUP_ICON"));
mResStrings.insert(&StrPointer("???_15"));
mResStrings.insert(&StrPointer("VERSION"));
}