|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 2094 (0x82e)
Types: TextFile
Names: »symtab.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Adventure/src/adv/symtab.c«
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
#define SMEMSIZ 450
static struct symstr smem[SMEMSIZ] ;
static int psmem = SMEMSIZ ;
int define (nam,val)
char *nam ;
int val ;
{
register struct symstr *p ;
register int h ;
extern char *strsav () ;
/* assume the symbol does not exist */
if ( psmem <= 0 )
error ("Symbol Define","symbol table full on `%s'",nam) ;
p = &(smem[--psmem]) ;
p->s_nam = strsav (nam) ;
p->s_val = val ;
h = hash (nam) ;
p->s_nxt = symtab[h] ;
symtab[h] = p ;
return ;
}
int find (name)
char *name ;
{
register struct symstr *p ;
for ( p = symtab[hash(name)] ; p != NIL ; p = p->s_nxt )
{
if ( strncmp (name,p->s_nam,MATCH) == 0 )
{
return (p->s_val) ;
}
}
return (ERROR) ;
}
int hash (s)
register char *s ;
{
register int h, i ;
for ( i = h = 0 ; *s != EOS && i < MATCH ; i++ )
h += *s++ ;
return ( ( h % TABSIZ ) ) ;
}
#define CMEMSIZ 2600
static char cmem[CMEMSIZ] ;
static int pcmem = 0 ;
char *strsav (s)
char *s ;
{
register char *p ;
register int n ;
n = strlen(s) + 1 ;
if ( (pcmem+n) >= CMEMSIZ )
error ("Strsave","Out of symbol space on `%-10.10s'\n",s) ;
p = &(cmem[pcmem]) ;
pcmem += n ;
(void) strcpy (p,s) ;
return (p) ;
}
#ifdef PSTAB
int pstab ()
{
register int i, j ;
register struct symstr *p ;
for ( i = j = 0 ; i < TABSIZ ; i++ )
{
for ( p = symtab[i] ; p != NIL ; p = p->s_nxt )
{
printf (" %-6.6s %5d",p->s_nam,p->s_val) ;
if ( (++j)%4 == 0 )
printf ("\n") ;
}
}
printf ("\n\n") ;
printf ("Total number of symbols in symbol table is %d\n",j) ;
printf ("Total symbol structures still available is %d\n",psmem) ;
printf ("Total character storage space used is %d\n",pcmem) ;
return ;
}
#endif PSTAB