X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=expr.c;h=01868e8a0b17ecc1c222bd0cdd73ebd557f81228;hp=b7bf4b1a95b1237a244a8ae12ff619255b4cdaa1;hb=5cd8a4814b805f1ef8ce689423eb5eeba12573c5;hpb=60f204cb9e3905100da0d89f14bb40db764acd9e diff --git a/expr.c b/expr.c index b7bf4b1..01868e8 100644 --- a/expr.c +++ b/expr.c @@ -77,14 +77,13 @@ static VALUE str_value(char * p) // void InitExpression(void) { - int i; - char * p; - // Initialize token-class table (all set to END) - for(i=0; i<256; i++) + for(int i=0; i<256; i++) tokenClass[i] = END; - for(i=0, p=itokcl; *p!=1; p++) + int i = 0; + + for(char * p=itokcl; *p!=1; p++) { if (*p == 0) i++; @@ -288,6 +287,20 @@ int expr2(void) *evalTokenBuffer++ = (orgactive ? orgaddr : pcloc); // '*' takes attributes of current section, not ABS! *evalTokenBuffer++ = cursect | DEFINED; + break; + case '{': + if (expr0() != OK) // Eat up first parameter (register or immediate) + return ERROR; + + if (*tok++ != ':') // Demand a ':' there + return error("missing colon ':'"); + + if (expr0() != OK) // Eat up second parameter (register or immediate) + return ERROR; + + if (*tok++ != '}') + return error("missing close bracket '}'"); + break; default: return error("bad expression"); @@ -465,17 +478,12 @@ thrown away right here. What the hell is it for? // int evexpr(TOKEN * tk, VALUE * a_value, WORD * a_attr, SYM ** a_esym) { - WORD * sattr; - VALUE * sval; WORD attr; SYM * sy; - SYM * esym; - WORD sym_seg; - - sval = evstk; // (Empty) initial stack - sattr = evattr; - esym = NULL; // No external symbol involved - sym_seg = 0; + VALUE * sval = evstk; // (Empty) initial stack + WORD * sattr = evattr; + SYM * esym = NULL; // No external symbol involved + WORD sym_seg = 0; while (*tk != ENDEXPR) { @@ -745,7 +753,7 @@ printf("EVEXPR (-): sym1 = %X, sym2 = %X\n", attr, sattr[1]); // sym_seg added in 1.0.16 to solve a problem with forward symbols in // expressions where absolute values also existed. The absolutes were // overiding the symbol segments and not being included :( - //*a_attr = *sattr | sym_seg; // Copy value + attrib + //*a_attr = *sattr | sym_seg; // Copy value + attrib *a_attr = *sattr; // Copy value + attrib *a_value = *sval;