| 522 | /* Initialize a menu from given NetHack winid */ |
| 523 | |
| 524 | void |
| 525 | curses_create_nhmenu(winid wid, unsigned long mbehavior) |
| 526 | { |
| 527 | nhmenu *new_menu = NULL; |
| 528 | nhmenu *menuptr = nhmenus; |
| 529 | nhmenu_item *menu_item_ptr = NULL; |
| 530 | nhmenu_item *tmp_menu_item = NULL; |
| 531 | |
| 532 | new_menu = get_menu(wid); |
| 533 | |
| 534 | if (new_menu != NULL) { |
| 535 | /* Reuse existing menu, clearing out current entries */ |
| 536 | menu_item_ptr = new_menu->entries; |
| 537 | |
| 538 | if (menu_item_ptr != NULL) { |
| 539 | while (menu_item_ptr->next_item != NULL) { |
| 540 | tmp_menu_item = menu_item_ptr->next_item; |
| 541 | free((genericptr_t) menu_item_ptr->str); |
| 542 | free((genericptr_t) menu_item_ptr); |
| 543 | menu_item_ptr = tmp_menu_item; |
| 544 | } |
| 545 | free((genericptr_t) menu_item_ptr->str); |
| 546 | free((genericptr_t) menu_item_ptr); /* Last entry */ |
| 547 | new_menu->entries = NULL; |
| 548 | } |
| 549 | if (new_menu->prompt != NULL) { /* Reusing existing menu */ |
| 550 | free((genericptr_t) new_menu->prompt); |
| 551 | new_menu->prompt = NULL; |
| 552 | } |
| 553 | new_menu->num_pages = 0; |
| 554 | new_menu->height = 0; |
| 555 | new_menu->width = 0; |
| 556 | new_menu->mbehavior = mbehavior; |
| 557 | new_menu->reuse_accels = FALSE; |
| 558 | new_menu->bottom_heavy = FALSE; |
| 559 | new_menu->show_obj_syms = FALSE; |
| 560 | return; |
| 561 | } |
| 562 | |
| 563 | new_menu = (nhmenu *) alloc((signed) sizeof (nhmenu)); |
| 564 | new_menu->wid = wid; |
| 565 | new_menu->prompt = NULL; |
| 566 | new_menu->entries = NULL; |
| 567 | new_menu->num_pages = 0; |
| 568 | new_menu->height = 0; |
| 569 | new_menu->width = 0; |
| 570 | new_menu->mbehavior = mbehavior; |
| 571 | new_menu->reuse_accels = FALSE; |
| 572 | new_menu->bottom_heavy = FALSE; |
| 573 | new_menu->show_obj_syms = FALSE; |
| 574 | new_menu->next_menu = NULL; |
| 575 | |
| 576 | if (nhmenus == NULL) { /* no menus in memory yet */ |
| 577 | new_menu->prev_menu = NULL; |
| 578 | nhmenus = new_menu; |
| 579 | } else { |
| 580 | while (menuptr->next_menu != NULL) { |
| 581 | menuptr = menuptr->next_menu; |
no test coverage detected