comparison xrogue/options.c @ 137:443c8bd3e290

xrogue: restrict changes to the save file location. When using the -n option, disallow changing file_name or whoami via options or dialogs.
author John "Elwin" Edwards
date Sat, 02 May 2015 07:31:14 -0400
parents ce0cf824c192
children aac28331e71d
comparison
equal deleted inserted replaced
136:1fbdefa82533 137:443c8bd3e290
48 put_abil(), 48 put_abil(),
49 get_abil(), 49 get_abil(),
50 get_quest(), 50 get_quest(),
51 put_quest(), 51 put_quest(),
52 get_default(); 52 get_default();
53
54 int get_str_prot(char *opt, WINDOW *win);
55 bool allowchange(OPTION *op);
53 56
54 OPTION optlist[] = { 57 OPTION optlist[] = {
55 {"terse", "Terse output: ", 58 {"terse", "Terse output: ",
56 (int *) &terse, put_bool, get_bool }, 59 (int *) &terse, put_bool, get_bool },
57 {"flush", "Flush typeahead during battle: ", 60 {"flush", "Flush typeahead during battle: ",
65 {"pickup", "Pick things up automatically: ", 68 {"pickup", "Pick things up automatically: ",
66 (int *) &auto_pickup, put_bool, get_bool }, 69 (int *) &auto_pickup, put_bool, get_bool },
67 {"overlay", "Overlay menu: ", 70 {"overlay", "Overlay menu: ",
68 (int *) &menu_overlay, put_bool, get_bool }, 71 (int *) &menu_overlay, put_bool, get_bool },
69 {"name", "Name: ", 72 {"name", "Name: ",
70 (int *) whoami, put_str, get_str }, 73 (int *) whoami, put_str, get_str_prot },
71 {"file", "Save file: ", 74 {"file", "Save file: ",
72 (int *) file_name, put_str, get_str }, 75 (int *) file_name, put_str, get_str_prot },
73 {"score", "Score file: ", 76 {"score", "Score file: ",
74 (int *) score_file, put_str, get_str }, 77 (int *) score_file, put_str, get_str_prot },
75 {"class", "Character type: ", 78 {"class", "Character type: ",
76 (int *) &char_type, put_abil, get_abil }, 79 (int *) &char_type, put_abil, get_abil },
77 {"quest", "Quest item: ", 80 {"quest", "Quest item: ",
78 (int *) &quest_item, put_quest, get_quest }, 81 (int *) &quest_item, put_quest, get_quest },
79 {"default", "Default Attributes: ", 82 {"default", "Default Attributes: ",
405 for (sp = str + 1; *sp && *sp != ',' && *sp != '\"'; sp++) 408 for (sp = str + 1; *sp && *sp != ',' && *sp != '\"'; sp++)
406 continue; 409 continue;
407 strucpy(start, str, (char *) sp - str); 410 strucpy(start, str, (char *) sp - str);
408 411
409 /* Put the value into the option field */ 412 /* Put the value into the option field */
410 if (op->o_putfunc != put_abil) 413 if (op->o_putfunc != put_abil) {
411 strcpy((char *)op->o_opt, value); 414 if (allowchange(op))
415 strcpy((char *)op->o_opt, value);
416 }
412 417
413 else if (*op->o_opt == -1) { /* Only init ability once */ 418 else if (*op->o_opt == -1) { /* Only init ability once */
414 register int len = strlen(value); 419 register int len = strlen(value);
415 register int i; 420 register int i;
416 421
498 WINDOW *win; 503 WINDOW *win;
499 { 504 {
500 waddstr(win, str); 505 waddstr(win, str);
501 } 506 }
502 507
508 /* Like get_str, but disallows changes when use_savedir is set. */
509 int
510 get_str_prot(char *opt, WINDOW *win)
511 {
512 int oy, ox;
513
514 if (use_savedir) {
515 getyx(win, oy, ox);
516 waddstr(win, opt);
517 return get_ro(win, oy, ox);
518 }
519 else {
520 return get_str(opt, win);
521 }
522 }
523
524 bool
525 allowchange(OPTION *op)
526 {
527 if (!use_savedir)
528 return TRUE;
529 if (!strcmp(op->o_name, "name"))
530 return FALSE;
531 if (!strcmp(op->o_name, "file"))
532 return FALSE;
533 if (!strcmp(op->o_name, "score"))
534 return FALSE;
535 return TRUE;
536 }