1 cc9bbf61 2020-04-01 op #include <stdio.h>
3 7f40f3f5 2020-04-03 op #include "adventure.h"
6 cc9bbf61 2020-04-01 op exec_quit(void)
12 cc9bbf61 2020-04-01 op exec_no_match(void)
14 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
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);
22 cc9bbf61 2020-04-01 op exec_look_around(void)
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);
30 cc9bbf61 2020-04-01 op exec_look(void)
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;
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 7f40f3f5 2020-04-03 op printf("You squeeze your eyes, but %s is too far away.\n",
43 cc9bbf61 2020-04-01 op else if (dist == dist_here_contained)
44 cc9bbf61 2020-04-01 op printf("Hard to see, try to get it first.\n");
46 cc9bbf61 2020-04-01 op printf("%s\n", obj->details);
47 cc9bbf61 2020-04-01 op list_objs_at_loc(obj);
56 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
57 cc9bbf61 2020-04-01 op struct object *obj = par->object;
58 cc9bbf61 2020-04-01 op enum distance dist = par->distance;
60 cc9bbf61 2020-04-01 op if (dist >= dist_unknown_obj)
61 cc9bbf61 2020-04-01 op printf("I don't understand where you want to go.\n");
62 cc9bbf61 2020-04-01 op else if (dist == dist_location)
63 cc9bbf61 2020-04-01 op printf("You are already there.\n");
64 cc9bbf61 2020-04-01 op else if (dist == dist_overthere)
65 cc9bbf61 2020-04-01 op move_player(get_passage_to(obj));
66 cc9bbf61 2020-04-01 op else if (dist == dist_here)
67 cc9bbf61 2020-04-01 op move_player(obj);
68 cc9bbf61 2020-04-01 op else if (dist < dist_not_here)
69 cc9bbf61 2020-04-01 op printf("You can't get any closer than this.\n");
71 cc9bbf61 2020-04-01 op printf("You don't see any %s here.\n", "XXX");
77 cc9bbf61 2020-04-01 op exec_get_from(void)
79 7f40f3f5 2020-04-03 op return move_object(
80 7f40f3f5 2020-04-03 op param_by_letter('A'), param_by_letter('B')->object, player);
84 cc9bbf61 2020-04-01 op exec_get(void)
86 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player->location, player);
90 cc9bbf61 2020-04-01 op exec_drop(void)
92 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player, player->location);
96 cc9bbf61 2020-04-01 op exec_give(void)
98 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player, person_here());
102 cc9bbf61 2020-04-01 op exec_ask(void)
104 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), person_here(), player);
108 cc9bbf61 2020-04-01 op exec_put_in(void)
110 7f40f3f5 2020-04-03 op return move_object(
111 7f40f3f5 2020-04-03 op param_by_letter('A'), player, param_by_letter('B')->object);
115 cc9bbf61 2020-04-01 op exec_inventory(void)
117 cc9bbf61 2020-04-01 op if (list_objs_at_loc(player) == 0)
118 cc9bbf61 2020-04-01 op printf("You are empty-handed.\n");
123 cc9bbf61 2020-04-01 op exec_open(void)
125 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
126 cc9bbf61 2020-04-01 op if (object_within_reach("open", par))
127 cc9bbf61 2020-04-01 op printf("%s\n", (par->object->open)(par->object));
132 cc9bbf61 2020-04-01 op exec_close(void)
134 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
135 cc9bbf61 2020-04-01 op if (object_within_reach("close", par))
136 cc9bbf61 2020-04-01 op printf("%s\n", (par->object->close)(par->object));
141 cc9bbf61 2020-04-01 op exec_lock(void)
143 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
144 cc9bbf61 2020-04-01 op if (object_within_reach("lock", par))
145 cc9bbf61 2020-04-01 op printf("%s\n", (par->object->lock)(par->object));
150 cc9bbf61 2020-04-01 op exec_unlock(void)
152 cc9bbf61 2020-04-01 op struct param *par = param_by_letter('A');
153 cc9bbf61 2020-04-01 op if (object_within_reach("unlock", par))
154 cc9bbf61 2020-04-01 op printf("%s\n", (par->object->unlock)(par->object));
159 cc9bbf61 2020-04-01 op parseexec(const char *input)
161 cc9bbf61 2020-04-01 op static const struct command commands[] = {
162 7f40f3f5 2020-04-03 op { &exec_quit, "quit" },
163 7f40f3f5 2020-04-03 op { &exec_quit, "bye" },
164 7f40f3f5 2020-04-03 op { &exec_look_around, "look" },
165 7f40f3f5 2020-04-03 op { &exec_look_around, "look around" },
166 7f40f3f5 2020-04-03 op { &exec_look, "look at A?" },
167 7f40f3f5 2020-04-03 op { &exec_look, "look A?" },
168 7f40f3f5 2020-04-03 op { &exec_go, "go to the A?" },
169 7f40f3f5 2020-04-03 op { &exec_go, "go to A?" },
170 7f40f3f5 2020-04-03 op { &exec_go, "go A?" },
171 7f40f3f5 2020-04-03 op { &exec_get_from, "get A from B?" },
172 7f40f3f5 2020-04-03 op { &exec_get, "get the A?" },
173 7f40f3f5 2020-04-03 op { &exec_get, "get A?" },
174 7f40f3f5 2020-04-03 op { &exec_get, "pick up the A?" },
175 7f40f3f5 2020-04-03 op { &exec_get, "pick up a A?" },
176 7f40f3f5 2020-04-03 op { &exec_get, "pick up A?" },
177 7f40f3f5 2020-04-03 op { &exec_get, "pick the A?" },
178 7f40f3f5 2020-04-03 op { &exec_get, "pick a A?" },
179 7f40f3f5 2020-04-03 op { &exec_get, "pick A?" },
180 7f40f3f5 2020-04-03 op { &exec_put_in, "put A in B?" },
181 7f40f3f5 2020-04-03 op { &exec_put_in, "drop A in B?" },
182 7f40f3f5 2020-04-03 op { &exec_drop, "drop A?" },
183 7f40f3f5 2020-04-03 op { &exec_give, "give A?" },
184 7f40f3f5 2020-04-03 op { &exec_ask, "ask A?" },
185 7f40f3f5 2020-04-03 op { &exec_inventory, "inventory" },
186 7f40f3f5 2020-04-03 op { &exec_open, "open A?" },
187 7f40f3f5 2020-04-03 op { &exec_close, "close A?" },
188 7f40f3f5 2020-04-03 op { &exec_lock, "lock A?" },
189 7f40f3f5 2020-04-03 op { &exec_unlock, "unlock A?" },
190 7f40f3f5 2020-04-03 op { &exec_no_match, "A?" },
193 cc9bbf61 2020-04-01 op const struct command *cmd;
194 cc9bbf61 2020-04-01 op for (cmd = commands; !match_command(input, cmd->pattern); ++cmd)
197 cc9bbf61 2020-04-01 op return (*cmd->fn)();