[gnome-video-arcade] Support new -listxml elements in MAME 0.132.



commit 00ffa3c886e8ee6aebbef0340b50ec89ad5ab3e6
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Jun 12 21:03:53 2009 -0400

    Support new -listxml elements in MAME 0.132.

 ChangeLog                          |    9 +
 configure.ac                       |    2 +-
 docs/reference/database-schema.xml |    4 +-
 src/gva-db.c                       |  297 +++++++++++++++++++++++++++---------
 4 files changed, 234 insertions(+), 78 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 1e31133..e62746e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-06-12  Matthew Barnes  <mbarnes redhat com>
+
+	* configure.ac:
+	Post-release version bump.
+
+	* gva-db.c:
+	Support new elements in MAME 0.132: 'configuration', 'confsetting'
+	and 'adjuster'.
+
 2009-04-26  Matthew Barnes  <mbarnes redhat com>
 
 	* NEWS: Update for 0.6.7
diff --git a/configure.ac b/configure.ac
index 7d89b17..6f51493 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@
 
 AC_PREREQ([2.54])
 
-m4_define([gva_version], 0.6.7)
+m4_define([gva_version], 0.6.8)
 
 AC_INIT([GNOME Video Arcade], [gva_version],
         [mbarnes redhat com], gnome-video-arcade)
