#define __TOKEN_H__
#include "rmac.h"
-//#include "risca.h"
// Include Files and Macros
#define SRC_IFILE 0 // Input source is IFILE
// Tunable definitions
#define LNSIZ 256 // Maximum size of a line of text
#define TOKBUFSIZE 400 // Size of token-line buffer
-#define QUANTUM 4096L // #bytes to eat at a time from a file
+#define QUANTUM 4096L // # bytes to eat at a time from a file
#define LNBUFSIZ (QUANTUM*2) // Size of file's buffer
#define KWSIZE 7 // Maximum size of keyword in kwtab.h
char ifbuf[LNBUFSIZ]; // Line buffer
};
+#define TOKENSTREAM struct _tokenstream
+TOKENSTREAM {
+ TOKEN token[10]; // 10 ought to be enough for anybody
+ char * string[10]; // same for attached strings
+};
+
// Information about a macro invocation
IMACRO {
IMACRO * im_link; // Pointer to ancient IMACROs
- LONG * im_nextln; // Next line to include
+// LONG * im_nextln; // Next line to include
+ struct LineList * im_nextln; // Next line to include
WORD im_nargs; // # of arguments supplied on invocation
WORD im_siz; // Size suffix supplied on invocation
LONG im_olduniq; // Old value of 'macuniq'
SYM * im_macro; // Pointer to macro we're in
char im_lnbuf[LNSIZ]; // Line buffer
+ uint32_t argBase; // Base in argPtrs[] for current macro
+ TOKENSTREAM argument[20]; // Assume no more than 20 arguments in an invocation
};
// Information about a .rept invocation
extern unsigned orgaddr;
extern LONG sloc;
extern int mjump_align;
+extern char * string[];
// Prototypes
int include(int, char *);
-void init_token(void);
-void setfnum(WORD);
-int tokln(void);
+void InitTokenizer(void);
+void SetFilenameForErrorReporting(void);
+int TokenizeLine(void);
int fpop(void);
-//int d_goto(WORD);
-int d_goto(void);
+int d_goto(WORD);
+//int d_goto(void);
INOBJ * a_inobj(int);
+void DumpTokenBuffer(void);
#endif // __TOKEN_H__