alanthia/area/
alanthia/gods/
alanthia/player/
/***************************************************************************
 *  File: olc_mpcode.c                                                     *
 *                                                                         *
 *  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.                                                  *
 *                                                                         *
 * The following code is based on ILAB OLC by Jason Dinkel                 *
 * Mobprogram code by Lordrom for Nevermore Mud                            *
 *                                                                         *
 ***************************************************************************/
/***************************************************************************
 *                                                                         *
 *  ROM OLC for 2.4 was made to work by Beowolf and Nikki. We thank        *
 *  Airius and all the others from the ROM mailing list and the Merc       *
 *  mailing lists as well. Many hours have been put into this version      *
 *  We at The Shadow Realms MUD (tsr.org 8000) hope you enjoy this as      *
 *  much as we do.                                                         *
 *                                                                         *
 ***************************************************************************/

#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "olc.h"

#define MPEDIT( fun )           bool fun(CHAR_DATA *ch, char*argument)
#define EDIT_MPCODE(Ch, Code)   ( Code = (MPROG_CODE*)Ch->desc->pEdit )

DECLARE_OLC_FUN(mpedit_create);
DECLARE_OLC_FUN(mpedit_desc);
DECLARE_OLC_FUN(mpedit_show);

const struct olc_cmd_type mpedit_table[] = {
/*     { command           function    }, */

    {"commands", show_commands},
    {"create", mpedit_create},
    {"desc", mpedit_desc},
    {"show", mpedit_show},
    {"?", show_help},

    {"", 0}
};

void mpedit(CHAR_DATA * ch, char *argument)
{
    MPROG_CODE *pMcode;
    char arg[MAX_INPUT_LENGTH];
    char command[MAX_INPUT_LENGTH];
    int cmd;

    smash_tilde(argument);
    strcpy(arg, argument);
    argument = one_argument(argument, command);

    EDIT_MPCODE(ch, pMcode);
    if (ch->pcdata->security < 7)
		{
			send_to_char("MPEdit: Insufficient security to modify code \n\r ",ch);
			edit_done(ch);
			return;
		}

           if (command[0] == '\0') {
           mpedit_show(ch, argument); return;}
           if (!str_cmp(command, "done")) {
           save_mobprog(pMcode); edit_done(ch); return;}

           for (cmd = 0; mpedit_table[cmd].name[0] != '\0';
          cmd++) {
           if (!str_prefix(command, mpedit_table[cmd].name)) {
           (*mpedit_table[cmd].olc_fun) (ch, argument); return;}
           }

           interpret(ch, arg); return;}

           void do_mpedit(CHAR_DATA * ch, char *argument) {
           MPROG_CODE * pMcode;
           char command[MAX_INPUT_LENGTH];
           argument = one_argument(argument, command);
           if (is_number(command)) {
           if (!(pMcode = get_mprog_index(atoi(command)))) {
           send_to_char("MPEdit: That vnum does not exist.\n\r",
            ch); return;}
           ch->desc->pEdit = (void *) pMcode;
           ch->desc->editor = ED_MPCODE; return;}

           if (!str_cmp(command, "create")) {
           if (argument[0] == '\0') {
           send_to_char("Syntax: edit code create [vnum]\n\r",
            ch); return;}
           if (mpedit_create(ch, argument))
           ch->desc->editor = ED_MPCODE;}

           return;}

           MPEDIT(mpedit_create) {
           MPROG_CODE * pMcode;
           int value;
           value = atoi(argument);
           if (argument[0] == '\0' || value == 0) {
           send_to_char("Syntax: mpedit create [vnum]\n\r", ch);
           return FALSE;}

           if (get_mprog_index(value)) {
           send_to_char("MPEdit: Code vnum already exists.\n\r",
            ch); return FALSE;}

           pMcode = new_mpcode();
           pMcode->vnum = value;
           pMcode->next = mprog_list;
           mprog_list = pMcode;
           ch->desc->pEdit = (void *) pMcode;
           send_to_char("MobProgram Code Created.\n\r", ch);
           return TRUE;}

           MPEDIT(mpedit_show) {
           MPROG_CODE * pMcode;
           char buf[MAX_STRING_LENGTH];
           EDIT_MPCODE(ch, pMcode);
           sprintf(buf,
             "Vnum:       [%ld]\n\r"
             "Code:\n\r%s\n\r",
             pMcode->vnum, pMcode->code);
           send_to_char(buf, ch); return FALSE;}

           MPEDIT(mpedit_desc) {
           MPROG_CODE * pMcode;
           EDIT_MPCODE(ch, pMcode); if (argument[0] == '\0') {
           string_append(ch, &pMcode->code); return TRUE;}

           send_to_char(" Syntax: desc\n\r", ch); return FALSE;}