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