static void parse_options(int argc, char **argv) { int ch; name_separator = "\n"; while ((ch = getopt(argc, argv, "hn:d:SMx")) > 0) { switch (ch) { case 'h': case '?': usage(); case 'S': dont_sort = 1; break; case 'n': name_separator = optarg; break; case 'd': dir_separator = optarg; break; case 'M': output_match = 1; break; case 'x': output_scores = 1; } } process_separator(&name_separator, "name-separator", ""); process_separator(&dir_separator, "dir-separator", "/"); filter_dir_separator = dir_separator[0]; if (optind >= argc) { fputs("Missing pattern argument\n", stderr); usage(); } pattern = argv[optind++]; if (optind < argc) { fprintf(stderr, "Unknown option: %s\n", argv[optind]); usage(); } }
/*============================================================================= * This function processes a directory entry and all it's child nodes */ void process_directory(GMenuTreeDirectory *directory, gboolean isRoot) { int hasSeparator = 0; int hasMenu = 0; GMenuTreeItemType entryType; GSList *entryList = gmenu_tree_directory_get_contents (directory); GSList *l; if (option_do_not_use_categories == 00 && isRoot == 0 && g_slist_length(entryList) > 0) { hasMenu = 1; if (option_show_amount_of_entries == 1) { g_printf( "<menu id=\"xdg-menu-%s\" label=\"%s (%d)\">\n", gmenu_tree_directory_get_name(directory), gmenu_tree_directory_get_name(directory), g_slist_length(entryList)); } else { g_printf( "<menu id=\"xdg-menu-%s\" label=\"%s\">\n", gmenu_tree_directory_get_name(directory), gmenu_tree_directory_get_name(directory)); } } for (l = entryList; l; l = l->next) { GMenuTreeItem *item = l->data; entryType = gmenu_tree_item_get_type (GMENU_TREE_ITEM(item)); switch (entryType) { case GMENU_TREE_ITEM_DIRECTORY: if (hasSeparator) { process_separator(GMENU_TREE_SEPARATOR(item)); hasSeparator = 0; } process_directory(GMENU_TREE_DIRECTORY(item), 0); break; case GMENU_TREE_ITEM_ENTRY: if (hasSeparator) { process_separator(GMENU_TREE_SEPARATOR(item)); hasSeparator = 0; } process_entry(GMENU_TREE_ENTRY(item)); break; case GMENU_TREE_ITEM_SEPARATOR: hasSeparator = 1; break; } gmenu_tree_item_unref (item); } if (hasMenu == 1) { g_printf("</menu>\n"); } g_slist_free (entryList); }