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