1 /*****************************************************************************/
5 /* Input format/file definitions for the sp65 sprite and bitmap utility */
9 /* (C) 2012, Ullrich von Bassewitz */
10 /* Roemerstrasse 52 */
11 /* D-70794 Filderstadt */
12 /* EMail: uz@cc65.org */
15 /* This software is provided 'as-is', without any expressed or implied */
16 /* warranty. In no event will the authors be held liable for any damages */
17 /* arising from the use of this software. */
19 /* Permission is granted to anyone to use this software for any purpose, */
20 /* including commercial applications, and to alter it and redistribute it */
21 /* freely, subject to the following restrictions: */
23 /* 1. The origin of this software must not be misrepresented; you must not */
24 /* claim that you wrote the original software. If you use this software */
25 /* in a product, an acknowledgment in the product documentation would be */
26 /* appreciated but is not required. */
27 /* 2. Altered source versions must be plainly marked as such, and must not */
28 /* be misrepresented as being the original software. */
29 /* 3. This notice may not be removed or altered from any source */
32 /*****************************************************************************/
48 /*****************************************************************************/
50 /*****************************************************************************/
54 typedef struct InputFormatDesc InputFormatDesc;
55 struct InputFormatDesc {
58 Bitmap* (*Read) (const char* Name);
62 /* Table with input formats */
63 static InputFormatDesc InputFormatTable[ifCount] = {
67 /* Table that maps extensions to input formats. Must be sorted alphabetically */
68 static const FileId FormatTable[] = {
69 /* Upper case stuff for obsolete operating systems */
77 /*****************************************************************************/
79 /*****************************************************************************/
83 int FindInputFormat (const char* Name)
84 /* Find an input format by name. The function returns a value less than zero
85 * if Name is not a known input format.
88 /* Search for the entry in the table. */
89 const FileId* F = bsearch (Name,
91 sizeof (FormatTable) / sizeof (FormatTable[0]),
92 sizeof (FormatTable[0]),
95 /* Return the id or an error code */
96 return (F == 0)? -1 : F->Id;
101 Bitmap* ReadInputFile (const char* Name, InputFormat Format)
102 /* Read a bitmap from a file and return it. If Format is ifAuto, the routine
103 * tries to determine the format from the file name extension.
106 /* If the format is Auto, try to determine it from the file name */
107 if (Format == ifAuto) {
108 /* Search for the entry in the table */
109 const FileId* F = GetFileId (Name, FormatTable,
110 sizeof (FormatTable) / sizeof (FormatTable[0]));
113 Error ("Cannot determine file format of input file `%s'", Name);
118 /* Check the format just for safety */
119 CHECK (Format >= 0 && Format < ifCount);
121 /* Call the format specific read */
122 return InputFormatTable[Format].Read (Name);