- if (category_name) {
- category = mnemon_get_category_if_exists (mnemon, category_name);
- if (category) {
- if (length) {
- predicate = mnemon_item_in_category_of_length;
- item_in_category_of_length.mnemon = mnemon;
- item_in_category_of_length.category = category;
- item_in_category_of_length.length = length;
- closure = &item_in_category_of_length;
- } else {
- predicate = mnemon_item_in_category;
- item_in_category.mnemon = mnemon;
- item_in_category.category = category;
- closure = &item_in_category;
- }
- }
- }
-
- for (i = 0; i < mnemon->num_bins; i++) {
- num_items = bin_num_items_matching (&mnemon->bins[i],
- predicate, closure);
- if (i == 0 || num_items > max)
- max = num_items;
- }
-
- for (i = 0; i < mnemon->num_bins; i++) {
- bin = &mnemon->bins[i];
- if (i != 0)
- while (bin->score - last_score > 1)
- printf (HISTOGRAM_ROW_FORMAT "\n", ++last_score, 0);
- num_items = bin_num_items_matching (bin,
- predicate, closure);
- printf (HISTOGRAM_ROW_FORMAT " ", bin->score, num_items);
- print_histogram_bar (num_items, max);
- last_score = bin->score;
- }
-}
-
-static void
-mnemon_handle_command (mnemon_t *mnemon,
- const char *command)
-{
- const char *arg;
- int len;
- switch (command[0]) {
- case 'h':
- {
- char *category = NULL;
- int length = 0;
-
- arg = command + 1;
- arg += strspn (arg, " \t");
- len = strcspn (arg, " \t");
- if (len) {
- category = xstrndup (arg, len);
- arg += len;
- arg += strspn (arg, " \t");
- if (*arg)
- length = atoi (arg);
- }
- mnemon_print_histogram (mnemon, category, length);
- }
- break;
- default:
- printf ("Unknown command: %s\n", command);
- break;
- }
-}
-
-static void
-mnemon_handle_response (mnemon_t *mnemon,
- bin_t *bin,
- int item_index,
- item_t *item,
- const char *response)
-{
- bool_t correct;
-
- correct = (strcmp (response, item->response) == 0);
-