X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=symbol.h;h=485ed8864bc9f7e97b7079f5e99c643b1552a0c6;hp=d94dd35ec65ea9a5dc075e3e33a34e66aae591d0;hb=d0c28c349ddfb8393568037f68bddbe8979ce0df;hpb=75cce0d9eb190f6094f66ae283b5981af25e5a57 diff --git a/symbol.h b/symbol.h index d94dd35..485ed88 100644 --- a/symbol.h +++ b/symbol.h @@ -3,29 +3,52 @@ // SYMBOL.H - Symbol Handling // Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 -// Source Utilised with the Kind Permission of Landon Dyer +// Source utilised with the kind permission of Landon Dyer // #ifndef __SYMBOL_H__ #define __SYMBOL_H__ -#include "rmac.h" +#include -// Macros -#define NBUCKETS 256 // Number of hash buckets (power of 2) +// Line lists +struct LineList +{ + struct LineList * next; + char * line; +}; -// Globals, externals etc +// Symbols +#define SYM struct _sym +SYM +{ + SYM * snext; // * -> Next symbol on hash-chain + SYM * sorder; // * -> Next sym in order of reference + SYM * sdecl; // * -> Next sym in order of declaration + uint8_t stype; // Symbol type + uint16_t sattr; // Attribute bits + uint32_t sattre; // Extended attribute bits + uint16_t senv; // Enviroment number + uint32_t svalue; // Symbol value + char * sname; // * -> Symbol's print-name + struct LineList * lineList; // * -> Macro's linked list of lines + struct LineList * last; // * -> end of macro linked list + uint32_t uid; // Symbol's unique ID +}; + +// Globals, externals, etc. extern int curenv; extern char subttl[]; -// Prototypes +// Exported functions SYM * lookup(char *, int, int); -void init_sym(void); -SYM * newsym(char *, int, int); -char * nstring(char *); -void sym_decl(SYM *); -int syg_fix(void); +void InitSymbolTable(void); +SYM * NewSymbol(char *, int, int); +void AddToSymbolDeclarationList(SYM *); +void ForceUndefinedSymbolsGlobal(void); int symtable(void); int sy_assign(char *, char *(*)()); +char * GetSymbolNameByUID(uint32_t); #endif // __SYMBOL_H__ +