/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* ROM 2.4 is copyright 1993-1998 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@hypercube.org) *
* Gabrielle Taylor (gtaylor@hypercube.org) *
* Brian Moore (zump@rom.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Rom24/doc/rom.license *
***************************************************************************/
/* this is a listing of all the commands and command related data */
/* wrapper function for safe command execution */
void do_function args((CHAR_DATA *ch, DO_FUN *do_fun, char *argument, SInt32 subcmd));
void create_table_com(void);
void skip_spaces(const char *&string);
void half_chop(const char *string, char *arg1, char *arg2);
bool is_abbrev(const char *arg1, const char *arg2);
// EGCS Does not like this, GCC requires it.
#if defined(GCC)
inline void skip_spaces(char *&string) {
return skip_spaces(const_cast<const char *>(string));
}
#endif
/* for command types */
#define ML MAX_LEVEL /* implementor */
#define IM LVL_IMMORT /* imm */
#define HE LVL_HERO /* hero */
#define COM_INGORE 1
#define STAFF_CMD -1
#define IS_STAFFCMD(cmd) (cmd_table[cmd].level == STAFF_CMD)
/*
* Structure for a command in the command lookup table.
*/
struct cmd_type
{
char * name;
char * sort_as;
DO_FUN * do_fun;
sh_int position;
sh_int level;
sh_int show;
sh_int log;
Flags staffcmd;
SInt32 subcmd;
};
struct cmd_list_type {
char *name;
DO_FUN *function;
};
/*
* SUBCOMMANDS
* You can define these however you want to, and the definitions of the
* subcommands are independent from function to function.
*/
/* do_date */
#define SCMD_DATE 0
#define SCMD_UPTIME 1
/* do_allow */
#define SCMD_ALLOW 0
#define SCMD_DENY 1
/* do_ban */
#define SCMD_TEMPBAN 0
#define SCMD_PERMBAN 1
/* do_gen_tog */
#define SCMD_NOSUMMON 0
#define SCMD_NOHASSLE 1
#define SCMD_BRIEF 2
#define SCMD_COMPACT 3
#define SCMD_NOTELL 4
#define SCMD_NOMUSIC 5
#define SCMD_NOSHOUT 6
#define SCMD_NOCHAT 7
#define SCMD_NOGRATS 8
#define SCMD_NOQUEST 9
#define SCMD_HOLYLIGHT 10
#define SCMD_AUTOEXIT 11
#define SCMD_NOINFO 12
#define SCMD_COLOR 13
#define SCMD_MSP 14
#define SCMD_NOCLAN 15
#define SCMD_LONGEX 16
#define SCMD_COMBINE 17
#define SCMD_NOLOOT 18
#define SCMD_NOFOLLOW 19
#define SCMD_NOPUEBLO 20
#define SCMD_AUTOASSIST 21
#define SCMD_AUTODAMAGE 22
#define SCMD_AUTOGOLD 23
#define SCMD_AUTOLOOT 24
#define SCMD_AUTOSAC 25
#define SCMD_AUTOSPLIT 26
#define SCMD_AUTOMAP 27
#define SCMD_SHOW 28
#define SCMD_QUIET 29
/* do_liblist */
#define SCMD_RLIST 0
#define SCMD_OLIST 1
#define SCMD_MLIST 2
#define SCMD_TLIST 3
/* do_gen_comm */
#define SCMD_CHAT 0
#define SCMD_MUSIC 1
#define SCMD_GRATS 2
#define SCMD_SHOUT 3
#define SCMD_QUEST 4
#define SCMD_CLAN 5
#define SCMD_BROADCAST 6
/* do_zallow */
#define SCMD_ZALLOW 0
#define SCMD_ZDENY 1
/* do_spec_comm */
#define SCMD_WHISPER 0
#define SCMD_ASK 1
/* do_gen_ps */
#define SCMD_MOTD 0
#define SCMD_IMOTD 1
#define SCMD_RULES 2
#define SCMD_POLICY 3
#define SCMD_STORY 4
#define SCMD_VERSION 5
#define SCMD_CLEAR 6
/* the command table itself */
extern int MAX_CMD;
extern struct cmd_type * cmd_table;
#include "command.h"
#if 0
/*
* Command functions.
* Defined in act_*.c (mostly).
*/
DECLARE_DO_FUN( do_pload );
DECLARE_DO_FUN( do_punload );
DECLARE_DO_FUN( do_advance );
DECLARE_DO_FUN( do_affects );
DECLARE_DO_FUN( do_afk );
DECLARE_DO_FUN( do_alia );
DECLARE_DO_FUN( do_alias );
DECLARE_DO_FUN( do_allow );
DECLARE_DO_FUN( do_areas );
DECLARE_DO_FUN( do_at );
DECLARE_DO_FUN( do_attributes );
DECLARE_DO_FUN( do_autoall );
DECLARE_DO_FUN( do_autolist );
DECLARE_DO_FUN( do_backstab );
DECLARE_DO_FUN( do_bamfin );
DECLARE_DO_FUN( do_bamfout );
DECLARE_DO_FUN( do_broadcast );
DECLARE_DO_FUN( do_board );
DECLARE_DO_FUN( do_category );
DECLARE_DO_FUN( do_checknote );
DECLARE_DO_FUN( do_cname );
DECLARE_DO_FUN( do_rmsg );
DECLARE_DO_FUN( do_ban );
DECLARE_DO_FUN( do_bash );
DECLARE_DO_FUN( do_berserk );
DECLARE_DO_FUN( do_brandish );
DECLARE_DO_FUN( do_brief );
DECLARE_DO_FUN( do_bug );
DECLARE_DO_FUN( do_buy );
DECLARE_DO_FUN( do_cast );
DECLARE_DO_FUN( do_changes );
DECLARE_DO_FUN( do_channels );
DECLARE_DO_FUN( do_clanlist );
DECLARE_DO_FUN( do_clone );
DECLARE_DO_FUN( do_close );
DECLARE_DO_FUN( do_commands );
DECLARE_DO_FUN( do_combine );
DECLARE_DO_FUN( do_compact );
DECLARE_DO_FUN( do_compare );
DECLARE_DO_FUN( do_consider );
DECLARE_DO_FUN( do_copyover );
DECLARE_DO_FUN( do_count );
DECLARE_DO_FUN( do_credits );
DECLARE_DO_FUN( do_deaf );
DECLARE_DO_FUN( do_drive );
DECLARE_DO_FUN( do_olc_delete );
DECLARE_DO_FUN( do_dirt );
DECLARE_DO_FUN( do_disarm );
DECLARE_DO_FUN( do_disconnect );
DECLARE_DO_FUN( do_donate );
DECLARE_DO_FUN( do_down );
DECLARE_DO_FUN( do_drink );
DECLARE_DO_FUN( do_drop );
DECLARE_DO_FUN( do_dump );
DECLARE_DO_FUN( do_east );
DECLARE_DO_FUN( do_eat );
DECLARE_DO_FUN( do_echo );
DECLARE_DO_FUN( do_emote );
DECLARE_DO_FUN( do_enter );
DECLARE_DO_FUN( do_envenom );
DECLARE_DO_FUN( do_equipment );
DECLARE_DO_FUN( do_examine );
DECLARE_DO_FUN( do_exits );
DECLARE_DO_FUN( do_finger );
DECLARE_DO_FUN( do_fill );
DECLARE_DO_FUN( do_flag );
DECLARE_DO_FUN( do_flee );
DECLARE_DO_FUN( do_follow );
DECLARE_DO_FUN( do_for );
DECLARE_DO_FUN( do_force );
DECLARE_DO_FUN( do_freeze );
DECLARE_DO_FUN( do_gain );
DECLARE_DO_FUN( do_gen_comm );
DECLARE_DO_FUN( do_gen_menu );
DECLARE_DO_FUN( do_gen_tog );
DECLARE_DO_FUN( do_gen_ps );
DECLARE_DO_FUN( do_get );
DECLARE_DO_FUN( do_give );
DECLARE_DO_FUN( do_gocial );
DECLARE_DO_FUN( do_gossip );
DECLARE_DO_FUN( do_goto );
DECLARE_DO_FUN( do_grats );
DECLARE_DO_FUN( do_group );
DECLARE_DO_FUN( do_groups );
DECLARE_DO_FUN( do_gtell );
DECLARE_DO_FUN( do_guild );
DECLARE_DO_FUN( do_juke );
DECLARE_DO_FUN( do_heal );
DECLARE_DO_FUN( do_help );
DECLARE_DO_FUN( do_hide );
DECLARE_DO_FUN( do_holylight );
DECLARE_DO_FUN( do_idea );
DECLARE_DO_FUN( do_immtalk );
DECLARE_DO_FUN( do_incognito );
DECLARE_DO_FUN( do_immcurse );
DECLARE_DO_FUN( do_clantalk );
DECLARE_DO_FUN( do_imotd );
DECLARE_DO_FUN( do_inventory );
DECLARE_DO_FUN( do_invis );
DECLARE_DO_FUN( do_kick );
DECLARE_DO_FUN( do_last );
DECLARE_DO_FUN( do_lore );
DECLARE_DO_FUN( do_kill );
DECLARE_DO_FUN( do_leave );
DECLARE_DO_FUN( do_liblist );
DECLARE_DO_FUN( do_list );
DECLARE_DO_FUN( do_load );
DECLARE_DO_FUN( do_lock );
DECLARE_DO_FUN( do_log );
DECLARE_DO_FUN( do_look );
DECLARE_DO_FUN( do_memory );
DECLARE_DO_FUN( do_mfind );
DECLARE_DO_FUN( do_mstat );
DECLARE_DO_FUN( do_mwhere );
DECLARE_DO_FUN( do_mob );
DECLARE_DO_FUN( do_mount );
DECLARE_DO_FUN( do_unmount );
DECLARE_DO_FUN( do_motd );
DECLARE_DO_FUN( do_mpstat );
DECLARE_DO_FUN( do_mpdump );
DECLARE_DO_FUN( do_murder );
DECLARE_DO_FUN( do_music );
DECLARE_DO_FUN( do_mute );
DECLARE_DO_FUN( do_newlock );
DECLARE_DO_FUN( do_news );
DECLARE_DO_FUN( do_nochannels );
DECLARE_DO_FUN( do_noemote );
DECLARE_DO_FUN( do_north );
DECLARE_DO_FUN( do_noshout );
DECLARE_DO_FUN( do_nosummon );
DECLARE_DO_FUN( do_note );
DECLARE_DO_FUN( do_notell );
DECLARE_DO_FUN( do_ofind );
DECLARE_DO_FUN( do_open );
DECLARE_DO_FUN( do_order );
DECLARE_DO_FUN( do_oset );
DECLARE_DO_FUN( do_ostat );
DECLARE_DO_FUN( do_outfit );
DECLARE_DO_FUN( do_owhere );
DECLARE_DO_FUN( do_promote );
DECLARE_DO_FUN( do_pardon );
DECLARE_DO_FUN( do_password );
DECLARE_DO_FUN( do_peace );
DECLARE_DO_FUN( do_pecho );
DECLARE_DO_FUN( do_penalty );
DECLARE_DO_FUN( do_pick );
DECLARE_DO_FUN( do_play );
DECLARE_DO_FUN( do_pmote );
DECLARE_DO_FUN( do_pose );
DECLARE_DO_FUN( do_pour );
DECLARE_DO_FUN( do_practice );
DECLARE_DO_FUN( do_prefi );
DECLARE_DO_FUN( do_prefix );
DECLARE_DO_FUN( do_prompt );
DECLARE_DO_FUN( do_protect );
DECLARE_DO_FUN( do_purge );
DECLARE_DO_FUN( do_put );
DECLARE_DO_FUN( do_quaff );
DECLARE_DO_FUN( do_quest );
DECLARE_DO_FUN( do_questalk );
DECLARE_DO_FUN( do_quit );
DECLARE_DO_FUN( do_read );
DECLARE_DO_FUN( do_reboot );
DECLARE_DO_FUN( do_recall );
DECLARE_DO_FUN( do_recho );
DECLARE_DO_FUN( do_recite );
DECLARE_DO_FUN( do_remove );
DECLARE_DO_FUN( do_rename );
DECLARE_DO_FUN( do_rent );
DECLARE_DO_FUN( do_replay );
DECLARE_DO_FUN( do_reply );
DECLARE_DO_FUN( do_report );
DECLARE_DO_FUN( do_rescue );
DECLARE_DO_FUN( do_rest );
DECLARE_DO_FUN( do_restore );
DECLARE_DO_FUN( do_return );
DECLARE_DO_FUN( do_rstat );
DECLARE_DO_FUN( do_rules );
DECLARE_DO_FUN( do_sacrifice );
DECLARE_DO_FUN( do_spec_comm );
DECLARE_DO_FUN( do_spellbane );
DECLARE_DO_FUN( do_shapeshift );
DECLARE_DO_FUN( do_sound );
DECLARE_DO_FUN( do_save );
DECLARE_DO_FUN( do_say );
DECLARE_DO_FUN( do_scan );
DECLARE_DO_FUN( do_score );
DECLARE_DO_FUN( do_scroll );
DECLARE_DO_FUN( do_sell );
DECLARE_DO_FUN( do_set );
DECLARE_DO_FUN( do_shout );
DECLARE_DO_FUN( do_show );
DECLARE_DO_FUN( do_path );
DECLARE_DO_FUN( do_shutdown );
DECLARE_DO_FUN( do_sit );
DECLARE_DO_FUN( do_songs );
DECLARE_DO_FUN( do_skills );
DECLARE_DO_FUN( do_sla );
DECLARE_DO_FUN( do_slay );
DECLARE_DO_FUN( do_sleep );
DECLARE_DO_FUN( do_slookup );
DECLARE_DO_FUN( do_smote );
DECLARE_DO_FUN( do_sneak );
DECLARE_DO_FUN( do_snoop );
DECLARE_DO_FUN( do_socials );
DECLARE_DO_FUN( do_south );
DECLARE_DO_FUN( do_spells );
DECLARE_DO_FUN( do_split );
DECLARE_DO_FUN( do_sset );
DECLARE_DO_FUN( do_stand );
DECLARE_DO_FUN( do_stat );
DECLARE_DO_FUN( do_steal );
DECLARE_DO_FUN( do_story );
DECLARE_DO_FUN( do_string );
DECLARE_DO_FUN( do_surrender );
DECLARE_DO_FUN( do_switch );
DECLARE_DO_FUN( do_syslog );
DECLARE_DO_FUN( do_tell );
DECLARE_DO_FUN( do_time );
DECLARE_DO_FUN( do_title );
DECLARE_DO_FUN( do_immtitle );
DECLARE_DO_FUN( do_toggle );
DECLARE_DO_FUN( do_train );
DECLARE_DO_FUN( do_transfer );
DECLARE_DO_FUN( do_trip );
DECLARE_DO_FUN( do_trust );
DECLARE_DO_FUN( do_typo );
DECLARE_DO_FUN( do_unban );
DECLARE_DO_FUN( do_unalias );
DECLARE_DO_FUN( do_unlock );
DECLARE_DO_FUN( do_unread );
DECLARE_DO_FUN( do_up );
DECLARE_DO_FUN( do_users );
DECLARE_DO_FUN( do_value );
DECLARE_DO_FUN( do_vape );
DECLARE_DO_FUN( do_visible );
DECLARE_DO_FUN( do_violate );
DECLARE_DO_FUN( do_vnum );
DECLARE_DO_FUN( do_wake );
DECLARE_DO_FUN( do_watch );
DECLARE_DO_FUN( do_wear );
DECLARE_DO_FUN( do_weather );
DECLARE_DO_FUN( do_west );
DECLARE_DO_FUN( do_where );
DECLARE_DO_FUN( do_who );
DECLARE_DO_FUN( do_whois );
DECLARE_DO_FUN( do_wimpy );
DECLARE_DO_FUN( do_wizhelp );
DECLARE_DO_FUN( do_wizlock );
DECLARE_DO_FUN( do_wizlist );
DECLARE_DO_FUN( do_worth );
DECLARE_DO_FUN( do_zallow );
DECLARE_DO_FUN( do_zap );
DECLARE_DO_FUN( do_zecho );
DECLARE_DO_FUN( do_olc );
DECLARE_DO_FUN( do_olclist );
DECLARE_DO_FUN( do_asave );
DECLARE_DO_FUN( do_alist );
DECLARE_DO_FUN( do_areas );
DECLARE_DO_FUN( do_resets );
DECLARE_DO_FUN( do_redit );
DECLARE_DO_FUN( do_aedit );
DECLARE_DO_FUN( do_medit );
DECLARE_DO_FUN( do_oedit );
DECLARE_DO_FUN( do_mpedit );
DECLARE_DO_FUN( do_hedit );
DECLARE_DO_FUN( do_gedit );
DECLARE_DO_FUN( do_sedit );
DECLARE_DO_FUN( do_pedit );
DECLARE_DO_FUN( save_guilds );
// Pueblo
DECLARE_DO_FUN( do_pstop );
DECLARE_DO_FUN( do_pmusic );
DECLARE_DO_FUN( do_volume );
DECLARE_DO_FUN( do_display );
DECLARE_DO_FUN( do_mapper );
#endif