X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=procln.c;h=ab9d53a0eefc98397348f71a3a55cfd7f7565608;hp=edd21730331b07981cbda13a7270e204a049c8c1;hb=d7d2c7f14734504d68d67ee5d46ecd3472c0922e;hpb=49cce96fba11282e4244187f15be418d5ae5bb8d diff --git a/procln.c b/procln.c index edd2173..ab9d53a 100644 --- a/procln.c +++ b/procln.c @@ -29,6 +29,7 @@ #define DECL_MR #include "risckw.h" + IFENT * ifent; // Current ifent static IFENT ifent0; // Root ifent static IFENT * f_ifent; // Freelist of ifents @@ -103,7 +104,7 @@ void init_procln(void) // // Line Processor // -void assemble(void) +void Assemble(void) { int state; // Keyword machine state (output) int j; // Random int, must be fast @@ -134,6 +135,7 @@ loop: // Line processing loop label // Get another line of tokens if (tokln() == TKEOF) { +if (verb_flag) printf("Assemble: Found TKEOF flag...\n"); if (list_flag && listflag) // Flush last line of source listeol(); @@ -178,7 +180,8 @@ loop1: // Internal line processing loop if (j == '=' || j == DEQUALS || j == SET || j == REG || j == EQUREG || j == CCDEF) { - equate = (char *)tok[1]; +// equate = (char *)tok[1]; + equate = string[tok[1]]; equtyp = j; tok += 3; goto normal; @@ -188,7 +191,8 @@ loop1: // Internal line processing loop if (j == ':' || j == DCOLON) { as68label: - label = (char *)tok[1]; // Get label name +// label = (char *)tok[1]; // Get label name + label = string[tok[1]]; // Get label name labtyp = tok[2]; // Get label type tok += 3; // Go to next line token @@ -218,8 +222,12 @@ as68label: // This is the problem here: On 64-bit platforms, this cuts the native pointer // in half. We need to figure out how to fix this. -#warning "!!! Bad pointer !!!" +//#warning "!!! Bad pointer !!!" +#if 0 opname = p = (char *)*tok++; // Store opcode name here +#else + opname = p = string[*tok++]; +#endif // Check to see if the SYMBOL is a keyword (a mnemonic or directive). // On output, `state' will have one of the values: @@ -299,7 +307,7 @@ as68label: if (label != NULL) warn(lab_ignored); - defmac(); + DefineMacro(); } goto loop; @@ -310,7 +318,7 @@ as68label: if (label != NULL) warn(lab_ignored); - exitmac(); + ExitMacro(); } goto loop; @@ -348,7 +356,7 @@ normal: if (sy == NULL) { - sy = newsym(equate, LABEL, j); + sy = NewSymbol(equate, LABEL, j); sy->sattr = 0; if (equtyp == DEQUALS) @@ -430,7 +438,8 @@ normal: // Checking for a register symbol else if (tok[0] == SYMBOL) { - sy2 = lookup((char *)tok[1], LABEL, j); +// sy2 = lookup((char *)tok[1], LABEL, j); + sy2 = lookup(string[tok[1]], LABEL, j); // Make sure symbol is a valid equreg if (!sy2 || !(sy2->sattre & EQUATEDREG)) @@ -467,7 +476,8 @@ normal: if (tok[0] == SYMBOL) { - sy2 = lookup((char *)tok[1], LABEL, j); +// sy2 = lookup((char *)tok[1], LABEL, j); + sy2 = lookup(string[tok[1]], LABEL, j); if (!sy2 || !(sy2->sattre & EQUATEDCC)) { @@ -488,7 +498,8 @@ normal: //equ a equr else if (*tok == SYMBOL) { - sy2 = lookup((char *)tok[1], LABEL, j); +// sy2 = lookup((char *)tok[1], LABEL, j); + sy2 = lookup(string[tok[1]], LABEL, j); if (sy2 && (sy2->sattre & EQUATEDREG)) { @@ -524,16 +535,21 @@ normal: if (label != NULL) { do_label: + // Check for dot in front of label; means this is a local label if present +#if 0 j = 0; if (*label == '.') j = curenv; +#else + j = (*label == '.' ? curenv : 0); +#endif sy = lookup(label, LABEL, j); if (sy == NULL) { - sy = newsym(label, LABEL, j); + sy = NewSymbol(label, LABEL, j); sy->sattr = 0; sy->sattre = RISCSYM; } @@ -561,7 +577,7 @@ do_label: lab_sym = sy; if (!j) - ++curenv; + curenv++; // Make label global if (labtyp == DCOLON) @@ -612,7 +628,7 @@ do_label: // Call RISC code generator if we found a mnemonic if (state >= 3000) { - risccg(state); + GenerateRISCCode(state); goto loop; } } @@ -621,7 +637,7 @@ do_label: if (state < 0) { if ((sy = lookup(opname, MACRO, 0)) != NULL) - invokemac(sy, siz); + InvokeMacro(sy, siz); else errors("unknown op '%s'", opname); @@ -703,7 +719,6 @@ int d_if(void) // Alloc an IFENTRY if ((rif = f_ifent) == NULL) -// rif = (IFENT *)amem((LONG)sizeof(IFENT)); rif = (IFENT *)malloc(sizeof(IFENT)); else f_ifent = rif->if_prev; @@ -713,7 +728,8 @@ int d_if(void) if (!disabled) { - if (expr(exprbuf, &eval, &eattr, &esym) != OK) return 0; + if (expr(exprbuf, &eval, &eattr, &esym) != OK) + return 0; if ((eattr & DEFINED) == 0) return error(undef_error);