Mercurial > hg > early-roguelike
annotate rogue5/options.c @ 33:f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
| author | elwin | 
|---|---|
| date | Mon, 24 May 2010 20:10:59 +0000 | 
| parents | |
| children | 655c317b6237 | 
| rev | line source | 
|---|---|
| 33 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 1 /* | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 2 * This file has all the code for the option command. I would rather | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 3 * this command were not necessary, but it is the only way to keep the | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 4 * wolves off of my back. | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 5 * | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 6 * @(#)options.c 4.24 (Berkeley) 05/10/83 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 7 * | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 8 * Rogue: Exploring the Dungeons of Doom | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 9 * Copyright (C) 1980-1983, 1985, 1999 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 10 * All rights reserved. | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 11 * | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 12 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 13 */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 14 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 15 #include <stdlib.h> | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 16 #include <curses.h> | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 17 #include <ctype.h> | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 18 #include <string.h> | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 19 #include "rogue.h" | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 20 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 21 #define EQSTR(a, b, c) (strncmp(a, b, c) == 0) | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 22 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 23 #define NUM_OPTS (sizeof optlist / sizeof (OPTION)) | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 24 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 25 /* | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 26 * description of an option and what to do with it | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 27 */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 28 struct optstruct { | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 29 char *o_name; /* option name */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 30 char *o_prompt; /* prompt for interactive entry */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 31 void *o_opt; /* pointer to thing to set */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 32 /* function to print value */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 33 void (*o_putfunc)(void *opt); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 34 /* function to get value interactively */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 35 int (*o_getfunc)(void *opt, WINDOW *win); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 36 }; | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 37 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 38 typedef struct optstruct OPTION; | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 39 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 40 void pr_optname(const OPTION *op); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 41 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 42 static const OPTION optlist[] = { | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 43 {"terse", "Terse output", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 44 &terse, put_bool, get_bool }, | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 45 {"flush", "Flush typeahead during battle", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 46 &fight_flush, put_bool, get_bool }, | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 47 {"jump", "Show position only at end of run", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 48 &jump, put_bool, get_bool }, | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 49 {"seefloor", "Show the lamp-illuminated floor", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 50 &see_floor, put_bool, get_sf }, | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 51 {"passgo", "Follow turnings in passageways", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 52 &passgo, put_bool, get_bool }, | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 53 {"tombstone", "Print out tombstone when killed", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 54 &tombstone, put_bool, get_bool }, | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 55 {"inven", "Inventory style", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 56 &inv_type, put_inv_t, get_inv_t }, | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 57 {"name", "Name", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 58 whoami, put_str, get_str }, | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 59 {"fruit", "Fruit", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 60 fruit, put_str, get_str }, | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 61 {"file", "Save file", | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 62 file_name, put_str, get_str } | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 63 }; | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 64 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 65 /* | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 66 * option: | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 67 * Print and then set options from the terminal | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 68 */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 69 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 70 void | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 71 option(void) | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 72 { | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 73 const OPTION *op; | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 74 int retval; | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 75 | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 76 wclear(hw); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 77 /* | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 78 * Display current values of options | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 79 */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 80 for (op = optlist; op <= &optlist[NUM_OPTS-1]; op++) | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 81 { | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 82 pr_optname(op); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 83 (*op->o_putfunc)(op->o_opt); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 84 waddch(hw, '\n'); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 85 } | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 86 /* | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 87 * Set values | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 88 */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 89 wmove(hw, 0, 0); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 90 for (op = optlist; op <= &optlist[NUM_OPTS-1]; op++) | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 91 { | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 92 pr_optname(op); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 93 retval = (*op->o_getfunc)(op->o_opt, hw); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 94 if (retval) | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 95 { | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 96 if (retval == QUIT) | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 97 break; | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 98 else if (op > optlist) { /* MINUS */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 99 wmove(hw, (int)(op - optlist) - 1, 0); | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 100 op -= 2; | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 101 } | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 102 else /* trying to back up beyond the top */ | 
| 
f502bf60e6e4
Import Rogue 5.4 from the Roguelike Restoration Project (r1490)
 elwin parents: diff
changeset | 103 { | 
