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
------------------------------------------------------------------------------
sym.c
*/


/*
   Symbol table management utils.
*/

#include "sym.h"
#include "parse.h"
#include "yacc.tab.h"
#include <string.h>

void *malloc( size_t );

int sym_count;
sym * sym_tab[ 256 ];

/* Routines for managing symbols */

void init_sym_tab()
{
	memset( sym_tab, sizeof( sym ) * 256, 0 );
}

sym * sym_lookup( const char * name )
{
	sym ** sym_pptr;
	for( sym_pptr = &sym_tab[0]; *sym_pptr; sym_pptr++ )
		if( (*sym_pptr)->name && !strcmp( (*sym_pptr)->name, name ) )
			return *sym_pptr;

	return 0;
}


sym * sym_add_const_str( char * str )
{
	sym ** sym_pptr;
	for( sym_pptr = &sym_tab[0]; *sym_pptr; sym_pptr++ )
		;

	*sym_pptr = malloc( sizeof( sym ) );
	(*sym_pptr)->name = 0;
	(*sym_pptr)->type = TYPE_STRING_LITERAL;
	(*sym_pptr)->sval = str_dup( str );
	return *sym_pptr;
}


sym * sym_add_id( char * name )
{
	sym ** sym_pptr;
	for( sym_pptr = &sym_tab[0]; *sym_pptr; sym_pptr++ )
		;

	*sym_pptr = malloc( sizeof( sym ) );
	(*sym_pptr)->name = str_dup( name );
	(*sym_pptr)->sval = "uninitialized";
	return *sym_pptr;
}


void dump_sym_tab()
{
	sym ** sym_ptr;
	for( sym_ptr = &sym_tab[0]; *sym_ptr; sym_ptr++ )
		if( !(*sym_ptr)->name )
			printf( "string literal: \"%s\"\n", (*sym_ptr)->sval );
		else
		{
			if( (*sym_ptr)->type == TYPE_INT )
				printf( "id(%s): \"%d\"\n", (*sym_ptr)->name, (*sym_ptr)->lval );
			else
				printf( "id(%s): \"%s\"\n", (*sym_ptr)->name, (*sym_ptr)->sval );
		}
}


char * str_dup( const char * old )
{
	char * copy = malloc( strlen( old ) + 1 );
	strcpy( copy, old );
}