//
// RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
// TOKEN.H - Token Handling
-// Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2017 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 SET 149 // Set
#define REG 'R' // Reg
#define DCOLON 'h' // ::
-#define GE 'i' // >=
-#define LE 'j' // <=
-#define NE 'k' // <> or !=
-#define SHR 'l' // >>
-#define SHL 'm' // <<
-#define UNMINUS 'n' // Unary '-'
-#define DOTB 'B' // .b or .B or .s or .S
-#define DOTW 'W' // .w or .W
-#define DOTL 'L' // .l or .L
-#define DOTI 'I' // .l or .L
-#define ENDEXPR 'E' // End of expression
+#define GE 'i' // >=
+#define LE 'j' // <=
+#define NE 'k' // <> or !=
+#define SHR 'l' // >>
+#define SHL 'm' // <<
+#define UNMINUS 'n' // Unary '-'
+#define DOTB 'B' // .b or .B or .s or .S
+#define DOTW 'W' // .w or .W
+#define DOTL 'L' // .l or .L
+#define DOTI 'I' // .l or .L
+#define DOTX 'X' // .x or .X
+#define DOTD 'D' // .d or .D
+#define DOTP 'P' // .p or .P
+#define DOTQ 'Q' // .q or .Q (essentially an alias for P)
+#define ENDEXPR 'E' // End of expression
// ^^ operators
#define CR_DEFINED 'p' // ^^defined - is symbol defined?
#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 * ifoldfname; // Old file's name
int ifoldlineno; // Old line number
int ifind; // Position in file buffer
- int ifcnt; // #chars left in file buffer
+ int ifcnt; // #chars left in file buffer
int ifhandle; // File's descriptor
WORD ifno; // File number
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
+ 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
struct LineList * im_nextln; // Next line to include
WORD im_nargs; // # of arguments supplied on invocation
WORD im_siz; // Size suffix supplied on invocation
VALUE ir_count; // Repeat count (decrements)
};
-// Globals, externals etc
+// Exported variables
extern int lnsave;
-extern int curlineno;
+extern uint16_t curlineno;
extern char * curfname;
extern WORD cfileno;
extern TOKEN * tok;
extern int mjump_align;
extern char * string[];
-// Prototypes
+// Exported functions
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);
INOBJ * a_inobj(int);
void DumpTokenBuffer(void);
#endif // __TOKEN_H__
+