distorted/
distorted/area/
distorted/data/CLN/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"

bool char_exists args(( bool backup, char *argument ));
bool    check_parse_name        args( ( char *name ) );

void do_pload( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH],name[MAX_STRING_LENGTH/4];
    DESCRIPTOR_DATA *d;
    ROOM_INDEX_DATA *in_room;
    bool fOld;

    if ( IS_NPC(ch) || ch->desc == NULL || ch->in_room == NULL ) return;

    if ( argument[0] == '\0' )
    {
   	send_to_char( "Syntax: pload <name>.\n\r", ch );
	   return;
    }

    if (!check_parse_name( argument ))
    {
	   send_to_char( "Thats an illegal name.\n\r", ch );
	   return;
    }

    if(get_char_world(ch,argument) != NULL)
    {
     send_to_char("You cannot load a person who is online.\n\r",ch);
     return;
    }

    if ( !char_exists(TRUE,argument) )
    {
	   send_to_char( "That player doesn't exist.\n\r", ch );
	   return;
    }

    argument[0] = UPPER(argument[0]);
    save_char_obj(ch);
    sprintf(buf,"You transform into %s.\n\r",argument);
    send_to_char(buf,ch);
    sprintf(buf,"$n transforms into %s.",argument);
    act(buf,ch,NULL,NULL,TO_ROOM);

    sprintf(name,"%s",ch->name);
   // send_to_char(name,ch);

    d = ch->desc; /* Assign Current desc to D */
    in_room = ch->in_room; /* in_room where you are originaly */
    extract_char(ch, TRUE); /* Remove your character */
    d->character = NULL;  /* Make your character point to nothing */

    fOld = load_char_obj( d, argument );  /* Load the new character into D */

    ch = d->character;  /* Character = New Character */
    ch->next = char_list;  /* Add ch to stack */
    char_list = ch;        /* Mark person as last in stack */
    char_to_room(ch,in_room); /* Put person in room where old char was */
    ch->pload = str_dup(name);
    sprintf(buf,"Your Pload is %s.\n\r",ch->pload);
    send_to_char(buf,ch);
    return;
}

void do_preturn( CHAR_DATA *ch, char *argument )
{
    char arg[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    DESCRIPTOR_DATA *d;
    bool fOld;

    if(!(ch != NULL && ch->desc != NULL))
    {
     bug("Preturn, null char or desc",0);
     return;
    }

    if (IS_NPC(ch)) {send_to_char("Huh?\n\r",ch);return;}

    if (ch->pload == NULL) {send_to_char("Huh?\n\r",ch);return;}

    sprintf(arg,ch->pload);

    if (strlen(arg) < 3 || strlen(arg) > 10)
	{send_to_char("Huh?(STRLEN)\n\r",ch);return;}

//   if (!str_cmp(ch->pload,arg)) {send_to_char("Huh?\n\r",ch);return;}

    sprintf(buf,"You transform back into %s.\n\r",capitalize(ch->pload));
    send_to_char(buf,ch);
    sprintf(buf,"$n transforms back into %s.",capitalize(ch->pload));
    act(buf,ch,NULL,NULL,TO_ROOM);

    d = ch->desc;

    if (ch != NULL && ch->desc != NULL)
	  	 extract_char(ch,TRUE);
    else if (ch != NULL)
		 extract_char(ch,TRUE);

    if (ch->desc)
    	ch->desc->character = NULL;
/*
    ch->next = char_list;
    char_list = ch;
*/
    fOld = load_char_obj(d, capitalize(arg));

    ch = d->character;
    ch->next = char_list;
    char_list = ch;

    if (ch->in_room != NULL)
    	char_to_room(ch,ch->in_room);
    else
    	char_to_room(ch,get_room_index(3001));
    free_string(ch->pload);
    ch->pload = str_dup("");
    return;
}

bool char_exists( bool backup, char *argument )
{
    FILE *fp;
    char buf [MAX_STRING_LENGTH];
    bool found = FALSE;

    sprintf( buf, "%s%s%s%s", PLAYER_DIR, initial( argument ),
           "/", capitalize( argument ) );

    if ( ( fp = fopen( buf, "r" ) ) != NULL )
    {
	found = TRUE;
	fclose( fp );
    }
    return found;
}