]> git.sur5r.net Git - cc65/commitdiff
Implemented main conversion module.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 10 Mar 2012 13:50:53 +0000 (13:50 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 10 Mar 2012 13:50:53 +0000 (13:50 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5587 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/sp65/attr.c
src/sp65/attr.h
src/sp65/convert.c
src/sp65/main.c
src/sp65/vic2sprite.c

index d3449f0a9108c6e29ebbf97becb019d93fb7bbd8..891a2d6ef8a519929c34cf85bddbd7fc1d546bab 100644 (file)
@@ -156,16 +156,16 @@ const Attr* GetAttr (const Collection* C, const char* Name)
 
 
 
-const Attr* NeedAttr (const Collection* C, const char* Name, const char* Context)
+const Attr* NeedAttr (const Collection* C, const char* Name, const char* Op)
 /* Search for an attribute with the given name and return it. If the attribute
- * is not found, the function terminates with an error using Context as
- * additional context in the error message.
+ * is not found, the function terminates with an error using Op as additional 
+ * context in the error message.
  */
 {
     /* Search for the attribute and return it */
     unsigned Index;
     if (!FindAttr (C, Name, &Index)) {
-        Error ("Found no attribute named `%s' in %s", Name, Context);
+        Error ("Found no attribute named `%s' for operation %s", Name, Op);
     }
     return CollConstAt (C, Index);
 }
@@ -183,13 +183,13 @@ const char* GetAttrVal (const Collection* C, const char* Name)
 
 
 
-const char* NeedAttrVal (const Collection* C, const char* Name, const char* Context)
+const char* NeedAttrVal (const Collection* C, const char* Name, const char* Op)
 /* Search for an attribute with the given name and return its value. If the
  * attribute wasn't not found, the function terminates with an error using
- * Context as additional context in the error message.
+ * Op as additional context in the error message.
  */
 {
-    const Attr* A = NeedAttr (C, Name, Context);
+    const Attr* A = NeedAttr (C, Name, Op);
     return (A == 0)? 0 : A->Value;
 }
 
index b1a6b92bebd418f5de36e2375a097c071ebeddb8..9379a802094769e8372ffa96d1ab858b75a5f544 100644 (file)
@@ -90,10 +90,10 @@ const Attr* GetAttr (const Collection* C, const char* Name);
  * returns NULL if the attribute wasn't found.
  */
 
-const Attr* NeedAttr (const Collection* C, const char* Name, const char* Context);
+const Attr* NeedAttr (const Collection* C, const char* Name, const char* Op);
 /* Search for an attribute with the given name and return it. If the attribute
- * is not found, the function terminates with an error using Context as
- * additional context in the error message.
+ * is not found, the function terminates with an error using Op as additional 
+ * context in the error message.
  */
 
 const char* GetAttrVal (const Collection* C, const char* Name);
@@ -101,10 +101,10 @@ const char* GetAttrVal (const Collection* C, const char* Name);
  * function returns NULL if the attribute wasn't found.
  */
 
-const char* NeedAttrVal (const Collection* C, const char* Name, const char* Context);
+const char* NeedAttrVal (const Collection* C, const char* Name, const char* Op);
 /* Search for an attribute with the given name and return its value. If the
  * attribute wasn't not found, the function terminates with an error using
- * Context as additional context in the error message.
+ * Op as additional context in the error message.
  */
 
 void AddAttr (Collection* C, const char* Name, const char* Value);
index 05dfce461b24d14c5de6b561641cf2682a566ce1..f66d4e7dfdb534384054ecaaff1f152dccf01de8 100644 (file)
 
 
 
+#include <stdlib.h>
+
 /* sp65 */
+#include "attr.h"
 #include "convert.h"
+#include "error.h"
 #include "koala.h"
 #include "vic2sprite.h"
 
 
 
+/*****************************************************************************/
+/*                                   Data                                    */
+/*****************************************************************************/
+
+
+
+/* Type of the entry in the converter table */
+typedef struct ConverterMapEntry ConverterMapEntry;
+struct ConverterMapEntry {
+    const char*         Format;
+    StrBuf*             (*ConvertFunc) (const Bitmap*, const Collection*);
+};
+
+/* Converter table, alphabetically sorted */
+static const ConverterMapEntry ConverterMap[] = {
+    {   "koala",                GenKoala        },
+    {   "vic2-sprite",          GenVic2Sprite   },
+};
+
+
+
 /*****************************************************************************/
 /*                                   Code                                    */
 /*****************************************************************************/
 
 
 
+static int Compare (const void* Key, const void* MapEntry)
+/* Compare function for bsearch */
+{
+    return strcmp (Key, ((const ConverterMapEntry*) MapEntry)->Format);
+}
+
+
+
 StrBuf* ConvertTo (const Bitmap* B, const Collection* A)
 /* Convert the bitmap B into some sort of other binary format. The output is
  * stored in a string buffer (which is actually a dynamic char array) and
  * returned. The actual output format is taken from the "format" attribute
  * in the attribute collection A.
- */                                                     
+ */
 {
+    const ConverterMapEntry* E;
+
+    /* Get the format to convert to */
+    const char* Format = NeedAttrVal (A, "format", "convert");
+
+    /* Search for the matching converter */
+    E = bsearch (Format,
+                 ConverterMap,
+                 sizeof (ConverterMap) / sizeof (ConverterMap[0]),
+                 sizeof (ConverterMap[0]),
+                 Compare);
+    if (E == 0) {
+        Error ("No such target format: `%s'", Format);
+    }
+
+    /* Do the conversion */
+    return E->ConvertFunc (B, A);
 }
 
 
index 10523c7cfc8abf5bac3cce295fdb5f1dfaffab22..fa1d1d6582c2c49e4c500ce7dee3b0952d6967d9 100644 (file)
@@ -297,7 +297,7 @@ static void OptWrite (const char* Opt, const char* Arg)
     }
 
     /* Write the file */
-    WriteOutputFile (FileName, 0, OF);
+    WriteOutputFile (FileName, D, OF);
 
     /* Delete the attribute list */
     FreeCollection (A);
index 9c4c368647fa9132dca095e8022ec463baffe2cb..fa3a7359df9cd3bb1374a4b7684543181dec7fd5 100644 (file)
@@ -74,9 +74,10 @@ StrBuf* GenVic2Sprite (const Bitmap* B, const Collection* A attribute ((unused))
         GetBitmapColors (B) != 2         ||
         GetBitmapHeight (B) != HEIGHT    ||
         GetBitmapWidth (B)  != WIDTH) {
-
+                                                        
+        printf ("w = %u, h = %u\n", GetBitmapWidth (B), GetBitmapHeight (B));
         Error ("Bitmaps converted to vic2 sprite format must be in indexed "
-               "mode with 2 colors max and a size of %ux%u", WIDTH, HEIGHT);
+               "mode with a size of %ux%u and two colors", WIDTH, HEIGHT);
     }
 
     /* Create the output buffer and resize it to the required size. */