static json_t *cmd_list_items(json_t *params, int display_only) { struct nh_objitem *items; int icount, i, invent; json_t *jarr; if (json_unpack(params, "{so,si,si!}", "items", &jarr, "icount", &icount, "invent", &invent) == -1) { print_error("Incorrect parameter type in cmd_list_items"); return NULL; } if (!json_is_array(jarr) || json_array_size(jarr) != icount) { print_error("Damaged items array in cmd_list_items"); return NULL; } items = malloc(icount * sizeof(struct nh_objitem)); for (i = 0; i < icount; i++) json_read_objitem(json_array_get(jarr, i), &items[i]); cur_wndprocs.win_list_items(items, icount, invent); free(items); return NULL; }
static json_t * cmd_display_objects(json_t * params, int display_only) { struct nh_objitem *items; struct nh_objresult *pick_list; int icount, i, how, ret, placement_hint; const char *title; json_t *jarr, *jobj; if (json_unpack (params, "{so,si,si,ss,si!}", "items", &jarr, "icount", &icount, "how", &how, "title", &title, "plhint", &placement_hint) == -1) { print_error("Incorrect parameter type in cmd_display_menu"); return NULL; } if (!json_is_array(jarr) || json_array_size(jarr) != icount) { print_error("Damaged items array in cmd_display_menu"); return NULL; } if (!*title) title = NULL; items = malloc(icount * sizeof (struct nh_objitem)); for (i = 0; i < icount; i++) json_read_objitem(json_array_get(jarr, i), &items[i]); pick_list = malloc(icount * sizeof (struct nh_objresult)); ret = cur_wndprocs.win_display_objects(items, icount, title, how, placement_hint, pick_list); free(items); if (display_only) { free(pick_list); return NULL; } jarr = json_array(); for (i = 0; i < ret; i++) { jobj = json_pack("{si,si}", "id", pick_list[i].id, "count", pick_list[i].count); json_array_append_new(jarr, jobj); } free(pick_list); return json_pack("{si,so}", "return", ret, "pick_list", jarr); }