Blame


1 cc9bbf61 2020-04-01 op #include "adventure.h"
2 cc9bbf61 2020-04-01 op
3 cc9bbf61 2020-04-01 op #include <stdio.h>
4 cc9bbf61 2020-04-01 op
5 cc9bbf61 2020-04-01 op int
6 cc9bbf61 2020-04-01 op exec_quit(void)
7 cc9bbf61 2020-04-01 op {
8 cc9bbf61 2020-04-01 op return 0;
9 cc9bbf61 2020-04-01 op }
10 cc9bbf61 2020-04-01 op
11 cc9bbf61 2020-04-01 op int
12 cc9bbf61 2020-04-01 op exec_no_match(void)
13 cc9bbf61 2020-04-01 op {
14 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
15 cc9bbf61 2020-04-01 op
16 cc9bbf61 2020-04-01 op if (par->distance != dist_no_obj_specified)
17 cc9bbf61 2020-04-01 op printf("I don't know how to %s.\n", par->tag);
18 cc9bbf61 2020-04-01 op return 1;
19 cc9bbf61 2020-04-01 op }
20 cc9bbf61 2020-04-01 op
21 cc9bbf61 2020-04-01 op int
22 cc9bbf61 2020-04-01 op exec_look_around(void)
23 cc9bbf61 2020-04-01 op {
24 cc9bbf61 2020-04-01 op printf("You are in %s.\n", player->location->description);
25 cc9bbf61 2020-04-01 op list_objs_at_loc(player->location);
26 cc9bbf61 2020-04-01 op return 1;
27 cc9bbf61 2020-04-01 op }
28 cc9bbf61 2020-04-01 op
29 cc9bbf61 2020-04-01 op int
30 cc9bbf61 2020-04-01 op exec_look(void)
31 cc9bbf61 2020-04-01 op {
32 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
33 cc9bbf61 2020-04-01 op struct object *obj = par->object;
34 cc9bbf61 2020-04-01 op enum distance dist = par->distance;
35 cc9bbf61 2020-04-01 op
36 cc9bbf61 2020-04-01 op if (dist >= dist_unknown_obj)
37 cc9bbf61 2020-04-01 op printf("I don't understand what you want to see.\n");
38 cc9bbf61 2020-04-01 op else if (dist == dist_not_here)
39 cc9bbf61 2020-04-01 op printf("You don't see any %s here.\n", par->tag);
40 cc9bbf61 2020-04-01 op else if (dist == dist_overthere)
41 cc9bbf61 2020-04-01 op printf("You squeeze your eyes, but %s is too far away.\n", par->tag);
42 cc9bbf61 2020-04-01 op else if (dist == dist_here_contained)
43 cc9bbf61 2020-04-01 op printf("Hard to see, try to get it first.\n");
44 cc9bbf61 2020-04-01 op else {
45 cc9bbf61 2020-04-01 op printf("%s\n", obj->details);
46 cc9bbf61 2020-04-01 op list_objs_at_loc(obj);
47 cc9bbf61 2020-04-01 op }
48 cc9bbf61 2020-04-01 op
49 cc9bbf61 2020-04-01 op return 1;
50 cc9bbf61 2020-04-01 op }
51 cc9bbf61 2020-04-01 op
52 cc9bbf61 2020-04-01 op int
53 cc9bbf61 2020-04-01 op exec_go(void)
54 cc9bbf61 2020-04-01 op {
55 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
56 cc9bbf61 2020-04-01 op struct object *obj = par->object;
57 cc9bbf61 2020-04-01 op enum distance dist = par->distance;
58 cc9bbf61 2020-04-01 op
59 cc9bbf61 2020-04-01 op if (dist >= dist_unknown_obj)
60 cc9bbf61 2020-04-01 op printf("I don't understand where you want to go.\n");
61 cc9bbf61 2020-04-01 op else if (dist == dist_location)
62 cc9bbf61 2020-04-01 op printf("You are already there.\n");
63 cc9bbf61 2020-04-01 op else if (dist == dist_overthere)
64 cc9bbf61 2020-04-01 op move_player(get_passage_to(obj));
65 cc9bbf61 2020-04-01 op else if (dist == dist_here)
66 cc9bbf61 2020-04-01 op move_player(obj);
67 cc9bbf61 2020-04-01 op else if (dist < dist_not_here)
68 cc9bbf61 2020-04-01 op printf("You can't get any closer than this.\n");
69 cc9bbf61 2020-04-01 op else
70 cc9bbf61 2020-04-01 op printf("You don't see any %s here.\n", "XXX");
71 cc9bbf61 2020-04-01 op
72 cc9bbf61 2020-04-01 op return 1;
73 cc9bbf61 2020-04-01 op }
74 cc9bbf61 2020-04-01 op
75 cc9bbf61 2020-04-01 op int
76 cc9bbf61 2020-04-01 op exec_get_from(void)
77 cc9bbf61 2020-04-01 op {
78 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), param_by_letter('B')->object, player);
79 cc9bbf61 2020-04-01 op }
80 cc9bbf61 2020-04-01 op
81 cc9bbf61 2020-04-01 op int
82 cc9bbf61 2020-04-01 op exec_get(void)
83 cc9bbf61 2020-04-01 op {
84 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player->location, player);
85 cc9bbf61 2020-04-01 op }
86 cc9bbf61 2020-04-01 op
87 cc9bbf61 2020-04-01 op int
88 cc9bbf61 2020-04-01 op exec_drop(void)
89 cc9bbf61 2020-04-01 op {
90 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player, player->location);
91 cc9bbf61 2020-04-01 op }
92 cc9bbf61 2020-04-01 op
93 cc9bbf61 2020-04-01 op int
94 cc9bbf61 2020-04-01 op exec_give(void)
95 cc9bbf61 2020-04-01 op {
96 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player, person_here());
97 cc9bbf61 2020-04-01 op }
98 cc9bbf61 2020-04-01 op
99 cc9bbf61 2020-04-01 op int
100 cc9bbf61 2020-04-01 op exec_ask(void)
101 cc9bbf61 2020-04-01 op {
102 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), person_here(), player);
103 cc9bbf61 2020-04-01 op }
104 cc9bbf61 2020-04-01 op
105 cc9bbf61 2020-04-01 op int
106 cc9bbf61 2020-04-01 op exec_put_in(void)
107 cc9bbf61 2020-04-01 op {
108 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player, param_by_letter('B')->object);
109 cc9bbf61 2020-04-01 op }
110 cc9bbf61 2020-04-01 op
111 cc9bbf61 2020-04-01 op int
112 cc9bbf61 2020-04-01 op exec_inventory(void)
113 cc9bbf61 2020-04-01 op {
114 cc9bbf61 2020-04-01 op if (list_objs_at_loc(player) == 0)
115 cc9bbf61 2020-04-01 op printf("You are empty-handed.\n");
116 cc9bbf61 2020-04-01 op return 1;
117 cc9bbf61 2020-04-01 op }
118 cc9bbf61 2020-04-01 op
119 cc9bbf61 2020-04-01 op int
120 cc9bbf61 2020-04-01 op exec_open(void)
121 cc9bbf61 2020-04-01 op {
122 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
123 cc9bbf61 2020-04-01 op if (object_within_reach("open", par))
124 cc9bbf61 2020-04-01 op printf("%s\n", (par->object->open)(par->object));
125 cc9bbf61 2020-04-01 op return 1;
126 cc9bbf61 2020-04-01 op }
127 cc9bbf61 2020-04-01 op
128 cc9bbf61 2020-04-01 op int
129 cc9bbf61 2020-04-01 op exec_close(void)
130 cc9bbf61 2020-04-01 op {
131 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
132 cc9bbf61 2020-04-01 op if (object_within_reach("close", par))
133 cc9bbf61 2020-04-01 op printf("%s\n", (par->object->close)(par->object));
134 cc9bbf61 2020-04-01 op return 1;
135 cc9bbf61 2020-04-01 op }
136 cc9bbf61 2020-04-01 op
137 cc9bbf61 2020-04-01 op int
138 cc9bbf61 2020-04-01 op exec_lock(void)
139 cc9bbf61 2020-04-01 op {
140 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
141 cc9bbf61 2020-04-01 op if (object_within_reach("lock", par))
142 cc9bbf61 2020-04-01 op printf("%s\n", (par->object->lock)(par->object));
143 cc9bbf61 2020-04-01 op return 1;
144 cc9bbf61 2020-04-01 op }
145 cc9bbf61 2020-04-01 op
146 cc9bbf61 2020-04-01 op int
147 cc9bbf61 2020-04-01 op exec_unlock(void)
148 cc9bbf61 2020-04-01 op {
149 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
150 cc9bbf61 2020-04-01 op if (object_within_reach("unlock", par))
151 cc9bbf61 2020-04-01 op printf("%s\n", (par->object->unlock)(par->object));
152 cc9bbf61 2020-04-01 op return 1;
153 cc9bbf61 2020-04-01 op }
154 cc9bbf61 2020-04-01 op
155 cc9bbf61 2020-04-01 op int
156 cc9bbf61 2020-04-01 op parseexec(const char *input)
157 cc9bbf61 2020-04-01 op {
158 cc9bbf61 2020-04-01 op static const struct command commands[] = {
159 cc9bbf61 2020-04-01 op {&exec_quit, "quit"},
160 cc9bbf61 2020-04-01 op {&exec_look_around, "look"},
161 cc9bbf61 2020-04-01 op {&exec_look_around, "look around"},
162 cc9bbf61 2020-04-01 op {&exec_look, "look at A?"},
163 cc9bbf61 2020-04-01 op {&exec_look, "look A?"},
164 cc9bbf61 2020-04-01 op {&exec_go, "go to the A?"},
165 cc9bbf61 2020-04-01 op {&exec_go, "go to A?"},
166 cc9bbf61 2020-04-01 op {&exec_go, "go A?"},
167 cc9bbf61 2020-04-01 op {&exec_get_from, "get A from B?"},
168 cc9bbf61 2020-04-01 op {&exec_get, "get the A?"},
169 cc9bbf61 2020-04-01 op {&exec_get, "get A?"},
170 cc9bbf61 2020-04-01 op {&exec_get, "pick up the A?"},
171 cc9bbf61 2020-04-01 op {&exec_get, "pick up a A?"},
172 cc9bbf61 2020-04-01 op {&exec_get, "pick up A?"},
173 cc9bbf61 2020-04-01 op {&exec_get, "pick the A?"},
174 cc9bbf61 2020-04-01 op {&exec_get, "pick a A?"},
175 cc9bbf61 2020-04-01 op {&exec_get, "pick A?"},
176 cc9bbf61 2020-04-01 op {&exec_put_in, "put A in B?"},
177 cc9bbf61 2020-04-01 op {&exec_put_in, "drop A in B?"},
178 cc9bbf61 2020-04-01 op {&exec_drop, "drop A?"},
179 cc9bbf61 2020-04-01 op {&exec_give, "give A?"},
180 cc9bbf61 2020-04-01 op {&exec_ask, "ask A?"},
181 cc9bbf61 2020-04-01 op {&exec_inventory, "inventory"},
182 cc9bbf61 2020-04-01 op {&exec_open, "open A?"},
183 cc9bbf61 2020-04-01 op {&exec_close, "close A?"},
184 cc9bbf61 2020-04-01 op {&exec_lock, "lock A?"},
185 cc9bbf61 2020-04-01 op {&exec_unlock, "unlock A?"},
186 cc9bbf61 2020-04-01 op {&exec_no_match, "A?"},
187 cc9bbf61 2020-04-01 op };
188 cc9bbf61 2020-04-01 op
189 cc9bbf61 2020-04-01 op const struct command *cmd;
190 cc9bbf61 2020-04-01 op for (cmd = commands; !match_command(input, cmd->pattern); ++cmd)
191 cc9bbf61 2020-04-01 op ;
192 cc9bbf61 2020-04-01 op
193 cc9bbf61 2020-04-01 op return (*cmd->fn)();
194 cc9bbf61 2020-04-01 op }