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