void OptionMenu::abort() { info.rest_game_scr(); power.win_opened = 0; // active_flag = 0; clear_active(); }
// 0 = abort // 1 = accept void OptionMenu::exit(int action) { // reflect the effect of config.music_flag, config.wav_music_volume audio.set_wav_volume(config.sound_effect_volume); if( config.music_flag ) { if( music.is_playing() ) { music.change_volume(config.wav_music_volume); } } else { music.stop(); } // temporary disable active_flag for info.rest_game_scr to call info.disp active_flag = 0; info.rest_game_scr(); active_flag = 1; power.win_opened = 0; // active_flag = 0; clear_active(); return; }
int Tree::promote(int new_root) { for (Node *n = root[active]->get_child(); n; n = n->get_sibling()) { if (n->get_move() == new_root) { root[1-active]->copy_values(n); copy_recursive(root[1-active], n); clear_active(); active = 1-active; return active; } } clear(); return active; }
void show_result(struct tup_entry *tent, int is_error, struct timespan *ts, const char *extra_text, int always_display) { FILE *f; float tdiff = 0.0; job_time += tent->mtime; if(ts) { tdiff = timespan_seconds(ts); } sum++; if(sum > total) { fprintf(stderr, "tup internal error: progress bar is sized incorrectly.\n"); } if(quiet && !always_display) return; if(is_error) { got_error = 1; f = stderr; } else { f = stdout; } clear_active(f); color_set(f); if(is_error) { fprintf(stderr, "* %s", color_error_mode()); } else { printf(" "); } /* If we aren't going to show a progress bar, then %-complete here is * helpful. */ if(total && !display_progress) fprintf(f, "%3i%% ", percent_complete()); if(display_job_numbers) fprintf(f, "%i) ", sum); if(display_job_time && ts) { fprintf(f, "[%.3fs] ", tdiff); } if(extra_text) fprintf(f, "%s: ", extra_text); print_tup_entry(f, tent); fprintf(f, "\n"); color_error_mode_clear(); }
/* Notes: * iserr=0 means stdout, for sub-processes that succeed * iserr=1 means stderr, for run-scripts * iserr=2 means stderr, for tup errors (eg: missing deps) * iserr=3 means stderr, for sub-processes that fail */ int display_output(int fd, int iserr, const char *name, int display_name, FILE *f) { if(fd != -1) { char buf[1024]; int rc; int displayed = 0; FILE *out = stdout; if(iserr) out = stderr; if(f) out = f; while(1) { rc = read(fd, buf, sizeof(buf)); if(rc < 0) { perror("display_output: read"); fprintf(stderr, "tup internal error: Unable to display output from a sub-process.\n"); return -1; } if(rc == 0) break; if(!displayed) { displayed = 1; clear_active(out); if(iserr == 2) { /* For tup errors (eg: missing deps) */ fprintf(out, " *** tup errors ***\n"); } if(iserr == 1) { /* This is for run-scripts */ if(display_name) { color_set(stderr); fprintf(out, " *** tup: stderr from command '%s%s%s%s' ***\n", color_type(TUP_NODE_CMD), color_append_normal(), name, color_end()); } } } fprintf(out, "%.*s", rc, buf); } } return 0; }
/* Produce reverse call tree output */ static void inverted_tree(int lev, int last, Symbol *sym) { struct linked_list_entry *p; int rc; if (sym->type == SymUndefined || (max_depth && lev >= max_depth) || !include_symbol(sym)) return; rc = print_symbol(0, lev, last, sym); newline(); if (rc || sym->active) return; set_active(sym); for (p = linked_list_head(sym->caller); p; p = p->next) { set_level_mark(lev+1, !is_last(p)); inverted_tree(lev+1, is_last(p), (Symbol*)p->data); } clear_active(sym); }
/* Produce reverse call tree output */ static void inverted_tree(int lev, int last, Symbol *sym) { Consptr cons; int rc; if (sym->type == SymUndefined || (max_depth && lev >= max_depth) || !include_symbol(sym)) return; rc = print_symbol(0, lev, last, sym); newline(); if (rc || sym->active) return; set_active(sym); for (cons = sym->caller; cons; cons = CDR(cons)) { set_level_mark(lev+1, is_printable(CDR(cons))); inverted_tree(lev+1, is_last(cons), (Symbol*)CAR(cons)); } clear_active(sym); }
void show_progress(int active, enum TUP_NODE_TYPE type) { int console_width = tup_option_get_int("display.width"); if(total && display_progress && console_width >= 10) { /* -3 for the [] and leading space, and -6 for the " 100% " at * the end. */ int max = console_width - 9; int fill; char buf[console_width + color_len + 1]; int num_infos = 0; int i = 0; int x; int tmpmax; int offset; if(max > total) max = total; if(got_error) type = TUP_NODE_ROOT; clear_active(stdout); fill = max * sum / total; if(color_len) { memset(buf, ' ', sizeof(buf)); } else { memset(buf, '.', fill); memset(buf+fill, ' ', sizeof(buf) - fill); } for(x=0; x<ARRAY_SIZE(infos); x++) { infos[x].len = 0; } if(total_time != -1) { infos[i].len = get_time_remaining(infos[i].text, sizeof(infos[i].text), job_time, total_time, 0); } else { infos[i].len = get_time_remaining(infos[i].text, sizeof(infos[i].text), sum, total, 1); } i++; infos[i].len = snprintf(infos[i].text, sizeof(infos[i].text), "Remaining=%i", total-sum); i++; if(active != -1) { infos[i].len = snprintf(infos[i].text, sizeof(infos[i].text), "Active=%i", active); } else { /* Override maxlen to disable "Active..." */ infos[i].maxlen = 0; } i++; tmpmax = max; for(x=0; x<ARRAY_SIZE(infos); x++) { int spacing = 0; if(x) spacing = 1; if(tmpmax >= infos[x].maxlen + spacing) { tmpmax -= infos[x].maxlen + spacing; num_infos++; } else { break; } } offset = tmpmax / 2; for(x=0; x<num_infos; x++) { if(x) offset++; memcpy(buf + offset, infos[x].text, infos[x].len); offset += infos[x].maxlen; } color_set(stdout); printf(" [%s%s%.*s%s%.*s] %3i%%", color_type(type), color_append_reverse(), fill, buf, color_end(), max-fill, buf+fill, percent_complete()); is_active = 1; fflush(stdout); } }
void tup_main_progress(const char *s) { clear_active(stdout); cur_phase++; tup_show_message(s); }