root/1.8.3/tags/p6/src/cmds.c

Revision 1167, 31.3 KB (checked in by shawnw, 13 months ago)

Merge devel into trunk for p6 release

Line 
1/**
2 * \file cmds.c
3 *
4 * \brief Definitions of commands.
5 * This file is a set of functions that defines commands. The parsing
6 * of commands is elsewhere (command.c), as are the implementations
7 * of most of the commands (throughout the source.)
8 *
9 */
10
11#include "copyrite.h"
12#include "config.h"
13
14#include <string.h>
15
16#include "conf.h"
17#include "externs.h"
18#include "dbdefs.h"
19#include "mushdb.h"
20#include "match.h"
21#include "game.h"
22#include "attrib.h"
23#include "extmail.h"
24#include "malias.h"
25#include "parse.h"
26#include "access.h"
27#include "version.h"
28#include "lock.h"
29#include "function.h"
30#include "command.h"
31#include "flags.h"
32#include "log.h"
33#include "confmagic.h"
34
35/* External Stuff */
36void do_poor(dbref player, char *arg1);
37void do_list_memstats(dbref player);
38
39#define DOL_MAP 1               /**< dolist/map bitflag */
40#define DOL_NOTIFY 2            /**< dolist/notify bitflag */
41#define DOL_DELIM 4             /**< dolist/delim bitflag */
42
43void do_dolist(dbref player, char *list, char *command,
44               dbref cause, unsigned int flags);
45void do_list(dbref player, char *arg, int lc);
46void do_writelog(dbref player, char *str, int ltype);
47void do_readcache(dbref player);
48void do_scan(dbref player, char *command, int flag);
49void do_uptime(dbref player, int mortal);
50extern int config_set(const char *opt, char *val, int source, int restrictions);
51
52/** Is there a right-hand side of the equal sign? From command.c */
53extern int rhs_present;
54
55COMMAND(cmd_allhalt)
56{
57  do_allhalt(player);
58}
59
60COMMAND(cmd_allquota)
61{
62  do_allquota(player, arg_left, SW_ISSET(sw, SWITCH_QUIET));
63}
64
65COMMAND(cmd_atrlock)
66{
67  do_atrlock(player, arg_left, arg_right);
68}
69
70COMMAND(cmd_attribute)
71{
72  if (SW_ISSET(sw, SWITCH_ACCESS))
73    do_attribute_access(player, arg_left, arg_right,
74                        SW_ISSET(sw, SWITCH_RETROACTIVE));
75  else if (SW_ISSET(sw, SWITCH_DELETE))
76    do_attribute_delete(player, arg_left);
77  else if (SW_ISSET(sw, SWITCH_RENAME))
78    do_attribute_rename(player, arg_left, arg_right);
79  else
80    do_attribute_info(player, arg_left);
81}
82
83COMMAND(cmd_atrchown)
84{
85  do_atrchown(player, arg_left, arg_right);
86}
87
88COMMAND(cmd_boot)
89{
90  if (SW_ISSET(sw, SWITCH_PORT))
91    do_boot(player, arg_left, BOOT_DESC);
92  else if (SW_ISSET(sw, SWITCH_ME))
93    do_boot(player, (char *) NULL, BOOT_SELF);
94  else if (SW_ISSET(sw, SWITCH_SILENT))
95    do_boot(player, arg_left, BOOT_SILENT);
96  else
97    do_boot(player, arg_left, BOOT_NAME);
98}
99
100COMMAND(cmd_break)
101{
102  if (parse_boolean(arg_left)) {
103    global_eval_context.break_called = 1;
104    if (arg_right && *arg_right) {
105      char const *sp = arg_right;
106      char *bp = global_eval_context.break_replace;
107      process_expression(global_eval_context.break_replace, &bp, &sp,
108                         player, player, cause,
109                         PE_COMMAND_BRACES, PT_DEFAULT, NULL);
110      *bp++ = '\0';
111    }
112  }
113}
114
115COMMAND(cmd_assert)
116{
117  if (!parse_boolean(arg_left)) {
118    global_eval_context.break_called = 1;
119    if (arg_right && *arg_right) {
120      char const *sp = arg_right;
121      char *bp = global_eval_context.break_replace;
122      process_expression(global_eval_context.break_replace, &bp, &sp,
123                         player, player, cause,
124                         PE_COMMAND_BRACES, PT_DEFAULT, NULL);
125      *bp++ = '\0';
126    }
127  }
128}
129
130COMMAND(cmd_chownall)
131{
132  do_chownall(player, arg_left, arg_right, SW_ISSET(sw, SWITCH_PRESERVE));
133}
134
135COMMAND(cmd_chown)
136{
137  do_chown(player, arg_left, arg_right, SW_ISSET(sw, SWITCH_PRESERVE));
138}
139
140COMMAND(cmd_chzoneall)
141{
142  do_chzoneall(player, arg_left, arg_right);
143}
144
145COMMAND(cmd_chzone)
146{
147  (void) do_chzone(player, arg_left, arg_right, 1);
148}
149
150COMMAND(cmd_config)
151{
152  int lc;
153  lc = SW_ISSET(sw, SWITCH_LOWERCASE);
154  if (SW_ISSET(sw, SWITCH_GLOBALS))
155    do_config_list(player, NULL, lc);
156  else if (SW_ISSET(sw, SWITCH_DEFAULTS))
157    do_config_list(player, NULL, lc);
158  else if (SW_ISSET(sw, SWITCH_COSTS))
159    do_config_list(player, NULL, lc);
160  else if (SW_ISSET(sw, SWITCH_FUNCTIONS))
161    do_list_functions(player, lc);
162  else if (SW_ISSET(sw, SWITCH_COMMANDS))
163    do_list_commands(player, lc);
164  else if (SW_ISSET(sw, SWITCH_ATTRIBS))
165    do_list_attribs(player, lc);
166  else if (SW_ISSET(sw, SWITCH_LIST))
167    do_config_list(player, arg_left, lc);
168  else if (SW_ISSET(sw, SWITCH_FLAGS))
169    do_list_flags("FLAG", player, arg_left, lc, T("Flags"));
170  else if (SW_ISSET(sw, SWITCH_POWERS))
171    do_list_flags("POWER", player, arg_left, lc, T("Powers"));
172  else if (SW_ISSET(sw, SWITCH_SET)) {
173    if (!Wizard(player)) {
174      notify(player, T("You can't remake the world in your image."));
175      return;
176    }
177    if (!arg_left || !*arg_left) {
178      notify(player, T("What did you want to set?"));
179      return;
180    }
181    if (!config_set(arg_left, arg_right, 1, 0)
182        && !config_set(arg_left, arg_right, 1, 1))
183      notify(player, T("Couldn't set that option"));
184    else
185      notify(player, T("Option set."));
186  } else
187    do_config_list(player, arg_left, lc);
188}
189
190COMMAND(cmd_cpattr)
191{
192  do_cpattr(player, arg_left, args_right, 0, SW_ISSET(sw, SWITCH_NOFLAGCOPY));
193}
194
195COMMAND(cmd_create)
196{
197  do_create(player, arg_left, parse_integer(arg_right));
198}
199
200COMMAND(cmd_clone)
201{
202  if (SW_ISSET(sw, SWITCH_PRESERVE))
203    do_clone(player, arg_left, arg_right, SWITCH_PRESERVE);
204  else
205    do_clone(player, arg_left, arg_right, SWITCH_NONE);
206}
207
208COMMAND(cmd_dbck)
209{
210  do_dbck(player);
211}
212
213COMMAND(cmd_decompile)
214{
215  char prefix[BUFFER_LEN];
216  int sd = SW_ISSET(sw, SWITCH_SKIPDEFAULTS);
217  *prefix = '\0';
218  if (SW_ISSET(sw, SWITCH_TF)) {
219    /* @dec/tf overrides @dec/prefix */
220    ATTR *a;
221    if (((a = atr_get_noparent(player, "TFPREFIX")) != NULL) &&
222        AL_STR(a) && *AL_STR(a)) {
223      strcpy(prefix, atr_value(a));
224    } else {
225      strcpy(prefix, "FugueEdit > ");
226    }
227  } else if (SW_ISSET(sw, SWITCH_PREFIX)) {
228    strcpy(prefix, arg_right);
229  }
230  if (SW_ISSET(sw, SWITCH_DB) || SW_ISSET(sw, SWITCH_TF))
231    do_decompile(player, arg_left, prefix, DEC_DB, sd);
232  else if (SW_ISSET(sw, SWITCH_FLAGS))
233    do_decompile(player, arg_left, prefix, DEC_FLAG, sd);
234  else if (SW_ISSET(sw, SWITCH_ATTRIBS))
235    do_decompile(player, arg_left, prefix, DEC_ATTR, sd);
236  else
237    do_decompile(player, arg_left, prefix, DEC_NORMAL, sd);
238}
239
240COMMAND(cmd_teach)
241{
242  do_teach(player, cause, arg_left);
243}
244
245COMMAND(cmd_destroy)
246{
247  do_destroy(player, arg_left, (SW_ISSET(sw, SWITCH_OVERRIDE)));
248}
249
250COMMAND(cmd_dig)
251{
252  do_dig(player, arg_left, args_right, (SW_ISSET(sw, SWITCH_TELEPORT)));
253}
254
255COMMAND(cmd_disable)
256{
257  do_enable(player, arg_left, 0);
258}
259
260COMMAND(cmd_doing)
261{
262  if (SW_ISSET(sw, SWITCH_HEADER))
263    do_poll(player, arg_left, 0);
264  else
265    do_doing(player, arg_left);
266}
267
268COMMAND(cmd_dolist)
269{
270  unsigned int flags = 0;
271  if (SW_ISSET(sw, SWITCH_NOTIFY))
272    flags |= DOL_NOTIFY;
273  if (SW_ISSET(sw, SWITCH_DELIMIT))
274    flags |= DOL_DELIM;
275  do_dolist(player, arg_left, arg_right, cause, flags);
276}
277
278COMMAND(cmd_dump)
279{
280  if (SW_ISSET(sw, SWITCH_PARANOID))
281    do_dump(player, arg_left, DUMP_PARANOID);
282  else if (SW_ISSET(sw, SWITCH_DEBUG))
283    do_dump(player, arg_left, DUMP_DEBUG);
284  else
285    do_dump(player, arg_left, DUMP_NORMAL);
286}
287
288COMMAND(cmd_edit)
289{
290  do_gedit(player, arg_left, args_right,
291           SW_ISSET(sw, SWITCH_FIRST) ? EDIT_FIRST : EDIT_ALL,
292           SW_ISSET(sw, SWITCH_CHECK) ? 0 : 1);
293}
294
295COMMAND(cmd_elock)
296{
297  do_lock(player, arg_left, arg_right, Enter_Lock);
298}
299
300COMMAND(cmd_emit)
301{
302  int spflags = !strcmp(cmd->name, "@NSEMIT") ? PEMIT_SPOOF : 0;
303  SPOOF(player, cause, sw);
304
305  if (SW_ISSET(sw, SWITCH_ROOM))
306    do_lemit(player, arg_left,
307             (SW_ISSET(sw, SWITCH_SILENT) * PEMIT_SILENT) | spflags);
308  else
309    do_emit(player, arg_left, spflags);
310}
311
312COMMAND(cmd_enable)
313{
314  do_enable(player, arg_left, 1);
315}
316
317COMMAND(cmd_entrances)
318{
319  if (SW_ISSET(sw, SWITCH_EXITS))
320    do_entrances(player, arg_left, args_right, ENT_EXITS);
321  else if (SW_ISSET(sw, SWITCH_THINGS))
322    do_entrances(player, arg_left, args_right, ENT_THINGS);
323  else if (SW_ISSET(sw, SWITCH_PLAYERS))
324    do_entrances(player, arg_left, args_right, ENT_PLAYERS);
325  else if (SW_ISSET(sw, SWITCH_ROOMS))
326    do_entrances(player, arg_left, args_right, ENT_ROOMS);
327  else
328    do_entrances(player, arg_left, args_right, ENT_ALL);
329}
330
331COMMAND(cmd_eunlock)
332{
333  do_unlock(player, arg_left, Enter_Lock);
334}
335
336COMMAND(cmd_find)
337{
338  do_find(player, arg_left, args_right);
339}
340
341COMMAND(cmd_firstexit)
342{
343  do_firstexit(player, arg_left);
344}
345
346COMMAND(cmd_flag)
347{
348  if (SW_ISSET(sw, SWITCH_LIST))
349    do_list_flags("FLAG", player, arg_left, 0, T("Flags"));
350  else if (SW_ISSET(sw, SWITCH_ADD))
351    do_flag_add("FLAG", player, arg_left, args_right);
352  else if (SW_ISSET(sw, SWITCH_DELETE))
353    do_flag_delete("FLAG", player, arg_left);
354  else if (SW_ISSET(sw, SWITCH_ALIAS))
355    do_flag_alias("FLAG", player, arg_left, args_right[1]);
356  else if (SW_ISSET(sw, SWITCH_RESTRICT))
357    do_flag_restrict("FLAG", player, arg_left, args_right);
358  else if (SW_ISSET(sw, SWITCH_DISABLE))
359    do_flag_disable("FLAG", player, arg_left);
360  else if (SW_ISSET(sw, SWITCH_ENABLE))
361    do_flag_enable("FLAG", player, arg_left);
362  else if (SW_ISSET(sw, SWITCH_LETTER))
363    do_flag_letter("FLAG", player, arg_left, args_right[1]);
364  else if (SW_ISSET(sw, SWITCH_TYPE))
365    do_flag_type("FLAG", player, arg_left, args_right[1]);
366  else
367    do_flag_info("FLAG", player, arg_left);
368}
369
370COMMAND(cmd_force)
371{
372  do_force(player, arg_left, arg_right);
373}
374
375COMMAND(cmd_function)
376{
377  if (SW_ISSET(sw, SWITCH_DELETE))
378    do_function_delete(player, arg_left);
379  else if (SW_ISSET(sw, SWITCH_ENABLE))
380    do_function_toggle(player, arg_left, 1);
381  else if (SW_ISSET(sw, SWITCH_DISABLE))
382    do_function_toggle(player, arg_left, 0);
383  else if (SW_ISSET(sw, SWITCH_RESTRICT))
384    do_function_restrict(player, arg_left, args_right[1],
385                         SW_ISSET(sw, SWITCH_BUILTIN));
386  else if (SW_ISSET(sw, SWITCH_RESTORE))
387    do_function_restore(player, arg_left);
388  else {
389    int split;
390    char *saved;
391    split = 0;
392    saved = NULL;
393    if (args_right[1] && *args_right[1] && !(args_right[2] && *args_right[2])) {
394      split = 1;
395      saved = args_right[2];
396      if ((args_right[2] = strchr(args_right[1], '/')) == NULL) {
397        notify(player, T("#-1 INVALID SECOND ARGUMENT"));
398        return;
399      }
400      *args_right[2]++ = '\0';
401    }
402    if (args_right[1] && *args_right[1])
403      do_function(player, arg_left, args_right, SW_ISSET(sw, SWITCH_PRESERVE));
404    else if (arg_left && *arg_left)
405      do_function_report(player, arg_left);
406    else
407      do_function(player, NULL, NULL, 0);
408    if (split) {
409      if (args_right[2])
410        *--args_right[2] = '/';
411      args_right[2] = saved;
412    }
413  }
414}
415
416
417COMMAND(cmd_grep)
418{
419  do_grep(player, arg_left, arg_right, ((SW_ISSET(sw, SWITCH_IPRINT))
420                                        || (SW_ISSET(sw, SWITCH_PRINT))),
421          ((SW_ISSET(sw, SWITCH_IPRINT))
422           || (SW_ISSET(sw, SWITCH_ILIST))));
423}
424
425COMMAND(cmd_halt)
426{
427  if (SW_ISSET(sw, SWITCH_ALL))
428    do_allhalt(player);
429  else
430    do_halt1(player, arg_left, arg_right);
431}
432
433COMMAND(cmd_hide)
434{
435  hide_player(player, !(SW_ISSET(sw, SWITCH_NO) || SW_ISSET(sw, SWITCH_OFF)));
436}
437
438COMMAND(cmd_hook)
439{
440  enum hook_type flags;
441
442  if (!(Wizard(player) || has_power_by_name(player, "HOOK", NOTYPE))) {
443    notify(player, T("You need a fishing license to use that hook."));
444    return;
445  }
446
447  if (SW_ISSET(sw, SWITCH_AFTER))
448    flags = HOOK_AFTER;
449  else if (SW_ISSET(sw, SWITCH_BEFORE))
450    flags = HOOK_BEFORE;
451  else if (SW_ISSET(sw, SWITCH_IGNORE))
452    flags = HOOK_IGNORE;
453  else if (SW_ISSET(sw, SWITCH_OVERRIDE))
454    flags = HOOK_OVERRIDE;
455  else if (SW_ISSET(sw, SWITCH_LIST)) {
456    do_hook_list(player, arg_left);
457    return;
458  } else {
459    notify(player, T("You must give a switch for @hook"));
460    return;
461  }
462  do_hook(player, arg_left, args_right[1], args_right[2], flags);
463}
464
465COMMAND(cmd_huh_command)
466{
467  notify(player, T("Huh?  (Type \"help\" for help.)"));
468}
469
470COMMAND(cmd_home)
471{
472  if (!Mobile(player))
473    return;
474  do_move(player, "home", MOVE_NORMAL);
475}
476
477COMMAND(cmd_kick)
478{
479  do_kick(player, arg_left);
480}
481
482COMMAND(cmd_lemit)
483{
484  int spflags = !strcmp(cmd->name, "@NSLEMIT") ? PEMIT_SPOOF : 0;
485  SPOOF(player, cause, sw);
486  do_lemit(player, arg_left,
487           (SW_ISSET(sw, SWITCH_SILENT) * PEMIT_SILENT) | spflags);
488}
489
490COMMAND(cmd_link)
491{
492  do_link(player, arg_left, arg_right, SW_ISSET(sw, SWITCH_PRESERVE));
493}
494
495COMMAND(cmd_listmotd)
496{
497  do_motd(player, MOTD_LIST, "");
498}
499
500COMMAND(cmd_list)
501{
502  int lc;
503  lc = SW_ISSET(sw, SWITCH_LOWERCASE);
504  if (SW_ISSET(sw, SWITCH_MOTD))
505    do_motd(player, MOTD_LIST, "");
506  else if (SW_ISSET(sw, SWITCH_FUNCTIONS))
507    do_list_functions(player, lc);
508  else if (SW_ISSET(sw, SWITCH_COMMANDS))
509    do_list_commands(player, lc);
510  else if (SW_ISSET(sw, SWITCH_ATTRIBS))
511    do_list_attribs(player, lc);
512  else if (SW_ISSET(sw, SWITCH_LOCKS))
513    do_list_locks(player, arg_left, lc, T("Locks"));
514  else if (SW_ISSET(sw, SWITCH_FLAGS))
515    do_list_flags("FLAG", player, arg_left, lc, T("Flags"));
516  else if (SW_ISSET(sw, SWITCH_POWERS))
517    do_list_flags("POWER", player, arg_left, lc, T("Powers"));
518  else
519    do_list(player, arg_left, lc);
520}
521
522COMMAND(cmd_lock)
523{
524  if ((switches) && (switches[0]))
525    do_lock(player, arg_left, arg_right, switches);
526  else
527    do_lock(player, arg_left, arg_right, Basic_Lock);
528}
529
530COMMAND(cmd_log)
531{
532  if (SW_ISSET(sw, SWITCH_CHECK))
533    do_writelog(player, arg_left, LT_CHECK);
534  else if (SW_ISSET(sw, SWITCH_CMD))
535    do_writelog(player, arg_left, LT_CMD);
536  else if (SW_ISSET(sw, SWITCH_CONN))
537    do_writelog(player, arg_left, LT_CONN);
538  else if (SW_ISSET(sw, SWITCH_ERR))
539    do_writelog(player, arg_left, LT_ERR);
540  else if (SW_ISSET(sw, SWITCH_TRACE))
541    do_writelog(player, arg_left, LT_TRACE);
542  else if (SW_ISSET(sw, SWITCH_WIZ))
543    do_writelog(player, arg_left, LT_WIZ);
544  else
545    do_writelog(player, arg_left, LT_CMD);
546}
547
548COMMAND(cmd_logwipe)
549{
550  if (SW_ISSET(sw, SWITCH_CHECK))
551    do_logwipe(player, LT_CHECK, arg_left);
552  else if (SW_ISSET(sw, SWITCH_CMD))
553    do_logwipe(player, LT_CMD, arg_left);
554  else if (SW_ISSET(sw, SWITCH_CONN))
555    do_logwipe(player, LT_CONN, arg_left);
556  else if (SW_ISSET(sw, SWITCH_TRACE))
557    do_logwipe(player, LT_TRACE, arg_left);
558  else if (SW_ISSET(sw, SWITCH_WIZ))
559    do_logwipe(player, LT_WIZ, arg_left);
560  else
561    do_logwipe(player, LT_ERR, arg_left);
562}
563
564COMMAND(cmd_lset)
565{
566  do_lset(player, arg_left, arg_right);
567}
568
569COMMAND(cmd_mail)
570{
571  int urgent = SW_ISSET(sw, SWITCH_URGENT);
572  int silent = SW_ISSET(sw, SWITCH_SILENT);
573  int nosig = SW_ISSET(sw, SWITCH_NOSIG);
574  /* First, mail commands that can be used even if you're gagged */
575  if (SW_ISSET(sw, SWITCH_STATS))
576    do_mail_stats(player, arg_left, MSTATS_COUNT);
577  else if (SW_ISSET(sw, SWITCH_DSTATS))
578    do_mail_stats(player, arg_left, MSTATS_READ);
579  else if (SW_ISSET(sw, SWITCH_FSTATS))
580    do_mail_stats(player, arg_left, MSTATS_SIZE);
581  else if (SW_ISSET(sw, SWITCH_DEBUG))
582    do_mail_debug(player, arg_left, arg_right);
583  else if (SW_ISSET(sw, SWITCH_NUKE))
584    do_mail_nuke(player);
585  else if (SW_ISSET(sw, SWITCH_FOLDERS))
586    do_mail_change_folder(player, arg_left, arg_right);
587  else if (SW_ISSET(sw, SWITCH_UNFOLDER))
588    do_mail_unfolder(player, arg_left);
589  else if (SW_ISSET(sw, SWITCH_LIST))
590    do_mail_list(player, arg_left);
591  else if (SW_ISSET(sw, SWITCH_READ))
592    do_mail_read(player, arg_left);
593  else if (SW_ISSET(sw, SWITCH_CLEAR))
594    do_mail_clear(player, arg_left);
595  else if (SW_ISSET(sw, SWITCH_UNCLEAR))
596    do_mail_unclear(player, arg_left);
597  else if (SW_ISSET(sw, SWITCH_PURGE))
598    do_mail_purge(player);
599  else if (SW_ISSET(sw, SWITCH_FILE))
600    do_mail_file(player, arg_left, arg_right);
601  else if (SW_ISSET(sw, SWITCH_TAG))
602    do_mail_tag(player, arg_left);
603  else if (SW_ISSET(sw, SWITCH_UNTAG))
604    do_mail_untag(player, arg_left);
605  else if (SW_ISSET(sw, SWITCH_FWD) || SW_ISSET(sw, SWITCH_FORWARD)
606           || SW_ISSET(sw, SWITCH_SEND) || silent || urgent || nosig) {
607    /* These commands are not allowed to gagged players */
608    if (Gagged(player)) {
609      notify(player, T("You cannot do that while gagged."));
610      return;
611    }
612    if (SW_ISSET(sw, SWITCH_FWD))
613      do_mail_fwd(player, arg_left, arg_right);
614    else if (SW_ISSET(sw, SWITCH_FORWARD))
615      do_mail_fwd(player, arg_left, arg_right);
616    else if (SW_ISSET(sw, SWITCH_SEND) || silent || urgent || nosig)
617      do_mail_send(player, arg_left, arg_right,
618                   urgent ? M_URGENT : 0, silent, nosig);
619  } else
620    do_mail(player, arg_left, arg_right);       /* Does its own gagged check */
621}
622
623
624COMMAND(cmd_malias)
625{
626  if (SW_ISSET(sw, SWITCH_LIST))
627    do_malias_list(player);
628  else if (SW_ISSET(sw, SWITCH_ALL))
629    do_malias_all(player);
630  else if (SW_ISSET(sw, SWITCH_MEMBERS) || SW_ISSET(sw, SWITCH_WHO))
631    do_malias_members(player, arg_left);
632  else if (SW_ISSET(sw, SWITCH_CREATE))
633    do_malias_create(player, arg_left, arg_right);
634  else if (SW_ISSET(sw, SWITCH_SET))
635    do_malias_set(player, arg_left, arg_right);
636  else if (SW_ISSET(sw, SWITCH_DESTROY))
637    do_malias_destroy(player, arg_left);
638  else if (SW_ISSET(sw, SWITCH_ADD))
639    do_malias_add(player, arg_left, arg_right);
640  else if (SW_ISSET(sw, SWITCH_REMOVE))
641    do_malias_remove(player, arg_left, arg_right);
642  else if (SW_ISSET(sw, SWITCH_DESCRIBE))
643    do_malias_desc(player, arg_left, arg_right);
644  else if (SW_ISSET(sw, SWITCH_RENAME))
645    do_malias_rename(player, arg_left, arg_right);
646  else if (SW_ISSET(sw, SWITCH_STATS))
647    do_malias_stats(player);
648  else if (SW_ISSET(sw, SWITCH_CHOWN))
649    do_malias_chown(player, arg_left, arg_right);
650  else if (SW_ISSET(sw, SWITCH_USEFLAG))
651    do_malias_privs(player, arg_left, arg_right, 0);
652  else if (SW_ISSET(sw, SWITCH_SEEFLAG))
653    do_malias_privs(player, arg_left, arg_right, 1);
654  else if (SW_ISSET(sw, SWITCH_NUKE))
655    do_malias_nuke(player);
656  else
657    do_malias(player, arg_left, arg_right);
658}
659
660COMMAND(cmd_map)
661{
662  unsigned int flags = DOL_MAP;
663  if (SW_ISSET(sw, SWITCH_DELIMIT))
664    flags |= DOL_DELIM;
665  do_dolist(player, arg_left, arg_right, cause, flags);
666}
667
668COMMAND(cmd_message)
669{
670  char *message;
671  char *attrib;
672  unsigned int flags = 0;
673  int numargs, i;
674  char *args[10];
675
676  if (!(SW_ISSET(sw, SWITCH_SPOOF) && (controls(player, cause)
677                                       || Can_Nspemit(player)))) {
678    cause = player;
679  }
680
681  for (numargs = 1; args_right[numargs] && numargs < 13; numargs++) ;
682
683  switch (numargs) {
684  case 1:
685    notify(player, T("@message them with what?"));
686    return;
687  case 2:
688    notify(player, T("Use what attribute for the @message?"));
689    return;
690  }
691  if (!*arg_left) {
692    notify(player, T("@message who?"));
693    return;
694  }
695
696  message = args_right[1];
697  attrib = args_right[2];
698
699  for (i = 0; (i + 3) < numargs; i++) {
700    args[i] = args_right[i + 3];
701  }
702
703  do_message_list(player, cause, arg_left, attrib, message, flags, i, args);
704}
705
706COMMAND(cmd_motd)
707{
708  if (SW_ISSET(sw, SWITCH_CONNECT))
709    do_motd(player, MOTD_MOTD, arg_left);
710  else if (SW_ISSET(sw, SWITCH_LIST))
711    do_motd(player, MOTD_LIST, "");
712  else if (SW_ISSET(sw, SWITCH_WIZARD))
713    do_motd(player, MOTD_WIZ, arg_left);
714  else if (SW_ISSET(sw, SWITCH_DOWN))
715    do_motd(player, MOTD_DOWN, arg_left);
716  else if (SW_ISSET(sw, SWITCH_FULL))
717    do_motd(player, MOTD_FULL, arg_left);
718  else
719    do_motd(player, MOTD_MOTD, arg_left);
720}
721
722COMMAND(cmd_mvattr)
723{
724  do_cpattr(player, arg_left, args_right, 1, SW_ISSET(sw, SWITCH_NOFLAGCOPY));
725}
726
727COMMAND(cmd_name)
728{
729  do_name(player, arg_left, arg_right);
730}
731
732COMMAND(cmd_newpassword)
733{
734  do_newpassword(player, cause, arg_left, arg_right);
735}
736
737COMMAND(cmd_nuke)
738{
739  do_destroy(player, arg_left, 1);
740}
741
742COMMAND(cmd_oemit)
743{
744  int spflags = !strcmp(cmd->name, "@NSOEMIT") ? PEMIT_SPOOF : 0;
745  SPOOF(player, cause, sw);
746  do_oemit_list(player, arg_left, arg_right, spflags);
747}
748
749COMMAND(cmd_open)
750{
751  do_open(player, arg_left, args_right);
752}
753
754COMMAND(cmd_parent)
755{
756  do_parent(player, arg_left, arg_right);
757}
758
759COMMAND(cmd_password)
760{
761  do_password(player, cause, arg_left, arg_right);
762}
763
764COMMAND(cmd_pcreate)
765{
766  do_pcreate(player, arg_left, arg_right);
767}
768
769COMMAND(cmd_pemit)
770{
771  int flags;
772
773  SPOOF(player, cause,