comparison arogue7/options.c @ 129:9c4e50b5825c

arogue7: prevent changing protected options. When using the savedir, whoami, file_name, and score_file cannot be changed.
author John "Elwin" Edwards
date Mon, 11 May 2015 19:41:46 -0400
parents b786053d2f37
children aac28331e71d
comparison
equal deleted inserted replaced
128:c697782a9b37 129:9c4e50b5825c
46 get_str(), 46 get_str(),
47 put_abil(), 47 put_abil(),
48 get_abil(), 48 get_abil(),
49 get_quest(), 49 get_quest(),
50 put_quest(); 50 put_quest();
51
52 int get_str_prot(char *opt, WINDOW *win);
53 bool allowchange(OPTION *op);
51 54
52 OPTION optlist[] = { 55 OPTION optlist[] = {
53 {"terse", "Terse output: ", 56 {"terse", "Terse output: ",
54 (int *) &terse, put_bool, get_bool }, 57 (int *) &terse, put_bool, get_bool },
55 {"flush", "Flush typeahead during battle: ", 58 {"flush", "Flush typeahead during battle: ",
63 {"pickup", "Pick things up automatically: ", 66 {"pickup", "Pick things up automatically: ",
64 (int *) &auto_pickup, put_bool, get_bool }, 67 (int *) &auto_pickup, put_bool, get_bool },
65 {"overlay", "Overlay menu: ", 68 {"overlay", "Overlay menu: ",
66 (int *) &menu_overlay, put_bool, get_bool }, 69 (int *) &menu_overlay, put_bool, get_bool },
67 {"name", "Name: ", 70 {"name", "Name: ",
68 (int *) whoami, put_str, get_str }, 71 (int *) whoami, put_str, get_str_prot },
69 {"file", "Save file: ", 72 {"file", "Save file: ",
70 (int *) file_name, put_str, get_str }, 73 (int *) file_name, put_str, get_str_prot },
71 {"score", "Score file: ", 74 {"score", "Score file: ",
72 (int *) score_file, put_str, get_str }, 75 (int *) score_file, put_str, get_str_prot },
73 {"class", "Character class: ", 76 {"class", "Character class: ",
74 (int *)&char_type, put_abil, get_abil }, 77 (int *)&char_type, put_abil, get_abil },
75 {"quest", "Quest item: ", 78 {"quest", "Quest item: ",
76 (int *) &quest_item, put_quest, get_quest } 79 (int *) &quest_item, put_quest, get_quest }
77 }; 80 };
379 continue; 382 continue;
380 strucpy(start, str, sp - str); 383 strucpy(start, str, sp - str);
381 384
382 /* Put the value into the option field */ 385 /* Put the value into the option field */
383 if (op->o_putfunc != put_abil) 386 if (op->o_putfunc != put_abil)
384 strcpy((char *)op->o_opt, (char *)value); 387 {
388 if (allowchange(op))
389 strcpy((char *)op->o_opt, (char *)value);
390 }
385 391
386 else if (*op->o_opt == -1) { /* Only init ability once */ 392 else if (*op->o_opt == -1) { /* Only init ability once */
387 register int len = strlen(value); 393 register int len = strlen(value);
388 register int i; 394 register int i;
389 395
461 char *str; 467 char *str;
462 WINDOW *win; 468 WINDOW *win;
463 { 469 {
464 waddstr(win, str); 470 waddstr(win, str);
465 } 471 }
472
473 /* Like get_str, but disallows changes when use_savedir is set. */
474 int
475 get_str_prot(char *opt, WINDOW *win)
476 {
477 int oy, ox;
478
479 if (use_savedir) {
480 getyx(win, oy, ox);
481 waddstr(win, opt);
482 return get_ro(win, oy, ox);
483 }
484 else {
485 return get_str(opt, win);
486 }
487 }
488
489 bool
490 allowchange(OPTION *op)
491 {
492 if (!use_savedir)
493 return TRUE;
494 if (!strcmp(op->o_name, "name"))
495 return FALSE;
496 if (!strcmp(op->o_name, "file"))
497 return FALSE;
498 if (!strcmp(op->o_name, "score"))
499 return FALSE;
500 return TRUE;
501 }