Enlightenment CVS committal

Author  : turran
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_argument.c etk_argument.h etk_main.c etk_main.h 
        etk_menu_bar.c 


Log Message:
Etk
===
+ API changed: etk_init(int *argc, char *** argv). 
+ etk_argument: now it modifies the parameters on the detected arguments

Rest of etk apps, change etk_init(engine) with the new one.



===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_argument.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- etk_argument.c      15 Mar 2006 12:38:41 -0000      1.6
+++ etk_argument.c      2 Aug 2006 05:53:59 -0000       1.7
@@ -44,19 +44,24 @@
  *
  * int main(int argc, char **argv)
  * {
- *    etk_arguments_parse(args, argc, argv);
+ *    etk_arguments_parse(args, &argc, argv);
  *
  *    return 0;
  * }
  * @endcode
  */
-int etk_arguments_parse(Etk_Argument *args, int argc, char **argv)
+int etk_arguments_parse(Etk_Argument *args, int *argc, char ***argv)
 {
    int i;
+   int ret_argc;
+   char **ret_argv;
+   int *delete; /* 1 delete, 0 keep */
    Etk_Argument *arg;
-      
+   
+   if(!args || !argc || !argv)
+      return ETK_ARGUMENT_RETURN_OK_NONE_PARSED;
    /* no arguments */
-   if(argc < 2)
+   if(*argc < 2)
    {
       /* check for required arguments */
       i = 0;
@@ -72,18 +77,22 @@
       }
       return ETK_ARGUMENT_RETURN_OK_NONE_PARSED;
    }
-   
-   for(i = 1; i < argc; i++)
+   /* create the array */
+   delete = calloc(*argc, sizeof(int));
+
+   /* arguments */ 
+   for(i = 1; i < *argc; i++)
    {
       char *cur;
       
-      cur = argv[i];
+      cur = (*argv)[i];
       if(!cur) continue;
       
       /* min length is 2, anything less is invalid */
       if(strlen(cur) < 2 && cur[0] == '-')
       {
-        printf(_("Argument %d '%s' is too short\n"), i, argv[i]);
+        printf(_("Argument %d '%s' is too short\n"), i, (*argv)[i]);
+        free(delete);
         return ETK_ARGUMENT_RETURN_MALFORMED;
       }
 
@@ -99,14 +108,15 @@
            {
               /* check to see if arg needs value */
               if((arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED) &&
-                 i + 1 < argc)
+                 i + 1 < *argc)
               {
-                 char *val = argv[i + 1];
+                 char *val = (*argv)[i + 1];
                  
                  /* if no value is present, report error */
                  if(val[0] == '-')
                  {
                     printf(_("Argument %d '%s' requires a value\n"), i, cur);
+                    free(delete);
                     return ETK_ARGUMENT_RETURN_REQUIRED_VALUE_NOT_FOUND;
                  }
                  
@@ -114,20 +124,22 @@
                  arg->flags |= ETK_ARGUMENT_FLAG_PRIV_SET;
                  _etk_argument_status = 1;
                  ++i;
+                 delete[i] = delete[i+1] = 1;
               }
               else if (arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED
-                       && i + 1 >= argc)
+                       && i + 1 >= *argc)
               {
                  /* if no value is present, report error */
                  printf(_("Argument %d '%s' requires a value\n"), i, cur);
+                 free(delete);
                  return ETK_ARGUMENT_RETURN_REQUIRED_VALUE_NOT_FOUND;
               }
               else if(!(arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED))
               {
                  arg->flags |= ETK_ARGUMENT_FLAG_PRIV_SET;
                  _etk_argument_status = 1;
+                 delete[i] = 1;
               }
-                 
            }
            ++arg;
         }
@@ -161,12 +173,12 @@
            {                  
               /* check to see if arg needs value */
               if((arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED) &&
-                 ((i + 1 < argc) || (tmp != NULL)))
+                 ((i + 1 < *argc) || (tmp != NULL)))
               {
                  char *val;
                  
                  if(!tmp)
-                   val = argv[i + 1];
+                   val = (*argv)[i + 1];
                  else
                    val = tmp + 1;                          
                  
@@ -174,37 +186,45 @@
                  if(val[0] == '-')
                  {
                     printf(_("Argument %d '%s' requires a value\n"), i, cur);
+                    free(delete);
                     return ETK_ARGUMENT_RETURN_REQUIRED_VALUE_NOT_FOUND;
                  }
                  
                  arg->data = evas_list_append(arg->data, val);
                  arg->flags |= ETK_ARGUMENT_FLAG_PRIV_SET;
-                 _etk_argument_status = 1;               
+                 _etk_argument_status = 1;  
+                 delete[i] = 1;
                  
                  if(!tmp)
+                 {
                    ++i;
+                   delete[i+1] = 1;
+                 }
+
               }
               else if (arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED
-                       && i + 1 >= argc)
+                       && i + 1 >= *argc)
               {
                  /* if no value is present, report error */
                  printf(_("Argument %d '%s' requires a value\n"), i, cur);
+                 free(delete);
                  return ETK_ARGUMENT_RETURN_REQUIRED_VALUE_NOT_FOUND;
               }
               else if(!(arg->flags & ETK_ARGUMENT_FLAG_VALUE_REQUIRED))
               {
                  arg->flags |= ETK_ARGUMENT_FLAG_PRIV_SET;
                  _etk_argument_status = 1;
+                 delete[i] = 1;
               }                  
            }
            
            if(tmp)
            {
               free(cur);
-              cur = argv[i];
+              cur = (*argv)[i];
            }
