testsuite/registry/: A little program that looks through the registry to find element...
authorDavid Schleef <ds@schleef.org>
Thu, 6 Jan 2005 04:28:52 +0000 (04:28 +0000)
committerDavid Schleef <ds@schleef.org>
Thu, 6 Jan 2005 04:28:52 +0000 (04:28 +0000)
Original commit message from CVS:
* testsuite/registry/Makefile.am:
* testsuite/registry/gst-print-formats.c:
(print_pad_templates_info), (print_element_list),
(print_typefind_list), (list_sort_func), (get_typefind_mime_list),
(g_list_uniqify), (get_pad_templates_info),
(get_element_mime_list), (print_mime_list), (main): A little
program that looks through the registry to find elements of
a given type.  Not particularly interesting as a test, except
that there's no other test covering the same area.

ChangeLog
tests/old/testsuite/registry/Makefile.am [new file with mode: 0644]
tests/old/testsuite/registry/gst-print-formats.c [new file with mode: 0644]
testsuite/registry/Makefile.am [new file with mode: 0644]
testsuite/registry/gst-print-formats.c [new file with mode: 0644]

index bdb24f5..f4a950d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2005-01-05  David Schleef  <ds@schleef.org>
 
+       * testsuite/registry/Makefile.am:
+       * testsuite/registry/gst-print-formats.c:
+       (print_pad_templates_info), (print_element_list),
+       (print_typefind_list), (list_sort_func), (get_typefind_mime_list),
+       (g_list_uniqify), (get_pad_templates_info),
+       (get_element_mime_list), (print_mime_list), (main): A little
+       program that looks through the registry to find elements of
+       a given type.  Not particularly interesting as a test, except
+       that there's no other test covering the same area.
+
+2005-01-05  David Schleef  <ds@schleef.org>
+
        * tools/gst-launch.c: (idle_func), (fault_handler_sighandler),
        (fault_handler_sigaction), (fault_spin),
        (sigint_handler_sighandler), (play_handler), (main): Fix deadlocks
