1 cc9bbf61 2020-04-01 op #include "adventure.h"
3 cc9bbf61 2020-04-01 op #include <stdio.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 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");
45 cc9bbf61 2020-04-01 op printf("%s\n", obj->details);
46 cc9bbf61 2020-04-01 op list_objs_at_loc(obj);
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;
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");
70 cc9bbf61 2020-04-01 op printf("You don't see any %s here.\n", "XXX");
76 cc9bbf61 2020-04-01 op exec_get_from(void)
78 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), param_by_letter('B')->object, player);
82 cc9bbf61 2020-04-01 op exec_get(void)
84 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player->location, player);
88 cc9bbf61 2020-04-01 op exec_drop(void)
90 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player, player->location);
94 cc9bbf61 2020-04-01 op exec_give(void)
96 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player, person_here());
100 cc9bbf61 2020-04-01 op exec_ask(void)
102 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), person_here(), player);
106 cc9bbf61 2020-04-01 op exec_put_in(void)
108 cc9bbf61 2020-04-01 op return move_object(param_by_letter('A'), player, param_by_letter('B')->object);
112 cc9bbf61 2020-04-01 op exec_inventory(void)
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");
120 cc9bbf61 2020-04-01 op exec_open(void)
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));
129 cc9bbf61 2020-04-01 op exec_close(void)
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));
138 cc9bbf61 2020-04-01 op exec_lock(void)
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));
147 cc9bbf61 2020-04-01 op exec_unlock(void)
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));
156 cc9bbf61 2020-04-01 op parseexec(const char *input)
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?"},
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)
193 cc9bbf61 2020-04-01 op return (*cmd->fn)();