mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
Make all file names lowercase
This fixes a zip/platform artifact. Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
This commit is contained in:
125
src/link/symbol.c
Normal file
125
src/link/symbol.c
Normal file
@@ -0,0 +1,125 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "main.h"
|
||||
#include "patch.h"
|
||||
#include "types.h"
|
||||
|
||||
#define HASHSIZE 73
|
||||
|
||||
struct ISymbol
|
||||
{
|
||||
char *pzName;
|
||||
SLONG nValue;
|
||||
SLONG nBank; // -1=const
|
||||
struct ISymbol *pNext;
|
||||
};
|
||||
|
||||
struct ISymbol *tHash[HASHSIZE];
|
||||
|
||||
SLONG calchash( char *s )
|
||||
{
|
||||
SLONG r=0;
|
||||
while( *s )
|
||||
r+=*s++;
|
||||
|
||||
return( r%HASHSIZE );
|
||||
}
|
||||
|
||||
void sym_Init( void )
|
||||
{
|
||||
SLONG i;
|
||||
for( i=0; i<HASHSIZE; i+=1 )
|
||||
tHash[i]=NULL;
|
||||
}
|
||||
|
||||
SLONG sym_GetValue( char *tzName )
|
||||
{
|
||||
if( strcmp(tzName,"@")==0 )
|
||||
{
|
||||
return( nPC );
|
||||
}
|
||||
else
|
||||
{
|
||||
struct ISymbol **ppSym;
|
||||
|
||||
ppSym=&(tHash[calchash(tzName)]);
|
||||
while( *ppSym )
|
||||
{
|
||||
if( strcmp(tzName,(*ppSym)->pzName) )
|
||||
{
|
||||
ppSym=&((*ppSym)->pNext);
|
||||
}
|
||||
else
|
||||
{
|
||||
return( (*ppSym)->nValue );
|
||||
}
|
||||
}
|
||||
|
||||
sprintf( temptext, "Unknown symbol '%s'", tzName );
|
||||
fatalerror( temptext );
|
||||
return( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
SLONG sym_GetBank( char *tzName )
|
||||
{
|
||||
struct ISymbol **ppSym;
|
||||
|
||||
ppSym=&(tHash[calchash(tzName)]);
|
||||
while( *ppSym )
|
||||
{
|
||||
if( strcmp(tzName,(*ppSym)->pzName) )
|
||||
{
|
||||
ppSym=&((*ppSym)->pNext);
|
||||
}
|
||||
else
|
||||
{
|
||||
return( (*ppSym)->nBank );
|
||||
}
|
||||
}
|
||||
|
||||
sprintf( temptext, "Unknown symbol '%s'" );
|
||||
fatalerror( temptext );
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
void sym_CreateSymbol( char *tzName, SLONG nValue, SBYTE nBank )
|
||||
{
|
||||
if( strcmp(tzName,"@")==0 )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
struct ISymbol **ppSym;
|
||||
|
||||
ppSym=&(tHash[calchash(tzName)]);
|
||||
|
||||
while( *ppSym )
|
||||
{
|
||||
if( strcmp(tzName,(*ppSym)->pzName) )
|
||||
{
|
||||
ppSym=&((*ppSym)->pNext);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( nBank==-1 )
|
||||
return;
|
||||
|
||||
sprintf( temptext, "Symbol '%s' defined more than once\n", tzName );
|
||||
fatalerror( temptext );
|
||||
}
|
||||
}
|
||||
|
||||
if( *ppSym=(struct ISymbol *)malloc(sizeof(struct ISymbol)) )
|
||||
{
|
||||
if( (*ppSym)->pzName=(char *)malloc(strlen(tzName)+1) )
|
||||
{
|
||||
strcpy( (*ppSym)->pzName, tzName );
|
||||
(*ppSym)->nValue=nValue;
|
||||
(*ppSym)->nBank=nBank;
|
||||
(*ppSym)->pNext=NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user