Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
int ILBM_checkImage(const ILBM_Image *image)
{
    if(image->bitMapHeader == NULL)
    {
        IFF_error("Error: no bitmap header defined!\n");
        return FALSE;
    }
    
    return TRUE;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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;
}