psymbol->flags |= pdot->flags;
psymbol->value = pdot->value;
-#if TRANSLATE
+#ifdef TRANSLATE
// reset locals
xlabnext = 0;
memset(xlabb, 0xff, 10 * sizeof(int));
/* printf("ealoop token = 0x%08x\n", token); */
if (token == TSEMICOLON)
{
-#if TRANSLATE
- if (xbufp >= xbuf + 0xff0)
- abort();
- xbufp += sprintf(xbufp, "\n");
+#ifdef TRANSLATE
+ xbufp[-1] = '\n';
+
+ // read and ignore whitespace after ;
+ xstartp = xbufp;
+ while (1) {
+ label = rch();
+ if (label != '\t' && label != ' ')
+ break;
+ }
+ ch = label;
+ xbufp = xstartp;
#endif
continue;
}
/* 1: */
void p0xpr() {
+#ifdef TRANSLATE
+ xrestn = xbufp - xstartp;
+ memcpy(xrest, xstartp, xrestn);
+ if (xstartp + xrestn >= xbuf + 0xff0)
+ abort();
+ xbufp = xstartp + sprintf(xstartp, ".dw ");
+ xstartp = xbufp; // for local labels
+ memcpy(xbufp, xrest, xrestn);
+ xbufp += xrestn;
+#endif
p0expres();
pdot->value += 2;
}
if (token >= 0 && token < TASCII) {
if (token == TSTRING)
- p0opl17();
- else
{
-#if TRANSLATE
- if (xbufp >= xbuf + 0xff0)
+#ifdef TRANSLATE
+ xrestn = xbufp - xstartp;
+ memcpy(xrest, xstartp, xrestn);
+ xrest[0] = '/';
+ xrest[xrestn - 1] = '/';
+ if (xstartp + xrestn >= xbuf + 0xff0)
abort();
- xbufp += sprintf(xbufp, ".dw ");
+ xbufp = xstartp + sprintf(xstartp, ".ascii ");
+ memcpy(xbufp, xrest, xrestn);
+ xbufp += xrestn;
#endif
- p0xpr();
+ p0opl17();
}
+ else
+ p0xpr();
return;
}
/* opl16 */
case FDOTBYTE:
-#if TRANSLATE
+#ifdef TRANSLATE
if (xstartp >= xbuf + 0xff0)
abort();
xbufp = xstartp + sprintf(xstartp, ".db");
#if 1 /* modifications for dec syntax */
case FDOTWORD:
-#if TRANSLATE
+#ifdef TRANSLATE
if (xstartp >= xbuf + 0xff0)
abort();
xbufp = xstartp + sprintf(xstartp, ".dw");