static int list_svcs_by_cat(void) { category_id_t *cat_ids; size_t cat_cnt; size_t i; char *cat_name; int rc; rc = loc_get_categories(&cat_ids, &cat_cnt); if (rc != EOK) { printf(NAME ": Error getting list of categories.\n"); return rc; } for (i = 0; i < cat_cnt; i++) { rc = loc_category_get_name(cat_ids[i], &cat_name); if (rc != EOK) cat_name = str_dup("<unknown>"); if (cat_name == NULL) { printf(NAME ": Error allocating memory.\n"); free(cat_ids); return rc; } rc = show_cat(cat_name, cat_ids[i]); (void) rc; free(cat_name); } free(cat_ids); return EOK; }
// select_cat() returns 0 if lista is empty. Returns -1 if input's value is invalid. int select_cat(vocab_t *listavocab, int cat, const char texto[]) { pantalla_t *pant = get_curses(); int numcat = 0; char *str = NULL; str = (char *)malloc(sizeof(char)*TAM_BUF); if (!str) { exit_mem(EXIT_FAILURE, "Not enough memory."); } snprintf(str, TAM_BUF, "Choose a list %s.\n\n", texto); // If previously we don't select any category... if (cat <= 0) { numcat = show_cat(listavocab); if (numcat>0) { print_buffer(str, false); cat = 0; upgrade_buffer(false); while ((cat != 13) && (cat != 27)) { wrefresh(pant->ppal); cat = wgetch(pant->menu); scroll_keys(cat, true); } cat = select_item(cat); if (cat <=0 || cat > numcat) { print_buffer("Category not valid.", true); cat = -1; } } else cat = 0; } upgrade_buffer(false); wrefresh(pant->ppal); free(str); return cat; }
int main(int argc, char *argv[]) { int rc; char *cmd; char *cat_name; category_id_t cat_id; if (argc <= 1) { rc = list_svcs_by_cat(); if (rc != EOK) return 1; return 0; } cmd = argv[1]; if (str_cmp(cmd, "show-cat") == 0) { if (argc < 3) { printf("Argument missing.\n"); print_syntax(); return 1; } cat_name = argv[2]; rc = loc_category_get_id(cat_name, &cat_id, 0); if (rc != EOK) { printf("Error looking up category '%s'.\n", cat_name); return 1; } rc = show_cat(cat_name, cat_id); if (rc != EOK) return 1; } else { printf("Invalid command '%s'\n", cmd); print_syntax(); return 1; } return 0; }