1stMud4.5.3/
1stMud4.5.3/backup/
1stMud4.5.3/bin/
1stMud4.5.3/bin/extras/
1stMud4.5.3/data/i3/
1stMud4.5.3/doc/1stMud/
1stMud4.5.3/doc/Diku/
1stMud4.5.3/doc/MPDocs/
1stMud4.5.3/doc/Rom/
1stMud4.5.3/notes/
/**************************************************************************
*  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
*  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
*                                                                         *
*  Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael         *
*  Chastain, Michael Quan, and Mitchell Tse.                              *
*                                                                         *
*  In order to use any part of this Merc Diku Mud, you must comply with   *
*  both the original Diku license in 'license.doc' as well the Merc       *
*  license in 'license.txt'.  In particular, you may not remove either of *
*  these copyright notices.                                               *
*                                                                         *
*  Much time and thought has gone into this software and you are          *
*  benefiting.  We hope that you share your changes too.  What goes       *
*  around, comes around.                                                  *
***************************************************************************
*       ROM 2.4 is copyright 1993-1998 Russ Taylor                        *
*       ROM has been brought to you by the ROM consortium                 *
*           Russ Taylor (rtaylor@hypercube.org)                           *
*           Gabrielle Taylor (gtaylor@hypercube.org)                      *
*           Brian Moore (zump@rom.org)                                    *
*       By using this code, you have agreed to follow the terms of the    *
*       ROM license, in the file Rom24/doc/rom.license                    *
***************************************************************************
* The Dawn of Time v1.69q (c)1997-2002 Michael Garratt                    *
* >> A number of people have contributed to the Dawn codebase, with the   *
*    majority of code written by Michael Garratt - www.dawnoftime.org     *
* >> To use this source code, you must fully comply with the dawn license *
*    in licenses.txt... In particular, you may not remove this copyright  *
*    notice.                                                              *
***************************************************************************
*          1stMud ROM Derivative (c) 2001-2004 by Markanth                *
*            http://www.firstmud.com/  <markanth@firstmud.com>            *
*         By using this code you have agreed to follow the term of        *
*             the 1stMud license in ../doc/1stMud/LICENSE                 *
***************************************************************************/

#include "merc.h"
#include "interp.h"
#include "recycle.h"
#include "data_table.h"
#include "olc.h"

void init_name_profiles(void)
{
	const char *word2;
	char buf[MSL];
	int i = 0, count;
	NameProfile *nl;

	top_name_profile = 0;
	if (!name_profile_first)
	{
		name_profile_first = new_name_profile();
		name_profile_first->title = str_dup("mixed fantasy names");
		name_profile_first->part[0] =
			str_dup("A Ab Ac Ad Af Agr Ast As Al Adw Adr "
					"Ar B Br C C C Cr Ch Cad D Dr Dw Ed Eth Et Er El Eow F Fr G Gr Gw Gw "
					"Gal Gl H Ha Ib Jer K Ka Ked L Loth Lar Leg M Mir N Nyd Ol Oc On P "
					"Pr R Rh S Sev T Tr Th Th V Y Yb Z W W Wic");
		name_profile_first->part[1] =
			str_dup("a ae ae au ao are ale ali ay ardo e "
					"ei ea ea eri era ela eli enda erra i ia ie ire ira ila ili ira igo "
					"o oa oi oe ore u y");
		name_profile_first->part[2] =
			str_dup("_ _ _ _ _ _ a and b bwyn baen bard "
					"c ctred cred ch can d dan don der dric dfrid dus f g gord gan l li "
					"lgrin lin lith lath loth ld ldric ldan m mas mos mar mond n nydd "
					"nidd nnon nwan nyth nad nn nnor nd p r ron rd s sh seth sean t th "
					"th tha tlan trem tram v vudd w wan win win wyn wyn wyr wyr wyth");
		name_profile_first->next = NULL;
	};

	for (nl = name_profile_first; nl != NULL; nl = nl->next)
	{
		top_name_profile++;
		for (i = 0; i < MAX_PARTS; i++)
		{
			count = 0;
			word2 = nl->part[i];
			while (true)
			{
				word2 = one_argument(word2, buf);
				if (NullStr(word2))
				{
					break;
				}
				count++;
			}
			nl->part_count[i] = count;
		}
	}
}

