// TOKEN.H - Token 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 __TOKEN_H__
#define __TOKEN_H__
#include "rmac.h"
-//#include "risca.h"
// Include Files and Macros
#define SRC_IFILE 0 // Input source is IFILE
#define CR_MACDEF 'w' // ^^macdef - is macro defined?
#define CR_TIME 'x' // ^^time - DOS format time
#define CR_DATE 'y' // ^^date - DOS format date
+#define CR_ABSCOUNT 'z' // ^^abscount - count the number of bytes defined in curent .abs section
// Character Attributes
#define ILLEG 0 // Illegal character (unused)
char ifbuf[LNBUFSIZ]; // Line buffer
};
+#define TOKENSTREAM struct _tokenstream
+TOKENSTREAM {
+ TOKEN token[32]; // 32 ought to be enough for anybody (including XiA!)
+ char * string[32]; // 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
// 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);