Add support for charpad 9 format
This commit is contained in:
parent
4cf64ee170
commit
02e921364b
|
@ -303,16 +303,30 @@ bool SourceFile::ReadLine(char* line)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CTMHeader8
|
struct CTMHeader
|
||||||
{
|
{
|
||||||
uint8 mID[3];
|
uint8 mID[3];
|
||||||
uint8 mVersion[1];
|
uint8 mVersion;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CTMHeader8
|
||||||
|
{
|
||||||
uint8 mDispMode;
|
uint8 mDispMode;
|
||||||
uint8 mColorMethod;
|
uint8 mColorMethod;
|
||||||
uint8 mFlags;
|
uint8 mFlags;
|
||||||
uint8 mColors[7];
|
uint8 mColors[7];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct CTMHeader9
|
||||||
|
{
|
||||||
|
uint8 mDispMode;
|
||||||
|
uint8 mColorMethod;
|
||||||
|
uint8 mFlags;
|
||||||
|
uint8 mFgridWidth[2], mFGridHeight[2];
|
||||||
|
char mFGridConfig;
|
||||||
|
uint8 mColors[7];
|
||||||
|
};
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
struct SPDHeader5
|
struct SPDHeader5
|
||||||
|
@ -433,11 +447,28 @@ void SourceFile::ReadSpritePad(Errors* errors, const Location& location, SourceF
|
||||||
|
|
||||||
void SourceFile::ReadCharPad(Errors* errors, const Location& location, SourceFileDecoder decoder)
|
void SourceFile::ReadCharPad(Errors* errors, const Location& location, SourceFileDecoder decoder)
|
||||||
{
|
{
|
||||||
CTMHeader8 ctmHeader;
|
CTMHeader ctmHeader;
|
||||||
|
CTMHeader8 ctmHeader8;
|
||||||
|
CTMHeader9 ctmHeader9;
|
||||||
uint16 ctmMarker, numChars, numTiles;
|
uint16 ctmMarker, numChars, numTiles;
|
||||||
char tileWidth, tileHeight;
|
char tileWidth, tileHeight;
|
||||||
|
|
||||||
fread(&ctmHeader, sizeof(CTMHeader8), 1, mFile);
|
fread(&ctmHeader, sizeof(CTMHeader), 1, mFile);
|
||||||
|
switch (ctmHeader.mVersion)
|
||||||
|
{
|
||||||
|
case 8:
|
||||||
|
fread(&ctmHeader8, sizeof(CTMHeader8), 1, mFile);
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
fread(&ctmHeader9, sizeof(CTMHeader9), 1, mFile);
|
||||||
|
ctmHeader8.mDispMode = ctmHeader9.mDispMode;
|
||||||
|
ctmHeader8.mColorMethod = ctmHeader9.mColorMethod;
|
||||||
|
ctmHeader8.mFlags = ctmHeader9.mFlags;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fread(&ctmMarker, 2, 1, mFile);
|
fread(&ctmMarker, 2, 1, mFile);
|
||||||
fread(&numChars, 2, 1, mFile);
|
fread(&numChars, 2, 1, mFile);
|
||||||
numChars++;
|
numChars++;
|
||||||
|
@ -476,13 +507,13 @@ void SourceFile::ReadCharPad(Errors* errors, const Location& location, SourceFil
|
||||||
fseek(mFile, 1 * numChars, SEEK_CUR);
|
fseek(mFile, 1 * numChars, SEEK_CUR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctmHeader.mColorMethod == 2)
|
if (ctmHeader8.mColorMethod == 2)
|
||||||
{
|
{
|
||||||
fread(&ctmMarker, 2, 1, mFile);
|
fread(&ctmMarker, 2, 1, mFile);
|
||||||
|
|
||||||
if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2)
|
if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2)
|
||||||
{
|
{
|
||||||
if (ctmHeader.mDispMode == 4)
|
if (ctmHeader8.mDispMode == 4)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < mMemSize; i++)
|
for (int i = 0; i < mMemSize; i++)
|
||||||
{
|
{
|
||||||
|
@ -510,9 +541,9 @@ void SourceFile::ReadCharPad(Errors* errors, const Location& location, SourceFil
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Skip colors
|
// Skip colors
|
||||||
if (ctmHeader.mDispMode == 3)
|
if (ctmHeader8.mDispMode == 3)
|
||||||
fseek(mFile, 2 * numChars, SEEK_CUR);
|
fseek(mFile, 2 * numChars, SEEK_CUR);
|
||||||
else if (ctmHeader.mDispMode == 4)
|
else if (ctmHeader8.mDispMode == 4)
|
||||||
fseek(mFile, 3 * numChars, SEEK_CUR);
|
fseek(mFile, 3 * numChars, SEEK_CUR);
|
||||||
else
|
else
|
||||||
fseek(mFile, numChars, SEEK_CUR);
|
fseek(mFile, numChars, SEEK_CUR);
|
||||||
|
@ -523,7 +554,7 @@ void SourceFile::ReadCharPad(Errors* errors, const Location& location, SourceFil
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ctmHeader.mFlags & 1)
|
if (ctmHeader8.mFlags & 1)
|
||||||
{
|
{
|
||||||
fread(&ctmMarker, 2, 1, mFile);
|
fread(&ctmMarker, 2, 1, mFile);
|
||||||
|
|
||||||
|
@ -572,7 +603,7 @@ void SourceFile::ReadCharPad(Errors* errors, const Location& location, SourceFil
|
||||||
else
|
else
|
||||||
fseek(mFile, 2 * numTiles * tileWidth * tileHeight, SEEK_CUR);
|
fseek(mFile, 2 * numTiles * tileWidth * tileHeight, SEEK_CUR);
|
||||||
|
|
||||||
if (ctmHeader.mColorMethod == 1)
|
if (ctmHeader8.mColorMethod == 1)
|
||||||
{
|
{
|
||||||
fread(&ctmMarker, 2, 1, mFile);
|
fread(&ctmMarker, 2, 1, mFile);
|
||||||
if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2)
|
if (decoder == SFD_CTM_CHAR_ATTRIB_1 || decoder == SFD_CTM_CHAR_ATTRIB_2)
|
||||||
|
@ -582,7 +613,7 @@ void SourceFile::ReadCharPad(Errors* errors, const Location& location, SourceFil
|
||||||
mMemPos = 0;
|
mMemPos = 0;
|
||||||
mMemData = new uint8[mMemSize];
|
mMemData = new uint8[mMemSize];
|
||||||
|
|
||||||
if (ctmHeader.mDispMode == 4)
|
if (ctmHeader8.mDispMode == 4)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < mMemSize; i++)
|
for (int i = 0; i < mMemSize; i++)
|
||||||
{
|
{
|
||||||
|
@ -609,9 +640,9 @@ void SourceFile::ReadCharPad(Errors* errors, const Location& location, SourceFil
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Skip colors
|
// Skip colors
|
||||||
if (ctmHeader.mDispMode == 3)
|
if (ctmHeader8.mDispMode == 3)
|
||||||
fseek(mFile, 2 * numTiles, SEEK_CUR);
|
fseek(mFile, 2 * numTiles, SEEK_CUR);
|
||||||
else if (ctmHeader.mDispMode == 4)
|
else if (ctmHeader8.mDispMode == 4)
|
||||||
fseek(mFile, 3 * numTiles, SEEK_CUR);
|
fseek(mFile, 3 * numTiles, SEEK_CUR);
|
||||||
else
|
else
|
||||||
fseek(mFile, numTiles, SEEK_CUR);
|
fseek(mFile, numTiles, SEEK_CUR);
|
||||||
|
|
Loading…
Reference in New Issue