Enlightenment CVS committal

Author  : onefang
Project : e17
Module  : apps/e_utils

Dir     : e17/apps/e_utils/src/bin/e17genmenu/src/bin


Modified Files:
        dumb_list.c dumb_list.h fdo_menus.c 


Log Message:
More fdo xml expansions and misc stuff.

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/apps/e_utils/src/bin/e17genmenu/src/bin/dumb_list.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- dumb_list.c 17 Feb 2006 11:41:18 -0000      1.8
+++ dumb_list.c 20 Feb 2006 08:51:17 -0000      1.9
@@ -124,6 +124,64 @@
    list->buffers[list->buffers_size++] = element;
 }
 
+
+/* OK, so we need an insert after all, and it falls into the dumb category. */
+Dumb_List *
+dumb_list_insert(Dumb_List *list, int before, void *element, 
Dumb_List_Element_Type type)
+{
+   int i;
+
+   list->elements = (Dumb_List_Element *) realloc(list->elements, (list->size 
+ 1) * sizeof(Dumb_List_Element));
+   list->size++;
+   for (i = list->size - 1; i > before; i--)
+      {
+         list->elements[i].element = list->elements[i - 1].element;
+         list->elements[i].type = list->elements[i - 1].type;
+      }
+   list->elements[before].element = element;
+   list->elements[before].type = type;
+   return list;
+}
+
+
+/* OK, so we need a list insert after all, and it falls into the dumb 
category. */
+Dumb_List *
+dumb_list_insert_list(Dumb_List *list, int before, Dumb_List *element)
+{
+   int i, size;
+
+   size = element->size;
+   list->elements = (Dumb_List_Element *) realloc(list->elements, (list->size 
+ size) * sizeof(Dumb_List_Element));
+   list->size += size;
+   for (i = list->size - 1; i > before; i--)
+      {
+         list->elements[i].element = list->elements[i - size].element;
+         list->elements[i].type = list->elements[i - size].type;
+      }
+   for (i = 0; i < size; i++)
+      {
+         list->elements[before + i].element = element->elements[i].element;
+         list->elements[before + i].type = element->elements[i].type;
+      }
+
+   /* Careful, this might screw up the freeing order if that is important. */
+/*
+   size = element->buffers_size;
+   if (size)
+      {
+         list->buffers = (char **) realloc(list->buffers, (list->buffers_size 
+ size) * sizeof(char *));
+         list->buffers_size += size;
+         for (i = 0; i < size; i++)
+            {
+               list->buffers[list->buffers_size + i] = element->buffers[i];
+              element->buffers[i] = NULL;
+            }
+      }
+*/
+   return list;
+}
+
+
 Dumb_List *
 dumb_list_add_child(Dumb_List *list, Dumb_List *element)
 {
@@ -177,6 +235,7 @@
            }
         else if (list->elements[i].type == DUMB_LIST_ELEMENT_TYPE_NULL)
            {
+               /* This falls into the dumb category. */
               int j = i;
               int k = i;
               int moved = 0;
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/apps/e_utils/src/bin/e17genmenu/src/bin/dumb_list.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- dumb_list.h 14 Feb 2006 08:40:44 -0000      1.6
+++ dumb_list.h 20 Feb 2006 08:51:17 -0000      1.7
@@ -46,6 +46,8 @@
    Dumb_List *dumb_list_add(Dumb_List *list, char *element);
    void       dumb_list_track(Dumb_List *list, void *element);
    Dumb_List *dumb_list_extend(Dumb_List *list, char *element);
+   Dumb_List *dumb_list_insert(Dumb_List *list, int before, void *element, 
Dumb_List_Element_Type type);
+   Dumb_List *dumb_list_insert_list(Dumb_List *list, int before, Dumb_List 
*element);
    Dumb_List *dumb_list_add_child(Dumb_List *list, Dumb_List *element);
    Dumb_List *dumb_list_add_hash(Dumb_List *list, Ecore_Hash *element);
    int        dumb_list_exist(Dumb_List *list, char *element);
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/apps/e_utils/src/bin/e17genmenu/src/bin/fdo_menus.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- fdo_menus.c 19 Feb 2006 13:19:06 -0000      1.14
+++ fdo_menus.c 20 Feb 2006 08:51:17 -0000      1.15
@@ -51,6 +51,8 @@
 };
 
 static int _fdo_menus_unxml(const void *data, Dumb_List *list, int element, 
int level);
+static int _fdo_menus_check_directory(const void *data, char *path);
+static int _fdo_menus_check_menu(const void *data, char *path);
 static void _fdo_menus_unxml_rules(Dumb_List *rules, Dumb_List *list, char 
type, char sub_type);
 static void _fdo_menus_unxml_moves(Dumb_List *menu, Dumb_List *list);
 static void _fdo_menus_add_dirs(Dumb_List *list, Dumb_List *paths, char *pre, 
char *post, char *extra, int element);
@@ -81,7 +83,6 @@
                printf("\n\n");
                data.unallocated = FALSE;
                dumb_list_foreach(xml, 0, _fdo_menus_generate, &data);