diff --git a/tests/old/testsuite/registry/Makefile.am b/tests/old/testsuite/registry/Makefile.am
new file mode 100644 (file)
index 0000000..a95436e
--- /dev/null
@@ -0,0 +1,7 @@
+include ../Rules
+
+tests_pass = gst-print-formats
+tests_fail =
+tests_ignore =
+
+
diff --git a/tests/old/testsuite/registry/gst-print-formats.c b/tests/old/testsuite/registry/gst-print-formats.c
new file mode 100644 (file)
index 0000000..8faeec6
--- /dev/null
@@ -0,0 +1,347 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *               2000 Wim Taymans <wtay@chello.be>
+ *               2004 Thomas Vander Stichele <thomas@apestaart.org>
+ *
+ * gst-inspect.c: tool to inspect the GStreamer registry
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include "gst/gst-i18n-app.h"
+
+#include <string.h>
+#include <locale.h>
+#include <glib/gprintf.h>
+
+#define static
+
+static void
+print_pad_templates_info (GstElement * element, GstElementFactory * factory,
+    GstPadDirection dir)
+{
+  GstElementClass *gstelement_class;
+  const GList *pads;
+  GstPadTemplate *padtemplate;
+
+  if (!factory->numpadtemplates) {
+    return;
+  }
+
+  gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
+
+  pads = factory->padtemplates;
+  while (pads) {
+    padtemplate = (GstPadTemplate *) (pads->data);
+    pads = g_list_next (pads);
+
+    if (padtemplate->direction == dir) {
+      if (padtemplate->caps) {
+        GstStructure *structure;
+        int i;
+
+        for (i = 0; i < gst_caps_get_size (padtemplate->caps); i++) {
+          structure = gst_caps_get_structure (padtemplate->caps, i);
+          g_print ("    %s\n", gst_structure_get_name (structure));
+        }
+      }
+    }
+  }
+}
+
+static void
+print_element_list (const char *klass, GstPadDirection dir)
+{
+  GList *plugins;
+
+  g_print ("Elements in %s:\n", klass);
+  for (plugins = gst_registry_pool_plugin_list (); plugins;
+      plugins = g_list_next (plugins)) {
+    GList *features;
+    GstPlugin *plugin;
+
+    plugin = (GstPlugin *) (plugins->data);
+
+    features = gst_plugin_get_feature_list (plugin);
+    while (features) {
+      GstPluginFeature *feature;
+
+      feature = GST_PLUGIN_FEATURE (features->data);
+
+      if (GST_IS_ELEMENT_FACTORY (feature)) {
+        GstElementFactory *factory;
+        GstElement *element;
+
+        factory = GST_ELEMENT_FACTORY (feature);
+        if (strncmp (factory->details.klass, klass, strlen (klass)) == 0) {
+          g_print ("  %s: %s (%d)\n", GST_PLUGIN_FEATURE_NAME (factory),
+              factory->details.longname, gst_plugin_feature_get_rank (feature));
+          element = gst_element_factory_create (factory, NULL);
+          print_pad_templates_info (element, factory, dir);
+          gst_object_unref (GST_OBJECT (element));
+        }
+      }
+
+      features = g_list_next (features);
+    }
+  }
+  g_print ("\n");
+}
+
+static void
+print_typefind_list (void)
+{
+  GList *plugins;
+
+  g_print ("Typefind list:\n");
+  for (plugins = gst_registry_pool_plugin_list (); plugins;
+      plugins = g_list_next (plugins)) {
+    GList *features;
+    GstPlugin *plugin;
+
+    plugin = (GstPlugin *) (plugins->data);
+
+    features = gst_plugin_get_feature_list (plugin);
+    while (features) {
+      GstPluginFeature *feature;
+
+      feature = GST_PLUGIN_FEATURE (features->data);
+
+      if (GST_IS_TYPE_FIND_FACTORY (feature)) {
+        GstTypeFindFactory *factory;
+        char *s;
+
+        gst_plugin_load_file (plugin->filename, NULL);
+
+        factory = GST_TYPE_FIND_FACTORY (feature);
+        g_print ("  %s: (%d)\n", GST_PLUGIN_FEATURE_NAME (factory),
+            gst_plugin_feature_get_rank (feature));
+        s = gst_caps_to_string (gst_type_find_factory_get_caps (factory));
+        g_print ("    %s\n", s);
+        g_free (s);
+      }
+
+      features = g_list_next (features);
+    }
+  }
+  g_print ("\n");
+}
+
+static int
+list_sort_func (gconstpointer a, gconstpointer b)
+{
+  return strcmp ((const char *) a, (const char *) b);
+}
+
+static GList *
+get_typefind_mime_list (void)
+{
+  GList *plugins;
+  GList *mime_list = NULL;
+
+  for (plugins = gst_registry_pool_plugin_list (); plugins;
+      plugins = g_list_next (plugins)) {
+    GList *features;
+    GstPlugin *plugin;
+
+    plugin = (GstPlugin *) (plugins->data);
+
+    features = gst_plugin_get_feature_list (plugin);
+    while (features) {
+      GstPluginFeature *feature;
+
+      feature = GST_PLUGIN_FEATURE (features->data);
+
+      if (GST_IS_TYPE_FIND_FACTORY (feature)) {
+        GstTypeFindFactory *factory;
+        char *s;
+        int i;
+        const GstCaps *caps;
+
+        factory = GST_TYPE_FIND_FACTORY (feature);
+        caps = gst_type_find_factory_get_caps (factory);
+
+        if (gst_plugin_feature_get_rank (feature) > 0 && caps != NULL) {
+          for (i = 0; i < gst_caps_get_size (caps); i++) {
+            const GstStructure *structure = gst_caps_get_structure (caps, i);
+
+            s = g_strdup (gst_structure_get_name (structure));
+            mime_list = g_list_prepend (mime_list, s);
+          }
+        }
+      }
+
+      features = g_list_next (features);
+    }
+  }
+
+  return mime_list;
+}
+
+GList *
+g_list_uniqify (GList * list)
+{
+  GList *item;
+
+  for (item = g_list_first (list); item; item = g_list_next (item)) {
+    GList *next_item = g_list_next (item);
+
+    while (next_item && strcmp (item->data, next_item->data) == 0) {
+      g_free (next_item->data);
+      list = g_list_delete_link (list, next_item);
+      next_item = g_list_next (item);
+    }
+  }
+
+  return list;
+}
+
+static GList *
+get_pad_templates_info (GstElement * element, GstElementFactory * factory,
+    GstPadDirection dir)
+{
+  GstElementClass *gstelement_class;
+  const GList *pads;
+  GstPadTemplate *padtemplate;
+  GList *mime_list = NULL;
+
+  if (!factory->numpadtemplates) {
+    return NULL;
+  }
+
+  gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
+
+  pads = factory->padtemplates;
+  while (pads) {
+    padtemplate = (GstPadTemplate *) (pads->data);
+    pads = g_list_next (pads);
+
+    if (padtemplate->direction == dir) {
+      if (padtemplate->caps) {
+        GstStructure *structure;
+        int i;
+
+        for (i = 0; i < gst_caps_get_size (padtemplate->caps); i++) {
+          structure = gst_caps_get_structure (padtemplate->caps, i);
+          mime_list = g_list_prepend (mime_list,
+              g_strdup (gst_structure_get_name (structure)));
+        }
+      }
+    }
+  }
+  return mime_list;
+}
+
+static GList *
+get_element_mime_list (const char *klass, GstPadDirection dir)
+{
+  GList *mime_list = NULL;
+  GList *plugins;
+
+  for (plugins = gst_registry_pool_plugin_list (); plugins;
+      plugins = g_list_next (plugins)) {
+    GList *features;
+    GstPlugin *plugin;
+
+    plugin = (GstPlugin *) (plugins->data);
+
+    features = gst_plugin_get_feature_list (plugin);
+    while (features) {
+      GstPluginFeature *feature;
+
+      feature = GST_PLUGIN_FEATURE (features->data);
+
+      if (GST_IS_ELEMENT_FACTORY (feature)) {
+        GstElementFactory *factory;
+        GstElement *element;
+
+        factory = GST_ELEMENT_FACTORY (feature);
+        if (strncmp (factory->details.klass, klass, strlen (klass)) == 0) {
+          if (gst_plugin_feature_get_rank (feature) > 0) {
+            GList *list;
+
+            element = gst_element_factory_create (factory, NULL);
+            list = get_pad_templates_info (element, factory, dir);
+            mime_list = g_list_concat (mime_list, list);
+            gst_object_unref (GST_OBJECT (element));
+          }
+        }
+      }
+
+      features = g_list_next (features);
+    }
+  }
+
+  return mime_list;
+}
+
+static void
+print_mime_list (void)
+{
+  GList *list;
+  GList *typefind_list;
+  GList *item;
+  GList *item2;
+
+  typefind_list = get_typefind_mime_list ();
+  typefind_list = g_list_sort (typefind_list, list_sort_func);
+  typefind_list = g_list_uniqify (typefind_list);
+
+  list = get_element_mime_list ("Codec/Demuxer", GST_PAD_SINK);
+  list = g_list_concat (list, get_element_mime_list ("Codec/Decoder",
+          GST_PAD_SINK));
+  list = g_list_sort (list, list_sort_func);
+  list = g_list_uniqify (list);
+
+  g_print ("MIME media type list:\n");
+  for (item = g_list_first (list); item; item = g_list_next (item)) {
+    for (item2 = g_list_first (typefind_list); item2;
+        item2 = g_list_next (item2)) {
+      if (strcmp ((char *) item->data, (char *) item2->data) == 0) {
+        g_print ("  %s\n", (char *) item->data);
+      }
+    }
+  }
+}
+
+
+int
+main (int argc, char *argv[])
+{
+
+#ifdef GETTEXT_PACKAGE
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+  textdomain (GETTEXT_PACKAGE);
+#endif
+
+  gst_init (&argc, &argv);
+
+  print_element_list ("Codec/Demuxer", GST_PAD_SINK);
+  print_element_list ("Codec/Decoder", GST_PAD_SINK);
+  print_element_list ("Codec/Muxer", GST_PAD_SRC);
+  print_element_list ("Codec/Encoder", GST_PAD_SRC);
+  print_typefind_list ();
+  print_mime_list ();
+
+  return 0;
+}
diff --git a/testsuite/registry/Makefile.am b/testsuite/registry/Makefile.am
new file mode 100644 (file)
index 0000000..a95436e
--- /dev/null
@@ -0,0 +1,7 @@
+include ../Rules
+
+tests_pass = gst-print-formats
+tests_fail =
+tests_ignore =
+
+
diff --git a/testsuite/registry/gst-print-formats.c b/testsuite/registry/gst-print-formats.c
new file mode 100644 (file)
index 0000000..8faeec6
--- /dev/null
@@ -0,0 +1,347 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *               2000 Wim Taymans <wtay@chello.be>
+ *               2004 Thomas Vander Stichele <thomas@apestaart.org>
+ *
+ * gst-inspect.c: tool to inspect the GStreamer registry
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/gst.h>
+
+#include "gst/gst-i18n-app.h"
+
+#include <string.h>
+#include <locale.h>
+#include <glib/gprintf.h>
+
+#define static
+
+static void
+print_pad_templates_info (GstElement * element, GstElementFactory * factory,
+    GstPadDirection dir)
+{
+  GstElementClass *gstelement_class;
+  const GList *pads;
+  GstPadTemplate *padtemplate;
+
+  if (!factory->numpadtemplates) {
+    return;
+  }
+
+  gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
+
+  pads = factory->padtemplates;
+  while (pads) {
+    padtemplate = (GstPadTemplate *) (pads->data);
+    pads = g_list_next (pads);
+
+    if (padtemplate->direction == dir) {
+      if (padtemplate->caps) {
+        GstStructure *structure;
+        int i;
+
+        for (i = 0; i < gst_caps_get_size (padtemplate->caps); i++) {
+          structure = gst_caps_get_structure (padtemplate->caps, i);
+          g_print ("    %s\n", gst_structure_get_name (structure));
+        }
+      }
+    }
+  }
+}
+
+static void
+print_element_list (const char *klass, GstPadDirection dir)
+{
+  GList *plugins;
+
+  g_print ("Elements in %s:\n", klass);
+  for (plugins = gst_registry_pool_plugin_list (); plugins;
+      plugins = g_list_next (plugins)) {
+    GList *features;
+    GstPlugin *plugin;
+
+    plugin = (GstPlugin *) (plugins->data);
+
+    features = gst_plugin_get_feature_list (plugin);
+    while (features) {
+      GstPluginFeature *feature;
+
+      feature = GST_PLUGIN_FEATURE (features->data);
+
+      if (GST_IS_ELEMENT_FACTORY (feature)) {
+        GstElementFactory *factory;
+        GstElement *element;
+
+        factory = GST_ELEMENT_FACTORY (feature);
+        if (strncmp (factory->details.klass, klass, strlen (klass)) == 0) {
+          g_print ("  %s: %s (%d)\n", GST_PLUGIN_FEATURE_NAME (factory),
+              factory->details.longname, gst_plugin_feature_get_rank (feature));
+          element = gst_element_factory_create (factory, NULL);
+          print_pad_templates_info (element, factory, dir);
+          gst_object_unref (GST_OBJECT (element));
+        }
+      }
+
+      features = g_list_next (features);
+    }
+  }
+  g_print ("\n");
+}
+
+static void
+print_typefind_list (void)
+{
+  GList *plugins;
+
+  g_print ("Typefind list:\n");
+  for (plugins = gst_registry_pool_plugin_list (); plugins;
+      plugins = g_list_next (plugins)) {
+    GList *features;
+    GstPlugin *plugin;
+
+    plugin = (GstPlugin *) (plugins->data);
+
+    features = gst_plugin_get_feature_list (plugin);
+    while (features) {
+      GstPluginFeature *feature;
+
+      feature = GST_PLUGIN_FEATURE (features->data);
+
+      if (GST_IS_TYPE_FIND_FACTORY (feature)) {
+        GstTypeFindFactory *factory;
+        char *s;
+
+        gst_plugin_load_file (plugin->filename, NULL);
+
+        factory = GST_TYPE_FIND_FACTORY (feature);
+        g_print ("  %s: (%d)\n", GST_PLUGIN_FEATURE_NAME (factory),
+            gst_plugin_feature_get_rank (feature));
+        s = gst_caps_to_string (gst_type_find_factory_get_caps (factory));
+        g_print ("    %s\n", s);
+        g_free (s);
+      }
+
+      features = g_list_next (features);
+    }
+  }
+  g_print ("\n");
+}
+
+static int
+list_sort_func (gconstpointer a, gconstpointer b)
+{
+  return strcmp ((const char *) a, (const char *) b);
+}
+
+static GList *
+get_typefind_mime_list (void)
+{
+  GList *plugins;
+  GList *mime_list = NULL;
+
+  for (plugins = gst_registry_pool_plugin_list (); plugins;
+      plugins = g_list_next (plugins)) {
+    GList *features;
+    GstPlugin *plugin;
+
+    plugin = (GstPlugin *) (plugins->data);
+
+    features = gst_plugin_get_feature_list (plugin);
+    while (features) {
+      GstPluginFeature *feature;
+
+      feature = GST_PLUGIN_FEATURE (features->data);
+
+      if (GST_IS_TYPE_FIND_FACTORY (feature)) {
+        GstTypeFindFactory *factory;
+        char *s;
+        int i;
+        const GstCaps *caps;
+
+        factory = GST_TYPE_FIND_FACTORY (feature);
+        caps = gst_type_find_factory_get_caps (factory);
+
+        if (gst_plugin_feature_get_rank (feature) > 0 && caps != NULL) {
+          for (i = 0; i < gst_caps_get_size (caps); i++) {
+            const GstStructure *structure = gst_caps_get_structure (caps, i);
+
+            s = g_strdup (gst_structure_get_name (structure));
+            mime_list = g_list_prepend (mime_list, s);
+          }
+        }
+      }
+
+      features = g_list_next (features);
+    }
+  }
+
+  return mime_list;
+}
+
+GList *
+g_list_uniqify (GList * list)
+{
+  GList *item;
+
+  for (item = g_list_first (list); item; item = g_list_next (item)) {
+    GList *next_item = g_list_next (item);
+
+    while (next_item && strcmp (item->data, next_item->data) == 0) {
+      g_free (next_item->data);
+      list = g_list_delete_link (list, next_item);
+      next_item = g_list_next (item);
+    }
+  }
+
+  return list;
+}
+
+static GList *
+get_pad_templates_info (GstElement * element, GstElementFactory * factory,
+    GstPadDirection dir)
+{
+  GstElementClass *gstelement_class;
+  const GList *pads;
+  GstPadTemplate *padtemplate;
+  GList *mime_list = NULL;
+
+  if (!factory->numpadtemplates) {
+    return NULL;
+  }
+
+  gstelement_class = GST_ELEMENT_CLASS (G_OBJECT_GET_CLASS (element));
+
+  pads = factory->padtemplates;
+  while (pads) {
+    padtemplate = (GstPadTemplate *) (pads->data);
+    pads = g_list_next (pads);
+
+    if (padtemplate->direction == dir) {
+      if (padtemplate->caps) {
+        GstStructure *structure;
+        int i;
+
+        for (i = 0; i < gst_caps_get_size (padtemplate->caps); i++) {
+          structure = gst_caps_get_structure (padtemplate->caps, i);
+          mime_list = g_list_prepend (mime_list,
+              g_strdup (gst_structure_get_name (structure)));
+        }
+      }
+    }
+  }
+  return mime_list;
+}
+
+static GList *
+get_element_mime_list (const char *klass, GstPadDirection dir)
+{
+  GList *mime_list = NULL;
+  GList *plugins;
+
+  for (plugins = gst_registry_pool_plugin_list (); plugins;
+      plugins = g_list_next (plugins)) {
+    GList *features;
+    GstPlugin *plugin;
+
+    plugin = (GstPlugin *) (plugins->data);
+
+    features = gst_plugin_get_feature_list (plugin);
+    while (features) {
+      GstPluginFeature *feature;
+
+      feature = GST_PLUGIN_FEATURE (features->data);
+
+      if (GST_IS_ELEMENT_FACTORY (feature)) {
+        GstElementFactory *factory;
+        GstElement *element;
+
+        factory = GST_ELEMENT_FACTORY (feature);
+        if (strncmp (factory->details.klass, klass, strlen (klass)) == 0) {
+          if (gst_plugin_feature_get_rank (feature) > 0) {
+            GList *list;
+
+            element = gst_element_factory_create (factory, NULL);
+            list = get_pad_templates_info (element, factory, dir);
+            mime_list = g_list_concat (mime_list, list);
+            gst_object_unref (GST_OBJECT (element));
+          }
+        }
+      }
+
+      features = g_list_next (features);
+    }
+  }
+
+  return mime_list;
+}
+
+static void
+print_mime_list (void)
+{
+  GList *list;
+  GList *typefind_list;
+  GList *item;
+  GList *item2;
+
+  typefind_list = get_typefind_mime_list ();
+  typefind_list = g_list_sort (typefind_list, list_sort_func);
+  typefind_list = g_list_uniqify (typefind_list);
+
+  list = get_element_mime_list ("Codec/Demuxer", GST_PAD_SINK);
+  list = g_list_concat (list, get_element_mime_list ("Codec/Decoder",
+          GST_PAD_SINK));
+  list = g_list_sort (list, list_sort_func);
+  list = g_list_uniqify (list);
+
+  g_print ("MIME media type list:\n");
+  for (item = g_list_first (list); item; item = g_list_next (item)) {
+    for (item2 = g_list_first (typefind_list); item2;
+        item2 = g_list_next (item2)) {
+      if (strcmp ((char *) item->data, (char *) item2->data) == 0) {
+        g_print ("  %s\n", (char *) item->data);
+      }
+    }
+  }
+}
+
+
+int
+main (int argc, char *argv[])
+{
+
+#ifdef GETTEXT_PACKAGE
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+  textdomain (GETTEXT_PACKAGE);
+#endif
+
+  gst_init (&argc, &argv);
+
+  print_element_list ("Codec/Demuxer", GST_PAD_SINK);
+  print_element_list ("Codec/Decoder", GST_PAD_SINK);
+  print_element_list ("Codec/Muxer", GST_PAD_SRC);
+  print_element_list ("Codec/Encoder", GST_PAD_SRC);
+  print_typefind_list ();
+  print_mime_list ();
+
+  return 0;
+}