/*
* This file handles command interpreting
*/
#include <sys/types.h>
#include <stdio.h>
/* include main header file */
#include "mud.h"
#include "scripting.h"
void handle_cmd_input(D_SOCKET *dsock, char *arg)
{
D_MOBILE *dMob;
char command[MAX_BUFFER];
bool found_cmd = FALSE;
int i;
if ((dMob = dsock->player) == NULL)
return;
if (dMob->editing != NULL)
{
handle_file_editing(dMob, arg);
return;
}
arg = one_arg(arg, command);
if (dMob->shell == TRUE)
{
for (i = 0; tabCmd[i].cmd_name[0] != '\0' && !found_cmd; i++)
{
if (tabCmd[i].level > dMob->level) continue;
if (is_prefix(command, tabCmd[i].cmd_name))
{
found_cmd = TRUE;
(*tabCmd[i].cmd_funct)(dMob, arg);
}
}
}
else
{
input_to_lua(dMob, command, arg);
return;
}
if (!found_cmd)
text_to_mobile(dMob, "No such command.\n\r");
}
/*
* The command table, very simple, but easy to extend.
*/
const struct typCmd tabCmd [] =
{
/* command function Req. Level */
/* --------------------------------------------- */
{ "commands", cmd_commands, LEVEL_GUEST },
#ifndef NOMCCP
{ "compress", cmd_compress, LEVEL_GUEST },
#endif
{ "copyover", cmd_copyover, LEVEL_GOD },
{ "help", cmd_help, LEVEL_GUEST },
{ "linkdead", cmd_linkdead, LEVEL_ADMIN },
{ "say", cmd_say, LEVEL_GUEST },
{ "save", cmd_save, LEVEL_GUEST },
{ "shutdown", cmd_shutdown, LEVEL_GOD },
{ "quit", cmd_quit, LEVEL_GUEST },
{ "who", cmd_who, LEVEL_GUEST },
{ "ls", cmd_ls, LEVEL_GOD },
{ "touch", cmd_touch, LEVEL_GOD },
{ "cd", cmd_cd, LEVEL_GOD },
{ "view", cmd_view, LEVEL_GOD },
{ "rm", cmd_rm, LEVEL_GOD },
{ "edit", cmd_edit, LEVEL_GOD },
{ "exit", cmd_return, LEVEL_GUEST },
{ "mkdir", cmd_mkdir, LEVEL_GOD },
{ "rmdir", cmd_rmdir, LEVEL_GOD },
{ "reload", cmd_reload, LEVEL_GOD },
{ "promote", cmd_promote, LEVEL_ADMIN },
{ "demote", cmd_demote, LEVEL_ADMIN },
{ "chmod", cmd_chmod, LEVEL_GOD },
{ "chown", cmd_chown, LEVEL_ADMIN },
{ "mkcore", cmd_mkcore, LEVEL_ADMIN },
/* end of table */
{ "", 0 }
};