int ILBM_checkBitMapHeader(const IFF_Chunk *chunk) { const ILBM_BitMapHeader *bitMapHeader = (const ILBM_BitMapHeader*)chunk; if(bitMapHeader->nPlanes > 8 && bitMapHeader->nPlanes != 24 && bitMapHeader->nPlanes != 32) { IFF_error("Unsupported 'BMHD'.nPlanes value: %s\n", bitMapHeader->nPlanes); return FALSE; } if(bitMapHeader->masking < 0 || bitMapHeader->masking > ILBM_MSK_LASSO) { IFF_error("Invalid 'BMHD'.masking value!\n"); return FALSE; } if(bitMapHeader->compression < 0 || bitMapHeader->compression > ILBM_CMP_BYTE_RUN) { IFF_error("Invalid 'BMHD'.compression value!\n"); return FALSE; } if(bitMapHeader->pad1 != 0) IFF_error("WARNING: 'BMHD'.pad1 is not 0!\n"); return TRUE; }
int ILBM_checkImage(const ILBM_Image *image) { if(image->bitMapHeader == NULL) { IFF_error("Error: no bitmap header defined!\n"); return FALSE; } return TRUE; }
int IFF_writeList(FILE *file, const IFF_List *list, const IFF_Extension *extension, const unsigned int extensionLength) { unsigned int i; if(!IFF_writeId(file, list->contentsType, CHUNKID, "contentsType")) { IFF_error("Error writing contentsType!\n"); return FALSE; } for(i = 0; i < list->propLength; i++) { if(!IFF_writeChunk(file, (IFF_Chunk*)list->prop[i], NULL, extension, extensionLength)) { IFF_error("Error writing PROP!\n"); return FALSE; } } if(!IFF_writeGroupSubChunks(file, (IFF_Group*)list, NULL, extension, extensionLength)) return FALSE; return TRUE; }
IFF_List *IFF_readList(FILE *file, const IFF_Long chunkSize, const IFF_Extension *extension, const unsigned int extensionLength) { IFF_ID contentsType; IFF_List *list; /* Read the contentsType id */ if(!IFF_readId(file, contentsType, CHUNKID, "contentsType")) return NULL; /* Create new list */ list = IFF_createList(contentsType); /* Read the remaining nested sub chunks */ while(list->chunkSize < chunkSize) { /* Read sub chunk */ IFF_Chunk *chunk = IFF_readChunk(file, NULL, extension, extensionLength); if(chunk == NULL) { IFF_error("Error reading chunk in list!\n"); IFF_freeChunk((IFF_Chunk*)list, NULL, extension, extensionLength); return NULL; } /* Add the prop or chunk */ if(IFF_compareId(chunk->chunkId, "PROP") == 0) IFF_addPropToList(list, (IFF_Prop*)chunk); else IFF_addToList(list, chunk); } /* Set the chunk size to what we have read */ list->chunkSize = chunkSize; /* Return the resulting list */ return list; }