void put_spec_item_info (short which_i) { display_strings(scenario.scen_strs(60 + 1 + which_i * 2),"", -1,-1,-1,-1, scenario.scen_strs(60 + which_i * 2),57,scenario.intro_pic,PICT_SCEN,0); //get_str(item_name,6,1 + which_i * 2); //display_strings(6,2 + which_i * 2,0,0, //(char *)item_name,-1,702,0); }
// Call call this anywhere, but don't forget parent!!! void give_help(short help1,short help2,short parent_num) { bool help_forced = false; Str255 str1,str2; if (help1 >= 200) { help_forced = true; help1 -= 200; } if ((PSD[SDF_NO_INSTANT_HELP] > 0) && (help_forced == false)) return; if (univ.party.help_received[help1] > 0) return; //if (help1 >= 20) univ.party.help_received[help1] = 1; get_str(str1,10,help1); if (help2 > 0) get_str(str2,10,help2); if (help2 == 0) display_strings((char *)str1, "",-1,-1,-1,-1,"Instant Help",57,24,PICT_DLG, parent_num); else display_strings((char *)str1,(char *)str2,-1,-1,-1,-1,"Instant Help",57,24,PICT_DLG, parent_num); }
Boolean handle_menu (short item, HMENU) { short i,j,k; Boolean to_return = FALSE; item_record_type store_i; if ((file_in_mem == FALSE) && ((item == 1) || (item == 3) || (item >= 40)) && (item != 200) && (item != 100)) { display_strings(20,5,0,0,"Editing party",57,707,0); item = -1; } switch (item) { case -1: break; case 1: save_file(0); break; case 2: if (verify_restore_quit(1) == TRUE) load_file(); update_item_menu(item_menus_lock); break; case 3: save_file(1); break; case 4: All_Done = verify_restore_quit(0); break; case 41: edit_gold_or_food(0); redraw_screen(); break; case 42: edit_gold_or_food(1); redraw_screen(); break; case 44: if (party.stuff_done[304][0] > 0) { FCD(909,0); break; } FCD(901,0); leave_town(); break; case 45: if (party.stuff_done[304][0] == 0) { FCD(911,0); break; } FCD(910,0); c_town.p_loc.x = party.stuff_done[304][1]; c_town.p_loc.y = party.stuff_done[304][2]; party.stuff_done[304][0] = 0; for (i = 0; i < 6; i++) if (adven[i].main_status >= 10) adven[i].main_status -= 10; redraw_screen(); break; case 48: display_strings(20,20,0,0,"Editing party",57,707,0); for (i = 0; i < 4; i++) party.creature_save[i].which_town = 200; break; case 51: // damage display_strings(20,1,0,0,"Editing party",57,715,0); for (i = 0; i < 6; i++) adven[i].cur_health = adven[i].max_health; redraw_screen(); break; case 52: // spell pts display_strings(20,2,0,0,"Editing party",57,715,0); for (i = 0; i < 6; i++) adven[i].cur_sp = adven[i].max_sp; redraw_screen(); break; case 53: // raise dead display_strings(20,3,0,0,"Editing party",57,715,0); for (i = 0; i < 6; i++) if ((adven[i].main_status == 2) || (adven[i].main_status == 3) || (adven[i].main_status == 4)) adven[i].main_status = 1; redraw_screen(); break; case 54: // conditions display_strings(20,4,0,0,"Editing party",57,715,0); for (i = 0; i < 6; i++) { adven[i].status[2] = 0; if (adven[i].status[3] < 0) adven[i].status[3] = 0; adven[i].status[6] = 0; adven[i].status[7] = 0; adven[i].status[9] = 0; adven[i].status[11] = 0; adven[i].status[12] = 0; adven[i].status[13] = 0; } redraw_screen(); break; case 55: if (party_in_scen == FALSE) { display_strings(20,25,0,0,"Editing party",57,715,0); break; } if (FCD(912,0) != 1) break; remove_party_from_scen(); party.stuff_done[304][0] = 0; redraw_screen(); break; case 62: display_alchemy(); break; case 63: // all property display_strings(20,6,0,0,"Editing party",57,707,0); for (i = 0; i < 30; i++) { party.boats[i].property = FALSE; party.horses[i].property = FALSE; } break; case 70: // edit day edit_day(); break; case 71: // out maps if (party_in_scen == FALSE) { display_strings(20,25,0,0,"Editing party",57,715,0); break; } display_strings(20,13,0,0,"Editing party",57,715,0); for (i = 0; i < 96; i++) for (j = 0; j < 96; j++) out_e[i][j] = 1; for (i = 0; i < 100; i++) for (j = 0; j < 6; j++) for (k = 0; k < 48; k++) o_maps.outdoor_maps[i][j][k] = 255; break; case 72: // town maps if (party_in_scen == FALSE) { display_strings(20,25,0,0,"Editing party",57,715,0); break; } display_strings(20,14,0,0,"Editing party",57,715,0); for (i = 0; i < 64; i++) for (j = 0; j < 64; j++) c_town.explored[i][j] = 1; for (i = 0; i < 200; i++) for (j = 0; j < 8; j++) for (k = 0; k < 64; k++) town_maps.town_maps[i][j][k] = 255; break; case 100: // index WinHelp(mainPtr,"Blades of Exile.hlp",HELP_CONTENTS,0L); break; case 200: // about FCD(1062,0); break; default: item -= 600; store_i = scen_item_list.scen_items[item]; if(store_i.variety == 3){ party.gold += get_ran(1,1,20); redraw_screen(); break; } if(store_i.variety == 11){ party.food += get_ran(1,1,20); redraw_screen(); break; } give_to_pc(current_active_pc,store_i,FALSE); draw_items(1); break; } return to_return; }
void parse_cmdline (conf_t conf, int argc, char **argv) { /* Parses the command-line, altering the configuration [conf] as specified. */ char *prog; int c; char *p; int i; long int l; unsigned long u; int multiplier; munge_err_t e; opterr = 0; /* suppress default getopt err msgs */ prog = (prog = strrchr (argv[0], '/')) ? prog + 1 : argv[0]; for (;;) { c = getopt_long (argc, argv, short_opts, long_opts, NULL); if (c == -1) { /* reached end of option list */ break; } switch (c) { case 'h': display_help (prog); exit (EMUNGE_SUCCESS); break; case 'L': display_license (); exit (EMUNGE_SUCCESS); break; case 'V': display_version (); exit (EMUNGE_SUCCESS); break; case 'q': g_got_quiet = 1; break; case 'c': i = munge_enum_str_to_int (MUNGE_ENUM_CIPHER, optarg); if ((i < 0) || !munge_enum_is_valid (MUNGE_ENUM_CIPHER, i)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid cipher type \"%s\"", optarg); } e = munge_ctx_set (conf->ctx, MUNGE_OPT_CIPHER_TYPE, i); if (e != EMUNGE_SUCCESS) { log_err (EMUNGE_SNAFU, LOG_ERR, "Failed to set cipher type: %s", munge_ctx_strerror (conf->ctx)); } break; case 'C': display_strings ("Cipher types", MUNGE_ENUM_CIPHER); exit (EMUNGE_SUCCESS); break; case 'm': i = munge_enum_str_to_int (MUNGE_ENUM_MAC, optarg); if ((i < 0) || !munge_enum_is_valid (MUNGE_ENUM_MAC, i)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid MAC type \"%s\"", optarg); } e = munge_ctx_set (conf->ctx, MUNGE_OPT_MAC_TYPE, i); if (e != EMUNGE_SUCCESS) { log_err (EMUNGE_SNAFU, LOG_ERR, "Failed to set MAC type: %s", munge_ctx_strerror (conf->ctx)); } break; case 'M': display_strings ("MAC types", MUNGE_ENUM_MAC); exit (EMUNGE_SUCCESS); break; case 'z': i = munge_enum_str_to_int (MUNGE_ENUM_ZIP, optarg); if ((i < 0) || !munge_enum_is_valid (MUNGE_ENUM_ZIP, i)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid compression type \"%s\"", optarg); } e = munge_ctx_set (conf->ctx, MUNGE_OPT_ZIP_TYPE, i); if (e != EMUNGE_SUCCESS) { log_err (EMUNGE_SNAFU, LOG_ERR, "Failed to set compression type: %s", munge_ctx_strerror (conf->ctx)); } break; case 'Z': display_strings ("Compression types", MUNGE_ENUM_ZIP); exit (EMUNGE_SUCCESS); break; case 'e': conf->do_decode = 0; break; case 'd': conf->do_decode = 1; break; case 'l': errno = 0; l = strtol (optarg, &p, 10); if ((optarg == p) || ((*p != '\0') && (*(p+1) != '\0')) || (l < 0)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid number of bytes '%s'", optarg); } if (((errno == ERANGE) && (l == LONG_MAX)) || (l > INT_MAX)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Exceeded maximum number of %d bytes", INT_MAX); } if (!(multiplier = get_si_multiple (*p))) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid number specifier '%c'", *p); } if (l > (INT_MAX / multiplier)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Exceeded maximum number of %d bytes", INT_MAX); } conf->num_payload = (int) (l * multiplier); break; case 'u': if (query_uid (optarg, (uid_t *) &i) < 0) { log_err (EMUNGE_SNAFU, LOG_ERR, "Unrecognized user \"%s\"", optarg); } e = munge_ctx_set (conf->ctx, MUNGE_OPT_UID_RESTRICTION, i); if (e != EMUNGE_SUCCESS) { log_err (EMUNGE_SNAFU, LOG_ERR, "Failed to set UID restriction: %s", munge_ctx_strerror (conf->ctx)); } break; case 'g': if (query_gid (optarg, (gid_t *) &i) < 0) { log_err (EMUNGE_SNAFU, LOG_ERR, "Unrecognized group \"%s\"", optarg); } e = munge_ctx_set (conf->ctx, MUNGE_OPT_GID_RESTRICTION, i); if (e != EMUNGE_SUCCESS) { log_err (EMUNGE_SNAFU, LOG_ERR, "Failed to set GID restriction: %s", munge_ctx_strerror (conf->ctx)); } break; case 't': errno = 0; l = strtol (optarg, &p, 10); if ((optarg == p) || (*p != '\0') || (l < -1)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid time-to-live '%s'", optarg); } if ((errno == ERANGE) && (l == LONG_MAX)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Overflowed maximum time-to-live of %ld seconds", LONG_MAX); } if (l > UINT_MAX) { log_err (EMUNGE_SNAFU, LOG_ERR, "Exceeded maximum time-to-live of %u seconds", UINT_MAX); } if (l == -1) { l = MUNGE_TTL_MAXIMUM; } e = munge_ctx_set (conf->ctx, MUNGE_OPT_TTL, (int) l); if (e != EMUNGE_SUCCESS) { log_err (EMUNGE_SNAFU, LOG_ERR, "Failed to set time-to-live: %s", munge_ctx_strerror (conf->ctx)); } break; case 'S': e = munge_ctx_set (conf->ctx, MUNGE_OPT_SOCKET, optarg); if (e != EMUNGE_SUCCESS) { log_err (EMUNGE_SNAFU, LOG_ERR, "Failed to set munge socket name: %s", munge_ctx_strerror (conf->ctx)); } break; case 'D': errno = 0; l = strtol (optarg, &p, 10); if ((optarg == p) || ((*p != '\0') && (*(p+1) != '\0')) || (l <= 0)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid duration '%s'", optarg); } if (((errno == ERANGE) && (l == LONG_MAX)) || (l > INT_MAX)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Exceeded maximum duration of %d seconds", INT_MAX); } if (!(multiplier = get_time_multiple (*p))) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid duration specifier '%c'", *p); } if (l > (INT_MAX / multiplier)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Exceeded maximum duration of %d seconds", INT_MAX); } conf->num_seconds = (int) (l * multiplier); break; case 'N': errno = 0; u = strtoul (optarg, &p, 10); if ((optarg == p) || ((*p != '\0') && (*(p+1) != '\0')) || (u == 0)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid number of credentials '%s'", optarg); } if ((errno == ERANGE) && (u == ULONG_MAX)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Exceeded maximum number of %lu credentials", ULONG_MAX); } if (!(multiplier = get_si_multiple (*p))) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid number specifier '%c'", *p); } if (u > (ULONG_MAX / multiplier)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Exceeded maximum number of %lu credentials", ULONG_MAX); } conf->num_creds = u * multiplier; break; case 'T': errno = 0; l = strtol (optarg, &p, 10); if ((optarg == p) || (*p != '\0') || (l <= 0)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid number of threads '%s'", optarg); } if (((errno == ERANGE) && (l == LONG_MAX)) || (l > INT_MAX) || (l > conf->max_threads)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Exceeded maximum number of %d thread%s", conf->max_threads, (conf->max_threads == 1) ? "" : "s"); } conf->num_threads = (int) l; break; case 'W': errno = 0; l = strtol (optarg, &p, 10); if ((optarg == p) || (*p != '\0') || (l <= 0)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid number of seconds '%s'", optarg); } if (((errno == ERANGE) && (l == LONG_MAX)) || (l > INT_MAX)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Exceeded maximum number of %d seconds", INT_MAX); } conf->warn_time = (int) l; break; case '?': if (optopt > 0) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid option \"-%c\"", optopt); } else if (optind > 1) { log_err (EMUNGE_SNAFU, LOG_ERR, "Invalid option \"%s\"", argv[optind - 1]); } else { log_err (EMUNGE_SNAFU, LOG_ERR, "Failed to process command-line"); } break; case ':': if ((optind > 1) && (strncmp (argv[optind - 1], "--", 2) == 0)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Missing argument for option \"%s\"", argv[optind - 1]); } else if (optopt > 0) { log_err (EMUNGE_SNAFU, LOG_ERR, "Missing argument for option \"-%c\"", optopt); } else { log_err (EMUNGE_SNAFU, LOG_ERR, "Failed to process command-line"); } break; default: if ((optind > 1) && (strncmp (argv[optind - 1], "--", 2) == 0)) { log_err (EMUNGE_SNAFU, LOG_ERR, "Unimplemented option \"%s\"", argv[optind - 1]); } else { log_err (EMUNGE_SNAFU, LOG_ERR, "Unimplemented option \"-%c\"", c); } break; } } if (argv[optind]) { log_err (EMUNGE_SNAFU, LOG_ERR, "Unrecognized parameter \"%s\"", argv[optind]); } /* Create arbitrary payload of the specified length. */ if (conf->num_payload > 0) { if (!(conf->payload = malloc (conf->num_payload + 1))) { log_err (EMUNGE_NO_MEMORY, LOG_ERR, "Failed to allocate credential payload of %d byte%s", conf->num_payload, (conf->num_payload == 1 ? "" : "s")); } for (i = 0, c = 'A'; i < conf->num_payload; i++) { if ((conf->payload[i] = c++) == 'Z') { c = 'A'; } } conf->payload[conf->num_payload] = '\0'; } return; }