X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=token.h;h=251a503f424036a705edf559b3ecd9302b85d56b;hp=832301c1f8e493b8b6da1b6c0ffc75a9e4192176;hb=HEAD;hpb=bdbf34766f4d074a5933eb1326fe4ce03d249e10 diff --git a/token.h b/token.h index 832301c..3154118 100644 --- a/token.h +++ b/token.h @@ -1,7 +1,7 @@ // -// RMAC - Reboot's Macro Assembler for all Atari computers +// RMAC - Renamed Macro Assembler for all Atari computers // TOKEN.H - Token Handling -// Copyright (C) 199x Landon Dyer, 2011-2019 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2021 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 // Source utilised with the kind permission of Landon Dyer // @@ -17,19 +17,20 @@ #define SRC_IREPT 2 // Input source is IREPT // Macros -#define INOBJ struct _inobj -#define IUNION union _iunion -#define IFILE struct _incldfile -#define IMACRO struct _imacro -#define IREPT struct _irept -#define IFENT struct _ifent +#define INOBJ struct _inobj +#define IUNION union _iunion +#define IFILE struct _incldfile +#define TOKENSTREAM struct _tokenstream +#define IMACRO struct _imacro +#define IREPT struct _irept +#define IFENT struct _ifent // Tunable definitions #define LNSIZ 1024 // Maximum size of a line of text -#define TOKBUFSIZE 400 // Size of token-line buffer +#define TOKBUFSIZE 4096 // Size of token-line buffer #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 +#define KWSIZE 10 // Maximum size of keyword in kwtab.h // (Normally) non-printable tokens #define COLON ':' // : (grumble: GNUmacs hates ':') @@ -44,7 +45,7 @@ #define DEQUALS 'g' // == #define SET 0x95 // Set #define REG 'R' // Reg -#define EQUREG 0x94 // equreg +#define EQUREG 'U' // equreg (must be synchronised with the equate in kw.tab) #define CCDEF 0xB7 // ccdef #define DCOLON 'h' // :: #define GE 'i' // >= @@ -74,7 +75,8 @@ #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 + // defined in current .abs section +#define CR_FILESIZE 'F' // ^^filesize - return the size in bytes of a file // Character Attributes #define ILLEG 0 // Illegal character (unused) @@ -125,10 +127,14 @@ IFILE { char ifbuf[LNBUFSIZ]; // Line buffer }; -#define TOKENSTREAM struct _tokenstream +// Consts for maximums in TOKENSTREAM +#define TS_MAXTOKENS 64 // 32 ought to be enough for anybody (including XiA!) +#define TS_MAXSTRINGS 32 // same for attached strings +#define TS_MAXARGS 20 // Assume no more than 20 arguments in an invocation + TOKENSTREAM { - TOKEN token[32]; // 32 ought to be enough for anybody (including XiA!) - char * string[32]; // same for attached strings + TOKEN token[TS_MAXTOKENS]; + char * string[TS_MAXSTRINGS]; }; // Information about a macro invocation @@ -140,7 +146,7 @@ IMACRO { LONG im_olduniq; // Old value of 'macuniq' SYM * im_macro; // Pointer to macro we're in char im_lnbuf[LNSIZ]; // Line buffer - TOKENSTREAM argument[20]; // Assume no more than 20 arguments in an invocation + TOKENSTREAM argument[TS_MAXARGS]; }; // Information about a .rept invocation @@ -151,9 +157,17 @@ IREPT { uint32_t lineno; // Repeat line number (Convert this to global instead of putting it here?) }; +// File record, used to maintain a list of every include file ever visited +#define FILEREC struct _filerec +FILEREC +{ + FILEREC * frec_next; + char * frec_name; +}; + // Exported variables extern int lnsave; -extern uint16_t curlineno; +extern uint32_t curlineno; extern char * curfname; extern WORD cfileno; extern TOKEN * tok; @@ -164,6 +178,7 @@ extern INOBJ * cur_inobj; extern int mjump_align; extern char * string[]; extern int optimizeOff; +extern FILEREC * filerec; // Exported functions int include(int, char *);