1 #   include	"bitmapConfig.h"
2 
3 #   include	<stdlib.h>
4 #   include	"bitmap.h"
5 #   include	<appDebugon.h>
6 #   include	<appSystem.h>
7 
bmWrite(const MemoryBuffer * filename,const unsigned char * buffer,const BitmapDescription * bd,int fileFormat)8 int bmWrite(	const MemoryBuffer *		filename,
9 		const unsigned char *		buffer,
10 		const BitmapDescription *	bd,
11 		int				fileFormat )
12     {
13     if  ( ! bmFileFormats[fileFormat].bffFileType->bftWrite )
14 	{
15 	LLDEB(fileFormat,bmFileFormats[fileFormat].bffFileType->bftWrite);
16 	return -1;
17 	}
18 
19     return (*bmFileFormats[fileFormat].bffFileType->bftWrite)(
20 			filename,
21 			buffer,
22 			bd,
23 			bmFileFormats[fileFormat].bffPrivate );
24     }
25 
bmCanWrite(const BitmapDescription * bd,int fileFormat)26 int bmCanWrite( const BitmapDescription *	bd,
27 		int				fileFormat )
28     {
29     if  ( ! bmFileFormats[fileFormat].bffFileType->bftWrite )
30 	{ return -1;	}
31 
32     return (*bmFileFormats[fileFormat].bffFileType->bftCanWrite)(
33 			bd, bmFileFormats[fileFormat].bffPrivate );
34     }
35 
36 /************************************************************************/
37 /*									*/
38 /*  Read a bitmap/pixmap file. Derive the type from the file name.	*/
39 /*									*/
40 /************************************************************************/
41 
bmRead(const MemoryBuffer * filename,unsigned char ** pBuffer,BitmapDescription * bd,int * pFileFormat)42 int bmRead(	const MemoryBuffer *	filename,
43 		unsigned char **	pBuffer,
44 		BitmapDescription *	bd,
45 		int *			pFileFormat )
46     {
47     int			rval= -1;
48     int			fileType;
49     int			privateType;
50     int			fileFormat;
51 
52     MemoryBuffer	extension;
53     unsigned char *	buffer= (unsigned char *)0;
54 
55 
56     utilInitMemoryBuffer( &extension );
57 
58     appFileGetFileExtension( &extension, filename );
59     if  ( utilMemoryBufferIsEmpty( &extension ) )
60 	{
61 	SLDEB(utilMemoryBufferGetString(filename),extension.mbSize);
62 	goto ready;
63 	}
64 
65     for ( fileType= 0; fileType < bmNumberOfFileTypes; fileType++ )
66 	{
67 	if  ( ! bmFileTypes[fileType]->bftRead )
68 	    { continue;	}
69 
70 	if  ( utilMemoryBufferEqualsString( &extension,
71 				bmFileTypes[fileType]->bftFileExtension ) )
72 	    {
73 	    if  ( (*bmFileTypes[fileType]->bftRead)( filename,
74 						&buffer, bd, &privateType ) )
75 		{ LDEB(fileType); break;	}
76 
77 	    for (	fileFormat= 0;
78 			fileFormat < bmNumberOfFileFormats;
79 			fileFormat++				)
80 		{
81 		if  ( bmFileFormats[fileFormat].bffFileType->bftRead	==
82 		      bmFileTypes[fileType]->bftRead			&&
83 		      bmFileFormats[fileFormat].bffPrivate	==
84 		      privateType					)
85 		    {
86 		    *pBuffer= buffer; buffer= (unsigned char *)0; /* steal */
87 		    *pFileFormat= fileFormat;
88 		    rval= 0; goto ready;
89 		    }
90 		}
91 
92 	    SLDEB(utilMemoryBufferGetString(filename),privateType); break;
93 	    }
94 	}
95 
96   ready:
97 
98     if  ( buffer )
99 	{ free( buffer );	}
100 
101     utilCleanMemoryBuffer( &extension );
102 
103     return rval;
104     }
105