diff --git a/docs/reference/database-schema.xml b/docs/reference/database-schema.xml
index 9e8a1c7..d2c2368 100644
--- a/docs/reference/database-schema.xml
+++ b/docs/reference/database-schema.xml
@@ -166,7 +166,7 @@ CREATE TABLE playback (
 </programlisting>
 </simplesect>
 
-<simpleset>
+<simplesect>
 <title>Table: window</title>
 <programlisting>
 CREATE TABLE window (
@@ -177,7 +177,7 @@ CREATE TABLE window (
 	height,
 	maximized);
 </programlisting>
-</simpleset>
+</simplesect>
 
 <simplesect>
 <title>View: available</title>
diff --git a/src/gva-db.c b/src/gva-db.c
index 7d5427b..36f0551 100644
--- a/src/gva-db.c
+++ b/src/gva-db.c
@@ -185,6 +185,20 @@
                 "default_ DEFAULT 'no' " \
                 "CHECK (default_ in ('yes', 'no')));"
 
+#define SQL_CREATE_TABLE_CONFSETTING \
+        "CREATE TABLE IF NOT EXISTS confsetting (" \
+                "game NOT NULL, " \
+                "configuration NOT NULL, " \
+                "name NOT NULL, " \
+                "default_ DEFAULT 'no' " \
+                "CHECK (default_ in ('yes', 'no')));"
+
+#define SQL_CREATE_TABLE_ADJUSTER \
+        "CREATE TABLE IF NOT EXISTS adjuster (" \
+                "game NOT NULL, " \
+                "name NOT NULL, " \
+                "default_ NOT NULL);"
+
 /* The playback table survives database builds. */
 #define SQL_CREATE_TABLE_PLAYBACK \
         "CREATE TABLE IF NOT EXISTS playback (" \
@@ -222,6 +236,8 @@
         "DROP TABLE IF EXISTS display; " \
         "DROP TABLE IF EXISTS control; " \
         "DROP TABLE IF EXISTS dipvalue; " \
+        "DROP TABLE IF EXISTS confsetting; " \
+        "DROP TABLE IF EXISTS adjuster; " \
         "DROP VIEW IF EXISTS available"
 
 #define SQL_INSERT_GAME \
@@ -336,6 +352,19 @@
                 "@name, " \
                 "@default_);"
 
+#define SQL_INSERT_CONFSETTING \
+        "INSERT INTO confsetting VALUES (" \
+                "@game, " \
+                "@configuration, " \
+                "@name, " \
+                "@default_);"
+
+#define SQL_INSERT_ADJUSTER \
+        "INSERT INTO adjuster VALUES (" \
+                "@game, " \
+                "@name, " \
+                "@default_);"
+
 typedef struct _ParserData ParserData;
 
 struct _ParserData
@@ -352,9 +381,12 @@ struct _ParserData
         sqlite3_stmt *insert_display_stmt;
         sqlite3_stmt *insert_control_stmt;
         sqlite3_stmt *insert_dipvalue_stmt;
+        sqlite3_stmt *insert_confsetting_stmt;
+        sqlite3_stmt *insert_adjuster_stmt;
 
         const gchar *element_stack[MAX_ELEMENT_DEPTH];
         guint element_stack_depth;
+        gchar *configuration;
         gchar *dipswitch;
         gchar *game;
 };
@@ -362,6 +394,7 @@ struct _ParserData
 /* Canonical names of XML elements and attributes */
 static struct
 {
+        const gchar *adjuster;
         const gchar *aspectx;
         const gchar *aspecty;
         const gchar *bios;
@@ -375,6 +408,8 @@ static struct
         const gchar *cocktail;
         const gchar *coins;
         const gchar *color;
+        const gchar *configuration;
+        const gchar *confsetting;
         const gchar *control;
         const gchar *crc;
         const gchar *default_;
@@ -500,6 +535,32 @@ db_parser_exec_stmt (sqlite3_stmt *stmt,
 }
 
 static void
+db_parser_start_element_adjuster (ParserData *data,
+                                  const gchar **attribute_name,
+                                  const gchar **attribute_value,
+                                  GError **error)
+{
+        sqlite3_stmt *stmt = data->insert_adjuster_stmt;
+        gint ii;
+
+        db_parser_bind_text (stmt, "@game", data->game);
+
+        for (ii = 0; attribute_name[ii] != NULL; ii++)
+        {
+                const gchar *param;
+
+                if (attribute_name[ii] == intern.name)
+                        param = "@name";
+                else if (attribute_name[ii] == intern.default_)
+                        param = "@default_";
+                else
+                        continue;
+
+                db_parser_bind_text (stmt, param, attribute_value[ii]);
+        }
+}
+
+static void
 db_parser_start_element_biosset (ParserData *data,
                                  const gchar **attribute_name,
                                  const gchar **attribute_value,
@@ -559,6 +620,49 @@ db_parser_start_element_chip (ParserData *data,
 }
 
 static void
+db_parser_start_element_configuration (ParserData *data,
+                                       const gchar **attribute_name,
+                                       const gchar **attribute_value,
+                                       GError **error)
+{
+        gint ii;
+
+        for (ii = 0; attribute_name[ii] != NULL; ii++)
+                if (attribute_name[ii] == intern.name)
+                        data->configuration = g_strdup (attribute_value[ii]);
+}
+
+static void
+db_parser_start_element_confsetting (ParserData *data,
+                                     const gchar **attribute_name,
+                                     const gchar **attribute_value,
+                                     GError **error)
+{
+        sqlite3_stmt *stmt = data->insert_confsetting_stmt;
+        gint ii;
+
+        /* Bind default values. */
+        db_parser_bind_text (stmt, "@default_", "no");
+
+        db_parser_bind_text (stmt, "@game", data->game);
+        db_parser_bind_text (stmt, "@configuration", data->configuration);
+
+        for (ii = 0; attribute_name[ii] != NULL; ii++)
+        {
+                const gchar *param;
+
+                if (attribute_name[ii] == intern.name)
+                        param = "@name";
+                else if (attribute_name[ii] == intern.default_)
+                        param = "@default_";
+                else
+                        continue;
+
+                db_parser_bind_text (stmt, param, attribute_value[ii]);
+        }
+}
+
+static void
 db_parser_start_element_control (ParserData *data,
                                  const gchar **attribute_name,
                                  const gchar **attribute_value,
@@ -1068,7 +1172,11 @@ db_parser_start_element (GMarkupParseContext *context,
         /* Skip unused elements to speed up parsing. */
 
 #if 0
-        if (element_name == intern.biosset)
+        if (element_name == intern.adjuster)
+                db_parser_start_element_adjuster (
+                        data, attribute_name, attribute_value, error);
+
+        else if (element_name == intern.biosset)
                 db_parser_start_element_biosset (
                         data, attribute_name, attribute_value, error);
 
@@ -1076,6 +1184,14 @@ db_parser_start_element (GMarkupParseContext *context,
                 db_parser_start_element_chip (
                         data, attribute_name, attribute_value, error);
 
+        else if (element_name == intern.configuration)
+                db_parser_start_element_configuration (
+                        data, attribute_name, attribute_value, error);
+
+        else if (element_name == intern.confsetting)
+                db_parser_start_element_confsetting (
+                        data, attribute_name, attribute_value, error);
+
         else if (element_name == intern.control)
                 db_parser_start_element_control (
                         data, attribute_name, attribute_value, error);
@@ -1127,6 +1243,14 @@ db_parser_start_element (GMarkupParseContext *context,
 }
 
 static void
+db_parser_end_element_configuration (ParserData *data,
+                                     GError **error)
+{
+        g_free (data->configuration);
+        data->configuration = NULL;
+}
+
+static void
 db_parser_end_element_dipswitch (ParserData *data,
                                  GError **error)
 {
@@ -1172,12 +1296,21 @@ db_parser_end_element (GMarkupParseContext *context,
         /* Skip unused elements to speed up parsing. */
 
 #if 0
-        if (element_name == intern.biosset)
+        if (element_name == intern.adjuster)
+                db_parser_exec_stmt (data->insert_adjuster_stmt, error);
+
+        else if (element_name == intern.biosset)
                 db_parser_exec_stmt (data->insert_biosset_stmt, error);
 
         else if (element_name == intern.chip)
                 db_parser_exec_stmt (data->insert_chip_stmt, error);
 
+        else if (element_name == intern.configuration)
+                db_parser_end_element_configuration (data, error);
+
+        else if (element_name == intern.confsetting)
+                db_parser_exec_stmt (data->insert_confsetting_stmt, error);
+
         else if (element_name == intern.control)
                 db_parser_exec_stmt (data->insert_control_stmt, error);
 
@@ -1274,6 +1407,12 @@ db_parser_data_new (GvaProcess *process)
         if (!gva_db_prepare (SQL_INSERT_DIPVALUE, &data->insert_dipvalue_stmt, &error))
                 g_error ("%s", error->message);
 
+        if (!gva_db_prepare (SQL_INSERT_CONFSETTING, &data->insert_confsetting_stmt, &error))
+                g_error ("%s", error->message);
+
+        if (!gva_db_prepare (SQL_INSERT_ADJUSTER, &data->insert_adjuster_stmt, &error))
+                g_error ("%s", error->message);
+
         return data;
 }
 
@@ -1292,7 +1431,10 @@ db_parser_data_free (ParserData *data)
         sqlite3_finalize (data->insert_display_stmt);
         sqlite3_finalize (data->insert_control_stmt);
         sqlite3_finalize (data->insert_dipvalue_stmt);
+        sqlite3_finalize (data->insert_confsetting_stmt);
+        sqlite3_finalize (data->insert_adjuster_stmt);
 
+        g_free (data->configuration);
         g_free (data->dipswitch);
         g_free (data->game);
 
@@ -1356,11 +1498,13 @@ db_create_tables (GError **error)
 {
         return gva_db_execute (SQL_CREATE_TABLE_MAME, error)
                 && gva_db_execute (SQL_CREATE_TABLE_GAME, error)
+                && gva_db_execute (SQL_CREATE_TABLE_ADJUSTER, error)
                 && gva_db_execute (SQL_CREATE_TABLE_BIOSSET, error)
                 && gva_db_execute (SQL_CREATE_TABLE_ROM, error)
                 && gva_db_execute (SQL_CREATE_TABLE_DISK, error)
                 && gva_db_execute (SQL_CREATE_TABLE_SAMPLE, error)
                 && gva_db_execute (SQL_CREATE_TABLE_CHIP, error)
+                && gva_db_execute (SQL_CREATE_TABLE_CONFSETTING, error)
                 && gva_db_execute (SQL_CREATE_TABLE_DISPLAY, error)
                 && gva_db_execute (SQL_CREATE_TABLE_CONTROL, error)
                 && gva_db_execute (SQL_CREATE_TABLE_DIPVALUE, error)
@@ -1493,79 +1637,82 @@ gva_db_build (GError **error)
         g_return_val_if_fail (db != NULL, NULL);
 
         /* Initialize the list of canonical names. */
-        intern.aspectx      = g_intern_static_string ("aspectx");
-        intern.aspecty      = g_intern_static_string ("aspecty");
-        intern.bios         = g_intern_static_string ("bios");
-        intern.biosset      = g_intern_static_string ("biosset");
-        intern.build        = g_intern_static_string ("build");
-        intern.buttons      = g_intern_static_string ("buttons");
-        intern.channels     = g_intern_static_string ("channels");
-        intern.chip         = g_intern_static_string ("chip");
-        intern.clock        = g_intern_static_string ("clock");
-        intern.cloneof      = g_intern_static_string ("cloneof");
-        intern.cocktail     = g_intern_static_string ("cocktail");
-        intern.coins        = g_intern_static_string ("coins");
-        intern.color        = g_intern_static_string ("color");
-        intern.control      = g_intern_static_string ("control");
-        intern.crc          = g_intern_static_string ("crc");
-        intern.default_     = g_intern_static_string ("default_");
-        intern.description  = g_intern_static_string ("description");
-        intern.dipswitch    = g_intern_static_string ("dipswitch");
-        intern.dipvalue     = g_intern_static_string ("dipvalue");
-        intern.disk         = g_intern_static_string ("disk");
-        intern.display      = g_intern_static_string ("display");
-        intern.dispose      = g_intern_static_string ("dispose");
-        intern.driver       = g_intern_static_string ("driver");
-        intern.emulation    = g_intern_static_string ("emulation");
-        intern.flipx        = g_intern_static_string ("flipx");
-        intern.game         = g_intern_static_string ("game");
-        intern.graphic      = g_intern_static_string ("graphic");
-        intern.hbend        = g_intern_static_string ("hbend");
-        intern.hbstart      = g_intern_static_string ("hbstart");
-        intern.height       = g_intern_static_string ("height");
-        intern.htotal       = g_intern_static_string ("htotal");
-        intern.index_       = g_intern_static_string ("index_");
-        intern.input        = g_intern_static_string ("input");
-        intern.isbios       = g_intern_static_string ("isbios");
-        intern.keydelta     = g_intern_static_string ("keydelta");
-        intern.mame         = g_intern_static_string ("mame");
-        intern.manufacturer = g_intern_static_string ("manufacturer");
-        intern.maximum      = g_intern_static_string ("maximum");
-        intern.md5          = g_intern_static_string ("md5");
-        intern.merge        = g_intern_static_string ("merge");
-        intern.minimum      = g_intern_static_string ("minimum");
-        intern.name         = g_intern_static_string ("name");
-        intern.offset       = g_intern_static_string ("offset");
-        intern.orientation  = g_intern_static_string ("orientation");
-        intern.palettesize  = g_intern_static_string ("palettesize");
-        intern.pixclock     = g_intern_static_string ("pixclock");
-        intern.players      = g_intern_static_string ("players");
-        intern.protection   = g_intern_static_string ("protection");
-        intern.refresh      = g_intern_static_string ("refresh");
-        intern.region       = g_intern_static_string ("region");
-        intern.reverse      = g_intern_static_string ("reverse");
-        intern.rom          = g_intern_static_string ("rom");
-        intern.romof        = g_intern_static_string ("romof");
-        intern.rotate       = g_intern_static_string ("rotate");
-        intern.runnable     = g_intern_static_string ("runnable");
-        intern.sample       = g_intern_static_string ("sample");
-        intern.sampleof     = g_intern_static_string ("sampleof");
-        intern.savestate    = g_intern_static_string ("savestate");
-        intern.screen       = g_intern_static_string ("screen");
-        intern.sensitivity  = g_intern_static_string ("sensitivity");
-        intern.service      = g_intern_static_string ("service");
-        intern.sha1         = g_intern_static_string ("sha1");
-        intern.size         = g_intern_static_string ("size");
-        intern.sound        = g_intern_static_string ("sound");
-        intern.sourcefile   = g_intern_static_string ("sourcefile");
-        intern.status       = g_intern_static_string ("status");
-        intern.tilt         = g_intern_static_string ("tilt");
-        intern.type         = g_intern_static_string ("type");
-        intern.vbend        = g_intern_static_string ("vbend");
-        intern.vbstart      = g_intern_static_string ("vbstart");
-        intern.vtotal       = g_intern_static_string ("vtotal");
-        intern.width        = g_intern_static_string ("width");
-        intern.year         = g_intern_static_string ("year");
+        intern.adjuster      = g_intern_static_string ("adjuster");
+        intern.aspectx       = g_intern_static_string ("aspectx");
+        intern.aspecty       = g_intern_static_string ("aspecty");
+        intern.bios          = g_intern_static_string ("bios");
+        intern.biosset       = g_intern_static_string ("biosset");
+        intern.build         = g_intern_static_string ("build");
+        intern.buttons       = g_intern_static_string ("buttons");
+        intern.channels      = g_intern_static_string ("channels");
+        intern.chip          = g_intern_static_string ("chip");
+        intern.clock         = g_intern_static_string ("clock");
+        intern.cloneof       = g_intern_static_string ("cloneof");
+        intern.cocktail      = g_intern_static_string ("cocktail");
+        intern.coins         = g_intern_static_string ("coins");
+        intern.color         = g_intern_static_string ("color");
+        intern.configuration = g_intern_static_string ("configuration");
+        intern.confsetting   = g_intern_static_string ("confsetting");
+        intern.control       = g_intern_static_string ("control");
+        intern.crc           = g_intern_static_string ("crc");
+        intern.default_      = g_intern_static_string ("default_");
+        intern.description   = g_intern_static_string ("description");
+        intern.dipswitch     = g_intern_static_string ("dipswitch");
+        intern.dipvalue      = g_intern_static_string ("dipvalue");
+        intern.disk          = g_intern_static_string ("disk");
+        intern.display       = g_intern_static_string ("display");
+        intern.dispose       = g_intern_static_string ("dispose");
+        intern.driver        = g_intern_static_string ("driver");
+        intern.emulation     = g_intern_static_string ("emulation");
+        intern.flipx         = g_intern_static_string ("flipx");
+        intern.game          = g_intern_static_string ("game");
+        intern.graphic       = g_intern_static_string ("graphic");
+        intern.hbend         = g_intern_static_string ("hbend");
+        intern.hbstart       = g_intern_static_string ("hbstart");
+        intern.height        = g_intern_static_string ("height");
+        intern.htotal        = g_intern_static_string ("htotal");
+        intern.index_        = g_intern_static_string ("index_");
+        intern.input         = g_intern_static_string ("input");
+        intern.isbios        = g_intern_static_string ("isbios");
+        intern.keydelta      = g_intern_static_string ("keydelta");
+        intern.mame          = g_intern_static_string ("mame");
+        intern.manufacturer  = g_intern_static_string ("manufacturer");
+        intern.maximum       = g_intern_static_string ("maximum");
+        intern.md5           = g_intern_static_string ("md5");
+        intern.merge         = g_intern_static_string ("merge");
+        intern.minimum       = g_intern_static_string ("minimum");
+        intern.name          = g_intern_static_string ("name");
+        intern.offset        = g_intern_static_string ("offset");
+        intern.orientation   = g_intern_static_string ("orientation");
+        intern.palettesize   = g_intern_static_string ("palettesize");
+        intern.pixclock      = g_intern_static_string ("pixclock");
+        intern.players       = g_intern_static_string ("players");
+        intern.protection    = g_intern_static_string ("protection");
+        intern.refresh       = g_intern_static_string ("refresh");
+        intern.region        = g_intern_static_string ("region");
+        intern.reverse       = g_intern_static_string ("reverse");
+        intern.rom           = g_intern_static_string ("rom");
+        intern.romof         = g_intern_static_string ("romof");
+        intern.rotate        = g_intern_static_string ("rotate");
+        intern.runnable      = g_intern_static_string ("runnable");
+        intern.sample        = g_intern_static_string ("sample");
+        intern.sampleof      = g_intern_static_string ("sampleof");
+        intern.savestate     = g_intern_static_string ("savestate");
+        intern.screen        = g_intern_static_string ("screen");
+        intern.sensitivity   = g_intern_static_string ("sensitivity");
+        intern.service       = g_intern_static_string ("service");
+        intern.sha1          = g_intern_static_string ("sha1");
+        intern.size          = g_intern_static_string ("size");
+        intern.sound         = g_intern_static_string ("sound");
+        intern.sourcefile    = g_intern_static_string ("sourcefile");
+        intern.status        = g_intern_static_string ("status");
+        intern.tilt          = g_intern_static_string ("tilt");
+        intern.type          = g_intern_static_string ("type");
+        intern.vbend         = g_intern_static_string ("vbend");
+        intern.vbstart       = g_intern_static_string ("vbstart");
+        intern.vtotal        = g_intern_static_string ("vtotal");
+        intern.width         = g_intern_static_string ("width");
+        intern.year          = g_intern_static_string ("year");
 
         if (!gva_db_reset (error))
                 return NULL;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]