From: uz Date: Mon, 27 Feb 2012 21:03:01 +0000 (+0000) Subject: Added the output layer. X-Git-Tag: V2.14~497 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=32f4a8d414f85487d5526096ba255fc004f4ca76;p=cc65 Added the output layer. git-svn-id: svn://svn.cc65.org/cc65/trunk@5566 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/src/sp65/asm.c b/src/sp65/asm.c index 911c4cac4..73721c17f 100644 --- a/src/sp65/asm.c +++ b/src/sp65/asm.c @@ -53,7 +53,7 @@ -void WiteAsmFile (const char* Name, const StrBuf* Data) +void WriteAsmFile (const char* Name, const StrBuf* Data) /* Write the contents of Data to the given file in assembler (ca65) format */ { const char* D; diff --git a/src/sp65/asm.h b/src/sp65/asm.h index 2edf2a8fb..6fef885f7 100644 --- a/src/sp65/asm.h +++ b/src/sp65/asm.h @@ -49,7 +49,7 @@ -void WiteAsmFile (const char* Name, const StrBuf* Data); +void WriteAsmFile (const char* Name, const StrBuf* Data); /* Write the contents of Data to the given file in assembler (ca65) format */ diff --git a/src/sp65/bin.c b/src/sp65/bin.c index 348e2ca11..6aded16e1 100644 --- a/src/sp65/bin.c +++ b/src/sp65/bin.c @@ -49,7 +49,7 @@ -void WiteBinFile (const char* Name, const StrBuf* Data) +void WriteBinFile (const char* Name, const StrBuf* Data) /* Write the contents of Data to the given file in binary format */ { unsigned Size; diff --git a/src/sp65/bin.h b/src/sp65/bin.h index 119ab0e3d..3bfb5a440 100644 --- a/src/sp65/bin.h +++ b/src/sp65/bin.h @@ -49,7 +49,7 @@ -void WiteBinFile (const char* Name, const StrBuf* Data); +void WriteBinFile (const char* Name, const StrBuf* Data); /* Write the contents of Data to the given file in binary format */ diff --git a/src/sp65/make/gcc.mak b/src/sp65/make/gcc.mak index 3235b395e..22873cadc 100644 --- a/src/sp65/make/gcc.mak +++ b/src/sp65/make/gcc.mak @@ -30,6 +30,7 @@ OBJS = asm.o \ fileio.o \ input.o \ main.o \ + output.o \ palette.o \ pcx.o diff --git a/src/sp65/make/watcom.mak b/src/sp65/make/watcom.mak index 4e3c9b0f9..bc4521050 100644 --- a/src/sp65/make/watcom.mak +++ b/src/sp65/make/watcom.mak @@ -68,6 +68,7 @@ OBJS = asm.obj \ fileio.obj \ input.obj \ main.obj \ + output.obj \ palette.obj \ pcx.obj diff --git a/src/sp65/output.c b/src/sp65/output.c new file mode 100644 index 000000000..102e4c355 --- /dev/null +++ b/src/sp65/output.c @@ -0,0 +1,116 @@ +/*****************************************************************************/ +/* */ +/* output.c */ +/* */ +/* Output format/file definitions for the sp65 sprite and bitmap utility */ +/* */ +/* */ +/* */ +/* (C) 2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* common */ +#include "fileid.h" + +/* sp65 */ +#include "asm.h" +#include "bin.h" +#include "error.h" +#include "output.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +typedef struct OutputFormatDesc OutputFormatDesc; +struct OutputFormatDesc { + + /* Write routine */ + void (*Write) (const char* Name, const StrBuf* Data); + +}; + +/* Table with Output formats */ +static OutputFormatDesc OutputFormatTable[ofCount] = { + { WriteAsmFile }, + { WriteBinFile }, +}; + +/* Table that maps extensions to Output formats. Must be sorted alphabetically */ +static const FileId FormatTable[] = { + /* Upper case stuff for obsolete operating systems */ + { "A", ofAsm }, + { "ASM", ofAsm }, + { "BIN", ofBin }, + { "INC", ofAsm }, + { "S", ofAsm }, + + { "a", ofAsm }, + { "asm", ofAsm }, + { "bin", ofBin }, + { "inc", ofAsm }, + { "s", ofAsm }, +}; + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void WriteOutputFile (const char* Name, const StrBuf* Data, OutputFormat Format) +/* Write the contents of Data to the given file in the format specified. If + * the format is ofAuto, it is determined by the file extension. + */ +{ + /* If the format is Auto, try to determine it from the file name */ + if (Format == ofAuto) { + /* Search for the entry in the table */ + const FileId* F = GetFileId (Name, FormatTable, + sizeof (FormatTable) / sizeof (FormatTable[0])); + /* Found? */ + if (F == 0) { + Error ("Cannot determine file format of output file `%s'", Name); + } + Format = F->Id; + } + + /* Check the format just for safety */ + CHECK (Format >= 0 && Format < ofCount); + + /* Call the format specific write */ + OutputFormatTable[Format].Write (Name, Data); +} + + + diff --git a/src/sp65/output.h b/src/sp65/output.h new file mode 100644 index 000000000..2f83993d8 --- /dev/null +++ b/src/sp65/output.h @@ -0,0 +1,82 @@ +/*****************************************************************************/ +/* */ +/* output.h */ +/* */ +/* Output format/file definitions for the sp65 sprite and bitmap utility */ +/* */ +/* */ +/* */ +/* (C) 2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef OUTPUT_H +#define OUTPUT_H + + + +/* common */ +#include "strbuf.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +enum OutputFormat { + ofAuto = -1, /* Auto detect */ + ofAsm, /* Output assembler source */ + ofBin, /* Output raw binary format */ + + ofCount /* Number of output formats without ofAuto */ +}; +typedef enum OutputFormat OutputFormat; + + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void WriteOutputFile (const char* Name, const StrBuf* Data, OutputFormat Format); +/* Write the contents of Data to the given file in the format specified. If + * the format is ofAuto, it is determined by the file extension. + */ + + + +/* End of output.h */ + +#endif + + +