Make modules more flexible (builtin or loaded are identical). Add a test module
[lttv.git] / ltt / branches / poly / lttv / main / option.c
index c6de05413ebe9b2d860b1f63a0fcf68e417ac54b..7532073ed95c6e9f90f902c4833c66e7694512ed 100644 (file)
 
 #include <popt.h>
 #include <glib.h>
+#include <lttv/module.h>
 #include <lttv/option.h>
 
-#define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format)
-#define g_debug(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format)
-
 typedef struct _LttvOption {
   char *long_name;
   char char_name;
@@ -55,32 +53,6 @@ free_option(LttvOption *option)
 }
 
 
-void lttv_option_init(int argc, char **argv)
-{
-  g_info("Init option.c");
-  options = g_hash_table_new(g_str_hash, g_str_equal);
-}
-
-
-void lttv_option_destroy()
-{
-  LttvOption option;
-
-  GPtrArray *list = g_ptr_array_new();
-
-  int i;
-
-  g_info("Destroy option.c");
-  g_hash_table_foreach(options, list_options, list);
-  g_hash_table_destroy(options);
-
-  for(i = 0 ; i < list->len ; i++) {
-    free_option((LttvOption *)list->pdata[i]);
-  }
-  g_ptr_array_free(list, TRUE);
-}
-
-
 void lttv_option_add(const char *long_name, const char char_name,
     const char *description, const char *arg_description,
     const LttvOptionType t, void *p,
@@ -88,7 +60,7 @@ void lttv_option_add(const char *long_name, const char char_name,
 {
   LttvOption *option;
 
-  g_info("Add option %s", long_name);
+  g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "Add option %s", long_name);
   if(g_hash_table_lookup(options, long_name) != NULL) {
     g_warning("duplicate option");
     return;
@@ -112,7 +84,7 @@ lttv_option_remove(const char *long_name)
 {
   LttvOption *option = g_hash_table_lookup(options, long_name);
 
-  g_info("Remove option %s", long_name);
+  g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "Remove option %s", long_name);
   if(option == NULL) {
     g_warning("trying to remove unknown option %s", long_name);
     return;
@@ -209,17 +181,20 @@ void lttv_option_parse(int argc, char **argv)
   
     if(rc > 0) {
       option = (LttvOption *)(list->pdata[rc - 1]);
-      g_info("Option %s encountered", option->long_name);
+      g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "Option %s encountered", 
+          option->long_name);
       if(option->hook != NULL) { 
-        g_info("Option %s hook called", option->long_name);
+        g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Option %s hook called", 
+            option->long_name);
         option->hook(option->hook_data);
       }
       i++;
     } 
 
     else if(rc == POPT_ERROR_BADOPT && i != first_arg) {
-      g_info("Option %s not recognized, rescan options with new additions",
-            poptBadOption(c,0));
+      g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, 
+          "Option %s not recognized, rescan options with new additions",
+         poptBadOption(c,0));
 
       /* Perhaps this option is newly added, restart parsing */
 
@@ -232,7 +207,8 @@ void lttv_option_parse(int argc, char **argv)
       for(i = 0; i < first_arg; i++) {
         rc = poptGetNextOpt(c);
         option = (LttvOption *)(list->pdata[rc - 1]);
-        g_info("Option %s rescanned, skipped", option->long_name);
+        g_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Option %s rescanned, skipped",
+            option->long_name);
       }
     }
 
@@ -250,6 +226,7 @@ void lttv_option_parse(int argc, char **argv)
   destroy_popts(&list, &popts, &c);
 }
 
+/* CHECK */
 static void show_help(LttvOption *option)
 {
   printf("--%s  -%c  argument: %s\n" , option->long_name,
@@ -280,3 +257,31 @@ void lttv_option_show_help(void)
 
 }
 
+static void init()
+{
+  g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "Init option.c");
+  options = g_hash_table_new(g_str_hash, g_str_equal);
+}
+
+
+static void destroy()
+{
+  LttvOption option;
+
+  GPtrArray *list = g_ptr_array_new();
+
+  int i;
+
+  g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "Destroy option.c");
+  g_hash_table_foreach(options, list_options, list);
+  g_hash_table_destroy(options);
+
+  for(i = 0 ; i < list->len ; i++) {
+    free_option((LttvOption *)list->pdata[i]);
+  }
+  g_ptr_array_free(list, TRUE);
+}
+
+LTTV_MODULE("option", "Command line options processing", \
+    "Functions to add, remove and parse command line options", \
+    init, destroy)
This page took 0.023749 seconds and 4 git commands to generate.