File: bmio.c

package info (click to toggle)
ted 2.11-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 11,064 kB
  • ctags: 13,935
  • sloc: ansic: 120,446; makefile: 7,469; sh: 253
file content (89 lines) | stat: -rw-r--r-- 2,124 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#   include	"bitmapConfig.h"

#   include	<string.h>
#   include	<stdlib.h>
#   include	<stdio.h>
#   include	"bitmap.h"
#   include	<appDebugon.h>

int bmWrite(	const char *		filename,
		const unsigned char *	buffer,
		BitmapDescription *	bd,
		int			fileFormat,
		double			compressionFactor	)
    {
    if  ( ! bmFileFormats[fileFormat].bffFileType->bftWrite )
	{
	LLDEB(fileFormat,bmFileFormats[fileFormat].bffFileType->bftWrite);
	return -1;
	}

    return (*bmFileFormats[fileFormat].bffFileType->bftWrite)(
			filename,
			buffer,
			bd,
			bmFileFormats[fileFormat].bffPrivate,
			compressionFactor			);
    }

int bmCanWrite( BitmapDescription *	bd,
		int			fileFormat,
		double			compressionFactor	)
    {
    if  ( ! bmFileFormats[fileFormat].bffFileType->bftWrite )
	{ return -1;	}

    return (*bmFileFormats[fileFormat].bffFileType->bftCanWrite)(
			bd,
			bmFileFormats[fileFormat].bffPrivate,
			compressionFactor			);
    }

int bmRead(	const char *		filename,
		unsigned char **	pBuffer,
		BitmapDescription *	bd,
		int *			pFileFormat,
		double *		pCompressionFactor	)
    {
    int		fileType;
    int		privateType;
    int		fileFormat;
    char *	extension= strrchr( filename, '.' );

    if  ( ! extension )
	{ LDEB(extension); return -1; }
    extension++;

    for ( fileType= 0; fileType < bmNumberOfFileTypes; fileType++ )
	{
	if  ( ! bmFileTypes[fileType]->bftRead )
	    { continue;	}

	if  ( ! strcmp( extension, bmFileTypes[fileType]->bftFileExtension ) )
	    {
	    unsigned char *	buffer;

	    if  ( (*bmFileTypes[fileType]->bftRead)(	filename,
							&buffer,
							bd,
							&privateType,
							pCompressionFactor ) )
		{ LDEB(fileType); return -1;	}

	    for (	fileFormat= 0;
			fileFormat < bmNumberOfFileFormats;
			fileFormat++				)
		{
		if  ( bmFileFormats[fileFormat].bffFileType->bftRead	==
		      bmFileTypes[fileType]->bftRead			&&
		      bmFileFormats[fileFormat].bffPrivate	==
		      privateType					)
		    { *pBuffer= buffer; *pFileFormat= fileFormat; return 0; }
		}

	    LDEB(privateType); free( buffer ); return -1;
	    }
	}

    SDEB(extension); return -1;
    }