/*
....[@@@..[@@@..............[@.................. 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 );
}