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 { | 