DataTable name_profile_data_table[] = {
	DTE(STRING, name_profile, title, NULL, NULL, str, NULL),
	DTE(STRING_ARRAY, name_profile, part, MAX_PARTS, NULL, sarray, NULL),
	DTE_END
};

TableSave_Fun(rw_name_profile_data)
{
	rw_list(type, NAMEGEN_FILE, NameProfile, name_profile);
	if (type == act_read)
		init_name_profiles();
}

NameProfile *profile_lookup(int which)
{
	NameProfile *nl;
	int i = 0;

	for (nl = name_profile_first; nl; nl = nl->next)
	{
		if (++i >= which)
			break;
	}
	return nl;
}

char *genname(NameProfile * profile)
{
	static int i;
	static char result[5][100];
	const char *word;
	char buf[MIL];
	int wordnum;
	int count, j;

	++i, i %= 5;
	result[i][0] = NUL;

	for (j = 0; j < MAX_PARTS; j++)
	{
		word = profile->part[j];
		wordnum = number_range(0, profile->part_count[j]);
		count = 0;
		while (true)
		{
			word = one_argument(word, buf);
			if (NullStr(buf))
			{
				bugf
					("char * genname(%s) - no word found!!! j=%d, wn=%d, count=%d.",
					 profile->title, j, wordnum, count);
				break;
			}
			if (count == wordnum)
			{
				break;
			}
			count++;
		}
		if (!NullStr(buf) && buf[0] != '_')
		{
			strcat(result[i], buf);
		}
	}
	return result[i];
}

Do_Fun(do_genname)
{
	int count, i, profile_num;
	NameProfile *nl;
	char arg[MIL];
	Column Cd;

	if (!name_profile_first)
	{
		chprintln(ch, "Random name generation is currently unavailable.");
		return;
	}

	if (NullStr(argument) || !is_number(argument))
	{
		chprintlnf(ch, "{R%s NAME GENERATOR{x", strupper(mud_info.name));
		chprintlnf(ch, "Syntax: %s <1-%d> <amount>", n_fun, top_name_profile);
		chprintln(ch,
				  "Notes: <profile> relates to the name profile you want to use.");

		for (count = 0, nl = name_profile_first; nl; nl = nl->next)
		{
			chprintlnf(ch, "%2d> %s", ++count, nl->title);
		}
		return;
	}

	argument = one_argument(argument, arg);

	profile_num = atoi(arg);

	if (!NullStr(argument))
		count = atoi(argument);
	else
		count = 60;

	if (profile_num < 1 || profile_num > top_name_profile
		|| (nl = profile_lookup(profile_num)) == NULL)
	{
		chprintln(ch, "Invalid profile number.");
		do_genname(n_fun, ch, "");
		return;
	}

	if (count < 1 || count > 100)
	{
		chprintln(ch,
				  "Please choose a reasonable amount of names to display.");
		return;
	}

	chprintlnf(ch, "{R%s NAME GENERATOR - %s{x", strupper(mud_info.name),
			   strupper(nl->title));

	set_cols(&Cd, ch, 4, COLS_CHAR, ch);

	for (i = 0; i < count; i++)
	{
		print_cols(&Cd, capitalize(genname(nl)));
	}
	cols_nl(&Cd);
}

const char *get_random_name(void)
{
	NameProfile *nl;

	do
	{
		nl = profile_lookup(number_range(1, top_name_profile));
	}
	while (nl == NULL);

	return capitalize(genname(nl));
}