X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=expr.c;h=8faa634ee8a22825a2826f427904bf123d7fefa0;hb=cbc8347d4ffea164ca05b03e4e3be39945be8777;hp=63d63ae2552e72f6fdf6dc77ee62fcc02decaa96;hpb=01dbdb3508711b3e9283fb21a65e9e7a7b8164d2;p=rmac diff --git a/expr.c b/expr.c index 63d63ae..8faa634 100644 --- a/expr.c +++ b/expr.c @@ -1,7 +1,7 @@ // -// RMAC - Reboot's Macro Assembler for all Atari computers +// RMAC - Renamed Macro Assembler for all Atari computers // EXPR.C - Expression Analyzer -// Copyright (C) 199x Landon Dyer, 2011-2020 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 // @@ -169,7 +169,6 @@ int expr1(void) case CR_FILESIZE: if (*tok++ != STRING) return error("^^FILESIZE expects filename inside string"); - *evalTokenBuffer.u32++ = CONST; // @@copypasted from d_incbin, maybe factor this out somehow? // Attempt to open the include file in the current directory, then (if that @@ -180,7 +179,7 @@ int expr1(void) if ((fd = open(string[*tok], _OPEN_INC)) < 0) { - for(i=0; nthpath("RMACPATH", i, buf1)!= 0; i++) + for(i=0; nthpath("RMACPATH", i, buf1)!=0; i++) { fd = strlen(buf1); @@ -417,7 +416,7 @@ int expr(TOKEN * otk, uint64_t * a_value, WORD * a_attr, SYM ** a_esym) { *evalTokenBuffer.u32++ = CONST; *evalTokenBuffer.u64++ = *a_value = (*tok - KW_R0); - *a_attr = ABS | DEFINED; + *a_attr = ABS | DEFINED | RISCREG; if (a_esym != NULL) *a_esym = NULL; @@ -522,19 +521,19 @@ be converted from a linked list into an array). symbolNum++; #endif - if (symbol->sattr & DEFINED) - *a_value = symbol->svalue; - else - *a_value = 0; + *a_value = (symbol->sattr & DEFINED ? symbol->svalue : 0); + *a_attr = (WORD)(symbol->sattr & ~GLOBAL); /* All that extra crap that was put into the svalue when doing the equr stuff is thrown away right here. What the hell is it for? */ if (symbol->sattre & EQUATEDREG) + { *a_value &= 0x1F; - - *a_attr = (WORD)(symbol->sattr & ~GLOBAL); + *a_attr |= RISCREG; // Mark it as a register, 'cause it is + *a_esym = symbol; + } if ((symbol->sattr & (GLOBAL | DEFINED)) == GLOBAL && a_esym != NULL)