-                   
-           if(arg->flags & ETK_ARGUMENT_FLAG_MULTIVALUE && i + 1 < argc &&
+           /* TODO test this on removing args! */          
+           if(arg->flags & ETK_ARGUMENT_FLAG_MULTIVALUE && i + 1 < *argc &&
               arg->short_name != -1 && arg->flags & ETK_ARGUMENT_FLAG_PRIV_SET)
            {
               /* if we want multi-argument arguments like:
@@ -213,14 +233,14 @@
                */
               char *extra;
               Evas_List *value = NULL;
-              int j = 1;
+              int j = i + 1;
               
-              extra = argv[i + j];
-              while(i + j < argc)
+              extra = (*argv)[j];
+              while(j < *argc)
               {
                  if(extra[0] == '-')
                  {
-                    j = argc;
+                    j = *argc;
                     break;
                  }
                  
@@ -244,7 +264,7 @@
                  }
                  
                  ++j;
-                 extra = argv[i + j];
+                 extra = (*argv)[j];
               }
            }
            
@@ -261,12 +281,30 @@
       if(!(arg->flags & ETK_ARGUMENT_FLAG_PRIV_SET) &&
         arg->flags & ETK_ARGUMENT_FLAG_REQUIRED)
       {
-        printf(_("Argument %d '-%c | --%s' is required\n"), i, 
arg->short_name, arg->long_name);
+        printf(_("Argument %d '-%c | --%s' is required\n"), i, 
arg->short_name, arg->long_name);         free(delete);
         return ETK_ARGUMENT_RETURN_REQUIRED_NOT_FOUND;
       }
       ++i; ++arg;
    }
-   
+   /* copy parameters */
+   ret_argc = 0;
+   ret_argv = malloc(sizeof(char *) * (*argc));
+   for(i = 0; i < *argc; i++)
+   {
+       if(!delete[i])
+       {
+               ret_argv[ret_argc] = strdup((*argv)[i]);
+               ret_argc++;
+               /* TODO: delete this comments after correct behaviour */
+               //printf("dont delete %s\n", (*argv)[i]);
+       }
+       /*else
+               printf("deleting %s\n", (*argv)[i]);*/
+   }
+   free(delete);
+   *argv = ret_argv;
+   *argc = ret_argc;
+ 
    /* call all the callbacks */
    i = 0;
    arg = args;      
@@ -276,7 +314,6 @@
        arg->func(args, i);
       ++i; ++arg;
    }
-
    if(_etk_argument_status == 0)     
      return ETK_ARGUMENT_RETURN_OK_NONE_PARSED;     
    else
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_argument.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- etk_argument.h      18 May 2006 13:13:33 -0000      1.6
+++ etk_argument.h      2 Aug 2006 05:53:59 -0000       1.7
@@ -38,7 +38,7 @@
    char *description;         /* description of the argument for help */
 };
 
-int etk_arguments_parse(Etk_Argument *args, int argc, char **argv);
+int etk_arguments_parse(Etk_Argument *args, int *argc, char ***argv);
 void etk_argument_help_show(Etk_Argument *args);  
 Evas_List *etk_argument_extra_find(const char *key);
 Etk_Bool etk_argument_is_set(Etk_Argument *args, const char *long_name, char 
short_name);
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_main.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -3 -r1.27 -r1.28
--- etk_main.c  30 Jul 2006 21:09:32 -0000      1.27
+++ etk_main.c  2 Aug 2006 05:53:59 -0000       1.28
@@ -2,12 +2,14 @@
 #include "etk_main.h"
 #include <locale.h>
 #include <limits.h>
+#include <string.h>
 
 #include <Ecore.h>
 #include <Ecore_Job.h>
 #include <Ecore_Evas.h>
 #include <Evas.h>
 #include <Edje.h>
+#include "etk_argument.h"
 #include "etk_engine.h"
 #include "etk_type.h"
 #include "etk_signal.h"
@@ -34,6 +36,16 @@
 static Etk_Bool _etk_main_initialized = ETK_FALSE;
 static Ecore_Job *_etk_main_iterate_job = NULL;
 
