(c) message in header files and doc mini adjustments.
[rmac] / symbol.h
1 //
2 // RMAC - Reboot's Macro Assembler for all Atari computers
3 // SYMBOL.H - Symbol Handling
4 // Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends
5 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
6 // Source utilised with the kind permission of Landon Dyer
7 //
8
9 #ifndef __SYMBOL_H__
10 #define __SYMBOL_H__
11
12 #include <inttypes.h>
13
14 // Line lists
15 struct LineList
16 {
17         struct LineList * next;
18         uint8_t * line;
19 };
20
21 // Symbols
22 #define SYM struct _sym
23 SYM
24 {
25         SYM * snext;                                    // * -> Next symbol on hash-chain
26         SYM * sorder;                                   // * -> Next sym in order of reference
27         SYM * sdecl;                                    // * -> Next sym in order of declaration
28         uint8_t stype;                                  // Symbol type
29         uint16_t sattr;                                 // Attribute bits
30         uint32_t sattre;                                // Extended attribute bits
31         uint16_t senv;                                  // Enviroment number
32         uint32_t svalue;                                // Symbol value
33         uint8_t * sname;                                // * -> Symbol's print-name
34         struct LineList * lineList;             // * -> Macro's linked list of lines
35         struct LineList * last;                 // * -> end of macro linked list
36         uint32_t uid;                                   // Symbol's unique ID
37 };
38
39 // Exported variables
40 extern int curenv;
41 extern uint32_t firstglobal;// Index of the fist global symbol in an ELF object.
42
43 // Exported functions
44 SYM * lookup(uint8_t *, int, int);
45 void InitSymbolTable(void);
46 SYM * NewSymbol(uint8_t *, int, int);
47 void AddToSymbolDeclarationList(SYM *);
48 void ForceUndefinedSymbolsGlobal(void);
49 int symtable(void);
50 uint32_t sy_assign(uint8_t *, uint8_t *(*)());
51 uint32_t sy_assign_ELF(uint8_t *, uint8_t *(*)());
52 uint8_t * GetSymbolNameByUID(uint32_t);
53
54 #endif // __SYMBOL_H__
55