int menu(const char *title, int size, int selected, ...) /*args: name (const char *) return: ID of selected */ { char ** names = malloc(sizeof(char *) * size); int i, longeststr = strlen(title) + 6, tmp; int inchar = 0; va_list args; WCON *wc; WINDOW *win; initscr(); noecho(); refresh(); keypad(stdscr, TRUE); curs_set(0); va_start(args, selected); for (i = 0; i < size; i++) { names[i] = va_arg(args, char*); tmp = strlen(names[i]); if (tmp > longeststr) longeststr = tmp + 4; } wc = newcon(size, longeststr, (LINES/2)-size, (COLS/2)-(longeststr/2)); win = conwin(wc); titlecon(wc, title); while (inchar != '\n') { wclear(win); for (i = 0; i < size; i++) { wattroff(win, A_STANDOUT); if (i == selected) wattron(win, A_STANDOUT); wprintw(win, "%s\n", names[i]); } wrefresh(win); inchar = getch(); switch (inchar) { case KEY_UP: if (selected > 0) --selected; break; case KEY_DOWN: if (selected < size - 1) ++selected; break; default: break; } } va_end(args); free(names); deletecon(wc); endwin(); return selected; }
void slave_acceptor_t::dispatch (svccb *sbp) { if (!sbp) { // shouldn't really happen warn << "acceptor shutdown on EOF\n"; } else { switch (sbp->proc ()) { case AAPP_SERVER_NEWCON: { RPC::aapp_server_prog_1::aapp_server_newcon_srv_t<svccb> srv (sbp); aapp_status_t st = newcon (srv.getarg ()); srv.reply (st); } break; default: sbp->reject (PROC_UNAVAIL); break; } } }