Blame


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