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                    *
***************************************************************************
*          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 "tables.h"
#include "olc.h"
#include "interp.h"

FlagTable *flag_lookup(const char *name, FlagTable * f)
{
	if (NullStr(name))
		return NULL;

	while (f->name != NULL)
	{
		if (!str_prefix(name, f->name))
			return f;
		f++;
	}
	return NULL;
}

ClanData *clan_lookup(const char *name)
{
	ClanData *clan;

	for (clan = clan_first; clan; clan = clan->next)
	{
		if (tolower(name[0]) == tolower(clan->name[0])
			&& !str_prefix(name, clan->name))
			return clan;
	}

	return NULL;
}

RaceData *race_lookup(const char *name)
{
	RaceData *race;

	for (race = race_first; race != NULL; race = race->next)
	{
		if (tolower(name[0]) == tolower(race->name[0])
			&& !str_prefix(name, race->name))
			return race;
	}

	return NULL;
}

Lookup_Fun(liq_lookup)
{
	int liq;

	for (liq = 0; liq_table[liq].liq_name != NULL; liq++)
	{
		if (tolower(name[0]) == tolower(liq_table[liq].liq_name[0])
			&& !str_prefix(name, liq_table[liq].liq_name))
			return liq;
	}

	return -1;
}

Lookup_Fun(stance_lookup)
{
	int st;

	for (st = 0; st < MAX_STANCE; st++)
	{
		if (!str_prefix(name, stance_table[st].name))
			return st;
	}
	return -1;
}

HelpData *help_lookup(const char *keyword)
{
	HelpData *pHelp;
	char temp[MIL], argall[MIL];

	argall[0] = '\0';

	while (!NullStr(keyword))
	{
		keyword = one_argument(keyword, temp);
		if (!NullStr(argall))
			strcat(argall, " ");
		strcat(argall, temp);
	}

	for (pHelp = help_first; pHelp != NULL; pHelp = pHelp->next)
		if (is_name(argall, pHelp->keyword))
			return pHelp;

	return NULL;
}

CmdData *cmd_lookup(const char *name)
{
	int hash;
	CmdData *pCmd;

	if (NullStr(name))
		return NULL;

	hash = tolower(name[0]) % MAX_CMD_HASH;

	for (pCmd = command_hash[hash]; pCmd; pCmd = pCmd->next_hash)
		if (!str_prefix(name, pCmd->name))
			return pCmd;

	return NULL;
}

DeityData *deity_lookup(const char *arg)
{
	DeityData *i;

	for (i = deity_first; i; i = i->next)
		if (!str_prefix(arg, i->name))
			return i;

	return NULL;
}

Lookup_Fun(tzone_lookup)
{
	int i;

	for (i = 0; i < MAX_TZONE; i++)
	{
		if (!str_cmp(name, tzone_table[i].name))
			return i;
	}

	for (i = 0; i < MAX_TZONE; i++)
	{
		if (is_name(name, tzone_table[i].zone))
			return i;
	}

	for (i = 0; i < MAX_TZONE; i++)
	{
		if (atoi(name) - 1 == i)
			return i;
	}

	return -1;
}

AreaData *area_lookup(const char *arg)
{
	AreaData *pArea;

	for (pArea = area_first; pArea; pArea = pArea->next)
	{
		if (is_number(arg) && atoi(arg) == pArea->vnum)
			return pArea;

		else if (tolower(arg[0]) == tolower(pArea->name[0])
				 && !str_prefix(arg, pArea->name))
			return pArea;

		else if (tolower(arg[0]) == tolower(pArea->file_name[0])
				 && !str_prefix(arg, pArea->file_name))
			return pArea;

	}
	return NULL;
}

RoomIndex *area_begin(AreaData * pArea)
{
	RoomIndex *pRoom;
	vnum_t vnum;

	for (vnum = pArea->min_vnum; vnum <= pArea->max_vnum; vnum++)
		if (vnum > 0 && (pRoom = get_room_index(vnum)) != NULL)
			return pRoom;

	return NULL;
}

Lookup_Fun(channel_lookup)
{
	int i;

	for (i = 0; i < top_channel; i++)
	{
		if (!str_prefix(name, channel_table[i].name))
			return i;
	}
	return -1;
}

SocialData *social_lookup(const char *name)
{
	SocialData *i;

	for (i = social_first; i; i = i->next)
		if (!str_cmp(name, i->name))
			return i;

	return NULL;
}

Lookup_Fun(get_direction)
{
	if (!str_cmp(name, "n") || !str_cmp(name, "north"))
		return DIR_NORTH;
	if (!str_cmp(name, "e") || !str_cmp(name, "east"))
		return DIR_EAST;
	if (!str_cmp(name, "s") || !str_cmp(name, "south"))
		return DIR_SOUTH;
	if (!str_cmp(name, "w") || !str_cmp(name, "west"))
		return DIR_WEST;
	if (!str_cmp(name, "u") || !str_cmp(name, "up"))
		return DIR_UP;
	if (!str_cmp(name, "d") || !str_cmp(name, "down"))
		return DIR_DOWN;

	return -1;
}