-               printf("\n\n");
                data.unallocated = TRUE;
                dumb_list_foreach(xml, 0, _fdo_menus_generate, &data);
                dumb_list_dump(xml, 0);
@@ -228,7 +229,7 @@
                                                    dumb_list_track(menu, 
menu->elements[0].element);
                                                   flags = (char *) 
menu->elements[0].element;
                                                   flags += 7;
-                                                  /* The rest of this is 
probably not needed, ekcept to ease debugging. */
+                                                  /* The rest of this is 
probably not needed, except to ease debugging. */
                                                   if (unxml_data->stack->size 
<= level)
                                                      {
                                                         while 
(unxml_data->stack->size < level)
@@ -333,19 +334,42 @@
                                 char *string;
 
                                 string = (char *) menu->elements[i].element;
-                                 if (strncmp(string, "<AppDir ", 8) == 0)
-                                   {
-                                       _fdo_menus_expand_apps(unxml_data, 
&string[8], pool);
-                                      result = 1;
-                                   }
-                                 else if (strncmp(string, "<DirectoryDir ", 8) 
== 0)
+                                 if (strncmp(string, "<DirectoryDir ", 14) == 
0)
                                    {
+                                      char merge_path[MAX_PATH];
+                                      Dumb_List *merge;
+
+                                       if (string[14] == '/')
+                                         sprintf(merge_path, "%s", 
&string[14]);
+                                      else
+                                         sprintf(merge_path, "%s%s", 
unxml_data->path, &string[14]);
+                                       merge = dumb_list_new(NULL);
+                                      if (merge)
+                                         {
+                                             
fdo_paths_recursive_search(merge_path, NULL, _fdo_menus_check_directory, merge);
+                                            dumb_list_insert_list(menu, i + 1, 
merge);
+                                         }
+                                      result = 1;
                                    }
                                  else if (strncmp(string, "<LegacyDir ", 11) 
== 0)
                                    {
                                    }
-                                 else if (strncmp(string, "<MergeDir ", 8) == 
0)
+                                 else if (strncmp(string, "<MergeDir ", 10) == 
0)
                                    {
+                                      char merge_path[MAX_PATH];
+                                      Dumb_List *merge;
+
+                                       if (string[10] == '/')
+                                         sprintf(merge_path, "%s", 
&string[10]);
+                                      else
+                                         sprintf(merge_path, "%s%s", 
unxml_data->path, &string[10]);
+                                       merge = dumb_list_new(NULL);
+                                      if (merge)
+                                         {
+                                             
fdo_paths_recursive_search(merge_path, NULL, _fdo_menus_check_menu, merge);
+                                            dumb_list_insert_list(menu, i + 1, 
merge);
+                                         }
+                                      result = 1;
                                    }
                                  else if (strncmp(string, "<MergeFile ", 8) == 
0)
                                    {
@@ -358,6 +382,29 @@
                              }
                        }
 
+                    for (i = 4; i < menu->size; i++)
+                       {
+                          int result = 0;
+
+                           if (menu->elements[i].type == 
DUMB_LIST_ELEMENT_TYPE_STRING)
+                             {
+                                char *string;
+
+                                string = (char *) menu->elements[i].element;
+                                 if (strncmp(string, "<AppDir ", 8) == 0)
+                                   {
+                                       _fdo_menus_expand_apps(unxml_data, 
&string[8], pool);
+                                      result = 1;
+                                   }
+                             }
+                          if (result)
+                             {
+                                 menu->elements[i].type = 
DUMB_LIST_ELEMENT_TYPE_NULL;
+                                 menu->elements[i].element = NULL;
+                             }
+                       }
+
+
                      /* Add it if it has not been deleted. */
                      if (flags[1] != 'D')
                        {
@@ -377,6 +424,50 @@
    return 0;
 }
 
+static int
+_fdo_menus_check_directory(const void *data, char *path)
+{
+   char *p;
+   Dumb_List *merge;
+
+   merge = (Dumb_List *) data;
+   p = strrchr(path, '.');
+   if (p)
+      {
+         if (strcmp(p, ".directory") == 0)
+           {
+              char merge_file[MAX_PATH];
+
+               sprintf(merge_file, "<Directory %s", path);
+              dumb_list_extend(merge, merge_file);
+           }
+      }
+
+   return 0;
+}
+
+static int
+_fdo_menus_check_menu(const void *data, char *path)
+{
+   char *p;
+   Dumb_List *merge;
+
+   merge = (Dumb_List *) data;
+   p = strrchr(path, '.');
+   if (p)
+      {
+         if (strcmp(p, ".menu") == 0)
+           {
+              char merge_file[MAX_PATH];
+
+               sprintf(merge_file, "<MergeFile type=\"path\" %s", path);
+              dumb_list_extend(merge, merge_file);
+           }
+      }
+
+   return 0;
+}
+
 
 static void
 _fdo_menus_unxml_rules(Dumb_List *rules, Dumb_List *list, char type, char 
sub_type)




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to