| 1503 | } |
| 1504 | |
| 1505 | static int |
| 1506 | menu_get_selections(WINDOW *win, nhmenu *menu, int how) |
| 1507 | { |
| 1508 | int curletter, menucmd; |
| 1509 | long count = -1L; |
| 1510 | int count_letter = '\0'; |
| 1511 | int curpage = !menu->bottom_heavy ? 1 : menu->num_pages; |
| 1512 | int num_selected = 0; |
| 1513 | boolean dismiss = FALSE; |
| 1514 | char selectors[256], groupaccels[256]; |
| 1515 | nhmenu_item *menu_item_ptr; |
| 1516 | |
| 1517 | activemenu = win; |
| 1518 | menu_display_page(win, menu, curpage, selectors, groupaccels); |
| 1519 | |
| 1520 | while (!dismiss) { |
| 1521 | curletter = curses_getch(); |
| 1522 | |
| 1523 | if (curletter == ERR) { |
| 1524 | iflags.term_gone = 1; |
| 1525 | num_selected = -1; |
| 1526 | dismiss = TRUE; |
| 1527 | } |
| 1528 | |
| 1529 | if (curletter == '\033') { |
| 1530 | curletter = curses_convert_keys(curletter); |
| 1531 | } |
| 1532 | |
| 1533 | switch (how) { |
| 1534 | case PICK_NONE: |
| 1535 | if (menu->num_pages == 1) { |
| 1536 | if (curletter == KEY_ESC) { |
| 1537 | num_selected = -1; |
| 1538 | } else { |
| 1539 | num_selected = 0; |
| 1540 | } |
| 1541 | dismiss = TRUE; |
| 1542 | break; |
| 1543 | } |
| 1544 | break; |
| 1545 | case PICK_ANY: |
| 1546 | if (curletter <= 0 || curletter >= 256 |
| 1547 | || (!selectors[curletter] && !groupaccels[curletter])) { |
| 1548 | menucmd = (curletter <= 0 || curletter >= 255) ? curletter |
| 1549 | : (int) (uchar) map_menu_cmd(curletter); |
| 1550 | switch (menucmd) { |
| 1551 | case MENU_SELECT_PAGE: |
| 1552 | (void) menu_operation(win, menu, SELECT, curpage); |
| 1553 | break; |
| 1554 | case MENU_SELECT_ALL: |
| 1555 | curpage = menu_operation(win, menu, SELECT, 0); |
| 1556 | break; |
| 1557 | case MENU_UNSELECT_PAGE: |
| 1558 | (void) menu_operation(win, menu, DESELECT, curpage); |
| 1559 | break; |
| 1560 | case MENU_UNSELECT_ALL: |
| 1561 | curpage = menu_operation(win, menu, DESELECT, 0); |
| 1562 | break; |
no test coverage detected