asgard/
asgard/.settings/
asgard/area/
asgard/data/clans/
asgard/data/clans/history/
asgard/data/rosters/
asgard/src/notice/
#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"
#include "newclan.h"

bool char_exists( bool backup, char *argument );
bool check_parse_name( 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 */
	update_roster(ch, FALSE);
	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))
	{
		printf_debug("Preturn, null char or desc");
		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;
	}

	strcpy(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;
}