/
mudtem/
mudtem/area/scripts/
mudtem/bin/
mudtem/log/
mudtem/player/
mudtem/slang/autoconf/
mudtem/slang/doc/
mudtem/slang/doc/OLD/help/
mudtem/slang/doc/internal/
mudtem/slang/doc/text/
mudtem/slang/doc/tm/tools/
mudtem/slang/examples/
mudtem/slang/modules/
mudtem/slang/slsh/
mudtem/slang/slsh/lib/
mudtem/slang/slsh/scripts/
mudtem/slang/src/mkfiles/
mudtem/slang/src/util/
mudtem/src/CVS/
mudtem/src/include/
mudtem/src/include/CVS/
mudtem/src/var/CVS/
/* The following code is based on ILAB OLC by Jason Dinkel */
/* Mobprogram code by Lordrom for Nevermore Mud */

#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"
#include "recycle.h"

#define MPEDIT( fun )           bool fun(CHAR_DATA *ch, char*argument)

extern MPROG_CODE xProg;

DECLARE_OLC_FUN( pedit_create );
DECLARE_OLC_FUN( pedit_show   );

const	struct	olc_comm_type	prog_olc_comm_table	[]	=
{
	{	"create",	NULL,			ed_olded,	pedit_create	},
	{	"desc",		&xProg.descripcion,	ed_line_string,	NULL		},
	{	"code",		&xProg.code,		ed_desc,	NULL		},
	{	"show",		NULL,			ed_olded,	pedit_show	},
	{ 	"commands",	NULL,			ed_olded,	show_commands	},
	{ 	"?",		NULL,			ed_olded,	show_help	},
	{ 	"version",	NULL,			ed_olded,	show_version	},
	{ 	NULL,		NULL,			NULL,		NULL		}
};

void pedit( CHAR_DATA *ch, char *argument)
{
    if (ch->pcdata->security < MIN_PEDIT_SECURITY)
    {
	send_to_char("MPEdit : Insuficiente seguridad para editar codigo.\n\r",ch);
	edit_done(ch);
	return;
    }

    if ( emptystring(argument) )
    {
        pedit_show(ch, argument);
        return;
    }

    if (!str_cmp(argument, "done") )
    {
        edit_done(ch);
        return;
    }

    if ( !procesar_comando_olc(ch, argument, prog_olc_comm_table) )
	interpret(ch, argument);

    return;
}

void do_pedit(CHAR_DATA *ch, char *argument)
{
    MPROG_CODE *pMcode;
    char command[MAX_INPUT_LENGTH];

    if ( IS_NPC(ch) )
	return;

    if ( ch->pcdata->security < MIN_PEDIT_SECURITY )
    {
    	send_to_char( "PEdit : Seguridad insuficiente para editar codigo.\n\r", ch );
    	return;
    }

    argument = one_argument( argument, command);

    if(is_number(command) )
    {
	AREA_DATA * pArea;

	if ( (pArea = get_vnum_area(atoi(command))) == NULL )
	{
		send_to_char( "PEdit : Vnum no asignado a ningun area.\n\r", ch);
		return;
	}
	if ( !IS_BUILDER(ch, pArea))
	{
		send_to_char( "PEdit : Seguridad insuficiente para editar area.\n\r", ch);
		return;
	}
	if (! (pMcode = get_mprog_index( atoi(command) ) ) )
	{
		send_to_char("PEdit : Ese vnum no existe.\n\r",ch);
		return;
	}
	ch->desc->pEdit		= (void *)pMcode;
	ch->desc->editor	= ED_PROG;
	return;
    }

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

	pedit_create(ch, argument);
	return;
    }

    send_to_char( "Sintaxis : pedit [vnum]\n\r", ch );
    send_to_char( "           pedit create [vnum]\n\r", ch );

    return;
}

MPEDIT (pedit_create)
{
    MPROG_CODE *pMcode;
    AREA_DATA *pArea;
    int value;

    value = atoi(argument);

    if (argument[0] == '\0' || value == 0)
    {
        send_to_char("Sintaxis: pedit create [vnum]\n\r",ch);
        return FALSE;
    }

    if (get_mprog_index(value) )
    {
        send_to_char("PEdit: Vnum ya existente.\n\r",ch);
        return FALSE;
    }

    if ( (pArea = get_vnum_area( value )) == NULL )
    {
    	send_to_char("PEdit: Vnum no asignado a ningun Area.\n\r", ch);
    	return FALSE;
    }

    if ( !IS_BUILDER(ch, pArea) )
    {
    	send_to_char( "PEdit: Vnum de un area que no puedes editar.\n\r", ch );
    	return FALSE;
    }

    if (ch->pcdata->security < MIN_PEDIT_SECURITY)
    {
        send_to_char("PEdit: Insuficiente seguridad para crear MobProgs.\n\r", ch);
        return FALSE;
    }

    pMcode		= new_mpcode();
    pMcode->vnum	= value;
    pMcode->next	= mprog_list;
    pMcode->changed	= TRUE;
    mprog_list		= pMcode;

    set_editor(ch->desc,ED_PROG,pMcode);

    send_to_char("Programa creado.\n\r",ch);

    return TRUE;
}

MPEDIT(pedit_show)
{
    MPROG_CODE *pMcode;
    char buf[MAX_STRING_LENGTH];


    EDIT_PROG(ch,pMcode);

    sprintf(buf,
           "Vnum:       [%d]\n\r"
           "Desc: %s\n\r"
           "Code:\n\r%s\n\r",
           pMcode->vnum, pMcode->descripcion, pMcode->code);
    send_to_char(buf, ch);

    return FALSE;
}

void do_mplist( CHAR_DATA *ch, char *argument )
{
    int count;
    bool fAll = FALSE;
    MPROG_CODE *mprg;
    char buf[MAX_STRING_LENGTH];
    BUFFER *buffer;
    buffer=new_buf();

    if (IS_IMMORTAL(ch) && !str_cmp(argument,"all"))
    	fAll = TRUE;

    for (count =1, mprg= mprog_list; mprg !=NULL; mprg = mprg->next)
    {
	if (fAll
	|| (mprg->vnum >= ch->in_room->area->min_vnum
	&&  mprg->vnum <= ch->in_room->area->max_vnum))
	{
		sprintf(buf, "[%3d] %5d %26.26s ", count, mprg->vnum, mprg->descripcion );
		add_buf(buffer, buf);
		if ( count % 2 == 0 )
			add_buf( buffer, "\n\r" );
		count++;
	}
    }

    if ( count % 2 == 0 )
    	add_buf( buffer, "\n\r" );

    page_to_char(buf_string(buffer), ch);
    free_buf(buffer);

    return;
}