]> git.sur5r.net Git - cc65/commitdiff
Added the output layer.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 27 Feb 2012 21:03:01 +0000 (21:03 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 27 Feb 2012 21:03:01 +0000 (21:03 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5566 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/sp65/asm.c
src/sp65/asm.h
src/sp65/bin.c
src/sp65/bin.h
src/sp65/make/gcc.mak
src/sp65/make/watcom.mak
src/sp65/output.c [new file with mode: 0644]
src/sp65/output.h [new file with mode: 0644]

index 911c4cac4e0a1cac254f6281d1a3d501586b2170..73721c17f7a2e1f8a9438a8ee53e71ba885ad89b 100644 (file)
@@ -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;
index 2edf2a8fb53ed47827d54959855a9f1c70f0ec85..6fef885f7dc935eed8fd1e111a3fc13ea616b34d 100644 (file)
@@ -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 */
 
 
index 348e2ca11fe03e38fc366ce425947f2abf2c6360..6aded16e1608e4466f897776fb6c983d547508c1 100644 (file)
@@ -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;
index 119ab0e3d9c28964de32f235874623bb6a540c7b..3bfb5a440e239d00cf8a12a2b12bdc518b735fa1 100644 (file)
@@ -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 */
 
 
index 3235b395ea0c197dc95d4d7251679c1935c87888..22873cadc7045468989413dbf18fc5d2bbb1677b 100644 (file)
@@ -30,6 +30,7 @@ OBJS =        asm.o           \
         fileio.o        \
         input.o         \
        main.o          \
+        output.o        \
         palette.o       \
         pcx.o
 
index 4e3c9b0f9e3d63b867307c0e6c66c72fa8f7116e..bc452105069d08ec4e752475e97ca2a2ae7bd373 100644 (file)
@@ -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 (file)
index 0000000..102e4c3
--- /dev/null
@@ -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 (file)
index 0000000..2f83993
--- /dev/null
@@ -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
+
+
+