]> git.pond.sub.org Git - empserver/blob - src/lib/player/empmod.c
commands: Rename the command functions
[empserver] / src / lib / player / empmod.c
1 /*
2  *  Empire - A multi-player, client/server Internet based war game.
3  *  Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak,
4  *                Ken Stevens, Steve McClure, Markus Armbruster
5  *
6  *  Empire is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  *  ---
20  *
21  *  See files README, COPYING and CREDITS in the root of the source
22  *  tree for related information and legal notices.  It is expected
23  *  that future projects/authors will amend these files as needed.
24  *
25  *  ---
26  *
27  *  empmod.c: List all commands for Empire
28  *
29  *  Known contributors to this file:
30  *     Dave Pare, 1986
31  *     Jeff Bailey
32  *     Thomas Ruschak, 1992
33  *     Ken Stevens, 1995
34  *     Steve McClure, 1996-2000
35  *     Markus Armbruster, 2004-2015
36  */
37
38 /*
39  * Fun fact: named empmod for historical reasons --- Empire used to be
40  * broken into seven modules on the venerable PDP-11 so it could fit
41  * in 64k I/D space.
42  */
43
44 #include <config.h>
45
46 #include "com.h"
47 #include "player.h"
48 #include "prototypes.h"
49 #include "testing.h"
50
51 struct cmndstr player_coms[] = {
52 /*  command form                       cost     addr    permit */
53     {"accept  [as-COUNTRY]",
54      0, c_accept, C_MOD, NORM},
55     {"add <NAT> <NAME> <REP> <STATUS>",
56      0, c_add, C_MOD, GOD},
57     {"announce",
58      0, c_telegram, C_MOD, 0},
59     {"anti <SECTS>",
60      3, c_anti, C_MOD, NORM + MONEY + CAP},
61     {"apropos <topic>",
62      0, c_apropos, 0, 0},
63     {"arm <PLANE> <NUKE> <airburst?>",
64      3, c_arm, C_MOD, NORM + CAP},
65     {"army <ARMY> <UNITS>",
66      0, c_army, C_MOD, NORM},
67     {"assault <to-SECT> <from-SHIP> [<forts?> <ships?> <arty?> <planes?>]",
68      3, c_assault, C_MOD, NORM + MONEY + CAP},
69     {"attack <SECT> [<forts?> <ships?> <arty?> <planes?>]",
70      3, c_attack, C_MOD, NORM + MONEY + CAP},
71     {"bdes <SECTS> <type>",
72      0, c_bdes, C_MOD, NORM},
73     {"bestpath <SECTS> <SECTS>",
74      0, c_bestpath, 0, NORM},
75     {"bmap <SECTS|SHIP> [s|l|n|p|r|t|*|h]",
76      0, c_map, C_MOD, NORM},
77     {"board <to-SHIP> [<from-SHIP>|<from-sector>]",
78      3, c_board, C_MOD, NORM + MONEY + CAP},
79     {"bomb <bomber-PLANES> <fighter-PLANES> <pin|strat> <ap-SECT> <PATH|DESTINATION>",
80      2, c_bomb, C_MOD, NORM + MONEY + CAP},
81     {"break",
82      0, c_break, C_MOD, SANCT},
83     {"budget",
84      1, c_budget, 0, NORM},
85     {"build <s|l|b|p|n|t> <SECTS> <type|dir> [<number> <tech> <sure?>]",
86      1, c_build, C_MOD, NORM + MONEY + CAP},
87     {"buy <COMM> <LOT#> <BID/UNIT> <DEST>",
88      1, c_buy, C_MOD, NORM + MONEY + CAP},
89     {"bye",
90      0, c_quit, 0, 0},
91     {"capital <SECT>",
92      0, c_capital, C_MOD, NORM},
93     {"cargo <SHIPS>",
94      0, c_cargo, 0, NORM},
95     {"census <SECTS>",
96      0, c_census, 0, NONVIS},
97     {"change <country|representative> <NAME>",
98      0, c_change, C_MOD, NONVIS},
99     {"coastwatch <SECTS>",
100      1, c_coastwatch, C_MOD, NORM + CAP},
101     {"collect <LOAN> <SECT>",
102      2, c_collect, C_MOD, NORM + MONEY + CAP},
103     {"commodity <SECTS>",
104      0, c_commodity, 0, NONVIS},
105     {"consider <loan> <LOAN> <acc|decl|post>",
106      1, c_consider, C_MOD, NORM + CAP},
107     {"convert <SECTS> <NUM>",
108      2, c_convert, C_MOD, NORM + MONEY + CAP},
109     {"country <NATS>",
110      0, c_country, 0, 0},
111     {"cutoff <SECTS>",
112      0, c_cutoff, 0, NORM},
113     {"declare <all|friend|neut|hos|war> <NATS>",
114      2, c_declare, C_MOD, NORM + CAP},
115     {"deliver <COMM> <SECTS> [q|<THRESH>] [<DIR>]",
116      1, c_deliver, C_MOD, NORM},
117     {"demobilize <SECTS> <NUM> <active-reserve?>",
118      1, c_demobilize, C_MOD,
119      NORM + MONEY + CAP},
120     {"designate <SECTS> <type>",
121      1, c_designate, C_MOD, NORM},
122     {"disable",
123      0, c_disable, C_MOD, GOD},
124     {"disarm <PLANE>",
125      2, c_disarm, C_MOD, NORM + CAP},
126     {"distribute <SECTS> <DISTSECT|.|h>",
127      1, c_distribute, C_MOD, NORM},
128     {"drop <cargo-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION> <COMM>",
129      1, c_drop, C_MOD, NORM + MONEY + CAP},
130     {"dump <SECTS> [<fields>]",
131      0, c_dump, 0, NORM},
132     {"echo [<string>]",
133      0, c_echo, 0, 0},
134     {"edit <l|s|p|u|n|c> <SECTS|SHIPS|PLANES|LANDS|NUKES|NATS> [<KEY> <VALUE>]...",
135      0, c_edit, C_MOD, GOD},
136     {"enable",
137      0, c_enable, C_MOD, GOD},
138     {"enlist <SECTS> <NUM>",
139      2, c_enlist, C_MOD, NORM + MONEY + CAP},
140     {"execute <INPUT FILE>",
141      0, c_execute, 0, EXEC},
142     {"explore <c|m> <SECT> <NUM> <PATH|DESTINATION>",
143      1, c_explore, C_MOD, NORM + MONEY + CAP},
144     {"financial",
145      0, c_financial, 0, 0},
146     {"fire <TYPE> <from-SECTS | SHIPS | UNITS> [TO-SECT | SHIP]",
147      1, c_fire, C_MOD, NORM + MONEY + CAP},
148     {"flash <COUNTRY> [<message>]",
149      0, c_flash, 0, 0},
150     {"fleetadd <FLEET> <SHIPS>",
151      0, c_fleetadd, C_MOD, NORM},
152     {"fly <cargo-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION> <COM>",
153      2, c_fly, C_MOD, NORM + MONEY + CAP},
154     {"force",
155      0, c_force, C_MOD, GOD},
156     {"fortify <UNITS> <MOB>",
157      1, c_fortify, C_MOD, NORM + CAP},
158     {"give <COMM> <SECTS> <NUM>",
159      0, c_give, C_MOD, GOD},
160     {"grind <SECTS> <NUM>",
161      1, c_grind, C_MOD, NORM + MONEY + CAP},
162     {"harden <PLANES> <NUM>",
163      2, c_harden, C_MOD, NORM + MONEY + CAP},
164     {"headlines [days]",
165      0, c_headlines, 0, 0},
166     {"help <topic>",
167      0, c_info, 0, 0},
168     {"improve <road|rail|defense> <SECTS> <NUM>",
169      1, c_improve, C_MOD, NORM + MONEY + CAP},
170     {"info <topic>",
171      0, c_info, 0, 0},
172     {"land <UNITS>",
173      0, c_land, 0, NORM},
174     {"launch <PLANES> <SECT|SHIP>",
175      3, c_launch, C_MOD, NORM + MONEY + CAP},
176     {"lbmap <SECTS|LAND UNIT> [s|l|n|p|r|t|*|h]",
177      0, c_map, C_MOD, NORM},
178     {"lboard <to-LAND> [<from-sector>]",
179      3, c_lboard, C_MOD, NORM + MONEY + CAP},
180     {"lcargo <UNITS>",
181      0, c_lcargo, 0, NORM},
182     {"ldump <UNITS> [<fields>]",
183      0, c_ldump, 0, NORM},
184     {"ledger <LOANS>",
185      0, c_ledger, 0, NORM},
186     {"level <SECTS>",
187      0, c_level, 0, NORM},
188     {"list",
189      0, c_list, 0, 0},
190     {"lload <COMM|\"land\"|\"plane\"> <UNITS> <NUM|UNITS|PLANES>",
191      1, c_lload, C_MOD, NORM + CAP},
192     {"llookout <UNITS>",
193      1, c_llookout, 0, NORM + CAP},
194     {"lmap <SECTS|LAND UNIT> [s|l|n|p|*|h]",
195      0, c_map, C_MOD, NORM},
196     {"lmine <UNITS>",
197      2, c_lmine, C_MOD, NORM + MONEY + CAP},
198     {"load <COMM|\"land\"|\"plane\"> <SHIPS> <NUM|UNITS|PLANES>",
199      1, c_load, C_MOD, NORM + CAP},
200     {"lookout <SHIPS>",
201      1, c_lookout, 0, NORM + CAP},
202     {"lost",
203      0, c_lost, 0, NORM},
204     {"lradar <UNITS | SECTS>",
205      1, c_lradar, C_MOD, NORM + CAP},
206     {"lretreat <UNITS|ARMY> [q | <PATH> <i|h|b|c>]",
207      1, c_lretreat, C_MOD, NORM + CAP},
208     {"lstat <UNITS>",
209      0, c_lstat, 0, NORM},
210     {"ltend <COMM> <tender-SHIPS> <NUM> <UNITS>",
211      1, c_ltend, C_MOD, NORM + CAP},
212     {"lunload <COMM|\"land\"|\"plane\"> <UNITS> <NUM|UNITS|PLANES>",
213      1, c_lload, C_MOD, NORM + CAP},
214     {"map <SECTS|SHIP> [s|l|n|p|*|h]",
215      0, c_map, C_MOD, NORM},
216     {"march <UNITS> <PATH|DESTINATION>",
217      1, c_march, C_MOD, NORM + CAP},
218     {"market <COMM|\"all\">",
219      0, c_market, C_MOD, NORM},
220     {"mine <SHIPS>",
221      2, c_mine, C_MOD, NORM + MONEY + CAP},
222     {"mission <TYPE> <PLANES|SHIPS|UNITS> <mission type> <op sect> [<radius>]",
223      2, c_mission, C_MOD, NORM + CAP},
224     {"morale <UNITS> <retreat%>",
225      1, c_morale, C_MOD, NORM + CAP},
226     {"motd",
227      0, c_motd, 0, 0},
228     {"move <COMM> <SECT> <NUM> <PATH|DESTINATION>",
229      1, c_move, C_MOD, NORM + CAP},
230     {"name <SHIPS> <NAME>",
231      0, c_name, C_MOD, NORM},
232     {"nation [as-COUNTRY]",
233      0, c_nation, 0, 0},
234     {"navigate <SHIPS> <PATH|DESTINATION>",
235      1, c_navigate, C_MOD, NORM + CAP},
236     {"nbmap <SECTS|NUKE> [s|l|n|p|r|t|*|h]",
237      0, c_map, C_MOD, NORM},
238     {"ndump <NUKES>",
239      0, c_ndump, 0, NORM},
240     {"newcap <NAT> <SECTOR>",
241      0, c_newcap, C_MOD, GOD},
242     {"neweff <SECTS>",
243      0, c_neweff, 0, NORM},
244     {"newspaper [days]",
245      0, c_newspaper, 0, 0},
246     {"nmap <SECTS|NUKE> [s|l|n|p|*|h]",
247      0, c_map, C_MOD, NORM},
248     {"nuke <NUKES>",
249      0, c_nuke, 0, NORM},
250     {"offer <loan> <NAT> [<NUM> <DAYS> <IRATE>]",
251      1, c_offer, C_MOD, NORM + MONEY + CAP},
252     {"origin <SECT|COUNTRY|~>",
253      1, c_origin, C_MOD, NORM},
254     {"paradrop <cargo-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION>",
255      3, c_paradrop, C_MOD, NORM + MONEY + CAP},
256     {"path <SECT>",
257      0, c_path, C_MOD, NORM},
258     {"payoff <SHIPS>",
259      0, c_payoff, 0, NORM},
260     {"pbmap <SECTS|PLANE> [s|l|n|p|r|t|*|h]",
261      0, c_map, C_MOD, NORM},
262     {"pboard <PLANES>",
263      3, c_pboard, C_MOD, NORM + MONEY + CAP},
264     {"pdump <PLANES> [<fields>]",
265      0, c_pdump, 0, NORM},
266     {"peek <SECTS>",
267      0, c_peek, 0, GOD},
268     {"plane <SECTS>",
269      0, c_plane, 0, NORM},
270     {"players",
271      0, c_players, 0, 0},
272     {"pmap <SECTS|PLANE> [s|l|n|p|*|h]",
273      0, c_map, C_MOD, NORM},
274     {"power [\"new\"|\"update\"] [<NUMBER OF COUNTRIES> | \"country\" <NATS>]",
275      0, c_power, C_MOD, 0},
276     {"pray",
277      0, c_telegram, C_MOD, NORM},
278     {"production <SECTS>",
279      0, c_production, 0, NORM},
280     {"pstat <PLANES>",
281      0, c_pstat, 0, NORM},
282     {"quit",
283      0, c_quit, 0, 0},
284     {"radar <SHIPS | SECTS>",
285      1, c_radar, C_MOD, NORM + CAP},
286     {"range <PLANES> <range>",
287      1, c_range, C_MOD, NORM + CAP},
288     {"read [yes|no|<CNUM/CNAME>]",
289      0, c_read, C_MOD, NONVIS},
290     {"realm <number> [<SECTS>]",
291      0, c_realm, C_MOD, NORM},
292     {"recon <spy-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION>",
293      3, c_recon, C_MOD, NORM + MONEY + CAP},
294     {"reject <reject|accept> <announcements|mail|loans> <NAT>",
295      2, c_reject, C_MOD, NORM},
296     {"relations  [as-COUNTRY]",
297      0, c_relations, 0, 0},
298     {"reload",
299      0, c_reload, C_MOD, GOD},
300     {"repay <LOAN> <NUM>",
301      1, c_repay, C_MOD, NORM + MONEY + CAP},
302     {"report <NATS>",
303      0, c_report, 0, 0},
304     {"reset <lot #> <0|price>",
305      1, c_reset, C_MOD, NORM + CAP},
306     {"resource <SECTS>",
307      0, c_resource, 0, NONVIS},
308     {"retreat <SHIPS|FLEET> [q | <PATH> <i|t|s|h|b|d|u|c>]",
309      1, c_retreat, C_MOD, NORM + CAP},
310     {"route <COMM> <SECTS>",
311      1, c_route, C_MOD, NORM},
312     {"sabotage <UNITS>",
313      1, c_sabotage, C_MOD, NORM + MONEY + CAP},
314     {"satellite <PLANE> [<se|sh|l> [?cond&cond&...]]",
315      1, c_satellite, C_MOD, NORM + CAP},
316     {"sbmap <SECTS|SHIP> [s|l|n|p|r|t|*|h]",
317      0, c_map, C_MOD, NORM},
318     {"scrap <s|p|l> <SHIPS|PLANES|UNITS>",
319      2, c_scrap, C_MOD, NORM + MONEY + CAP},
320     {"scuttle <s|p|l> <SHIPS|PLANES|UNITS>",
321      5, c_scuttle, C_MOD, NORM + CAP},
322     {"sdump <SHIPS> [<fields>]",
323      0, c_sdump, 0, NORM},
324     {"sect <SECTS>",
325      0, c_sect, C_MOD, NORM},
326     {"sell <COMM> <SECTS> <NUM> <NUM>",
327      1, c_sell, C_MOD, NORM + CAP},
328     {"set <TYPE> <SHIPS|PLANES|UNITS|NUKES> <PRICE>",
329      1, c_set, C_MOD, NORM + CAP},
330     {"setresource <type> <SECTS> <NUM>",
331      0, c_setresource, C_MOD, GOD},
332     {"setsector <type> <SECTS> <NUM>",
333      0, c_setsector, C_MOD, GOD},
334     {"sharebmap <CNUM/CNAME> <SECTS> [<des>]",
335      0, c_sharebmap, C_MOD, NORM},
336     {"shark <LOAN>",
337      25, c_shark, C_MOD, NORM + MONEY + CAP},
338     {"ship <SHIPS>",
339      0, c_ship, 0, NORM},
340     {"shoot <c|u> <SECTS> <NUMBER>",
341      3, c_shoot, C_MOD, NORM + MONEY + CAP},
342     {"show <TYPE> <\"build\"|\"stats\"|\"cap\"> [<tech>]\n"
343      "\tshow <bridge|item|news|product|tower>\n"
344      "\tshow updates [<NUM>]>",
345      0, c_show, 0, 0},
346     {"shutdown <minutes> <disable update?>",
347      0, c_shutdown, 0, GOD},
348     {"sinfrastructure <SECTS>",
349      0, c_sinfrastructure, 0, NONVIS},
350     {"skywatch <SECTS>",
351      1, c_skywatch, C_MOD, NORM + CAP},
352     {"smap <SECTS|SHIP> [s|l|n|p|*|h]",
353      0, c_map, C_MOD, NORM},
354     {"sonar <SHIPS> <brief?>",
355      1, c_sonar, C_MOD, NORM + CAP},
356     {"spy <SECTS>",
357      1, c_spy, C_MOD, NORM + CAP},
358     {"sstat <SHIPS>",
359      0, c_sstat, 0, NORM},
360     {"start <TYPE> <SECTS|PLANES|SHIPS|UNITS|NUKES>",
361      1, c_start, C_MOD, NORM},
362     {"starvation [<SECTS>|l <UNITS>|s <SHIPS>]",
363      0, c_starvation, 0, NORM},
364     {"stockpile <STOCKPILE> <NUKES>",
365      0, c_stockpile, C_MOD, NORM},
366     {"stop <TYPE> <SECTS|PLANES|SHIPS|UNITS|NUKES>",
367      1, c_stop, C_MOD, NORM},
368     {"strength <SECTS>",
369      1, c_strength, C_MOD, NORM},
370     {"supply <LAND UNITS>",
371      1, c_supply, C_MOD, NORM + CAP},
372     {"survey <SELECTOR> <SECTS>",
373      0, c_survey, C_MOD, NORM},
374     {"swapsector <SECT> <SECT>",
375      0, c_swapsector, C_MOD, GOD},
376     {"sweep <sweep-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION>",
377      3, c_recon, C_MOD, NORM + MONEY + CAP},
378     {"telegram <NATS>...",
379      0, c_telegram, C_MOD, NORM},
380     {"tend <COMM|\"land\"> <tender-SHIPS> <NUM|UNIT> <dest-SHIPS>",
381      1, c_tend, C_MOD, NORM + CAP},
382     {"territory <SECTS> <NUMBER> [<FIELD>]",
383      0, c_territory, C_MOD, NORM},
384     {"test <COMM> <SECT> <NUM> <PATH|DESTINATION>",
385      1, c_move, C_MOD, NORM},
386     {"threshold <COMM> <SECTS> <THRESH>",
387      1, c_threshold, C_MOD, NORM},
388     {"toggle [inform|flash|beep|coastwatch|sonar|techlists] [on|off]",
389      0, c_toggle, C_MOD, 0},
390     {"torpedo <submarine-SHIPS> <target-SHIP>",
391      3, c_torpedo, C_MOD, NORM + MONEY + CAP},
392     {"trade",
393      1, c_trade, C_MOD, NORM + MONEY + CAP},
394     {"transport <\"nuke\"|\"plane\"> <NUKES|PLANES> <PATH|DESTINATION>",
395      1, c_transport, C_MOD, NORM + CAP},
396     {"turn <\"on\"|\"off\"|\"mess\">",
397      0, c_turn, C_MOD, GOD},
398     {"unload <COMM|\"land\"|\"plane\"> <SHIPS> <NUM|UNIT|PLANE>",
399      1, c_load, C_MOD, NORM + CAP},
400     {"update",
401      0, c_update, 0, 0},
402     {"upgrade <s|p|l> <SHIPS|PLANES|UNITS>",
403      1, c_upgrade, C_MOD, NORM + MONEY + CAP},
404     {"version",
405      0, c_version, 0, 0},
406     {"wall [<message>]",
407      0, c_wall, 0, NORM},
408     {"wingadd <WING> <PLANES>",
409      0, c_wingadd, C_MOD, NORM},
410     {"wipe <SECTS>",
411      1, c_wipe, C_MOD, NORM},
412     {"wire [yes|no|<days>]",
413      0, c_read, C_MOD, 0},
414     {"work <LAND UNITS> <AMOUNT>",
415      1, c_work, C_MOD, NORM + MONEY + CAP},
416     {"xdump [\"meta\"] <TYPE> [<RECORDS>]",
417      0, c_xdump, 0, 0},
418     {"zdone <y|n|c>",
419      0, c_zdone, C_MOD, NORM},
420     {"__cmd \"added\" <NUM> <NUM> <NUM>",
421      0, c___cmd, 0, TESTING},
422     {NULL, 0, NULL, 0, 0}
423 };