X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=token.h;h=aaa4fd6088e878c94f0d84d7992b8ec344cafebe;hp=be3c1e392ca4890490b46d873261588e0b3e05a9;hb=2161b198b7b333147c89ef0346d8e9bb6ab9ffd9;hpb=3385b366632d03745033fa6b19faabf60219bc6b diff --git a/token.h b/token.h index be3c1e3..aaa4fd6 100644 --- a/token.h +++ b/token.h @@ -1,16 +1,15 @@ // // 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 @@ -28,7 +27,7 @@ // 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 @@ -44,17 +43,17 @@ #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 ENDEXPR 'E' // End of expression // ^^ operators #define CR_DEFINED 'p' // ^^defined - is symbol defined? @@ -63,6 +62,7 @@ #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) @@ -75,6 +75,12 @@ #define MULTX 64 // Multiple-character tokens #define DOT 128 // [bwlsBWSL] for what follows a `.' +// "special" string types +#define NORMAL 0 // Standard for PC/ST/whatever +#define A8INT 1 // Atari 800 ATASCII translation +#define PETSCII 2 // lol +#define ORICSCII 3 // lolol + // Conditional assembly structures IFENT { IFENT * if_prev; // Ptr prev .if state block (or NULL) @@ -104,21 +110,29 @@ IFILE { 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[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 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 @@ -128,7 +142,7 @@ IREPT { VALUE ir_count; // Repeat count (decrements) }; -// Globals, externals etc +// Exported variables extern int lnsave; extern int curlineno; extern char * curfname; @@ -138,19 +152,19 @@ extern char lnbuf[]; extern char lntag; extern char tolowertab[]; extern INOBJ * cur_inobj; -extern unsigned orgactive; -extern unsigned orgaddr; -extern LONG sloc; extern int mjump_align; +extern char * string[]; +extern int stringtype; -// 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); +int d_goto(WORD); INOBJ * a_inobj(int); +void DumpTokenBuffer(void); #endif // __TOKEN_H__ +