* Updated libpng and zlib

* Added SPR# parsing to the iff library
* iff2html now displays BMP_/FBMP, PALT, and SPR# chunks
This commit is contained in:
Fatbag 2012-05-28 23:37:38 -05:00
parent 78f1ca1d6f
commit 1f7061d98a
10 changed files with 219 additions and 41 deletions

View file

@ -9,6 +9,7 @@ set(IFF_SOURCES
glob.c
palt.c
rsmp.c
spr.c
str.c
string.c
tmpl.c

View file

@ -34,6 +34,7 @@ iff_register(c_string);
iff_register(glob);
iff_register(fcns);
iff_register(palt);
iff_register(spr);
iff_register(tmpl);
iff_register(trcn);
iff_register(rsmp);
@ -47,6 +48,7 @@ const char chunktypes[] =
"BCON"
"FCNS"
"PALT"
"SPR#"
"TMPL"
"TRCN"
"rsmp"
@ -59,6 +61,7 @@ int (* const iff_parse_function[])(IFFChunk*, const uint8_t*) = {
iff_parse_bcon,
iff_parse_fcns,
iff_parse_palt,
iff_parse_spr,
iff_parse_tmpl,
iff_parse_trcn,
iff_parse_rsmp
@ -71,6 +74,7 @@ void (* const iff_free_function[])(void*) = {
iff_free_bcon,
iff_free_fcns,
NULL,
iff_free_spr,
iff_free_tmpl,
iff_free_trcn,
iff_free_rsmp
@ -185,6 +189,17 @@ int iff_parse_chunk(IFFChunk * ChunkInfo, const uint8_t * Buffer){
return 0;
}
IFFChunk * iff_find_chunk(IFFFile * IFFFileInfo, const char * Type, int ChunkID){
unsigned i;
for(i=0; i<IFFFileInfo->ChunkCount; i++){
IFFChunk * Chunk = &IFFFileInfo->Chunks[i];
if((Type == NULL || !strcmp(Chunk->Type, Type)) &&
(ChunkID == -1 || Chunk->ChunkID == ChunkID))
return Chunk;
}
return NULL;
}
void iff_free_chunk(IFFChunk * ChunkInfo){
unsigned i;
if(ChunkInfo == NULL || ChunkInfo->FormattedData == NULL) return;

View file

@ -109,6 +109,27 @@ typedef struct IFFPalette_s
uint8_t Data[256*3];
} IFFPalette;
/* SPR# chunk */
typedef struct IFFSprite_s
{
uint32_t Reserved;
uint16_t Height;
uint16_t Width;
uint8_t * IndexData;
uint8_t * BGRA32Data;
} IFFSprite;
typedef struct IFFSpriteList_s
{
uint32_t Version;
uint32_t SpriteCount;
uint32_t PaletteID;
IFFSprite * Sprites;
} IFFSpriteList;
int iff_depalette(IFFSprite * Sprite, const IFFPalette * Palette);
/* STR# chunk */
enum IFFLanguage {
@ -232,6 +253,7 @@ IFFChunk * iff_add_chunk(IFFFile * IFFFileInfo);
int iff_read_chunk(IFFChunk * ChunkInfo, const uint8_t * Buffer, unsigned MaxChunkSize);
int iff_parse_chunk(IFFChunk * ChunkInfo, const uint8_t * Buffer);
int iff_enumerate_chunks(IFFFile * IFFFileInfo, const uint8_t * Buffer, unsigned BufferSize);
IFFChunk * iff_find_chunk(IFFFile * IFFFileInfo, const char * Type, int ChunkID);
void iff_free_chunk(IFFChunk * ChunkInfo);
void iff_delete_chunk(IFFFile * IFFFileInfo, int Position);

View file

@ -266,8 +266,8 @@ void iff_free_str(void * FormattedData){
for(ls=0; ls<20; ls++){
IFFLanguageSet * LanguageSet = &StringData->LanguageSets[ls];
unsigned p;
if(LanguageSet->Pairs){
unsigned p;
for(p=0; p<LanguageSet->PairCount; p++){
free(LanguageSet->Pairs[p].Key);
free(LanguageSet->Pairs[p].Value);