| 1194 | extern color_attr curses_menu_promptstyle; /*cursmain.c */ |
| 1195 | |
| 1196 | static void |
| 1197 | menu_display_page( |
| 1198 | WINDOW *win, |
| 1199 | nhmenu *menu, |
| 1200 | int page_num, /* page number, 1..n rather than 0..n-1 */ |
| 1201 | char *selectors, /* selection letters on current page */ |
| 1202 | char *groupaccels) /* group accelerator characters on any page */ |
| 1203 | { |
| 1204 | nhmenu_item *menu_item_ptr; |
| 1205 | int count, curletter, entry_cols, start_col, num_lines; |
| 1206 | char *tmpstr; |
| 1207 | boolean first_accel = TRUE; |
| 1208 | int color = NO_COLOR, attr; |
| 1209 | |
| 1210 | /* letters assigned to entries on current page */ |
| 1211 | if (selectors) |
| 1212 | (void) memset((genericptr_t) selectors, 0, 256); |
| 1213 | /* characters assigned to group accelerators on any page */ |
| 1214 | if (groupaccels) |
| 1215 | (void) memset((genericptr_t) groupaccels, 0, 256); |
| 1216 | |
| 1217 | /* Cycle through entries until we are on the correct page */ |
| 1218 | |
| 1219 | menu_item_ptr = menu->entries; |
| 1220 | |
| 1221 | while (menu_item_ptr != NULL) { |
| 1222 | if (menu_item_ptr->page_num == page_num) { |
| 1223 | break; |
| 1224 | } |
| 1225 | menu_item_ptr = menu_item_ptr->next_item; |
| 1226 | } |
| 1227 | |
| 1228 | if (menu_item_ptr == NULL) { /* Page not found */ |
| 1229 | impossible("menu_display_page: attempt to display nonexistent page"); |
| 1230 | return; |
| 1231 | } |
| 1232 | |
| 1233 | werase(win); |
| 1234 | |
| 1235 | if (menu->prompt && *menu->prompt) { |
| 1236 | num_lines = curses_num_lines(menu->prompt, menu->width); |
| 1237 | |
| 1238 | for (count = 0; count < num_lines; count++) { |
| 1239 | tmpstr = curses_break_str(menu->prompt, menu->width, count + 1); |
| 1240 | curses_menu_color_attr(win, curses_menu_promptstyle.color, |
| 1241 | curses_menu_promptstyle.attr, ON); |
| 1242 | mvwprintw(win, count + 1, 1, "%s", tmpstr); |
| 1243 | curses_menu_color_attr(win, curses_menu_promptstyle.color, |
| 1244 | curses_menu_promptstyle.attr, OFF); |
| 1245 | free(tmpstr); |
| 1246 | } |
| 1247 | } |
| 1248 | |
| 1249 | /* Display items for current page */ |
| 1250 | |
| 1251 | while (menu_item_ptr != NULL) { |
| 1252 | /* collect group accelerators for every page */ |
| 1253 | if (groupaccels && menu_item_ptr->identifier.a_void != NULL) { |
no test coverage detected