continue;
}
- if (tk != NULL) // arg # is in range, so expand it
+ // Argument # is in range, so expand it
+ if (tk != NULL)
{
while (*tk != EOL)
{
// Scan for next end-of-line; handle stupid text formats by treating
// \r\n the same as \n. (lone '\r' at end of buffer means we have to
// check for '\n').
+#if 0
i = 0;
j = fl->ifcnt;
d = &fl->ifbuf[fl->ifind];
for(p=d; i<j; i++, p++)
+#else
+ d = &fl->ifbuf[fl->ifind];
+
+ for(p=d, i=0, j=fl->ifcnt; i<j; i++, p++)
+#endif
{
if (*p == '\r' || *p == '\n')
{
if (*p == '\r')
{
if (i >= j)
- {
- break; // Look for '\n' to eat
- }
+ break; // Need to read more, then look for '\n' to eat
else if (p[1] == '\n')
- {
i++;
- }
}
+ // Cover up the newline with end-of-string sentinel
*p = '\0';
fl->ifind += i;
// Handle hanging lines by ignoring them (Input file is exhausted, no
// \r or \n on last line)
+ // Shamus: This is retarded. Never ignore any input!
if (!readamt && fl->ifcnt)
{
+#if 0
fl->ifcnt = 0;
*p = '\0';
return NULL;
+#else
+ // Really should check to see if we're at the end of the buffer! :-P
+ fl->ifbuf[fl->ifind + fl->ifcnt] = '\0';
+ fl->ifcnt = 0;
+ return &fl->ifbuf[fl->ifind];
+#endif
}
// Truncate and return absurdly long lines.
fl->ifind = fl->ifcnt & 1;
}
- if ((readamt = read(fl->ifhandle, &fl->ifbuf[fl->ifind + fl->ifcnt], QUANTUM)) < 0)
+ readamt = read(fl->ifhandle, &fl->ifbuf[fl->ifind + fl->ifcnt], QUANTUM);
+
+ if (readamt < 0)
return NULL;
if ((fl->ifcnt += readamt) == 0)
if (c & STSYM)
{
- if (stuffnull) // Terminate old symbol from previous pass
+ if (stuffnull) // Terminate old symbol from previous pass
*nullspot = EOS;
- v = 0; // Assume no DOT attrib follows symbol
+ v = 0; // Assume no DOT attrib follows symbol
stuffnull = 1;
- p = nullspot = ln++; // Nullspot -> start of this symbol
+ p = nullspot = ln++; // Nullspot -> start of this symbol
// Find end of symbol (and compute its length)
for(j=1; (int)chrtab[*ln]&CTSYM; j++)
// symbol or keyword:
if (*ln == '.')
{
- *ln++ = EOS; // Terminate symbol
- stuffnull = 0; // And never try it again
+ *ln++ = EOS; // Terminate symbol
+ stuffnull = 0; // And never try it again
// Character following the `.' must have a DOT attribute, and
// the chararacter after THAT one must not have a start-symbol
j = -1;
}
+ // Make j = -1 if user tries to use a RISC register while in 68K mode
+ if (!(rgpu || rdsp) && ((TOKEN)j >= KW_R0 && (TOKEN)j <= KW_R31))
+ {
+ j = -1;
+ }
+
//make j = -1 if time, date etc with no preceeding ^^
//defined, referenced, streq, macdef, date and time
switch ((TOKEN)j)
case 120: // time
case 121: // date
j = -1;
- break;
}
+ // If not tokenized keyword OR token was not found
if (j < 0 || state < 0)
{
*tk++ = SYMBOL;
//#warning
-//problem here: nullspot is a char * but TOKEN is a uint32_t. On a 64-bit system,
-//this will cause all kinds of mischief.
+//problem here: nullspot is a char * but TOKEN is a uint32_t. On a 64-bit
+//system, this will cause all kinds of mischief.
#if 0
*tk++ = (TOKEN)nullspot;
#else
while ((int)chrtab[*ln] & DIGIT)
v = (v * 10) + *ln++ - '0';
- // See if there's a .[bwl] after the constant, & deal with it
+ // See if there's a .[bwl] after the constant & deal with it if so
if (*ln == '.')
{
- if ((*(ln+1) == 'b') || (*(ln+1) == 'B'))
+ if ((*(ln + 1) == 'b') || (*(ln + 1) == 'B'))
{
v &= 0x000000FF;
ln += 2;
}
-
- if ((*(ln+1) == 'w') || (*(ln+1) == 'W'))
+ else if ((*(ln + 1) == 'w') || (*(ln + 1) == 'W'))
{
v &= 0x0000FFFF;
ln += 2;
}
-
- if ((*(ln+1) == 'l') || (*(ln+1) == 'L'))
+ else if ((*(ln + 1) == 'l') || (*(ln + 1) == 'L'))
{
ln += 2;
}
*tk++ = CONST;
*tk++ = v;
+//printf("CONST: %i\n", v);
continue;
}
//int d_goto(void)
int d_goto(WORD unused)
{
-// char * sym; // Label to search for
-// LONG * defln; // Macro definition strings
- char * s1; // Temps for string comparison
+ char * s1; // Temps for string comparison
char * s2;
-// IMACRO * imacro; // Macro invocation block
// Setup for the search
if (*tok != SYMBOL)