#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static int menulen=0; typedef DIALOG_LISTITEM ListItem; ListItem *menu; #define ITEM_DATA help #define ITEM_PROMPT name #define ITEM_CHECKED state static void free_menu(void) { int i; if(menu) { for(i=0; iline && isspace(*p); p--) *p=0; p=strtok(line, "\t"); p=strtok(NULL, "\0"); add_item(line, p?p:""); } if(WEXITSTATUS(pclose(pkg)) && menulen==0) { fputs("pkg returned an error.\n", stderr); return -1; } dlg_clear(); if(menulen==0) { if(loops) dialog_msgbox(NULL, "No new leaves found", 5, 23, TRUE); else dialog_msgbox(NULL, "No leaves found", 5, 19, TRUE); end_dialog(); return(-1); } end_dialog(); return(0); } static int keep_going(void) { int ret; do_init_dialog(); ret = !dialog_yesno(NULL,"Do you want to process the new leaves packages?",-1,-1); end_dialog(); return(ret); } /* * The hash table is to keep track of leaves which have already been displayed * to the user. */ int main(int argc, char **argv) { int i; /* Initialize space for blacklist hash table */ if(hcreate(10000)==0) { fputs("Cannot create hash table.\n",stderr); return(EX_UNAVAILABLE); } i=0; do { if(read_pkglist(i++)) break; if(display_menu()) break; if(remove_packages()) break; free_menu(); } while(keep_going()); hdestroy(); fputs("\nProgram Terminated Successfully\n",stderr); return(0); }