+/* configuration. FIXME should be on other subsystem? */
+static void _etk_main_options_setup(Etk_Argument *args, int index);
+
+Etk_Argument args[] = {
+   { "etk-engine", 0, NULL, _etk_main_options_setup, NULL, 
ETK_ARGUMENT_FLAG_OPTIONAL | ETK_ARGUMENT_FLAG_VALUE_REQUIRED, " " },
+   { NULL,   -1,  NULL, NULL,      NULL, ETK_ARGUMENT_FLAG_NONE,     " " }
+};
+char *_etk_engine_name = NULL;
+
+
 /**************************
  *
  * Implementation
@@ -47,10 +59,22 @@
  * @return Returns ETK_TRUE on success, ETK_FALSE on failure
  * @see etk_shutdown()
  */
-Etk_Bool etk_init(const char *engine_name)
+Etk_Bool etk_init(int *argc, char ***argv)
 {
+   int ret;
+
    if (_etk_main_initialized)
       return ETK_TRUE;
+    
+   ret = etk_arguments_parse(args, argc, argv);
+   if((ret != ETK_ARGUMENT_RETURN_OK_NONE_PARSED) && (ret != 
ETK_ARGUMENT_RETURN_OK))
+   {
+      ETK_WARNING("Arguments parsing failed!");
+      return ETK_FALSE;
+   }
+   /* TODO after the parsing, setup defaults if they arent set */
+   if(!_etk_engine_name)
+      _etk_engine_name = strdup("ecore_evas_software_x11");
    
    if (!evas_init())
    {
@@ -74,7 +98,7 @@
       ETK_WARNING("Etk_Engine initialization failed!");
       return ETK_FALSE;
    }
-   if (!etk_engine_load(engine_name))
+   if (!etk_engine_load(_etk_engine_name))
    {
       ETK_WARNING("Etk can not load the requested engine!");
       return ETK_FALSE;
@@ -94,6 +118,18 @@
    _etk_main_initialized = ETK_TRUE;
    return ETK_TRUE;
 }
+/**
+ * @brief Initializes Etk. This function needs to be called before any other 
call to an etk_* function. @n
+ * It initializes Evas, Ecore, Ecore_Evas, Ecore_X and Edje so you do not need 
to initialize them manually
+ * if you call etk_init().
+ * @return Returns ETK_TRUE on success, ETK_FALSE on failure
+ * @see etk_shutdown()
+ */
+Etk_Bool etk_init_with_options(int *argc, char ***argv, const char 
*extra_options)
+{
+   /* TODO: this is just a stub */
+   return ETK_TRUE;
+}
 
 /**
  * @brief Shuts down Etk. @n
@@ -263,4 +299,15 @@
       _etk_main_size_allocate_recursive(ETK_WIDGET(l->data), ETK_FALSE);
 }
 
+/* Setup parsed values. FIXME this should be on other subsystem (config?) */
+static void _etk_main_options_setup(Etk_Argument *args, int index)
+{
+   Evas_List *l;
+
+   l = args[index].data;
+   if(!strcmp(args[index].long_name, "etk-engine"))
+   {
+       _etk_engine_name = l->data;
+   }
+}
 /** @} */
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_main.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- etk_main.h  27 Jul 2006 16:49:35 -0000      1.5
+++ etk_main.h  2 Aug 2006 05:53:59 -0000       1.6
@@ -11,7 +11,8 @@
  * @{
  */
 
-Etk_Bool etk_init(const char *engine_name);
+Etk_Bool etk_init(int *argc, char ***argv);
+Etk_Bool etk_init_with_options(int *argc, char ***argv, const char 
*extra_options);
 void etk_shutdown();
 
 void etk_main();
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_menu_bar.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- etk_menu_bar.c      31 Jul 2006 23:23:12 -0000      1.8
+++ etk_menu_bar.c      2 Aug 2006 05:53:59 -0000       1.9
@@ -1,8 +1,16 @@
 /** @file etk_menu_bar.c */
+
+/* TODO: 
+ * remove Ecore_X from here 
+ */
 #include "etk_menu_bar.h"
 #include <stdlib.h>
 #include <Ecore.h>
-//#include <Ecore_X.h>
+
+#if BUILD_ENGINE_EE_S_X11
+#include <Ecore_X.h>
+#endif
+
 #include "etk_menu.h"
 #include "etk_menu_item.h"
 #include "etk_toplevel_widget.h"
@@ -168,7 +176,7 @@
  */
 static int _etk_menu_bar_mouse_move_cb(void *data, int type, void *event)
 {
-#if 0
+#if BUILD_ENGINE_EE_S_X11
    Etk_Menu_Bar *menu_bar;
    Ecore_X_Event_Mouse_Move *mouse_event;
    Etk_Toplevel_Widget *toplevel;
@@ -197,9 +205,8 @@
          break;
       }
    }
-   
+#endif   
    return 1;
-#endif
 }
 
 /* Called when the item is selected */



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to