options_iterate(curr_options, poption) { switch (option_type(poption)) { case OT_BOOLEAN: option_bool_set(poption, get_bool(poption)); break; case OT_INTEGER: option_int_set(poption, get_int(poption)); break; case OT_STRING: option_str_set(poption, get_string(poption)); break; case OT_ENUM: option_enum_set_int(poption, get_enum(poption)); break; case OT_BITWISE: option_bitwise_set(poption, get_bitwise(poption)); break; case OT_FONT: option_font_set(poption, get_button_font(poption)); break; case OT_COLOR: option_color_set(poption, get_color(poption)); break; case OT_VIDEO_MODE: log_error("Option type %s (%d) not supported yet.", option_type_name(option_type(poption)), option_type(poption)); break; } } options_iterate_end;
//----------------------------------------------------------------------------- int32_t Args::getopt() { // Always reset optarg m_optarg = NULL; // End of arguments if (m_optind >= m_scope) { return -1; } switch (option_type(m_argv[m_optind])) { case AOT_SHORT: { return short_option(m_argv[m_optind]); } case AOT_LONG: { return long_option(m_argv[m_optind]); } case AOT_NOT_OPTION: { not_option(); return getopt(); } default: { return '?'; } } }
/* * Write all current options to a user preference file. */ void option_dump(ang_file * fff) { int i, j; /* Dump interface and gameplay options */ for (i = 0; i < OPT_MAX; i++) { const char *name = option_name(i); int type = option_type(i); if ((type != OP_GAMEPLAY) && (type != OP_INTERFACE)) continue; /* Comment */ file_putf(fff, "# Option '%s'\n", option_desc(i)); /* Dump the option */ if (op_ptr->opt[i]) file_putf(fff, "Y:%s\n", name); else file_putf(fff, "X:%s\n", name); /* Skip a line */ file_putf(fff, "\n"); } /* Dump window flags */ for (i = 1; i < ANGBAND_TERM_MAX; i++) { /* Require a real window */ if (!angband_term[i]) continue; /* Check each flag */ for (j = 0; j < (int) N_ELEMENTS(window_flag_desc); j++) { /* Require a real flag */ if (!window_flag_desc[j]) continue; /* Comment */ file_putf(fff, "# Window '%s', Flag '%s'\n", angband_term_name[i], window_flag_desc[j]); /* Dump the flag */ if (op_ptr->window_flag[i] & (1L << j)) file_putf(fff, "W:%d:%d:1\n", i, j); else file_putf(fff, "W:%d:%d:0\n", i, j); /* Skip a line */ file_putf(fff, "\n"); } } autoinsc_dump(fff); keymap_dump(fff); }
static LONG CALLBACK option_proc(HWND dlg,UINT message, WPARAM wParam,LPARAM lParam) { switch(message) { case WM_CREATE: case WM_SIZE: case WM_GETMINMAXINFO: break; case WM_DESTROY: option_dialog=NULL; break; case WM_COMMAND: if (LOWORD(wParam)==IDOK) { void *gui_data; char dp[512]; int val; client_options_iterate(poption) { gui_data = option_get_gui_data(poption); switch (option_type(poption)) { case COT_BOOLEAN: (void) option_bool_set(poption, Button_GetCheck((HWND)(gui_data)) == BST_CHECKED); break; case COT_INTEGER: GetWindowText((HWND)(gui_data),dp,sizeof(dp)); if (str_to_int(dp, &val)) { (void) option_int_set(poption, val); } break; case COT_STRING: if (!gui_data) { break; } GetWindowText((HWND) (gui_data), dp, sizeof(dp)); (void) option_str_set(poption, dp); break; case COT_FONT: /* FIXME: */ break; } } client_options_iterate_end; DestroyWindow(dlg); } break; case WM_CLOSE: DestroyWindow(dlg); break; default: return DefWindowProc(dlg,message,wParam,lParam); }
/** * Enters a players name on a hi-score table, if "legal". * * Assumes "signals_ignore_tstp()" has been called. */ void enter_score(time_t *death_time) { int j; /* Cheaters are not scored */ for (j = 0; j < OPT_MAX; ++j) { if (option_type(j) != OP_SCORE) continue; if (!player->opts.opt[j]) continue; msg("Score not registered for cheaters."); event_signal(EVENT_MESSAGE_FLUSH); return; } /* Add a new entry, if allowed */ if (player->noscore & (NOSCORE_WIZARD | NOSCORE_DEBUG)) { msg("Score not registered for wizards."); event_signal(EVENT_MESSAGE_FLUSH); } else if (!player->total_winner && streq(player->died_from, "Interrupting")) { msg("Score not registered due to interruption."); event_signal(EVENT_MESSAGE_FLUSH); } else if (!player->total_winner && streq(player->died_from, "Quitting")) { msg("Score not registered due to quitting."); event_signal(EVENT_MESSAGE_FLUSH); } else { high_score entry; high_score scores[MAX_HISCORES]; build_score(&entry, player->died_from, death_time); highscore_read(scores, N_ELEMENTS(scores)); highscore_add(&entry, scores, N_ELEMENTS(scores)); highscore_write(scores, N_ELEMENTS(scores)); } /* Success */ return; }
/** * Handle keypresses for an option entry. */ static bool option_toggle_handle(struct menu *m, const ui_event *event, int oid) { bool next = false; if (event->type == EVT_SELECT) { /* Hack -- birth options can not be toggled after birth */ /* At birth, m->flags == MN_DBL_TAP. */ /* After birth, m->flags == MN_NO_TAGS */ if (!((option_type(oid) == OP_BIRTH) && (m->flags == MN_NO_TAGS))) { option_set(option_name(oid), !op_ptr->opt[oid]); } } else if (event->type == EVT_KBRD) { if (event->key.code == 'y' || event->key.code == 'Y') { option_set(option_name(oid), true); next = true; } else if (event->key.code == 'n' || event->key.code == 'N') { option_set(option_name(oid), false); next = true; } else if (event->key.code == 't' || event->key.code == 'T') { option_set(option_name(oid), !op_ptr->opt[oid]); } else if (event->key.code == '?') { screen_save(); show_file(format("option.txt#%s", option_name(oid)), NULL, 0, 0); screen_load(); } else { return false; } } else { return false; } if (next) { m->cursor++; m->cursor = (m->cursor + m->filter_count) % m->filter_count; } return true; }
/** * Write a character dump */ void write_character_dump(ang_file *fff) { int i, x, y; int a; wchar_t c; struct store *home = &stores[STORE_HOME]; struct object **home_list = mem_zalloc(sizeof(struct object *) * z_info->store_inven_max); char o_name[80]; char buf[1024]; char *p; /* Begin dump */ file_putf(fff, " [%s Character Dump]\n\n", buildid); /* Display player */ display_player(0); /* Dump part of the screen */ for (y = 1; y < 23; y++) { p = buf; /* Dump each row */ for (x = 0; x < 79; x++) { /* Get the attr/char */ (void)(Term_what(x, y, &a, &c)); /* Dump it */ p += wctomb(p, c); } /* Back up over spaces */ while ((p > buf) && (p[-1] == ' ')) --p; /* Terminate */ *p = '\0'; /* End the row */ file_putf(fff, "%s\n", buf); } /* Skip a line */ file_putf(fff, "\n"); /* Display player */ display_player(1); /* Dump part of the screen */ for (y = 11; y < 20; y++) { p = buf; /* Dump each row */ for (x = 0; x < 39; x++) { /* Get the attr/char */ (void)(Term_what(x, y, &a, &c)); /* Dump it */ p += wctomb(p, c); } /* Back up over spaces */ while ((p > buf) && (p[-1] == ' ')) --p; /* Terminate */ *p = '\0'; /* End the row */ file_putf(fff, "%s\n", buf); } /* Skip a line */ file_putf(fff, "\n"); /* Dump part of the screen */ for (y = 11; y < 20; y++) { p = buf; /* Dump each row */ for (x = 0; x < 39; x++) { /* Get the attr/char */ (void)(Term_what(x + 40, y, &a, &c)); /* Dump it */ p += wctomb(p, c); } /* Back up over spaces */ while ((p > buf) && (p[-1] == ' ')) --p; /* Terminate */ *p = '\0'; /* End the row */ file_putf(fff, "%s\n", buf); } /* Skip some lines */ file_putf(fff, "\n\n"); /* If dead, dump last messages -- Prfnoff */ if (player->is_dead) { i = messages_num(); if (i > 15) i = 15; file_putf(fff, " [Last Messages]\n\n"); while (i-- > 0) { file_putf(fff, "> %s\n", message_str((s16b)i)); } file_putf(fff, "\nKilled by %s.\n\n", player->died_from); } /* Dump the equipment */ file_putf(fff, " [Character Equipment]\n\n"); for (i = 0; i < player->body.count; i++) { struct object *obj = slot_object(player, i); if (!obj) continue; object_desc(o_name, sizeof(o_name), obj, ODESC_PREFIX | ODESC_FULL); file_putf(fff, "%c) %s\n", gear_to_label(obj), o_name); object_info_chardump(fff, obj, 5, 72); } file_putf(fff, "\n\n"); /* Dump the inventory */ file_putf(fff, "\n\n [Character Inventory]\n\n"); for (i = 0; i < z_info->pack_size; i++) { struct object *obj = player->upkeep->inven[i]; if (!obj) break; object_desc(o_name, sizeof(o_name), obj, ODESC_PREFIX | ODESC_FULL); file_putf(fff, "%c) %s\n", gear_to_label(obj), o_name); object_info_chardump(fff, obj, 5, 72); } file_putf(fff, "\n\n"); /* Dump the quiver */ file_putf(fff, "\n\n [Character Quiver]\n\n"); for (i = 0; i < z_info->quiver_size; i++) { struct object *obj = player->upkeep->quiver[i]; if (!obj) continue; object_desc(o_name, sizeof(o_name), obj, ODESC_PREFIX | ODESC_FULL); file_putf(fff, "%c) %s\n", gear_to_label(obj), o_name); object_info_chardump(fff, obj, 5, 72); } file_putf(fff, "\n\n"); /* Dump the Home -- if anything there */ store_stock_list(home, home_list, z_info->store_inven_max); if (home->stock_num) { /* Header */ file_putf(fff, " [Home Inventory]\n\n"); /* Dump all available items */ for (i = 0; i < z_info->store_inven_max; i++) { struct object *obj = home_list[i]; if (!obj) break; object_desc(o_name, sizeof(o_name), obj, ODESC_PREFIX | ODESC_FULL); file_putf(fff, "%c) %s\n", I2A(i), o_name); object_info_chardump(fff, obj, 5, 72); } /* Add an empty line */ file_putf(fff, "\n\n"); } /* Dump character history */ dump_history(fff); file_putf(fff, "\n\n"); /* Dump options */ file_putf(fff, " [Options]\n\n"); /* Dump options */ for (i = 0; i < OP_MAX; i++) { int opt; const char *title = ""; switch (i) { case OP_INTERFACE: title = "User interface"; break; case OP_BIRTH: title = "Birth"; break; default: continue; } file_putf(fff, " [%s]\n\n", title); for (opt = 0; opt < OPT_MAX; opt++) { if (option_type(opt) != i) continue; file_putf(fff, "%-45s: %s (%s)\n", option_desc(opt), player->opts.opt[opt] ? "yes" : "no ", option_name(opt)); } /* Skip some lines */ file_putf(fff, "\n"); } mem_free(home_list); }
static bool option_is_cheat(int opt) { return (option_type(opt) == OP_CHEAT); }