mud++0.35/etc/
mud++0.35/etc/guilds/
mud++0.35/help/propert/
mud++0.35/mudC/
mud++0.35/player/
mud++0.35/src/interface/
mud++0.35/src/os/cygwin32/
mud++0.35/src/os/win32/
mud++0.35/src/os/win32/bcppbuilder/
mud++0.35/src/osaddon/
mud++0.35/src/util/
/*
....[@@@..[@@@..............[@.................. MUD++ is a written from
....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and
....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++.
....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing
....[@......[@..[@@@@@..[@@@@@.................. development project.  All 
................................................ contributions are welcome. 
....Copyright(C).1995.Melvin.Smith.............. Enjoy. 
------------------------------------------------------------------------------
Melvin Smith (aka Fusion)         msmith@hom.net 
MUD++ development mailing list    mudpp@van.ml.org
------------------------------------------------------------------------------
bit.cc
*/
#include "config.h"
#include "bit.h"
#include "string.h"

const char * unknown_bit_name = "(unknown)";

const char * lookupBitName( const bitType bit_list[], int val )
{
	for( int i = 1; bit_list[i].name; i++ )
		if( val == bit_list[i].val )
			return bit_list[i].name;

	return unknown_bit_name;
}


int lookupBit( const bitType bit_list[], const char * name )
{
	int len = strlen( name );

	for( int i = 1; bit_list[i].name; i++ )
	{
		if( *name != *bit_list[i].name )
			continue;

		if( !strncmp( name, bit_list[i].name, len ) )
			return bit_list[i].val;
	}

	return 0;
}


const char * listBits( const bitType bit_list[], unsigned long bits[] )
{
	static char buf[ 1024 ];
	char * ptr = buf;
	*ptr = '\0';
	for( int i = 1; bit_list[i].name; i++ )
	{
		if( IS_SET( bits, bit_list[i].val ) )
		{
			strcpy( ptr, bit_list[i].name );
			while( *ptr )
				ptr++;
			*ptr = ' ';
			*(++ptr) = '\0';
		}
	}

	if( ptr > buf )
		*(--ptr) = '\0';
	return buf;
}

// you have to pass clean bitfield here
void interpretBitList( const bitType bit_list[], unsigned long * bits[], 
						const String & arg )
{
	String arg1;
	int i;
	arg.startArgs();

	while ( (bool) (arg1 = arg.getArg()) )
	{
		i = lookupBit( bit_list, arg1.chars() );
		SET_BIT( *bits, i );
	}
}