extern void get_bg_part(void) { int error_code, i, recs=0, count = 0, last_count = -1; static partition_info_msg_t *part_info_ptr = NULL; static partition_info_msg_t *new_part_ptr = NULL; static block_info_msg_t *bg_info_ptr = NULL; static block_info_msg_t *new_bg_ptr = NULL; uint16_t show_flags = 0; partition_info_t part; db2_block_info_t *block_ptr = NULL; db2_block_info_t *found_block = NULL; ListIterator itr; List nodelist = NULL; bitstr_t *nodes_req = NULL; if (!(params.cluster_flags & CLUSTER_FLAG_BG)) return; if (params.all_flag) show_flags |= SHOW_ALL; if (part_info_ptr) { error_code = slurm_load_partitions(part_info_ptr->last_update, &new_part_ptr, show_flags); if (error_code == SLURM_SUCCESS) slurm_free_partition_info_msg(part_info_ptr); else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) { error_code = SLURM_SUCCESS; new_part_ptr = part_info_ptr; } } else { error_code = slurm_load_partitions((time_t) NULL, &new_part_ptr, show_flags); } if (error_code) { if (quiet_flag != 1) { if (!params.commandline) { mvwprintw(text_win, main_ycord, 1, "slurm_load_partitions: %s", slurm_strerror(slurm_get_errno())); main_ycord++; } else { printf("slurm_load_partitions: %s\n", slurm_strerror(slurm_get_errno())); } } return; } if (bg_info_ptr) { error_code = slurm_load_block_info(bg_info_ptr->last_update, &new_bg_ptr, show_flags); if (error_code == SLURM_SUCCESS) slurm_free_block_info_msg(bg_info_ptr); else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) { error_code = SLURM_SUCCESS; new_bg_ptr = bg_info_ptr; } } else { error_code = slurm_load_block_info((time_t) NULL, &new_bg_ptr, show_flags); } if (error_code) { if (quiet_flag != 1) { if (!params.commandline) { mvwprintw(text_win, main_ycord, 1, "slurm_load_block: %s", slurm_strerror(slurm_get_errno())); main_ycord++; } else { printf("slurm_load_block: %s\n", slurm_strerror(slurm_get_errno())); } } return; } if (block_list) { /* clear the old list */ list_flush(block_list); } else { block_list = list_create(_block_list_del); } if (!params.commandline) if ((new_bg_ptr->record_count - text_line_cnt) < (getmaxy(text_win) - 4)) text_line_cnt--; if (params.hl) nodes_req = get_requested_node_bitmap(); for (i = 0; i < new_bg_ptr->record_count; i++) { if (nodes_req) { int overlap = 0; bitstr_t *loc_bitmap = bit_alloc(bit_size(nodes_req)); inx2bitstr(loc_bitmap, new_bg_ptr->block_array[i].mp_inx); overlap = bit_overlap(loc_bitmap, nodes_req); FREE_NULL_BITMAP(loc_bitmap); if (!overlap) continue; } if (params.io_bit && new_bg_ptr->block_array[i].ionode_str) { int overlap = 0; bitstr_t *loc_bitmap = bit_alloc(bit_size(params.io_bit)); inx2bitstr(loc_bitmap, new_bg_ptr->block_array[i].ionode_inx); overlap = bit_overlap(loc_bitmap, params.io_bit); FREE_NULL_BITMAP(loc_bitmap); if (!overlap) continue; } block_ptr = xmalloc(sizeof(db2_block_info_t)); block_ptr->bg_block_name = xstrdup(new_bg_ptr->block_array[i].bg_block_id); block_ptr->mp_str = xstrdup(new_bg_ptr->block_array[i].mp_str); block_ptr->nodelist = list_create(_nodelist_del); _make_nodelist(block_ptr->mp_str, block_ptr->nodelist); block_ptr->state = new_bg_ptr->block_array[i].state; memcpy(block_ptr->bg_conn_type, new_bg_ptr->block_array[i].conn_type, sizeof(block_ptr->bg_conn_type)); if (params.cluster_flags & CLUSTER_FLAG_BGL) block_ptr->bg_node_use = new_bg_ptr->block_array[i].node_use; block_ptr->ionode_str = xstrdup(new_bg_ptr->block_array[i].ionode_str); block_ptr->cnode_cnt = new_bg_ptr->block_array[i].cnode_cnt; itr = list_iterator_create(block_list); while ((found_block = (db2_block_info_t*)list_next(itr))) { if (!strcmp(block_ptr->mp_str, found_block->mp_str)) { block_ptr->letter_num = found_block->letter_num; break; } } list_iterator_destroy(itr); if (!found_block) { last_count++; _marknodes(block_ptr, last_count); } block_ptr->job_list = list_create(slurm_free_block_job_info); if (new_bg_ptr->block_array[i].job_list) { block_job_info_t *found_job; ListIterator itr = list_iterator_create( new_bg_ptr->block_array[i].job_list); while ((found_job = list_next(itr))) { block_job_info_t *block_job = xmalloc(sizeof(block_job_info_t)); block_job->job_id = found_job->job_id; list_append(block_ptr->job_list, block_job); } list_iterator_destroy(itr); } if (block_ptr->bg_conn_type[0] >= SELECT_SMALL) block_ptr->size = 0; list_append(block_list, block_ptr); } if (!params.no_header) _print_header_part(); if (new_part_ptr) recs = new_part_ptr->record_count; else recs = 0; for (i = 0; i < recs; i++) { part = new_part_ptr->partition_array[i]; if (!part.nodes || (part.nodes[0] == '\0')) continue; /* empty partition */ nodelist = list_create(_nodelist_del); _make_nodelist(part.nodes, nodelist); if (block_list) { itr = list_iterator_create(block_list); while ((block_ptr = (db2_block_info_t*) list_next(itr)) != NULL) { if (_in_slurm_partition(nodelist, block_ptr->nodelist)) { block_ptr->slurm_part_name = xstrdup(part.name); } } list_iterator_destroy(itr); } list_destroy(nodelist); } /* Report the BG Blocks */ if (block_list) { itr = list_iterator_create(block_list); while ((block_ptr = (db2_block_info_t*) list_next(itr)) != NULL) { if (params.commandline) block_ptr->printed = 1; else { if (count>=text_line_cnt) block_ptr->printed = 1; } _print_rest(block_ptr); count++; } list_iterator_destroy(itr); } if (params.commandline && params.iterate) printf("\n"); part_info_ptr = new_part_ptr; bg_info_ptr = new_bg_ptr; return; }
Screen::Screen() : okno_glowne_x_(0), okno_glowne_y_(0) { initscr(); start_color(); curs_set(FALSE); init_pair(1, COLOR_WHITE, COLOR_YELLOW); init_pair(2, COLOR_WHITE, COLOR_RED); init_pair(3, COLOR_WHITE, COLOR_GREEN); getmaxyx(stdscr, okno_glowne_y_, okno_glowne_x_); int punkt_podzialu = okno_glowne_x_ / 2; watki_ = newwin(okno_glowne_y_, okno_glowne_x_ - punkt_podzialu,0,0); zasoby_ = newwin(okno_glowne_y_, punkt_podzialu, 0, okno_glowne_x_ - punkt_podzialu); getmaxyx(zasoby_, zasoby_max_y_, zasoby_max_x_); mvwprintw(watki_, 0, 0, "Watki:"); mvwprintw(zasoby_,0, 0, "Zasoby:"); mvwprintw(zasoby_, 2, 0, "Ostatni urodzaj:"); mvwprintw(zasoby_, 3, 0, "Stan Pola:"); mvwprintw(zasoby_, 5, 0, "Stan Ziemniaczarni:"); mvwprintw(zasoby_, 7, 0, "Stan Magazyn Glowny:"); mvwprintw(zasoby_, 8, 0, "Stan Magazyn Awarjyny:"); mvwprintw(zasoby_, 10, 0, "Stan Sklep:"); mvwprintw(watki_, 2, 0, " Sloneczko : Czekam"); mvwprintw(watki_, 3, 0, " Rolnik Adam : Czekam"); mvwprintw(watki_, 4, 0, " Rolnik Zbigniew : Czekam"); mvwprintw(watki_, 5, 0, " Rolnik Stanislaw : Czekam"); mvwprintw(watki_, 6, 0, " Kurier Roman : Czekam"); mvwprintw(watki_, 7, 0, " Kurier Marek : Czekam"); mvwprintw(watki_, 8, 0, " Hurtownik Marian : Czekam"); mvwprintw(watki_, 9, 0, " Hurtownik Wladyslaw : Czekam"); mvwprintw(watki_, 10, 0, " Kupujacy Mariola : Czekam"); mvwprintw(watki_, 11, 0, " Kupujacy Anna : Czekam"); mvwprintw(watki_, 12, 0, " Kupujacy Piotr : Czekam"); mvwprintw(watki_, 13, 0, " Kupujacy Pawel : Czekam"); mvwprintw(watki_, 14, 0, " Zlodziej Walter : Czekam"); for (int i=2; i < 15; ++i) { mvwchgat(watki_, i, 0, 2, A_BLINK | A_COLOR, 2, NULL); } wrefresh(watki_); wrefresh(zasoby_); sleep(2); }
/* render help dialog */ void load_help_popup (WINDOW * main_win) { int c, quit = 1; size_t i, n; int y, x, h = HELP_WIN_HEIGHT, w = HELP_WIN_WIDTH; int w2 = w - 2; WINDOW *win; GMenu *menu; n = ARRAY_SIZE (help_main); getmaxyx (stdscr, y, x); win = newwin (h, w, (y - h) / 2, (x - w) / 2); keypad (win, TRUE); wborder (win, '|', '|', '-', '-', '+', '+', '+', '+'); /* create a new instance of GMenu and make it selectable */ menu = new_gmenu (win, HELP_MENU_HEIGHT, HELP_MENU_WIDTH, HELP_MENU_Y, HELP_MENU_X); menu->size = n; /* add items to GMenu */ menu->items = (GItem *) xcalloc (n, sizeof (GItem)); for (i = 0; i < n; ++i) { menu->items[i].name = alloc_string (help_main[i]); menu->items[i].checked = 0; } post_gmenu (menu); draw_header (win, "GoAccess Quick Help", " %s", 1, 1, w2, 1); mvwprintw (win, 2, 2, "[UP/DOWN] to scroll - [q] to quit"); wrefresh (win); while (quit) { c = wgetch (stdscr); switch (c) { case KEY_DOWN: gmenu_driver (menu, REQ_DOWN); draw_header (win, "", "%s", 3, 2, HELP_MENU_WIDTH, 0); break; case KEY_UP: gmenu_driver (menu, REQ_UP); draw_header (win, "", "%s", 3, 2, HELP_MENU_WIDTH, 0); break; case KEY_RESIZE: case 'q': quit = 0; break; } wrefresh (win); } /* clean stuff up */ for (i = 0; i < n; ++i) free (menu->items[i].name); free (menu->items); free (menu); touchwin (main_win); close_win (win); wrefresh (main_win); }
Difficulty UI::SelectDifficulty() { int selected = 0; WINDOW* wnd = initscr(); keypad(wnd, TRUE); SetColor(1, COLOR_WHITE, COLOR_BLACK); mvwprintw(wnd, 24, 32, "2015 Mark Beznos"); mvwprintw(wnd, 2, 20, "Select a difficulty(use arrow keys & enter):"); while (true) { SetColor(1, COLOR_WHITE, COLOR_BLACK); //Clear lines mvwprintw(wnd, 4, 20, " "); mvwprintw(wnd, 7, 20, " "); mvwprintw(wnd, 10, 20, " "); //Print mvwprintw(wnd, 4, 39, "Easy"); mvwprintw(wnd, 5, 33, "Just random hits"); mvwprintw(wnd, 7, 38, "Medium"); mvwprintw(wnd, 8, 22, "Random hits with intent to finish ships"); mvwprintw(wnd, 10, 39, "Hard"); mvwprintw(wnd, 11, 25, "Advance AI that will challenge you"); //Print cursor SetColor(2, COLOR_RED, COLOR_BLACK); if (selected == 0) { mvwprintw(wnd, 4, 37, ">>"); mvwprintw(wnd, 4, 43, "<<"); } else if (selected == 1) { mvwprintw(wnd, 7, 36, ">>"); mvwprintw(wnd, 7, 44, "<<"); } else { mvwprintw(wnd, 10, 37, ">>"); mvwprintw(wnd, 10, 43, "<<"); } //update cursor position char ckey = getch(); //ckey == up arrow if (ckey == '\x3') { selected = (selected == 0) ? 2 : selected - 1; } //ckey == downarrow else if (ckey == '\x2') { selected = (selected == 2) ? 0 : selected + 1; } //ckey == KEY_ENTER else if (ckey == '\n') { endwin(); return static_cast<Difficulty>(selected); } } }
void game::mutation_wish() { WINDOW* w_list = newwin(25, 30, 0, 0); WINDOW* w_info = newwin(25, 50, 0, 30); int a = 0, shift = 0, result_selected = 0; int ch = '.'; bool search = false; std::string pattern; std::string info; std::vector<int> search_results; do { werase(w_info); werase(w_list); mvwprintw(w_list, 0, 0, "Mutate: "); if (search) { if (ch == '\n') { search = false; ch = '.'; } else if (ch == KEY_BACKSPACE || ch == 127) { if (pattern.length() > 0) pattern.erase(pattern.end() - 1); } else if (ch == '>' || ch == KEY_NPAGE) { search = false; if (!search_results.empty()) { result_selected++; if (result_selected > search_results.size()) result_selected = 0; shift = search_results[result_selected]; a = 0; if (shift + 23 > PF_MAX2) { a = shift + 23 - PF_MAX2; shift = PF_MAX2 - 23; } } } else if (ch == '<' || ch == KEY_PPAGE) { search = false; if (!search_results.empty()) { result_selected--; if (result_selected < 0) result_selected = search_results.size() - 1; shift = search_results[result_selected]; a = 0; if (shift + 23 > PF_MAX2) { a = shift + 23 - PF_MAX2; shift = PF_MAX2 - 23; } } } else { pattern += ch; search_results.clear(); } if (search) { for (int i = 0; i < PF_MAX2; i++) { if (traits[i].name.find(pattern) != std::string::npos) { shift = i; a = 0; result_selected = 0; if (shift + 23 > PF_MAX2) { a = shift + 23 - PF_MAX2; shift = PF_MAX2 - 23; } search_results.push_back(i); } } if (search_results.size() > 0) { shift = search_results[0]; a = 0; } } } else { // Not searching; scroll by keys if (ch == 'j') a++; if (ch == 'k') a--; if (ch == '/') { search = true; pattern = ""; search_results.clear(); } if (( ch == '>' || ch == KEY_NPAGE ) && !search_results.empty()) { result_selected++; if (result_selected > search_results.size()) result_selected = 0; shift = search_results[result_selected]; a = 0; if (shift + 23 > PF_MAX2) { a = shift + 23 - PF_MAX2; shift = PF_MAX2 - 23; } } else if (( ch == '<' || ch == KEY_PPAGE ) && !search_results.empty()) { result_selected--; if (result_selected < 0) result_selected = search_results.size() - 1; shift = search_results[result_selected]; a = 0; if (shift + 23 > PF_MAX2) { a = shift + 23 - PF_MAX2; shift = PF_MAX2 - 23; } } } if (!search_results.empty()) mvwprintz(w_list, 0, 11, c_green, "%s ", pattern.c_str()); else if (pattern.length() > 0) mvwprintz(w_list, 0, 11, c_red, "%s not found! ",pattern.c_str()); if (a < 0) { a = 0; shift--; if (shift < 0) shift = 0; } if (a > 22) { a = 22; shift++; if (shift + 23 > PF_MAX2) shift = PF_MAX2 - 23; } for (int i = 1; i < 24; i++) { nc_color col = c_white; if (i == a + 1) col = h_white; mvwprintz(w_list, i, 0, col, traits[i-1+shift].name.c_str()); } mvwprintw(w_info, 1, 0, mutation_data[a+shift].valid ? "Valid" : "Nonvalid"); int line2 = 2; mvwprintw(w_info, line2, 0, "Prereqs:"); for (int j = 0; j < mutation_data[a+shift].prereqs.size(); j++) { mvwprintw(w_info, line2, 9, traits[ mutation_data[a+shift].prereqs[j] ].name.c_str()); line2++; } mvwprintw(w_info, line2, 0, "Cancels:"); for (int j = 0; j < mutation_data[a+shift].cancels.size(); j++) { mvwprintw(w_info, line2, 9, traits[ mutation_data[a+shift].cancels[j] ].name.c_str()); line2++; } mvwprintw(w_info, line2, 0, "Becomes:"); for (int j = 0; j < mutation_data[a+shift].replacements.size(); j++) { mvwprintw(w_info, line2, 9, traits[ mutation_data[a+shift].replacements[j] ].name.c_str()); line2++; } mvwprintw(w_info, line2, 0, "Add-ons:"); for (int j = 0; j < mutation_data[a+shift].additions.size(); j++) { mvwprintw(w_info, line2, 9, traits[ mutation_data[a+shift].additions[j] ].name.c_str()); line2++; } wrefresh(w_info); wrefresh(w_list); if (search) ch = getch(); else ch = input(); } while (ch != '\n'); clear(); if (a+shift == 0) u.mutate(this); else u.mutate_towards(this, pl_flag(a + shift)); delwin(w_info); delwin(w_list); }
//Finish later GameResult UI::PlayGame() { //create two grids: Player & enemy Channel<MoveResult> *mr = new Channel<MoveResult>(); Channel<Coordinate> *cs = new Channel<Coordinate>(); UserPlayer cup = UserPlayer(mr, cs); CurrentGame.SetP1(&cup); cup.setPlayerBoard(CurrentGame.GetP1Board()); AI ccai = AI(CAI); ccai.setPlayerBoard(CurrentGame.GetP2Board()); ccai.PlacePieces(); CurrentGame.SetP2(&ccai); initscr(); WINDOW *PlayerBoard = newwin(23, 24, 1, 1); WINDOW *AIBoard = newwin(23, 24, 1, 50); WINDOW *EntryArea = newwin(7, 20, 8, 26); SetColor(PlayerBoard, 1, COLOR_WHITE, COLOR_BLACK); SetColor(AIBoard, 1, COLOR_WHITE, COLOR_BLACK); SetColor(PlayerBoard, 2, COLOR_RED, COLOR_BLACK); SetColor(AIBoard, 2, COLOR_RED, COLOR_BLACK); noecho(); //cbreak(); curs_set(0); UserPlayer up; keypad(stdscr, TRUE); std::thread cg(&Game::PlayGame, &CurrentGame); while (true) { MoveResult tmp; mr->get(tmp,false); clear(); wclear(PlayerBoard); wclear(AIBoard); wclear(EntryArea); mvwprintw(EntryArea, 3, 1, " <-P:E->"); wborder(PlayerBoard, '|', '|', '-', '-', '+', '+', '+', '+'); wborder(AIBoard, '|', '|', '-', '-', '+', '+', '+', '+'); wborder(EntryArea, '|', '|', '-', '-', '+', '+', '+', '+'); //render playerboard mvwprintw(PlayerBoard, 1, 4, "A B C D E F G H I J"); for (int i = 0; i < 22; i += 2) { SetColor(PlayerBoard, 2); string gletter = std::to_string(i / 2); SetColor(PlayerBoard, 2); mvwprintw(PlayerBoard, i + 3, 4, "0 0 0 0 0 0 0 0 0 0"); SetColor(PlayerBoard, 1); if (i % 2 == 0) { SetColor(PlayerBoard, 1); mvwprintw(PlayerBoard, i + 3, 1, gletter.c_str()); } } //render ai board mvwprintw(AIBoard, 1, 4, "A B C D E F G H I J"); for (int i = 0; i < 22; i += 2) { SetColor(AIBoard, 2); string gletter = std::to_string(i / 2); SetColor(AIBoard, 2); mvwprintw(AIBoard, i + 3, 4, "0 0 0 0 0 0 0 0 0 0"); SetColor(AIBoard, 1); if (i % 2 == 0) { SetColor(AIBoard, 1); mvwprintw(AIBoard, i + 3, 1, gletter.c_str()); } } RenderToGrid(PlayerBoard, CurrentGame.GetP1Board()->Hits); RenderToGrid(AIBoard, CurrentGame.GetP2Board()->Hits); // refresh(); wrefresh(PlayerBoard); wrefresh(AIBoard); wrefresh(EntryArea); MoveResult cmr; while (true) { char ychar = getchar(); while (ychar < 'a' || ychar > 'j') { ychar = getchar(); } mvwprintw(EntryArea, 1, 2, &ychar); wrefresh(EntryArea); int y = ychar - 'a'; char xchar = getchar(); while (xchar < '0' || xchar > '9') { xchar = getchar(); } mvwprintw(EntryArea, 1, 3, &xchar); wrefresh(EntryArea); int x = xchar - '0'; cs->put(Coordinate{ x,y }); mr->get(cmr); if (cmr == InvalidMove) { mvwprintw(EntryArea, 1, 2, "IM"); continue; } if (cmr == Hit) { mvwprintw(EntryArea, 2, 2, "HIT"); } else if (cmr == Miss) { mvwprintw(EntryArea, 2, 2, "MISS"); } wrefresh(EntryArea); getch(); break; } if (cmr == Quit) { break; } } cg.join(); return Win; }
int UI::StartMenu() { bool PlayGame = false; int current = 0; WINDOW* wnd = initscr(); curs_set(0); keypad(wnd, TRUE); mvwprintw(wnd, 5, 18, " ___ _ _ _ __ _ _ "); mvwprintw(wnd, 6, 18, " / __\\ __ _| |_| |_| | ___/ _\\ |__ (_)_ __ "); mvwprintw(wnd, 7, 18, " /__\\/// _` | __| __| |/ _ \\ \\| '_ \\| | '_ \\ "); mvwprintw(wnd, 8, 18, "/ \\/ \\ (_| | |_| |_| | __/\\ \\ | | | | |_) |"); mvwprintw(wnd, 9, 18, "\\_____/\\__,_|\\__|\\__|_|\\___\\__/_| |_|_| .__/ "); mvwprintw(wnd, 10, 18, " |_| "); mvwprintw(wnd, 24, 32, "2015 Mark Beznos"); while (true) { //clear existing text SetColor(2, COLOR_WHITE, COLOR_BLACK); mvwprintw(wnd, 15, 30, " "); mvwprintw(wnd, 17, 35, " "); //print current text mvwprintw(wnd, 15, 35, "Play Game"); mvwprintw(wnd, 17, 38, "Quit"); SetColor(1, COLOR_RED, COLOR_BLACK); if (current == 0) { mvwprintw(wnd, 15, 33, ">>"); mvwprintw(wnd, 15, 44, "<<"); } else { mvwprintw(wnd, 17, 36, ">>"); mvwprintw(wnd, 17, 42, "<<"); } // char ckey = getch(); //if (ckey == KEY_UP || ckey == KEY_DOWN) if (ckey == '\x3' || ckey == '\x2') { current = (current == 0) ? 1 : 0; } //ckey == KEY_ENTER else if (ckey == '\n') { endwin(); return current; } } }
static bool nmea_initialize(void) { int i; cookedwin = derwin(devicewin, 3, 80, 0, 0); assert(cookedwin !=NULL); (void)wborder(cookedwin, 0, 0, 0, 0, 0, 0, 0, 0); (void)syncok(cookedwin, true); (void)wattrset(cookedwin, A_BOLD); (void)mvwaddstr(cookedwin, 1, 1, "Time: "); (void)mvwaddstr(cookedwin, 1, 32, "Lat: "); (void)mvwaddstr(cookedwin, 1, 55, "Lon: "); (void)mvwaddstr(cookedwin, 2, 34, " Cooked TPV "); (void)wattrset(cookedwin, A_NORMAL); nmeawin = derwin(devicewin, 3, 80, 3, 0); assert(nmeawin !=NULL); (void)wborder(nmeawin, 0, 0, 0, 0, 0, 0, 0, 0); (void)syncok(nmeawin, true); (void)wattrset(nmeawin, A_BOLD); (void)mvwaddstr(nmeawin, 2, 34, " Sentences "); (void)wattrset(nmeawin, A_NORMAL); satwin = derwin(devicewin, MAXSATS + 3, 20, 6, 0); assert(satwin !=NULL); (void)wborder(satwin, 0, 0, 0, 0, 0, 0, 0, 0), (void)syncok(satwin, true); (void)wattrset(satwin, A_BOLD); (void)mvwprintw(satwin, 1, 1, "Ch PRN Az El S/N"); for (i = 0; i < MAXSATS; i++) (void)mvwprintw(satwin, (int)(i + 2), 1, "%2d", i); (void)mvwprintw(satwin, 14, 7, " GSV "); (void)wattrset(satwin, A_NORMAL); gprmcwin = derwin(devicewin, 9, 30, 6, 20); assert(gprmcwin !=NULL); (void)wborder(gprmcwin, 0, 0, 0, 0, 0, 0, 0, 0), (void)syncok(gprmcwin, true); (void)wattrset(gprmcwin, A_BOLD); (void)mvwprintw(gprmcwin, 1, 1, "Time: "); (void)mvwprintw(gprmcwin, 2, 1, "Latitude: "); (void)mvwprintw(gprmcwin, 3, 1, "Longitude: "); (void)mvwprintw(gprmcwin, 4, 1, "Speed: "); (void)mvwprintw(gprmcwin, 5, 1, "Course: "); (void)mvwprintw(gprmcwin, 6, 1, "Status: FAA: "); (void)mvwprintw(gprmcwin, 7, 1, "MagVar: "); (void)mvwprintw(gprmcwin, 8, 12, " RMC "); (void)wattrset(gprmcwin, A_NORMAL); gpgsawin = derwin(devicewin, 6, 30, 15, 20); assert(gpgsawin !=NULL); (void)wborder(gpgsawin, 0, 0, 0, 0, 0, 0, 0, 0); (void)syncok(gpgsawin, true); (void)wattrset(gpgsawin, A_BOLD); #define MODE_LINE 1 (void)mvwprintw(gpgsawin, MODE_LINE, 1, "Mode: "); #define SATS_LINE 1 #define SATS_COL 10 (void)mvwprintw(gpgsawin, SATS_LINE, SATS_COL, "Sats: "); #define DOP_LINE 2 (void)mvwprintw(gpgsawin, DOP_LINE, 1, "DOP: H= V= P="); #define TOFF_LINE 3 (void)mvwprintw(gpgsawin, TOFF_LINE, 1, "TOFF: "); #ifndef PPS_ENABLE (void)mvwaddstr(gpgsawin, TOFF_LINE, 7, "N/A"); #endif /* PPS_ENABLE */ #define PPS_LINE 4 (void)mvwprintw(gpgsawin, PPS_LINE, 1, "PPS: "); #ifndef PPS_ENABLE (void)mvwaddstr(gpgsawin, PPS_LINE, 6, "N/A"); #endif /* PPS_ENABLE */ (void)mvwprintw(gpgsawin, 5, 9, " GSA + PPS "); (void)wattrset(gpgsawin, A_NORMAL); gpggawin = derwin(devicewin, 9, 30, 6, 50); assert(gpggawin !=NULL); (void)wborder(gpggawin, 0, 0, 0, 0, 0, 0, 0, 0); (void)syncok(gpggawin, true); (void)wattrset(gpggawin, A_BOLD); (void)mvwprintw(gpggawin, 1, 1, "Time: "); (void)mvwprintw(gpggawin, 2, 1, "Latitude: "); (void)mvwprintw(gpggawin, 3, 1, "Longitude: "); (void)mvwprintw(gpggawin, 4, 1, "Altitude: "); (void)mvwprintw(gpggawin, 5, 1, "Quality: Sats: "); (void)mvwprintw(gpggawin, 6, 1, "HDOP: "); (void)mvwprintw(gpggawin, 7, 1, "Geoid: "); (void)mvwprintw(gpggawin, 8, 12, " GGA "); (void)wattrset(gpggawin, A_NORMAL); gpgstwin = derwin(devicewin, 6, 30, 15, 50); assert(gpgstwin !=NULL); (void)wborder(gpgstwin, 0, 0, 0, 0, 0, 0, 0, 0); (void)syncok(gpgstwin, true); (void)wattrset(gpgstwin, A_BOLD); (void)mvwprintw(gpgstwin, 1, 1, "UTC: "); (void)mvwprintw(gpgstwin, 1, 16, "RMS: "); (void)mvwprintw(gpgstwin, 2, 1, "MAJ: "); (void)mvwprintw(gpgstwin, 2, 16, "MIN: "); (void)mvwprintw(gpgstwin, 3, 1, "ORI: "); (void)mvwprintw(gpgstwin, 3, 16, "LAT: "); (void)mvwprintw(gpgstwin, 4, 1, "LON: "); (void)mvwprintw(gpgstwin, 4, 16, "ALT: "); (void)mvwprintw(gpgstwin, 5, 12, " GST "); (void)wattrset(gpgstwin, A_NORMAL); last_tick = timestamp(); sentences[0] = '\0'; return (nmeawin != NULL); }
void draw_sidebar(void) { int flheight = 0, invheight = 0, invwh, flwh; int sbwidth = getmaxx(sidebar); if (!ui_flags.draw_sidebar) return; /* re-create the subwindows every time; they only exist for use by draw_objlist */ if (objwin) delwin(objwin); if (invwin) delwin(invwin); objwin = invwin = NULL; werase(sidebar); /* Inventory and floor item list sizing: Each list "owns" half the sidebar, * but will expand into unused space in the other half. * If unused space remains, the inventory list is expanded to push the * floor item list to the bottom of the screen. */ if (flooritems && inventory) { invheight = min(inv_icount+1, ui_flags.viewheight / 2); flheight = min(floor_icount+1, (ui_flags.viewheight-1) / 2); /* if there is need and available space, expand the floor item list up */ if (floor_icount+1 > flheight && invheight < (ui_flags.viewheight+1) / 2) flheight = min(floor_icount+1, ui_flags.viewheight - invheight - 1); /* assign all unused space to the inventory list whether it is needed or not */ invheight = ui_flags.viewheight - flheight - 1; mvwhline(sidebar, invheight, 0, ACS_HLINE, sbwidth); } else if (flooritems) flheight = ui_flags.viewheight; else invheight = ui_flags.viewheight; if (invheight) { wattron(sidebar, A_UNDERLINE); mvwaddstr(sidebar, 0, 0, "Inventory:"); wattroff(sidebar, A_UNDERLINE); invwh = invheight-1; if (invwh < inv_icount) { invwh--; mvwprintw(sidebar, invheight - 1, 0, "(%d more omitted)", count_omitted_items(inventory, inv_icount, invwh)); } invwin = derwin(sidebar, invwh, sbwidth, 1, 0); draw_objlist(invwin, inv_icount, inventory, NULL, PICK_NONE); } if (flheight) { wattron(sidebar, A_UNDERLINE); mvwaddstr(sidebar, invheight ? invheight + 1 : 0, 0, "Things that are here:"); wattroff(sidebar, A_UNDERLINE); flwh = flheight - 1; if (flwh < floor_icount) { flwh--; mvwprintw(sidebar, ui_flags.viewheight - 1, 0, "(%d more omitted)", count_omitted_items(flooritems, floor_icount, flwh)); } objwin = derwin(sidebar, flwh, sbwidth, invheight ? invheight + 2 : 1, 0); draw_objlist(objwin, floor_icount, flooritems, NULL, PICK_NONE); } wnoutrefresh(sidebar); }
PANEL * filter_create() { PANEL *panel; WINDOW *win; int height, width; filter_info_t *info; const char *method; // Calculate window dimensions height = 16; width = 50; // Cerate a new indow for the panel and form win = newwin(height, width, (LINES - height) / 2, (COLS - width) / 2); // Create a new panel panel = new_panel(win); // Initialize Filter panel specific data info = sng_malloc(sizeof(filter_info_t)); // Store it into panel userptr set_panel_userptr(panel, (void*) info); // Initialize the fields info->fields[FLD_FILTER_SIPFROM] = new_field(1, 28, 3, 18, 0, 0); info->fields[FLD_FILTER_SIPTO] = new_field(1, 28, 4, 18, 0, 0); info->fields[FLD_FILTER_SRC] = new_field(1, 18, 5, 18, 0, 0); info->fields[FLD_FILTER_DST] = new_field(1, 18, 6, 18, 0, 0); info->fields[FLD_FILTER_PAYLOAD] = new_field(1, 28, 7, 18, 0, 0); info->fields[FLD_FILTER_REGISTER] = new_field(1, 1, 9, 15, 0, 0); info->fields[FLD_FILTER_INVITE] = new_field(1, 1, 10, 15, 0, 0); info->fields[FLD_FILTER_SUBSCRIBE] = new_field(1, 1, 11, 15, 0, 0); info->fields[FLD_FILTER_NOTIFY] = new_field(1, 1, 12, 15, 0, 0); info->fields[FLD_FILTER_OPTIONS] = new_field(1, 1, 9, 37, 0, 0); info->fields[FLD_FILTER_PUBLISH] = new_field(1, 1, 10, 37, 0, 0); info->fields[FLD_FILTER_MESSAGE] = new_field(1, 1, 11, 37, 0, 0); info->fields[FLD_FILTER_FILTER] = new_field(1, 10, height - 2, 11, 0, 0); info->fields[FLD_FILTER_CANCEL] = new_field(1, 10, height - 2, 30, 0, 0); info->fields[FLD_FILTER_COUNT] = NULL; // Set fields options field_opts_off(info->fields[FLD_FILTER_SIPFROM], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_SIPTO], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_SRC], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_DST], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_PAYLOAD], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_REGISTER], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_INVITE], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_SUBSCRIBE], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_NOTIFY], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_OPTIONS], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_PUBLISH], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_MESSAGE], O_AUTOSKIP); field_opts_off(info->fields[FLD_FILTER_FILTER], O_EDIT); field_opts_off(info->fields[FLD_FILTER_CANCEL], O_EDIT); // Change background of input fields set_field_back(info->fields[FLD_FILTER_SIPFROM], A_UNDERLINE); set_field_back(info->fields[FLD_FILTER_SIPTO], A_UNDERLINE); set_field_back(info->fields[FLD_FILTER_SRC], A_UNDERLINE); set_field_back(info->fields[FLD_FILTER_DST], A_UNDERLINE); set_field_back(info->fields[FLD_FILTER_PAYLOAD], A_UNDERLINE); // Create the form and post it info->form = new_form(info->fields); set_form_sub(info->form, win); post_form(info->form); // Fields labels mvwprintw(win, 3, 3, "SIP From:"); mvwprintw(win, 4, 3, "SIP To:"); mvwprintw(win, 5, 3, "Source:"); mvwprintw(win, 6, 3, "Destination:"); mvwprintw(win, 7, 3, "Payload:"); mvwprintw(win, 9, 3, "REGISTER [ ]"); mvwprintw(win, 10, 3, "INVITE [ ]"); mvwprintw(win, 11, 3, "SUBSCRIBE [ ]"); mvwprintw(win, 12, 3, "NOTIFY [ ]"); mvwprintw(win, 9, 25, "OPTIONS [ ]"); mvwprintw(win, 10, 25, "PUBLISH [ ]"); mvwprintw(win, 11, 25, "MESSAGE [ ]"); // Get Method filter if (!(method = filter_get(FILTER_METHOD))) method = setting_get_value(SETTING_FILTER_METHODS); // Set Default field values set_field_buffer(info->fields[FLD_FILTER_SIPFROM], 0, filter_get(FILTER_SIPFROM)); set_field_buffer(info->fields[FLD_FILTER_SIPTO], 0, filter_get(FILTER_SIPTO)); set_field_buffer(info->fields[FLD_FILTER_SRC], 0, filter_get(FILTER_SOURCE)); set_field_buffer(info->fields[FLD_FILTER_DST], 0, filter_get(FILTER_DESTINATION)); set_field_buffer(info->fields[FLD_FILTER_PAYLOAD], 0, filter_get(FILTER_PAYLOAD)); set_field_buffer(info->fields[FLD_FILTER_REGISTER], 0, strcasestr(method, sip_method_str(SIP_METHOD_REGISTER)) ? "*" : ""); set_field_buffer(info->fields[FLD_FILTER_INVITE], 0, strcasestr(method, sip_method_str(SIP_METHOD_INVITE)) ? "*" : ""); set_field_buffer(info->fields[FLD_FILTER_SUBSCRIBE], 0, strcasestr(method,sip_method_str(SIP_METHOD_SUBSCRIBE)) ? "*" : ""); set_field_buffer(info->fields[FLD_FILTER_NOTIFY], 0, strcasestr(method, sip_method_str(SIP_METHOD_NOTIFY)) ? "*" : ""); set_field_buffer(info->fields[FLD_FILTER_OPTIONS], 0, strcasestr(method, sip_method_str(SIP_METHOD_OPTIONS)) ? "*" : ""); set_field_buffer(info->fields[FLD_FILTER_PUBLISH], 0, strcasestr(method, sip_method_str(SIP_METHOD_PUBLISH)) ? "*" : ""); set_field_buffer(info->fields[FLD_FILTER_MESSAGE], 0, strcasestr(method, sip_method_str(SIP_METHOD_MESSAGE)) ? "*" : ""); set_field_buffer(info->fields[FLD_FILTER_FILTER], 0, "[ Filter ]"); set_field_buffer(info->fields[FLD_FILTER_CANCEL], 0, "[ Cancel ]"); // Set the window title and boxes mvwprintw(win, 1, 18, "Filter options"); wattron(win, COLOR_PAIR(CP_BLUE_ON_DEF)); title_foot_box(panel); mvwhline(win, 8, 1, ACS_HLINE, 49); mvwaddch(win, 8, 0, ACS_LTEE); mvwaddch(win, 8, 49, ACS_RTEE); wattroff(win, COLOR_PAIR(CP_BLUE_ON_DEF)); // Set default cursor position set_current_field(info->form, info->fields[FLD_FILTER_SIPFROM]); wmove(win, 3, 18); curs_set(1); return panel; }
static void nmea_update(void) { char **fields; assert(cookedwin != NULL); assert(nmeawin != NULL); assert(gpgsawin != NULL); assert(gpggawin != NULL); assert(gprmcwin != NULL); assert(gpgstwin != NULL); /* can be NULL if packet was overlong */ fields = session.nmea.field; if (session.lexer.outbuffer[0] == (unsigned char)'$' && fields != NULL && fields[0] != NULL) { int ymax, xmax; timestamp_t now; getmaxyx(nmeawin, ymax, xmax); assert(ymax > 0); if (strstr(sentences, fields[0]) == NULL) { char *s_end = sentences + strlen(sentences); if ((int)(strlen(sentences) + strlen(fields[0])) < xmax - 2) { *s_end++ = ' '; (void)strlcpy(s_end, fields[0], NMEA_MAX); } else { *--s_end = '.'; *--s_end = '.'; *--s_end = '.'; } (void)mvwaddstr(nmeawin, SENTENCELINE, 1, sentences); } /* * If the interval between this and last update is * the longest we've seen yet, boldify the corresponding * tag. */ now = timestamp(); if (now > last_tick && (now - last_tick) > tick_interval) { char *findme = strstr(sentences, fields[0]); tick_interval = now - last_tick; if (findme != NULL) { (void)mvwchgat(nmeawin, SENTENCELINE, 1, xmax - 13, A_NORMAL, 0, NULL); (void)mvwchgat(nmeawin, SENTENCELINE, 1 + (findme - sentences), (int)strlen(fields[0]), A_BOLD, 0, NULL); } } last_tick = now; if (strcmp(fields[0], "GPGSV") == 0 || strcmp(fields[0], "GNGSV") == 0 || strcmp(fields[0], "GLGSV") == 0) { int i; int nsats = (session.gpsdata.satellites_visible < MAXSATS) ? session.gpsdata.satellites_visible : MAXSATS; for (i = 0; i < nsats; i++) { (void)wmove(satwin, i + 2, 3); (void)wprintw(satwin, " %3d %3d%3d %3.0f", session.gpsdata.skyview[i].PRN, session.gpsdata.skyview[i].azimuth, session.gpsdata.skyview[i].elevation, session.gpsdata.skyview[i].ss); } /* add overflow mark to the display */ if (nsats <= MAXSATS) (void)mvwaddch(satwin, MAXSATS + 2, 18, ACS_HLINE); else (void)mvwaddch(satwin, MAXSATS + 2, 18, ACS_DARROW); } if (strcmp(fields[0], "GPRMC") == 0 || strcmp(fields[0], "GNRMC") == 0 || strcmp(fields[0], "GLRMC") == 0) { /* time, lat, lon, course, speed */ (void)mvwaddstr(gprmcwin, 1, 12, fields[1]); (void)mvwprintw(gprmcwin, 2, 12, "%12s %s", fields[3], fields[4]); (void)mvwprintw(gprmcwin, 3, 12, "%12s %s", fields[5], fields[6]); (void)mvwaddstr(gprmcwin, 4, 12, fields[7]); (void)mvwaddstr(gprmcwin, 5, 12, fields[8]); /* the status field, FAA code, and magnetic variation */ (void)mvwaddstr(gprmcwin, 6, 12, fields[2]); (void)mvwaddstr(gprmcwin, 6, 25, fields[12]); (void)mvwprintw(gprmcwin, 7, 12, "%-5s%s", fields[10], fields[11]); cooked_pvt(); /* cooked version of TPV */ } if (strcmp(fields[0], "GPGSA") == 0 || strcmp(fields[0], "GNGSA") == 0 || strcmp(fields[0], "GLGSA") == 0) { (void)mvwprintw(gpgsawin, MODE_LINE, 7, "%1s%s", fields[1], fields[2]); monitor_satlist(gpgsawin, SATS_LINE, SATS_COL+6); (void)mvwprintw(gpgsawin, DOP_LINE, 8, "%-5s", fields[16]); (void)mvwprintw(gpgsawin, DOP_LINE, 16, "%-5s", fields[17]); (void)mvwprintw(gpgsawin, DOP_LINE, 24, "%-5s", fields[15]); monitor_fixframe(gpgsawin); } #ifdef NTP_ENABLE toff_update(gpgsawin, TOFF_LINE, 7); #endif /* NTP_ENABLE */ if (strcmp(fields[0], "GPGGA") == 0 || strcmp(fields[0], "GNGGA") == 0 || strcmp(fields[0], "GLGGA") == 0) { (void)mvwprintw(gpggawin, 1, 12, "%-17s", fields[1]); (void)mvwprintw(gpggawin, 2, 12, "%-17s", fields[2]); (void)mvwprintw(gpggawin, 3, 12, "%-17s", fields[4]); (void)mvwprintw(gpggawin, 4, 12, "%-17s", fields[9]); (void)mvwprintw(gpggawin, 5, 12, "%1.1s", fields[6]); (void)mvwprintw(gpggawin, 5, 22, "%2.2s", fields[7]); (void)mvwprintw(gpggawin, 6, 12, "%-5.5s", fields[8]); (void)mvwprintw(gpggawin, 7, 12, "%-5.5s", fields[11]); } if (strcmp(fields[0], "GPGST") == 0) { (void)mvwprintw(gpgstwin, 1, 6, "%-10s", fields[1]); (void)mvwprintw(gpgstwin, 1, 21, "%-8s", fields[2]); (void)mvwprintw(gpgstwin, 2, 6, "%-10s", fields[3]); (void)mvwprintw(gpgstwin, 2, 21, "%-8s", fields[4]); (void)mvwprintw(gpgstwin, 3, 6, "%-10s", fields[5]); (void)mvwprintw(gpgstwin, 3, 21, "%-8s", fields[6]); (void)mvwprintw(gpgstwin, 4, 6, "%-10s", fields[7]); (void)mvwprintw(gpgstwin, 4, 21, "%-8s", fields[8]); } } #ifdef PPS_ENABLE pps_update(gpgsawin, PPS_LINE, 6); #endif /* PPS_ENABLE */ }
extern void get_slurm_part(void) { int error_code, i, j, recs, count = 0; static partition_info_msg_t *part_info_ptr = NULL; static partition_info_msg_t *new_part_ptr = NULL; partition_info_t part; uint16_t show_flags = 0; bitstr_t *nodes_req = NULL; static uint16_t last_flags = 0; if (params.all_flag) show_flags |= SHOW_ALL; if (part_info_ptr) { if (show_flags != last_flags) part_info_ptr->last_update = 0; error_code = slurm_load_partitions(part_info_ptr->last_update, &new_part_ptr, show_flags); if (error_code == SLURM_SUCCESS) slurm_free_partition_info_msg(part_info_ptr); else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) { error_code = SLURM_SUCCESS; new_part_ptr = part_info_ptr; } } else { error_code = slurm_load_partitions((time_t) NULL, &new_part_ptr, show_flags); } last_flags = show_flags; if (error_code) { if (quiet_flag != 1) { if (!params.commandline) { mvwprintw(text_win, main_ycord, 1, "slurm_load_partitions: %s", slurm_strerror(slurm_get_errno())); main_ycord++; } else { printf("slurm_load_partitions: %s\n", slurm_strerror(slurm_get_errno())); } } return; } if (!params.no_header) _print_header_part(); if (new_part_ptr) recs = new_part_ptr->record_count; else recs = 0; if (!params.commandline) if ((recs - text_line_cnt) < (getmaxy(text_win) - 4)) text_line_cnt--; if (params.hl) nodes_req = get_requested_node_bitmap(); for (i = 0; i < recs; i++) { part = new_part_ptr->partition_array[i]; if (nodes_req) { int overlap = 0; bitstr_t *loc_bitmap = bit_alloc(bit_size(nodes_req)); inx2bitstr(loc_bitmap, part.node_inx); overlap = bit_overlap(loc_bitmap, nodes_req); FREE_NULL_BITMAP(loc_bitmap); if (!overlap) continue; } j = 0; while (part.node_inx[j] >= 0) { set_grid_inx(part.node_inx[j], part.node_inx[j + 1], count); j += 2; } if (!params.commandline) { if (i >= text_line_cnt) { part.flags = (int) letters[count%62]; wattron(text_win, COLOR_PAIR(colors[count%6])); _print_text_part(&part, NULL); wattroff(text_win, COLOR_PAIR(colors[count%6])); } } else { part.flags = (int) letters[count%62]; _print_text_part(&part, NULL); } count++; } if (count == 128) count = 0; if (params.commandline && params.iterate) printf("\n"); part_info_ptr = new_part_ptr; return; }
static int _print_text_part(partition_info_t *part_ptr, db2_block_info_t *db2_info_ptr) { int printed = 0; int tempxcord; int prefixlen; int i = 0; int width = 0; char *nodes = NULL, time_buf[20], *conn_str = NULL; char tmp_cnt[8]; char tmp_char[8]; if (params.cluster_flags & CLUSTER_FLAG_BG) convert_num_unit((float)part_ptr->total_nodes, tmp_cnt, sizeof(tmp_cnt), UNIT_NONE); else snprintf(tmp_cnt, sizeof(tmp_cnt), "%u", part_ptr->total_nodes); if (!params.commandline) { mvwprintw(text_win, main_ycord, main_xcord, "%c", part_ptr->flags); main_xcord += 4; if (part_ptr->name) { mvwprintw(text_win, main_ycord, main_xcord, "%.9s", part_ptr->name); main_xcord += 10; if (params.display != BGPART) { char *tmp_state; if (part_ptr->state_up == PARTITION_INACTIVE) tmp_state = "inact"; else if (part_ptr->state_up == PARTITION_UP) tmp_state = "up"; else if (part_ptr->state_up == PARTITION_DOWN) tmp_state = "down"; else if (part_ptr->state_up == PARTITION_DRAIN) tmp_state = "drain"; else tmp_state = "unk"; mvwprintw(text_win, main_ycord, main_xcord, tmp_state); main_xcord += 7; if (part_ptr->max_time == INFINITE) snprintf(time_buf, sizeof(time_buf), "infinite"); else { secs2time_str((part_ptr->max_time * 60), time_buf, sizeof(time_buf)); } width = strlen(time_buf); mvwprintw(text_win, main_ycord, main_xcord + (9 - width), "%s", time_buf); main_xcord += 11; } } else main_xcord += 10; if (params.display == BGPART) { if (db2_info_ptr) { char *job_running = _set_running_job_str( db2_info_ptr->job_list, 1); mvwprintw(text_win, main_ycord, main_xcord, "%.16s", db2_info_ptr->bg_block_name); main_xcord += 18; mvwprintw(text_win, main_ycord, main_xcord, "%.7s", bg_block_state_string( db2_info_ptr->state)); main_xcord += 8; snprintf(tmp_char, sizeof(tmp_char), "%s", job_running); xfree(job_running); mvwprintw(text_win, main_ycord, main_xcord, "%.8s", tmp_char); main_xcord += 8; conn_str = conn_type_string_full( db2_info_ptr->bg_conn_type); mvwprintw(text_win, main_ycord, main_xcord, "%.7s", conn_str); xfree(conn_str); main_xcord += 8; if (params.cluster_flags & CLUSTER_FLAG_BGL) { mvwprintw(text_win, main_ycord, main_xcord, "%.9s", node_use_string( db2_info_ptr-> bg_node_use)); main_xcord += 10; } } else { mvwprintw(text_win, main_ycord, main_xcord, "?"); main_xcord += 18; mvwprintw(text_win, main_ycord, main_xcord, "?"); main_xcord += 8; mvwprintw(text_win, main_ycord, main_xcord, "?"); main_xcord += 8; mvwprintw(text_win, main_ycord, main_xcord, "?"); main_xcord += 9; mvwprintw(text_win, main_ycord, main_xcord, "?"); main_xcord += 7; mvwprintw(text_win, main_ycord, main_xcord, "?"); main_xcord += 10; } } mvwprintw(text_win, main_ycord, main_xcord, "%5s", tmp_cnt); main_xcord += 7; tempxcord = main_xcord; if (params.display == BGPART) nodes = part_ptr->allow_groups; else nodes = part_ptr->nodes; i = 0; prefixlen = i; while (nodes && nodes[i]) { width = getmaxx(text_win) - 1 - main_xcord; if (!prefixlen && (nodes[i] == '[') && (nodes[i - 1] == ',')) prefixlen = i + 1; if (nodes[i - 1] == ',' && (width - 12) <= 0) { main_ycord++; main_xcord = tempxcord + prefixlen; } else if (main_xcord >= getmaxx(text_win)) { main_ycord++; main_xcord = tempxcord + prefixlen; } if ((printed = mvwaddch(text_win, main_ycord, main_xcord, nodes[i])) < 0) return printed; main_xcord++; i++; } if ((params.display == BGPART) && db2_info_ptr && (db2_info_ptr->ionode_str)) { mvwprintw(text_win, main_ycord, main_xcord, "[%s]", db2_info_ptr->ionode_str); } main_xcord = 1; main_ycord++; } else { if (part_ptr->name) { printf("%9.9s ", part_ptr->name); if (params.display != BGPART) { if (part_ptr->state_up == PARTITION_INACTIVE) printf(" inact "); else if (part_ptr->state_up == PARTITION_UP) printf(" up "); else if (part_ptr->state_up == PARTITION_DOWN) printf(" down "); else if (part_ptr->state_up == PARTITION_DRAIN) printf(" drain "); else printf(" unk "); if (part_ptr->max_time == INFINITE) snprintf(time_buf, sizeof(time_buf), "infinite"); else { secs2time_str((part_ptr->max_time * 60), time_buf, sizeof(time_buf)); } width = strlen(time_buf); printf("%9.9s ", time_buf); } } if (params.display == BGPART) { if (db2_info_ptr) { char *job_running = _set_running_job_str( db2_info_ptr->job_list, 1); printf("%16.16s ", db2_info_ptr->bg_block_name); printf("%-7.7s ", bg_block_state_string( db2_info_ptr->state)); printf("%8.8s ", job_running); xfree(job_running); conn_str = conn_type_string_full( db2_info_ptr->bg_conn_type); printf("%8.8s ", conn_str); xfree(conn_str); if (params.cluster_flags & CLUSTER_FLAG_BGL) printf("%9.9s ", node_use_string( db2_info_ptr-> bg_node_use)); } } printf("%5s ", tmp_cnt); if (params.display == BGPART) nodes = part_ptr->allow_groups; else nodes = part_ptr->nodes; if ((params.display == BGPART) && db2_info_ptr && (db2_info_ptr->ionode_str)) { printf("%s[%s]\n", nodes, db2_info_ptr->ionode_str); } else printf("%s\n",nodes); } return printed; }
static void _print_header_part(void) { if (!params.commandline) { mvwprintw(text_win, main_ycord, main_xcord, "ID"); main_xcord += 4; mvwprintw(text_win, main_ycord, main_xcord, "PARTITION"); main_xcord += 10; if (params.display != BGPART) { mvwprintw(text_win, main_ycord, main_xcord, "AVAIL"); main_xcord += 7; mvwprintw(text_win, main_ycord, main_xcord, "TIMELIMIT"); main_xcord += 11; } else { mvwprintw(text_win, main_ycord, main_xcord, "BG_BLOCK"); main_xcord += 18; mvwprintw(text_win, main_ycord, main_xcord, "STATE"); main_xcord += 8; mvwprintw(text_win, main_ycord, main_xcord, "JOBID"); main_xcord += 8; mvwprintw(text_win, main_ycord, main_xcord, "CONN"); main_xcord += 8; if (params.cluster_flags & CLUSTER_FLAG_BGL) { mvwprintw(text_win, main_ycord, main_xcord, "NODE_USE"); main_xcord += 10; } } mvwprintw(text_win, main_ycord, main_xcord, "NODES"); main_xcord += 7; if (params.cluster_flags & CLUSTER_FLAG_BG) mvwprintw(text_win, main_ycord, main_xcord, "MIDPLANELIST"); else mvwprintw(text_win, main_ycord, main_xcord, "NODELIST"); main_xcord = 1; main_ycord++; } else { printf("PARTITION "); if (params.display != BGPART) { printf("AVAIL "); printf("TIMELIMIT "); } else { printf(" BG_BLOCK "); printf("STATE "); printf(" JOBID "); printf(" CONN "); if (params.cluster_flags & CLUSTER_FLAG_BGL) printf(" NODE_USE "); } printf("NODES "); if (params.cluster_flags & CLUSTER_FLAG_BG) printf("MIDPLANELIST\n"); else printf("NODELIST\n"); } }
/* MAIN Envoyer et recevoir des donnes Gere les fenetres du GUI */ int main (int argc, char* argv[]) { if ( argc < 2 ) { printf ("Usage: %s PORT\n", argv[0]); exit (EXIT_FAILURE); } initscr(); // Start curses mode cbreak(); // Line buffering disabled, Pass on everty thing to me //my_win = create_newwin(height, width, starty, startx); f_haut = definirFenetre( f_haut_hauteur, COLS, 0, 0 ); f_bas = definirFenetre( f_bas_hauteur, COLS, (LINES - f_bas_hauteur - marge_bas), 0 ); f_info = definirFenetre( f_info_hauteur, COLS, (LINES - donnerHauteur(f_bas) - f_info_hauteur - marge_bas), 0 ); f_cmd = definirFenetre( f_cmd_hauteur, COLS, (LINES - donnerHauteur(f_bas) - donnerHauteur(f_info) - marge_bas - f_cmd_hauteur), 0); f_chat = definirFenetre( (LINES - donnerHauteur(f_haut) - donnerHauteur(f_cmd) - donnerHauteur(f_info) - donnerHauteur(f_bas) - marge_bas), COLS, donnerHauteur(f_haut), 0 ); refresh(); w_haut = create_newwin_with_border( f_haut ); w_bas = create_newwin_no_border( f_bas ); w_info = create_newwin_with_border( f_info ); w_cmd = create_newwin_with_border( f_cmd ); w_chat = create_newwin_no_border( f_chat ); scrollok( w_chat, 1 ); wsetscrreg( w_chat, donnerStarty(f_chat), donnerHauteur(f_chat) ); wtimeout(w_bas, 500); mvwprintw(w_haut, 1, 1, "CHAT CLIENT"); mvwprintw(w_cmd, 1, 1, ""); mvwprintw(w_info, 1, 1, "/nom usager\t/mp usager msg\t/creer groupe type\t/info groupe\t\t/accept usager groupe"); mvwprintw(w_info, 2, 1, "\t\t/mg groupe msg\t/joindre groupe\t\t/liste usagers\t\t/refuser usager groupe"); mvwprintw(w_info, 3, 1, "/quitter\t\t\t/byebye groupe\t\t/liste groupes\t\t/stats groupe"); wmove( w_bas, 0, 0 ); wrefresh(w_haut); wrefresh(w_info); wrefresh(w_bas); wrefresh(w_cmd); struct sockaddr_in serveur; struct hostent* hp; socket_d = socket (AF_INET, SOCK_STREAM, 0); if (socket_d < 0) { endwin(); printf("Erreur lors de la création de la socket !\n"); return 1; } setnonblocking (socket_d); hp = gethostbyname("localhost"); if (hp==0) { endwin(); close (socket_d); printf("Hôte inconnu!\n"); return 2; } serveur.sin_family = AF_INET; serveur.sin_port = htons(atoi(argv[1])); bcopy((char *)hp->h_addr, (char *)&serveur.sin_addr, hp->h_length); if ( connect(socket_d,(struct sockaddr *)&serveur,sizeof(struct sockaddr_in)) < 0 ) { endwin(); close (socket_d); printf("Erreur lors de la création d'une nouvelle connexion !\n"); return 3; } nom_usager_defini = 0; input = chaineCreerVide( COLS ); while ( 1 ) { key_handler(); if ( ! recv_handler() ) break; } endwin (); close (socket_d); return 0; }
int item::pick_reload_ammo(player &u, bool interactive) { if( is_null() ) return false; if (!type->is_gun() && !type->is_tool()) { debugmsg("RELOADING NON-GUN NON-TOOL"); return false; } int has_spare_mag = has_gunmod (itm_spare_mag); std::vector<int> am; // List of indicies of valid ammo if (type->is_gun()) { if(charges <= 0 && has_spare_mag != -1 && contents[has_spare_mag].charges > 0) { // Special return to use magazine for reloading. return -2; } it_gun* tmp = dynamic_cast<it_gun*>(type); // If there's room to load more ammo into the gun or a spare mag, stash the ammo. // If the gun is partially loaded make sure the ammo matches. // If the gun is empty, either the spre mag is empty too and anything goes, // or the spare mag is loaded and we're doing a tactical reload. if (charges < clip_size() || (has_spare_mag != -1 && contents[has_spare_mag].charges < tmp->clip)) { std::vector<int> tmpammo = u.has_ammo(ammo_type()); for (unsigned int i = 0; i < tmpammo.size(); i++) if (charges <= 0 || u.inv[tmpammo[i]].typeId() == curammo->id) am.push_back(tmpammo[i]); } // ammo for gun attachments (shotgun attachments, grenade attachments, etc.) // for each attachment, find its associated ammo & append it to the ammo vector for (unsigned int i = 0; i < contents.size(); i++) if (contents[i].is_gunmod() && contents[i].has_flag(IF_MODE_AUX) && contents[i].charges < (dynamic_cast<it_gunmod*>(contents[i].type))->clip) { std::vector<int> tmpammo = u.has_ammo((dynamic_cast<it_gunmod*>(contents[i].type))->newtype); for(unsigned int j = 0; j < tmpammo.size(); j++) if (contents[i].charges <= 0 || u.inv[tmpammo[j]].typeId() == contents[i].curammo->id) am.push_back(tmpammo[j]); } } else { //non-gun. am = u.has_ammo(ammo_type()); } int index = -1; if (am.size() > 1 && interactive) {// More than one option; list 'em and pick WINDOW* w_ammo = newwin(am.size() + 1, 80, 0, 0); char ch; clear(); it_ammo* ammo_type; mvwprintw(w_ammo, 0, 0, "\ Choose ammo type: Damage Armor Pierce Range Accuracy"); for (unsigned int i = 0; i < am.size(); i++) { ammo_type = dynamic_cast<it_ammo*>(u.inv[am[i]].type); mvwaddch(w_ammo, i + 1, 1, i + 'a'); mvwprintw(w_ammo, i + 1, 3, "%s (%d)", u.inv[am[i]].tname().c_str(), u.inv[am[i]].charges); mvwprintw(w_ammo, i + 1, 27, "%d", ammo_type->damage); mvwprintw(w_ammo, i + 1, 38, "%d", ammo_type->pierce); mvwprintw(w_ammo, i + 1, 55, "%d", ammo_type->range); mvwprintw(w_ammo, i + 1, 65, "%d", 100 - ammo_type->accuracy); } refresh(); wrefresh(w_ammo); do ch = getch(); while ((ch < 'a' || ch - 'a' > am.size() - 1) && ch != ' ' && ch != 27); werase(w_ammo); delwin(w_ammo); erase(); if (ch == ' ' || ch == 27) index = -1; else index = am[ch - 'a']; }
// Pick up items at (posx, posy). void Pickup::pick_up(int posx, int posy, int min) { //min == -1 is Autopickup if (g->m.has_flag("SEALED", posx, posy)) { return; } if (!g->u.can_pickup(min != -1)) { // no message on autopickup (-1) return; } int veh_root_part = 0; int cargo_part = -1; vehicle *veh = g->m.veh_at (posx, posy, veh_root_part); bool from_vehicle = false; if( min != -1 ) { cargo_part = interact_with_vehicle( veh, posx, posy, veh_root_part ); from_vehicle = cargo_part >= 0; if( cargo_part == -2 ) { return; } } if( !from_vehicle ) { bool isEmpty = (g->m.i_at(posx, posy).empty()); // Hide the pickup window if this is a toilet and there's nothing here // but water. if ((!isEmpty) && g->m.furn(posx, posy) == f_toilet) { isEmpty = true; for (size_t i = 0; isEmpty && i < g->m.i_at(posx, posy).size(); i++) { if (g->m.i_at(posx, posy)[i].typeId() != "water") { isEmpty = false; } } } if (isEmpty && (min != -1 || !OPTIONS["AUTO_PICKUP_ADJACENT"] )) { return; } } // which items are we grabbing? std::vector<item> here = (from_vehicle) ? veh->parts[cargo_part].items : g->m.i_at(posx, posy); if (min == -1) { if (g->checkZone("NO_AUTO_PICKUP", posx, posy)) { here.clear(); } // Recursively pick up adjacent items if that option is on. if( OPTIONS["AUTO_PICKUP_ADJACENT"] && g->u.posx == posx && g->u.posy == posy ) { //Autopickup adjacent direction adjacentDir[8] = {NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST}; for (int i = 0; i < 8; i++) { point apos = direction_XY(adjacentDir[i]); apos.x += posx; apos.y += posy; if( g->m.has_flag( "SEALED", apos.x, apos.y ) ) { continue; } if( g->checkZone( "NO_AUTO_PICKUP", apos.x, apos.y ) ) { continue; } pick_up( apos.x, apos.y, min ); } } } // Not many items, just grab them if ((int)here.size() <= min && min != -1) { g->u.assign_activity( ACT_PICKUP, 0 ); g->u.activity.placement = point( posx, posy ); g->u.activity.values.push_back( from_vehicle ); // Only one item means index is 0. g->u.activity.values.push_back( 0 ); // auto-pickup means pick up all. g->u.activity.values.push_back( 0 ); return; } if(min != -1) { // don't bother if we're just autopickup-ing g->temp_exit_fullscreen(); } bool sideStyle = use_narrow_sidebar(); // Otherwise, we have Autopickup, 2 or more items and should list them, etc. int maxmaxitems = sideStyle ? TERMY : getmaxy(g->w_messages) - 3; int itemsH = std::min(25, TERMY / 2); int pickupBorderRows = 3; // The pickup list may consume the entire terminal, minus space needed for its // header/footer and the item info window. int minleftover = itemsH + pickupBorderRows; if(maxmaxitems > TERMY - minleftover) { maxmaxitems = TERMY - minleftover; } const int minmaxitems = sideStyle ? 6 : 9; std::vector<bool> getitem; getitem.resize(here.size(), false); int maxitems = here.size(); maxitems = (maxitems < minmaxitems ? minmaxitems : (maxitems > maxmaxitems ? maxmaxitems : maxitems )); int pickupH = maxitems + pickupBorderRows; int pickupW = getmaxx(g->w_messages); int pickupY = VIEW_OFFSET_Y; int pickupX = getbegx(g->w_messages); int itemsW = pickupW; int itemsY = sideStyle ? pickupY + pickupH : TERMY - itemsH; int itemsX = pickupX; WINDOW *w_pickup = newwin(pickupH, pickupW, pickupY, pickupX); WINDOW *w_item_info = newwin(itemsH, itemsW, itemsY, itemsX); int ch = ' '; int start = 0, cur_it; int new_weight = g->u.weight_carried(), new_volume = g->u.volume_carried(); bool update = true; mvwprintw(w_pickup, 0, 0, _("PICK UP")); int selected = 0; int last_selected = -1; int itemcount = 0; std::map<int, unsigned int> pickup_count; // Count of how many we'll pick up from each stack if (min == -1) { //Auto Pickup, select matching items if( !select_autopickup_items( here, getitem) ) { // If we didn't find anything, bail out now. return; } } else { if(g->was_fullscreen) { g->draw_ter(); } // Now print the two lists; those on the ground and about to be added to inv // Continue until we hit return or space do { static const std::string pickup_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:;"; int idx = -1; for (int i = 1; i < pickupH; i++) { mvwprintw(w_pickup, i, 0, " "); } if (ch >= '0' && ch <= '9') { ch = (char)ch - '0'; itemcount *= 10; itemcount += ch; } else if ((ch == '<' || ch == KEY_PPAGE) && start > 0) { start -= maxitems; selected = start; mvwprintw(w_pickup, maxitems + 2, 0, " "); } else if ((ch == '>' || ch == KEY_NPAGE) && start + maxitems < (int)here.size()) { start += maxitems; selected = start; mvwprintw(w_pickup, maxitems + 2, pickupH, " "); } else if ( ch == KEY_UP ) { selected--; if ( selected < 0 ) { selected = here.size() - 1; start = (int)( here.size() / maxitems ) * maxitems; if (start >= (int)here.size()) { start -= maxitems; } } else if ( selected < start ) { start -= maxitems; } } else if ( ch == KEY_DOWN ) { selected++; if ( selected >= (int)here.size() ) { selected = 0; start = 0; } else if ( selected >= start + maxitems ) { start += maxitems; } } else if ( selected >= 0 && ( ( ch == KEY_RIGHT && !getitem[selected]) || ( ch == KEY_LEFT && getitem[selected] ) ) ) { idx = selected; } else if ( ch == '`' ) { std::string ext = string_input_popup( _("Enter 2 letters (case sensitive):"), 3, "", "", "", 2); if(ext.size() == 2) { int p1 = pickup_chars.find(ext.at(0)); int p2 = pickup_chars.find(ext.at(1)); if ( p1 != -1 && p2 != -1 ) { idx = pickup_chars.size() + ( p1 * pickup_chars.size() ) + p2; } } } else { idx = pickup_chars.find(ch); } if( idx >= 0 && idx < (int)here.size()) { if (itemcount != 0 || pickup_count[idx] == 0) { if (itemcount >= here[idx].charges || !here[idx].count_by_charges()) { // Ignore the count if we pickup the whole stack anyway // or something that is not counted by charges (tools) itemcount = 0; } pickup_count[idx] = itemcount; itemcount = 0; } getitem[idx] = ( ch == KEY_RIGHT ? true : ( ch == KEY_LEFT ? false : !getitem[idx] ) ); if ( ch != KEY_RIGHT && ch != KEY_LEFT) { selected = idx; start = (int)( idx / maxitems ) * maxitems; } if (getitem[idx]) { if (pickup_count[idx] != 0 && (int)pickup_count[idx] < here[idx].charges) { item temp = here[idx].clone(); temp.charges = pickup_count[idx]; new_weight += temp.weight(); new_volume += temp.volume(); } else { new_weight += here[idx].weight(); new_volume += here[idx].volume(); } } else if (pickup_count[idx] != 0 && (int)pickup_count[idx] < here[idx].charges) { item temp = here[idx].clone(); temp.charges = pickup_count[idx]; new_weight -= temp.weight(); new_volume -= temp.volume(); pickup_count[idx] = 0; } else { new_weight -= here[idx].weight(); new_volume -= here[idx].volume(); } update = true; } if ( selected != last_selected ) { last_selected = selected; werase(w_item_info); if ( selected >= 0 && selected <= (int)here.size() - 1 ) { std::vector<iteminfo> vThisItem, vDummy; here[selected].info(true, &vThisItem); draw_item_info(w_item_info, "", vThisItem, vDummy, 0, true, true); } draw_border(w_item_info); mvwprintz(w_item_info, 0, 2, c_white, "< %s >", here[selected].display_name().c_str()); wrefresh(w_item_info); } if (ch == ',') { int count = 0; for (size_t i = 0; i < here.size(); i++) { if (getitem[i]) { count++; } else { new_weight += here[i].weight(); new_volume += here[i].volume(); } getitem[i] = true; } if (count == (int)here.size()) { for (size_t i = 0; i < here.size(); i++) { getitem[i] = false; } new_weight = g->u.weight_carried(); new_volume = g->u.volume_carried(); } update = true; } for (cur_it = start; cur_it < start + maxitems; cur_it++) { mvwprintw(w_pickup, 1 + (cur_it % maxitems), 0, " "); if (cur_it < (int)here.size()) { nc_color icolor = here[cur_it].color(&g->u); if (cur_it == selected) { icolor = hilite(icolor); } if (cur_it < (int)pickup_chars.size() ) { mvwputch(w_pickup, 1 + (cur_it % maxitems), 0, icolor, char(pickup_chars[cur_it])); } else { int p = cur_it - pickup_chars.size(); int p1 = p / pickup_chars.size(); int p2 = p % pickup_chars.size(); mvwprintz(w_pickup, 1 + (cur_it % maxitems), 0, icolor, "`%c%c", char(pickup_chars[p1]), char(pickup_chars[p2])); } if (getitem[cur_it]) { if (pickup_count[cur_it] == 0) { wprintz(w_pickup, c_ltblue, " + "); } else { wprintz(w_pickup, c_ltblue, " # "); } } else { wprintw(w_pickup, " - "); } wprintz(w_pickup, icolor, "%s", here[cur_it].display_name().c_str()); } } int pw = pickupW; const char *unmark = _("[left] Unmark"); const char *scroll = _("[up/dn] Scroll"); const char *mark = _("[right] Mark"); mvwprintw(w_pickup, maxitems + 1, 0, unmark); mvwprintw(w_pickup, maxitems + 1, (pw - strlen(scroll)) / 2, scroll); mvwprintw(w_pickup, maxitems + 1, pw - strlen(mark), mark); const char *prev = _("[pgup] Prev"); const char *all = _("[,] All"); const char *next = _("[pgdn] Next"); if (start > 0) { mvwprintw(w_pickup, maxitems + 2, 0, prev); } mvwprintw(w_pickup, maxitems + 2, (pw - strlen(all)) / 2, all); if (cur_it < (int)here.size()) { mvwprintw(w_pickup, maxitems + 2, pw - strlen(next), next); } if (update) { // Update weight & volume information update = false; for (int i = 9; i < pickupW; ++i) { mvwaddch(w_pickup, 0, i, ' '); } mvwprintz(w_pickup, 0, 9, (new_weight >= g->u.weight_capacity() ? c_red : c_white), _("Wgt %.1f"), g->u.convert_weight(new_weight)); wprintz(w_pickup, c_white, "/%.1f", g->u.convert_weight(g->u.weight_capacity())); mvwprintz(w_pickup, 0, 24, (new_volume > g->u.volume_capacity() - 2 ? c_red : c_white), _("Vol %d"), new_volume); wprintz(w_pickup, c_white, "/%d", g->u.volume_capacity() - 2); } wrefresh(w_pickup); ch = (int)getch(); } while (ch != ' ' && ch != '\n' && ch != KEY_ESCAPE); if (ch != '\n') { werase(w_pickup); wrefresh(w_pickup); werase(w_item_info); wrefresh(w_item_info); delwin(w_pickup); delwin(w_item_info); add_msg(_("Never mind.")); g->reenter_fullscreen(); g->refresh_all(); return; } } // At this point we've selected our items, register an activity to pick them up. g->u.assign_activity( ACT_PICKUP, 0 ); g->u.activity.placement = point( posx, posy ); g->u.activity.values.push_back( from_vehicle ); if( min == -1 ) { // Auto pickup will need to auto resume since there can be several of them on the stack. g->u.activity.auto_resume = true; } for (size_t i = 0; i < here.size(); i++) { if( getitem[i] ) { g->u.activity.values.push_back( i ); g->u.activity.values.push_back( pickup_count[i] ); } } g->reenter_fullscreen(); werase(w_pickup); wrefresh(w_pickup); werase(w_item_info); wrefresh(w_item_info); delwin(w_pickup); delwin(w_item_info); }
static void chat_onDraw(ToxWindow *self, Tox *m) { curs_set(1); int x2, y2; getmaxyx(self->window, y2, x2); ChatContext *ctx = self->chatwin; wclear(ctx->linewin); if (ctx->len > 0) { uint8_t line[MAX_STR_SIZE]; if (wcs_to_mbs_buf(line, ctx->line, MAX_STR_SIZE) == -1) { reset_buf(ctx->line, &ctx->pos, &ctx->len); wmove(self->window, y2 - CURS_Y_OFFSET, 0); } else { mvwprintw(ctx->linewin, 1, 0, "%s", line); } } /* Draw status bar */ StatusBar *statusbar = self->stb; mvwhline(statusbar->topline, 1, 0, ACS_HLINE, x2); wmove(statusbar->topline, 0, 0); /* Draw name, status and note in statusbar */ if (statusbar->is_online) { char *status_text = "Unknown"; int colour = WHITE; TOX_USERSTATUS status = statusbar->status; switch (status) { case TOX_USERSTATUS_NONE: status_text = "Online"; colour = GREEN; break; case TOX_USERSTATUS_AWAY: status_text = "Away"; colour = YELLOW; break; case TOX_USERSTATUS_BUSY: status_text = "Busy"; colour = RED; break; } wattron(statusbar->topline, A_BOLD); wprintw(statusbar->topline, " %s ", self->name); wattroff(statusbar->topline, A_BOLD); wattron(statusbar->topline, COLOR_PAIR(colour) | A_BOLD); wprintw(statusbar->topline, "[%s]", status_text); wattroff(statusbar->topline, COLOR_PAIR(colour) | A_BOLD); } else { wattron(statusbar->topline, A_BOLD); wprintw(statusbar->topline, " %s ", self->name); wattroff(statusbar->topline, A_BOLD); wprintw(statusbar->topline, "[Offline]"); } /* Reset statusbar->statusmsg on window resize */ if (x2 != self->x) { uint8_t statusmsg[TOX_MAX_STATUSMESSAGE_LENGTH] = {'\0'}; tox_get_status_message(m, self->num, statusmsg, TOX_MAX_STATUSMESSAGE_LENGTH); snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg); statusbar->statusmsg_len = tox_get_status_message_size(m, self->num); } self->x = x2; /* Truncate note if it doesn't fit in statusbar */ uint16_t maxlen = x2 - getcurx(statusbar->topline) - 4; if (statusbar->statusmsg_len > maxlen) { statusbar->statusmsg[maxlen] = '\0'; statusbar->statusmsg_len = maxlen; } if (statusbar->statusmsg[0]) { wattron(statusbar->topline, A_BOLD); wprintw(statusbar->topline, " - %s ", statusbar->statusmsg); wattroff(statusbar->topline, A_BOLD); } wprintw(statusbar->topline, "\n"); mvwhline(ctx->linewin, 0, 0, ACS_HLINE, x2); }
int UI::PlacePieces(Board *b) { //Create windows //navigate piece placement using arrow keys //Select 'W' & 'S' to select which ship you want to select //user 'Q' & 'E' to rotate the ship CCW & CW //Select delete over a selected ship to remove it from the initscr(); if (!b->BoardisValid()) { b->ClearBoard(); } //new win(int height, int width, int starty, int startx) //gameboard WINDOW *winboard = newwin(23, 24, 1, 1); //selection * instructions //WINDOW *wnd = subwin(mwnd, 25, 52, 0, 25); WINDOW *wnd = newwin(25, 52, 0, 25); wborder(winboard, '|', '|', '-', '-', '+', '+', '+', '+'); noecho(); //cbreak(); curs_set(0); keypad(stdscr, TRUE); SetColor(winboard, 1, COLOR_WHITE, COLOR_BLACK, false); //Text SetColor(winboard, 2, COLOR_BLUE, COLOR_BLACK); //Water SetColor(winboard, 3, COLOR_RED, COLOR_BLACK); //placed ships SetColor(winboard, 4, COLOR_YELLOW, COLOR_BLACK);//Highligted ships SetColor(winboard, 5, COLOR_GREEN, COLOR_BLACK); //??? SetColor(wnd, 1, COLOR_WHITE, COLOR_BLACK, false); //Text SetColor(wnd, 2, COLOR_YELLOW, COLOR_BLACK); //Highlighted text SetColor(wnd, 3, COLOR_RED, COLOR_BLACK); //Cursor int selected = 0; //Currently selected ship [0 to 4] Piece tempship = Piece(); tempship.piecelength = 0; tempship.CenterAxis.x = 8; tempship.CenterAxis.y = 8; tempship.orientation = ZeroDegrees; tempship.isValid = true; while (true) { wclear(winboard); wclear(wnd); wborder(winboard, '|', '|', '-', '-', '+', '+', '+', '+'); //render current view SetColor(winboard, 1); //draw backround of battle square mvwprintw(winboard, 1, 4, "A B C D E F G H I J"); for (int i = 0; i < 22; i+=2) { SetColor(winboard, 2); string gletter = std::to_string(i/2); SetColor(winboard, 2); mvwprintw(winboard, i + 3, 4, "0 0 0 0 0 0 0 0 0 0"); SetColor(winboard, 1); if (i % 2 == 0) { SetColor(winboard, 1); mvwprintw(winboard, i + 1, 1, gletter.c_str()); } } //Draw ships SetColor(winboard, 3); for (auto ship : b->BoardPieces) { /*vector<Coordinate> ls; ls = ship.GetOccupiedSpace(); for (int i = 0; i < getPieceLength(ship.Type); i++) { mvwprintw(winboard, ls[i].x + 3, ls[i].y + 4, "X"); }*/ RenderToGrid(winboard, ship); } //Print ship names SetColor(wnd, (short)1, COLOR_WHITE, COLOR_BLACK); (b->IsPieceOnBoard(AircraftCarrier)) ? SetColor(wnd, 2) : SetColor(wnd, 1); mvwprintw(wnd, 1, 15, "Aircraft Carrier"); mvwprintw(wnd, 2, 20, "XXXXX"); (b->IsPieceOnBoard(Battleship)) ? SetColor(wnd, 2) : SetColor(wnd, 1); mvwprintw(wnd, 4, 18, "BattleShip"); mvwprintw(wnd, 5, 21, "XXXX"); (b->IsPieceOnBoard(Submarine)) ? SetColor(wnd, 2) : SetColor(wnd, 1); mvwprintw(wnd, 7, 18, "Submarine"); mvwprintw(wnd, 8, 21, "XXX"); (b->IsPieceOnBoard(Cruiser)) ? SetColor(wnd, 2) : SetColor(wnd, 1); mvwprintw(wnd, 10, 19, "Cruiser"); mvwprintw(wnd, 11, 21, "XXX"); (b->IsPieceOnBoard(Destroyer)) ? SetColor(wnd, 2) : SetColor(wnd, 1); mvwprintw(wnd, 13, 18, "Destroyer"); mvwprintw(wnd, 14, 22, "XX"); mvwprintw(wnd, 16, 6, "Navigate piece placement using arrow keys"); mvwprintw(wnd, 17, 10, "Use 'W' & 'S' to select the ship"); mvwprintw(wnd, 18, 3, "Use 'Q' & 'E' to rotate the ship CCW & CW"); mvwprintw(wnd, 19, 0, "Press 'backspace' to remove a selected ship"); mvwprintw(wnd, 20, 9, "Press enter to add ship/proceed"); //refresh(); //wrefresh(winboard); //wrefresh(wnd); // //what to print //Cursor bool highlightship = false; vector<Coordinate> ls; PieceType cpt = static_cast<PieceType>(selected); //if already placed //turn the temp ship to "invalid" so it won't be rendered. //render the ship using "yellow" hit markers //break; //if the current piece isn't this type, make it so //find a valid spot for it if (b->IsPieceOnBoard(cpt)) { tempship.isValid = false; highlightship = true; //break; } else if(tempship.Type != cpt) { tempship.Type = cpt; //Let's hope this doesnt crash anything at runtime b->NextValidPieceSpot(&tempship, ShipChange); } //Render the current ship, or highlight if (highlightship) { if (b->IsPieceOnBoard(cpt)) { SetColor(winboard, 4); int pos = b->GetPieceOnBoard(cpt); if (pos != -1) { SetColor(wnd, 2); RenderToGrid(winboard, b->BoardPieces.at(pos)); } } } else { //piece is not on board, so render as a sort of 'overlay' if (!b->IsPieceOnBoard(cpt)) { SetColor(winboard, 4); int pos = b->GetPieceOnBoard(cpt); if (pos == -1) { RenderToGrid(winboard, tempship, "O"); } } }//clear cursor mvwprintw(wnd, 1, 13, " "); mvwprintw(wnd, 1, 31, " "); mvwprintw(wnd, 4, 16, " "); mvwprintw(wnd, 4, 28, " "); mvwprintw(wnd, 7, 16, " "); mvwprintw(wnd, 7, 27, " "); mvwprintw(wnd, 10, 17, " "); mvwprintw(wnd, 10, 26, " "); mvwprintw(wnd, 13, 16, " "); mvwprintw(wnd, 13, 27, " "); //paint cursor SetColor(wnd, 3); switch (static_cast<PieceType>(selected)) { case AircraftCarrier: mvwprintw(wnd, 1, 13, ">>"); mvwprintw(wnd, 1, 31, "<<"); break; case Battleship: mvwprintw(wnd, 4, 16, ">>"); mvwprintw(wnd, 4, 28, "<<"); break; case Submarine: mvwprintw(wnd, 7, 16, ">>"); mvwprintw(wnd, 7, 27, "<<"); break; case Cruiser: mvwprintw(wnd, 10, 17, ">>"); mvwprintw(wnd, 10, 26, "<<"); break; case Destroyer: mvwprintw(wnd, 13, 16, ">>"); mvwprintw(wnd, 13, 27, "<<"); break; default: break; } SetColor(wnd, 1); refresh(); wrefresh(winboard); wrefresh(wnd); char ckey = getch(); switch (ckey) { //Attempt to move piece up case '\x3': if (tempship.isValid) { b->NextValidPieceSpot(&tempship, Up); } break; //Attempt to move piece down case '\x2': if (tempship.isValid) { b->NextValidPieceSpot(&tempship, Down); } break; //Attempt to move piece down case '\x4': if (tempship.isValid) { b->NextValidPieceSpot(&tempship, Left); } break; //Attempt to move piece Right case '\x5': if (tempship.isValid) { b->NextValidPieceSpot(&tempship, Right); } break; //Attempt to rotate right case 'q': if (tempship.isValid) { b->NextValidPieceSpot(&tempship, CounterClockwise); } break; //Attempt to rotate left case 'e': if (tempship.isValid) { b->NextValidPieceSpot(&tempship, CounterClockwise); } break; //Move cursor up case 'w': (selected == 0) ? (selected = 4) : (selected--); //setup ship info //piece already exists if (b->IsPieceOnBoard(static_cast<PieceType>(selected))) { tempship.isValid = false; } else { //doesnt exist tempship.isValid = true; tempship.Type = static_cast<PieceType>(selected); b->NextValidPieceSpot(&tempship, ShipChange); } break; //Move cursor down case 's': (selected == 4) ? (selected = 0) : (selected++); //setup ship info if (b->IsPieceOnBoard(static_cast<PieceType>(selected))) { tempship.isValid = false; } else { //doesnt exist, yet tempship.isValid = true; tempship.Type = static_cast<PieceType>(selected); b->NextValidPieceSpot(&tempship, ShipChange); } break; /* Attempt to place piece. If already selected, ignore. if all pieces placed, start game */ case '\n': //already piece on board if (b->IsPieceOnBoard(static_cast<PieceType>(selected))) { if (b->BoardisValid()) { bool result = ConfirmDialog("Would you like to continue?"); if (result) { return 1; } } } //Add to board if possible //ship is valid, not a duplicate, else { if (b->ValidPieceSpot(tempship)) { b->BoardPieces.push_back(tempship); tempship.isValid = false; } } break; //If piece is already placed down, remove it case '\b': if (b->IsPieceOnBoard(static_cast<PieceType>(selected))) { int pos = b->GetPieceOnBoard(static_cast<PieceType>(selected)); if (pos != -1) { Piece px = b->BoardPieces.at(pos); //if (b->ValidPieceSpot(px)) { tempship.CenterAxis = px.CenterAxis; tempship.orientation = px.orientation; tempship.isValid = true; tempship.Type = px.Type; b->PopPieceFromBoard(static_cast<PieceType>(selected)); //} } } break; //clears board, and returns to main menu case '\x1b': { bool result = ConfirmDialog("Would you like to quit?"); if (result) { b->ClearBoard(); return 0; } //Confirm dialog! break; } default: break; } } wclear(wnd); wclear(winboard); delwin(wnd); delwin(winboard); endwin(); return 1; }
static void _print_text_resv(reserve_info_t * resv_ptr) { char start_str[32], end_str[32], acl[32]; slurm_make_time_str(&resv_ptr->start_time, start_str, sizeof(start_str)); slurm_make_time_str(&resv_ptr->end_time, end_str, sizeof(end_str)); if (resv_ptr->accounts && resv_ptr->accounts[0] && resv_ptr->users && resv_ptr->users[0]) snprintf(acl, sizeof(acl), "A:%s,U:%s", resv_ptr->accounts, resv_ptr->users); else if (resv_ptr->accounts && resv_ptr->accounts[0]) snprintf(acl, sizeof(acl), "A:%s", resv_ptr->accounts); else if (resv_ptr->users && resv_ptr->users[0]) snprintf(acl, sizeof(acl), "U:%s", resv_ptr->users); else snprintf(acl, sizeof(acl), "NONE"); if (!params.commandline) { mvwprintw(text_win, main_ycord, main_xcord, "%c", resv_ptr->flags); main_xcord += 3; mvwprintw(text_win, main_ycord, main_xcord, "%12.12s ", resv_ptr->name); main_xcord += 14; mvwprintw(text_win, main_ycord, main_xcord, "%19.19s ", start_str); main_xcord += 21; mvwprintw(text_win, main_ycord, main_xcord, "%19.19s ", end_str); main_xcord += 21; mvwprintw(text_win, main_ycord, main_xcord, "%5.d ", resv_ptr->node_cnt); main_xcord += 7; mvwprintw(text_win, main_ycord, main_xcord, "%30.30s ", acl); main_xcord += 33; mvwprintw(text_win, main_ycord, main_xcord, "%s", resv_ptr->node_list); main_xcord = 1; main_ycord++; } else { printf("%12.12s ", resv_ptr->name); printf("%19.19s ", start_str); printf("%19.19s ", end_str); printf("%5.d ", resv_ptr->node_cnt); printf("%30.30s ", acl); printf("%s ", resv_ptr->node_list); printf("\n"); } }
void UI::DisplayTitleScreen() { WINDOW* wnd = initscr(); curs_set(0); //checking for colors if (has_colors() == FALSE) { endwin(); printf("Your terminal does not support color\n"); return; } start_color(); //Title screen mvwprintw(wnd, 4, 15, " /|"); mvwprintw(wnd, 5, 15, " | |"); mvwprintw(wnd, 6, 15, " _________/--|_|/___|_|____\\"); mvwprintw(wnd, 7, 15, "___---__/0 0 0 0 |ZX__/_/_/_/__|------\\______________"); mvwprintw(wnd, 8, 15, "|0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 /"); mvwprintw(wnd, 9, 15, "|________________________________________________/"); //ASCII-ART name mvwprintw(wnd, 11, 18, " ___ _ _ _ __ _ _ "); mvwprintw(wnd, 12, 18, " / __\\ __ _| |_| |_| | ___/ _\\ |__ (_)_ __ "); mvwprintw(wnd, 13, 18, " /__\\/// _` | __| __| |/ _ \\ \\| '_ \\| | '_ \\ "); mvwprintw(wnd, 14, 18, "/ \\/ \\ (_| | |_| |_| | __/\\ \\ | | | | |_) |"); mvwprintw(wnd, 15, 18, "\\_____/\\__,_|\\__|\\__|_|\\___\\__/_| |_|_| .__/ "); mvwprintw(wnd, 16, 18, " |_| "); mvwprintw(wnd, 18, 27, "Press any key to continue..."); mvwprintw(wnd, 24, 32, "2015 Mark Beznos"); getch(); refresh(); endwin(); return; }
extern void get_reservation(void) { int error_code = -1, active, i, recs; reserve_info_t resv; time_t now = time(NULL); static int printed_resv = 0; static int count = 0; static reserve_info_msg_t *resv_info_ptr = NULL, *new_resv_ptr = NULL; bitstr_t *nodes_req = NULL; if (resv_info_ptr) { error_code = slurm_load_reservations(resv_info_ptr->last_update, &new_resv_ptr); if (error_code == SLURM_SUCCESS) slurm_free_reservation_info_msg(resv_info_ptr); else if (slurm_get_errno() == SLURM_NO_CHANGE_IN_DATA) { error_code = SLURM_SUCCESS; new_resv_ptr = resv_info_ptr; } } else error_code = slurm_load_reservations((time_t) NULL, &new_resv_ptr); if (error_code) { if (quiet_flag != 1) { if (!params.commandline) { mvwprintw(text_win, main_ycord, 1, "slurm_load_reservations: %s", slurm_strerror(slurm_get_errno())); main_ycord++; } else { printf("slurm_load_reservations: %s\n", slurm_strerror(slurm_get_errno())); } } } if (!params.no_header) _print_header_resv(); if (new_resv_ptr) recs = new_resv_ptr->record_count; else recs = 0; if (!params.commandline) { if ((text_line_cnt + printed_resv) > count) text_line_cnt--; } printed_resv = 0; count = 0; if (params.hl) nodes_req = get_requested_node_bitmap(); for (i = 0; i < recs; i++) { resv = new_resv_ptr->reservation_array[i]; if (nodes_req) { int overlap = 0; bitstr_t *loc_bitmap = bit_alloc(bit_size(nodes_req)); inx2bitstr(loc_bitmap, resv.node_inx); overlap = bit_overlap(loc_bitmap, nodes_req); FREE_NULL_BITMAP(loc_bitmap); if (!overlap) continue; } if ((resv.start_time <= now) && (resv.end_time >= now)) active = 1; else active = 0; if (active && (resv.node_inx[0] != -1)) { int j = 0; resv.node_cnt = 0; while (resv.node_inx[j] >= 0) { resv.node_cnt += (resv.node_inx[j + 1] + 1) - resv.node_inx[j]; set_grid_inx(resv.node_inx[j], resv.node_inx[j + 1], count); j += 2; } } if (resv.node_inx[0] != -1) { if (!params.commandline) { if ((count >= text_line_cnt) && (printed_resv < (getmaxy(text_win) - 4))){ resv.flags = (int)letters[count%62]; wattron(text_win, COLOR_PAIR(colors[count%6])); _print_text_resv(&resv); wattroff(text_win, COLOR_PAIR(colors[count%6])); printed_resv++; } } else { /* put the letter code into "flags" field */ resv.flags = (int)letters[count%62]; _print_text_resv(&resv); } count++; } if (count == 128) count = 0; } if (params.commandline && params.iterate) printf("\n"); if (!params.commandline) main_ycord++; resv_info_ptr = new_resv_ptr; return; }
void game::monster_wish() { WINDOW* w_list = newwin(25, 30, 0, 0); WINDOW* w_info = newwin(25, 50, 0, 30); int a = 0, shift = 1, result_selected = 0; int ch = '.'; bool search = false, friendly = false; std::string pattern; std::string info; std::vector<int> search_results; monster tmp; do { werase(w_info); werase(w_list); mvwprintw(w_list, 0, 0, "Spawn a: "); if (search) { if (ch == '\n') { search = false; ch = '.'; } else if (ch == KEY_BACKSPACE || ch == 127) { if (pattern.length() > 0) pattern.erase(pattern.end() - 1); } else if (ch == '>' || ch == KEY_NPAGE) { search = false; if (!search_results.empty()) { result_selected++; if (result_selected > search_results.size()) result_selected = 0; shift = search_results[result_selected]; a = 0; if (shift + 23 > mtypes.size()) { a = shift + 23 - mtypes.size(); shift = mtypes.size() - 23; } } } else if (ch == '<' || ch == KEY_PPAGE) { search = false; if (!search_results.empty()) { result_selected--; if (result_selected < 0) result_selected = search_results.size() - 1; shift = search_results[result_selected]; a = 0; if (shift + 23 > mtypes.size()) { a = shift + 23 - mtypes.size(); shift = mtypes.size() - 23; } } } else { pattern += ch; search_results.clear(); } if (search) { for (int i = 1; i < mtypes.size(); i++) { if (mtypes[i]->name.find(pattern) != std::string::npos) { shift = i; a = 0; result_selected = 0; if (shift + 23 > mtypes.size()) { a = shift + 23 - mtypes.size(); shift = mtypes.size() - 23; } search_results.push_back(i); } } } } else { // Not searching; scroll by keys if (ch == 'j') a++; if (ch == 'k') a--; if (ch == 'f') friendly = !friendly; if (ch == '/') { search = true; pattern = ""; search_results.clear(); } if (( ch == '>' || ch == KEY_NPAGE ) && !search_results.empty()) { result_selected++; if (result_selected > search_results.size()) result_selected = 0; shift = search_results[result_selected]; a = 0; if (shift + 23 > mtypes.size()) { a = shift + 23 - mtypes.size(); shift = mtypes.size() - 23; } } else if (( ch == '<' || ch == KEY_PPAGE ) && !search_results.empty()) { result_selected--; if (result_selected < 0) result_selected = search_results.size() - 1; shift = search_results[result_selected]; a = 0; if (shift + 23 > mtypes.size()) { a = shift + 23 - mtypes.size(); shift = mtypes.size() - 23; } } } if (!search_results.empty()) mvwprintz(w_list, 0, 11, c_green, "%s ", pattern.c_str()); else if (pattern.length() > 0) mvwprintz(w_list, 0, 11, c_red, "%s not found! ",pattern.c_str()); if (a < 0) { a = 0; shift--; if (shift < 1) shift = 1; } if (a > 22) { a = 22; shift++; if (shift + 23 > mtypes.size()) shift = mtypes.size() - 23; } for (int i = 1; i < 24; i++) { nc_color col = c_white; if (i == a + 1) col = h_white; mvwprintz(w_list, i, 0, col, mtypes[i-1+shift]->name.c_str()); wprintz(w_list, mtypes[i-1+shift]->color, " %c%", mtypes[i-1+shift]->sym); } tmp = monster(mtypes[a + shift]); if (friendly) tmp.friendly = -1; tmp.print_info(this, w_info); wrefresh(w_info); wrefresh(w_list); if (search) ch = getch(); else ch = input(); } while (ch != '\n'); clear(); delwin(w_info); delwin(w_list); refresh_all(); wrefresh(w_terrain); point spawn = look_around(); if (spawn.x == -1) return; tmp.spawn(spawn.x, spawn.y); z.push_back(tmp); }
// A simpified version of function to update text in status window void update_status(char *text, int color = 6) { werase(wstatus); wattron(wstatus, COLOR_PAIR(color)); mvwprintw(wstatus, 0, 0, text); wrefresh(wstatus); }
void game::wish() { WINDOW* w_list = newwin(25, 30, 0, 0); WINDOW* w_info = newwin(25, 50, 0, 30); int a = 0, shift = 0, result_selected = 0; int ch = '.'; bool search = false; bool incontainer = false; std::string pattern; std::string info; std::vector<int> search_results; item tmp; tmp.corpse = mtypes[0]; do { werase(w_info); werase(w_list); mvwprintw(w_list, 0, 0, "Wish for a ('/'searches): "); if (search) { if (ch == '\n') { search = false; ch = '.'; } else if (ch == KEY_BACKSPACE || ch == 127) { if (pattern.length() > 0) pattern.erase(pattern.end() - 1); } else if (ch == '>' || ch == KEY_NPAGE) { search = false; if (!search_results.empty()) { result_selected++; if (result_selected > search_results.size()) result_selected = 0; shift = search_results[result_selected]; a = 0; if (shift + 23 > standard_itype_ids.size()) { a = shift + 23 - standard_itype_ids.size(); shift = standard_itype_ids.size() - 23; } } } else if (ch == '<' || ch == KEY_PPAGE) { search = false; if (!search_results.empty()) { result_selected--; if (result_selected < 0) result_selected = search_results.size() - 1; shift = search_results[result_selected]; a = 0; if (shift + 23 > standard_itype_ids.size()) { a = shift + 23 - standard_itype_ids.size(); shift = standard_itype_ids.size() - 23; } } } else { pattern += ch; search_results.clear(); } if (search) { for (int i = 0; i < standard_itype_ids.size(); i++) { if (item_controller->find_template(standard_itype_ids[i])->name.find(pattern) != std::string::npos) { shift = i; a = 0; result_selected = 0; if (shift + 23 > standard_itype_ids.size()) { a = shift + 23 - standard_itype_ids.size(); shift = standard_itype_ids.size() - 23; } search_results.push_back(i); } } if (search_results.size() > 0) { shift = search_results[0]; a = 0; } } } else { // Not searching; scroll by keys if (ch == 'j') a++; if (ch == 'k') a--; if (ch == '/') { search = true; pattern = ""; search_results.clear(); } if (ch == 'f') incontainer = !incontainer; if (( ch == '>' || ch == KEY_NPAGE ) && !search_results.empty()) { result_selected++; if (result_selected > search_results.size()) result_selected = 0; shift = search_results[result_selected]; a = 0; if (shift + 23 > standard_itype_ids.size()) { a = shift + 23 - standard_itype_ids.size(); shift = standard_itype_ids.size() - 23; } } else if (( ch == '<' || ch == KEY_PPAGE ) && !search_results.empty()) { result_selected--; if (result_selected < 0) result_selected = search_results.size() - 1; shift = search_results[result_selected]; a = 0; if (shift + 23 > standard_itype_ids.size()) { a = shift + 23 - standard_itype_ids.size(); shift = standard_itype_ids.size() - 23; } } } if (!search_results.empty()) mvwprintz(w_list, 0, 25, c_green, "%s ", pattern.c_str()); else if (pattern.length() > 0) mvwprintz(w_list, 0, 11, c_red, "%s not found! ",pattern.c_str()); if (incontainer) mvwprintz(w_list, 1, 20, c_ltblue, "contained"); if (a < 0) { a = 0; shift--; if (shift < 0) shift = 0; } if (a > 22) { a = 22; shift++; if (shift + 23 > standard_itype_ids.size()) shift = standard_itype_ids.size() - 23; } for (int i = 1; i < 24 && i-1+shift < standard_itype_ids.size(); i++) { nc_color col = c_white; if (i == a + 1) col = h_white; mvwprintz(w_list, i, 0, col, item_controller->find_template(standard_itype_ids[i-1+shift])->name.c_str()); wprintz(w_list, item_controller->find_template(standard_itype_ids[i-1+shift])->color, "%c%", item_controller->find_template(standard_itype_ids[i-1+shift])->sym); } tmp.make(item_controller->find_template(standard_itype_ids[a + shift])); tmp.bday = turn; if (tmp.is_tool()) tmp.charges = dynamic_cast<it_tool*>(tmp.type)->max_charges; else if (tmp.is_ammo()) tmp.charges = 100; else if (tmp.is_gun()) tmp.charges = 0; else if (tmp.is_gunmod() && (tmp.has_flag(IF_MODE_AUX) || tmp.typeId() == "spare_mag")) tmp.charges = 0; else tmp.charges = -1; info = tmp.info(true); mvwprintw(w_info, 1, 0, info.c_str()); wrefresh(w_info); wrefresh(w_list); if (search) ch = getch(); else ch = input(); } while (ch != '\n'); clear(); mvprintw(0, 0, "\nWish granted - %d (%d).", tmp.type->id.c_str(), "antibiotics"); tmp.invlet = nextinv; if (!incontainer) u.i_add(tmp); else u.i_add(tmp.in_its_container(&itypes)); advance_nextinv(); getch(); delwin(w_info); delwin(w_list); }
void list_events(int day_filter, int mon_filter, int year_filter) { unsigned int current_page = 1, max_page, index_page = 0; unsigned int mod = myVector.size() % 12; int key, n_keys = 0, selected_event_index; char type_keys[66]; erase(); titlebar(); refresh(); resize_term(40, 80); attron(COLOR_PAIR(3)); mvprintw(2, 1, "List Event(s)"); mvprintw(3, 1, "-------------"); // Draw table mvvline(5, 1, 0, 29); mvvline(5, 6, 0, 29); mvvline(5, 51, 0, 29); mvvline(5, 70, 0, 29); mvvline(5, 78, 0, 29); mvhline(5, 1, 0, 78); mvhline(7, 1, 0, 78); mvhline(33, 1, 0, 78); // Print out some text mvprintw(6, 3, "No"); mvprintw(6, 8, "Event Name"); mvprintw(6, 53, "Date"); mvprintw(6, 72, "Time"); refresh(); WINDOW *wID, *wNAME, *wDATE, *wTIME, *wDET, *wSTAT; wID = newwin(25, 4, 8, 2); wrefresh(wID); wNAME = newwin(25, 42, 8, 8); wrefresh(wNAME); wDATE = newwin(25, 18, 8, 52); wrefresh(wDATE); wTIME = newwin(25, 7, 8, 71); wrefresh(wTIME); wDET = newwin(4, 78, 36, 1); wattron(wDET, COLOR_PAIR(6)); mvwprintw(wDET, 0, 0, "Press LEFT or RIGHT to change the page. Type any event number and press E to \nedit, D to delete, R to swap two events or ENTER for more details.\nOr you can press S to sort all the events. To go back, press ESC."); wrefresh(wDET); wSTAT = newwin(1, 78, 39, 1); wrefresh(wSTAT); // Declare variable for filter purpose std::vector<my_event> filter; std::vector<my_event> *list; my_event temp; // Apply filter for saved events. Copy data to the temporary local vector and print to the list. // Optional function. Maybe not implemented for now. // Since the code is identical, only the logical expression different. So it can be simpified but not for now. if (day_filter != 0 || mon_filter != 0 || year_filter != 0) { for (unsigned int z = 0; z < myVector.size(); z++) { if (year_filter != 0) { if (myVector[z].year == year_filter) { temp.hour = myVector[z].hour; temp.min = myVector[z].min; temp.day = myVector[z].day; temp.nmon = myVector[z].nmon; temp.year = myVector[z].year; temp.save_name(myVector[z].name); temp.save_loc(myVector[z].loc); //temp.save_desc(myVector[z].desc); filter.push_back(temp); } } if (mon_filter != 0) { if (myVector[z].nmon == mon_filter) { temp.hour = myVector[z].hour; temp.min = myVector[z].min; temp.day = myVector[z].day; temp.nmon = myVector[z].nmon; temp.year = myVector[z].year; temp.save_name(myVector[z].name); temp.save_loc(myVector[z].loc); //temp.save_desc(myVector[z].desc); filter.push_back(temp); } } if (day_filter != 0) { if (myVector[z].day == day_filter) { temp.hour = myVector[z].hour; temp.min = myVector[z].min; temp.day = myVector[z].day; temp.nmon = myVector[z].nmon; temp.year = myVector[z].year; temp.save_name(myVector[z].name); temp.save_loc(myVector[z].loc); //temp.save_desc(myVector[z].desc); filter.push_back(temp); } } if (day_filter != 0 && mon_filter != 0) { if (myVector[z].day == day_filter && myVector[z].nmon == mon_filter) { temp.hour = myVector[z].hour; temp.min = myVector[z].min; temp.day = myVector[z].day; temp.nmon = myVector[z].nmon; temp.year = myVector[z].year; temp.save_name(myVector[z].name); temp.save_loc(myVector[z].loc); //temp.save_desc(myVector[z].desc); filter.push_back(temp); } } if (year_filter != 0 && mon_filter != 0) { if (myVector[z].year == year_filter && myVector[z].nmon == mon_filter) { temp.hour = myVector[z].hour; temp.min = myVector[z].min; temp.day = myVector[z].day; temp.nmon = myVector[z].nmon; temp.year = myVector[z].year; temp.save_name(myVector[z].name); temp.save_loc(myVector[z].loc); //temp.save_desc(myVector[z].desc); filter.push_back(temp); } } if (day_filter != 0 && mon_filter != 0 && year_filter != 0) { if (myVector[z].day == day_filter && myVector[z].nmon == mon_filter && myVector[z].year == year_filter) { temp.hour = myVector[z].hour; temp.min = myVector[z].min; temp.day = myVector[z].day; temp.nmon = myVector[z].nmon; temp.year = myVector[z].year; temp.save_name(myVector[z].name); temp.save_loc(myVector[z].loc); //temp.save_desc(myVector[z].desc); filter.push_back(temp); } } } list = &filter; } else list = &myVector; if (mod != 0) max_page = (int)(ceil((*list).size() / 12)) + 1; else max_page = (*list).size() / 12; while (1) { werase(wID); werase(wNAME); werase(wDATE); werase(wTIME); mvprintw(34, 1, "Page: %i/%i", current_page, max_page); int n_line = 1; for (unsigned int i = index_page; i < index_page + 12; i++) { if (i < (*list).size()) { mvwprintw(wID, n_line, 1, "%i", i + 1); mvwprintw(wNAME, n_line, 0, "%s", (*list)[i].name); mvwprintw(wDATE, n_line, 1, "%i %s %i", (*list)[i].day, mon_name((*list)[i].nmon), (*list)[i].year); wformatted_time(wTIME, n_line, 1, (*list)[i].hour, (*list)[i].min); wrefresh(wID); wrefresh(wNAME); wrefresh(wDATE); wrefresh(wTIME); n_line += 2; } } key = getch(); //mvprintw(39, 1, "%i", key); if (key == 115 || key == 83) { werase(wDET); wattron(wDET, COLOR_PAIR(6)); mvwprintw(wDET, 0, 0, "Press 1 to sort by Day, 2 to sort by Month or 3 to sort by Year.\nPress ESC to go back."); wattroff(wDET, COLOR_PAIR(6)); wrefresh(wDET); werase(wSTAT); while (1) { key = getch(); if (!(key >= 49 && key <= 51) || key != 27) { werase(wDET); wattron(wDET, COLOR_PAIR(5)); mvwprintw(wDET, 0, 0, "Invalid selection..."); wattroff(wDET, COLOR_PAIR(5)); wrefresh(wDET); } if (key == 49) { std::sort(myVector.begin(), myVector.end(), SortDay()); break; } if (key == 50) { std::sort(myVector.begin(), myVector.end(), SortMonth()); break; } if (key == 51) { std::sort(myVector.begin(), myVector.end(), SortYear()); break; } if (key == 27) break; } break; } if ((key >= 48 && key <= 57) || key == 8) { if (key >= 48 && key <= 57) { if (n_keys <= 66) { werase(wSTAT); type_keys[n_keys] = char(key); n_keys++; wattron(wSTAT, COLOR_PAIR(3)); mvwprintw(wSTAT, 0, 0, "Event No: "); wattroff(wSTAT, COLOR_PAIR(3)); wattron(wSTAT, COLOR_PAIR(7)); for (int o = 0; o < n_keys; o++) wprintw(wSTAT, "%c", type_keys[o]); // Show the user for any typed numbers wrefresh(wSTAT); wattroff(wSTAT, COLOR_PAIR(7)); } } if (key == 8) { if (n_keys > 1) { werase(wSTAT); type_keys[n_keys] = ' '; type_keys[n_keys - 1] = ' '; n_keys--; wattron(wSTAT, COLOR_PAIR(3)); mvwprintw(wSTAT, 0, 0, "Event No: "); wattroff(wSTAT, COLOR_PAIR(3)); wattron(wSTAT, COLOR_PAIR(7)); for (int o = 0; o < n_keys; o++) wprintw(wSTAT, "%c", type_keys[o]); wrefresh(wSTAT); wattroff(wSTAT, COLOR_PAIR(7)); } else { werase(wSTAT); wrefresh(wSTAT); n_keys = 0; } } } // User pressed enter/E/D (all caps) if (key == 13 || key == 100 || key == 68 || key == 69 || key == 101 || key == 82 || key == 114) { if (n_keys > 0) { selected_event_index = atol(&type_keys[0]); if (selected_event_index >= 1 && selected_event_index <= int((*list).size())) break; else { werase(wSTAT); wrefresh(wSTAT); werase(wDET); wattron(wDET, COLOR_PAIR(5)); mvwprintw(wDET, 0, 0, "Invalid number or out of range.\nPlease try again..."); wattroff(wDET, COLOR_PAIR(5)); wrefresh(wDET); for (int o = 0; o <= 66; o++) type_keys[o] = ' '; // Clear the array n_keys = 0; // Reset the number of key typed } } } if (key == 27) menu(); if (key == KEY_RIGHT) { if (current_page < max_page) { index_page += 12; current_page++; continue; } } if (key == KEY_LEFT) { if (current_page > 1) { index_page -= 12; current_page--; continue; } } if (key == KEY_F(2)) { mvprintw(5, 1, "%i", myVector.size()); //refresh(); } if (key == KEY_F(1)) exit(0); } if (key == 13) data.show_details(selected_event_index - 1); if (key == 100 || key == 68) data.delete_event(selected_event_index - 1); if (key == 101 || key == 69) data.edit_event(selected_event_index - 1); // Sorting Lab 4 // if (key == 82 || key == 114) { //} // Swapping Lab 3 if (key == 82 || key == 114) { werase(wDET); wattron(wDET, COLOR_PAIR(6)); mvwprintw(wDET, 0, 0, "Now enter the second event number to replace.\nPress ESC to cancel."); wattroff(wDET, COLOR_PAIR(6)); wrefresh(wDET); werase(wSTAT); mvwprintw(wSTAT, 0, 0, "Event No To Replace: "); wrefresh(wSTAT); for (int o = 0; o <= 66; o++) type_keys[o] = ' '; // Clear the array n_keys = 0; while (1) { key = getch(); if (key == 27) break; if (key >= 48 && key <= 57) { if (n_keys <= 66) { werase(wSTAT); type_keys[n_keys] = char(key); n_keys++; wattron(wSTAT, COLOR_PAIR(3)); mvwprintw(wSTAT, 0, 0, "Event No To Replace: "); wattroff(wSTAT, COLOR_PAIR(3)); wattron(wSTAT, COLOR_PAIR(7)); for (int o = 0; o < n_keys; o++) wprintw(wSTAT, "%c", type_keys[o]); // Show the user for any typed numbers wrefresh(wSTAT); wattroff(wSTAT, COLOR_PAIR(7)); } } if (key == 8) { if (n_keys > 1) { werase(wSTAT); type_keys[n_keys] = ' '; type_keys[n_keys - 1] = ' '; n_keys--; wattron(wSTAT, COLOR_PAIR(3)); mvwprintw(wSTAT, 0, 0, "Event No To Replace: "); wattroff(wSTAT, COLOR_PAIR(3)); wattron(wSTAT, COLOR_PAIR(7)); for (int o = 0; o < n_keys; o++) wprintw(wSTAT, "%c", type_keys[o]); wrefresh(wSTAT); wattroff(wSTAT, COLOR_PAIR(7)); } else { werase(wSTAT); wrefresh(wSTAT); n_keys = 0; } } if (key == 13 || key == 100) { if (n_keys > 0) { int sec_selected_event_index; sec_selected_event_index = atol(&type_keys[0]); if (sec_selected_event_index >= 1 && sec_selected_event_index <= int((*list).size()) && selected_event_index != sec_selected_event_index) { /*mvwprintw(wSTAT, 0, 0, "selected: %i, second: %i",selected_event_index,sec_selected_event_index); wrefresh(wSTAT); getch();*/ swap(selected_event_index - 1, sec_selected_event_index - 1); break; } else { werase(wSTAT); wrefresh(wSTAT); werase(wDET); wattron(wDET, COLOR_PAIR(5)); mvwprintw(wDET, 0, 0, "Invalid number or out of range.\nPlease try again..."); wattroff(wDET, COLOR_PAIR(5)); wrefresh(wDET); for (int o = 0; o <= 66; o++) type_keys[o] = ' '; // Clear the array n_keys = 0; // Reset the number of key typed werase(wSTAT); mvwprintw(wSTAT, 0, 0, "Event No To Replace: "); wrefresh(wSTAT); } } } } } list_events(); }
/* render sort dialog */ void load_sort_win (WINDOW * main_win, GModule module, GSort * sort) { GMenu *menu; int c, quit = 1; int i = 0, k, n = 0; int opts[SORT_MAX_OPTS]; int y, x, h = SORT_WIN_H, w = SORT_WIN_W; int w2 = w - 2; WINDOW *win; getmaxyx (stdscr, y, x); /* determine amount of sort choices */ for (i = 0, k = 0; NULL != sort_choices[module][i]; i++) { const char *name = sort_choices[module][i]; if (strcmp ("Time Served", name) == 0 && !conf.serve_usecs && !conf.serve_secs) continue; else if (strcmp ("Bandwidth", name) == 0 && !conf.bandwidth) continue; else if (strcmp ("Protocol", name) == 0 && !conf.append_protocol) continue; else if (strcmp ("Method", name) == 0 && !conf.append_method) continue; opts[k++] = i; n++; } win = newwin (h, w, (y - h) / 2, (x - w) / 2); keypad (win, TRUE); wborder (win, '|', '|', '-', '-', '+', '+', '+', '+'); /* create a new instance of GMenu and make it selectable */ menu = new_gmenu (win, SORT_MENU_H, SORT_MENU_W, SORT_MENU_Y, SORT_MENU_X); menu->size = n; menu->selectable = 1; /* add items to GMenu */ menu->items = (GItem *) xcalloc (n, sizeof (GItem)); /* set checked option and set index */ for (i = 0; i < n; ++i) { menu->items[i].name = alloc_string (sort_choices[module][opts[i]]); if (sort->field == SORT_BY_HITS && strcmp ("Hits", menu->items[i].name) == 0) { menu->items[i].checked = 1; menu->idx = i; } else if (sort->field == SORT_BY_DATA && strcmp ("Data", menu->items[i].name) == 0) { menu->items[i].checked = 1; menu->idx = i; } else if (sort->field == SORT_BY_BW && strcmp ("Bandwidth", menu->items[i].name) == 0) { menu->items[i].checked = 1; menu->idx = i; } else if (sort->field == SORT_BY_USEC && strcmp ("Time Served", menu->items[i].name) == 0) { menu->items[i].checked = 1; menu->idx = i; } else if (sort->field == SORT_BY_PROT && strcmp ("Protocol", menu->items[i].name) == 0) { menu->items[i].checked = 1; menu->idx = i; } else if (sort->field == SORT_BY_MTHD && strcmp ("Method", menu->items[i].name) == 0) { menu->items[i].checked = 1; menu->idx = i; } } post_gmenu (menu); draw_header (win, "Sort active module by", " %s", 1, 1, w2, 1); mvwprintw (win, 2, 2, "[ENTER] to select field - [TAB] sort"); if (sort->sort == SORT_ASC) draw_header (win, "[x] ASC [ ] DESC", " %s", SORT_WIN_H - 2, 1, SORT_WIN_W - 2, 2); else draw_header (win, "[ ] ASC [x] DESC", " %s", SORT_WIN_H - 2, 1, SORT_WIN_W - 2, 2); wrefresh (win); while (quit) { c = wgetch (stdscr); switch (c) { case KEY_DOWN: gmenu_driver (menu, REQ_DOWN); draw_header (win, "", "%s", 3, 2, SORT_MENU_W, 0); break; case KEY_UP: gmenu_driver (menu, REQ_UP); draw_header (win, "", "%s", 3, 2, SORT_MENU_W, 0); break; case 9: /* TAB */ /* ascending */ if (sort->sort == SORT_ASC) { sort->sort = SORT_DESC; draw_header (win, "[ ] ASC [x] DESC", " %s", SORT_WIN_H - 2, 1, SORT_WIN_W - 2, 2); } /* descending */ else { sort->sort = SORT_ASC; draw_header (win, "[x] ASC [ ] DESC", " %s", SORT_WIN_H - 2, 1, SORT_WIN_W - 2, 2); } break; case 32: case 0x0a: case 0x0d: case KEY_ENTER: gmenu_driver (menu, REQ_SEL); for (i = 0; i < n; ++i) { if (menu->items[i].checked != 1) continue; if (strcmp ("Hits", menu->items[i].name) == 0) sort->field = SORT_BY_HITS; else if (strcmp ("Data", menu->items[i].name) == 0) sort->field = SORT_BY_DATA; else if (strcmp ("Bandwidth", menu->items[i].name) == 0) sort->field = SORT_BY_BW; else if (strcmp ("Time Served", menu->items[i].name) == 0) sort->field = SORT_BY_USEC; else if (strcmp ("Protocol", menu->items[i].name) == 0) sort->field = SORT_BY_PROT; else if (strcmp ("Method", menu->items[i].name) == 0) sort->field = SORT_BY_MTHD; quit = 0; break; } break; case KEY_RESIZE: case 'q': quit = 0; break; } wrefresh (win); } /* clean stuff up */ for (i = 0; i < n; ++i) free (menu->items[i].name); free (menu->items); free (menu); touchwin (main_win); close_win (win); wrefresh (main_win); }
/* Traitement du standard input */ void key_handler () { int ch = wgetch(w_bas); int longueur = chaineLongueur(input); if ( ch != '\n' && ch != ERR && ch!= 127 ) { // AJOUTER CHAR chaineAjouter( input, ch ); if ( longueur > COLS ) { mvwprintw(w_bas, 0, 0, "%s", &chaineValeur(input)[longueur-COLS] ); } } else if ( ch == 127 ) { // BACKSPACE if ( chaineLongueur(input) > 0 ) { chaineEnlever(input); delwin(w_bas); w_bas = create_newwin_no_border( f_bas ); if ( longueur > COLS ) { mvwprintw(w_bas, 0, 0, "%s", &chaineValeur(input)[longueur-COLS] ); } else { mvwprintw( w_bas, 0, 0, "%s", chaineValeur(input) ); } } else { delwin(w_bas); w_bas = create_newwin_no_border( f_bas ); wmove( w_bas, 0, 0 ); } } else if ( ch == '\n' ) { // ENTER delwin(w_cmd); w_cmd = create_newwin_with_border( f_cmd ); mvwprintw(w_cmd, 1, 1, "%s", chaineValeur(input) ); delwin(w_bas); w_bas = create_newwin_no_border( f_bas ); wmove( w_bas, 0, 0 ); char buffer[BUF_SIZE]; sprintf ( buffer, "%s", chaineValeur(input) ); decomposer_commande (buffer); if ( nom_usager_defini == 1 && !strcmp("/nom", cmd.chaine[0]) ) { wprintw (w_chat, "Erreur! Vous ne pouvez pas changer de nom!\n"); } else if ( nom_usager_defini == 0 && strcmp("/nom", cmd.chaine[0]) ) { wprintw (w_chat, "Erreur! Vous devez definir un nom d'usager tout d'abord!\n"); } else { int n = send (socket_d, buffer, strlen(buffer)+1, 0); if ( n < 0 ) wprintw(w_chat, "Erreur lors de l'envoi\n"); } chaineSupprime( input ); input = chaineCreerVide( COLS ); } wmove( w_bas, 0, chaineLongueur(input) ); wrefresh(w_chat); wrefresh(w_cmd); wrefresh(w_bas); }
/* render general statistics */ void display_general (WINDOW * win, char *ifile, int piping, int processed, int invalid, unsigned long long bandwidth) { char *bw, *size, *log_file; char *failed, *not_found, *process, *ref, *req; char *static_files, *now, *visitors; int x_field = 2, x_value = 0; size_t n, i, j, max_field = 0, max_value = 0, mod_val, y; typedef struct Field_ { const char *field; char *value; /* char due to log, bw, log_file */ int color; } Field; Field fields[] = { {T_REQUESTS, NULL, COL_CYAN}, {T_UNIQUE_VIS, NULL, COL_CYAN}, {T_REFERRER, NULL, COL_CYAN}, {T_LOG, NULL, COL_CYAN}, {T_F_REQUESTS, NULL, COL_CYAN}, {T_UNIQUE_FIL, NULL, COL_CYAN}, {T_UNIQUE404, NULL, COL_CYAN}, {T_BW, NULL, COL_CYAN}, {T_GEN_TIME, NULL, COL_CYAN}, {T_STATIC_FIL, NULL, COL_CYAN}, {"", alloc_string (""), COL_CYAN}, {T_LOG_PATH, NULL, COL_YELLOW} }; werase (win); draw_header (win, T_HEAD, " %s", 0, 0, getmaxx (stdscr), 1); if (!piping && ifile != NULL) { size = filesize_str (file_size (ifile)); log_file = alloc_string (ifile); } else { size = alloc_string ("N/A"); log_file = alloc_string ("STDIN"); } bw = filesize_str ((float) bandwidth); /* *INDENT-OFF* */ failed = int_to_str (invalid); not_found = int_to_str (get_ht_size (ht_not_found_requests)); process = int_to_str (processed); ref = int_to_str (get_ht_size (ht_referrers)); req = int_to_str (get_ht_size(ht_requests)); static_files = int_to_str (get_ht_size(ht_requests_static)); now = int_to_str (((long long) end_proc - start_proc)); visitors = int_to_str (get_ht_size(ht_unique_visitors)); fields[0].value = process; fields[1].value = visitors; fields[2].value = ref; fields[3].value = size; fields[4].value = failed; fields[5].value = req; fields[6].value = not_found; fields[7].value = bw; fields[8].value = now; fields[9].value = static_files; fields[11].value = log_file; n = ARRAY_SIZE (fields); /* *INDENT-ON* */ for (i = 0, y = 2; i < n; i++) { mod_val = i % 4; if (i > 0 && mod_val == 0) { max_field = 0; max_value = 0; x_field = 2; x_value = 2; y++; } x_field += max_field; mvwprintw (win, y, x_field, "%s", fields[i].field); max_field = 0; for (j = 0; j < n; j++) { size_t len = strlen (fields[j].field); if (j % 4 == mod_val && len > max_field) max_field = len; } max_value = 0; for (j = 0; j < n; j++) { size_t len = strlen (fields[j].value); if (j % 4 == mod_val && len > max_value) max_value = len; } x_value = max_field + x_field + 1; max_field += max_value + 2; wattron (win, A_BOLD | COLOR_PAIR (fields[i].color)); mvwprintw (win, y, x_value, "%s", fields[i].value); wattroff (win, A_BOLD | COLOR_PAIR (fields[i].color)); } for (i = 0; i < n; i++) { free (fields[i].value); } }
// Scan MAME ROMs folder, cross-reference against XML (if present) for // verbose descriptions, generate ncurses menu. static void find_roms(void) { FILE *fp; struct dirent **dirList; int i, nFiles; Game *g; // For traversing Game linked list WINDOW *scanWin; // Modal 'Scanning...' window if(noRomWin) { // Delete 'No ROMS' window if present delwin(noRomWin); noRomWin = NULL; werase(mainWin); box(mainWin, 0, 0); } if(items) { // Delete old ROM menu and contents, if any if(menu) { unpost_menu(menu); free_menu(menu); menu = NULL; } for(i=0; items[i]; i++) free_item(items[i]); free(items); items = NULL; } const char scanMsg[] = "Scanning ROM folder..."; scanWin = newwin(3, strlen(scanMsg) + 4, (LINES - 4) / 2 - 1, (COLS - strlen(scanMsg)) / 2 - 2); box(scanWin, 0, 0); mvwprintw(scanWin, 1, 2, scanMsg); wnoutrefresh(mainWin); wnoutrefresh(scanWin); doupdate(); delwin(scanWin); werase(mainWin); box(mainWin, 0, 0); while(gameList) { // Delete existing gameList, if any g = gameList->next; if(gameList->name) free(gameList->name); if(gameList->desc) free(gameList->desc); free(gameList); gameList = g; } i = 0; // Count number of games found & successfully alloc'd if((nFiles = scandir(rom, &dirList, sel, alphasort)) > 0) { // Copy dirent array to a Game linked list while(nFiles--) { // List is assembled in reverse if((g = (Game *)malloc(sizeof(Game)))) { g->name = strdup(dirList[nFiles]->d_name); g->desc = NULL; g->next = gameList; gameList = g; i++; // A winner is you } // dirList contents are freed as we go free(dirList[nFiles]); } free(dirList); } // Alloc, load, cross-reference XML file against ROM filenames if((fp = fopen(xml, "r"))) { fseek(fp, 0, SEEK_END); char *buf; int len = ftell(fp); if((buf = (char *)malloc(len))) { int depth = 0; fseek(fp, 0, SEEK_SET); fread(buf, 1, len, fp); XML_Parser parser = XML_ParserCreate(NULL); XML_SetUserData(parser, &depth); XML_SetElementHandler(parser, startElement, endElement); XML_SetCharacterDataHandler(parser, elementData); XML_Parse(parser, buf, len, 1); XML_ParserFree(parser); free(buf); } fclose(fp); } if((items = (ITEM**)malloc((i + 1) * sizeof(ITEM *)))) { for(i=0, g=gameList; g; g=g->next, i++) { items[i] = new_item(g->name, g->desc); set_item_userptr(items[i], g); } items[i] = NULL; menu = new_menu(items); set_menu_win(menu, mainWin); set_menu_sub(menu, derwin(mainWin, LINES-6, COLS-2, 1, 1)); set_menu_format(menu, LINES-6, 1); set_menu_mark(menu, " "); post_menu(menu); } wrefresh(mainWin); if(!menu) { // If no ROMs, throw up a message to that effect const char noRomMsg[] = "No ROMs found"; noRomWin = newwin(3, strlen(noRomMsg) + 4, (LINES - 4) / 2 - 1, (COLS - strlen(noRomMsg)) / 2 - 2); box(noRomWin, 0, 0); mvwprintw(noRomWin, 1, 2, noRomMsg); wrefresh(noRomWin); } }