while (fgets(ln, 256, stdin) != NULL)
{
- ++lineno; /* bump line# */
+ lineno++; /* bump line# */
if (*ln == '#') /* ignore comments */
continue;
namv[namcnt++] = s;
while (*s && !isspace(*s))
- ++s;
+ s++;
if (isspace(*s))
*s++ = EOS;
}
-/*
- * Parse line
- */
+//
+// Parse line
+//
void procln(int namc, char ** namv)
{
int i, j;
char * s;
- if (namc == 1) /* alias for previous entry */
+ // alias for previous entry
+ if (namc == 1)
{
fprintf(kfp, "%s\t%d\n", namv[0], kwnum-1+1000);
return;
exit(1);
}
- if (*namv[0] != '-') /* output keyword name */
+ // output keyword name
+ if (*namv[0] != '-')
fprintf(kfp, "%s\t%d\n", namv[0], kwnum + 1000);
printf("/*%4d %-6s*/ {", kwnum, namv[0]);
printf(", %s, %s, ", namv[2], namv[3]);
- if (*namv[4] == '%') /* enforce little fascist percent signs */
+ // enforce little fascist percent signs
+ if (*namv[4] == '%')
{
for(i=1, j=0; i<17; ++i)
{
printf("%s},\n", namv[5]);
- ++kwnum;
+ kwnum++;
}
fprintf(stderr, "\n");
exit(1);
}
+
if (acount == 0 || *tok != ',')
return 1;
- ++tok; // Eat comma
+ // Eat the comma
+ tok++;
// Parse second addressing mode
#define AnOK a1ok
0x0100, 0x0200, 0x0400, 0x0800,
0x1000, 0x2000, 0x4000, 0x8000
};
- WORD rmask;
- int r, cnt;
- rmask = 0;
+ WORD rmask = 0;
+ int r, cnt;
for(;;)
{
if (*tok == '-')
{
- ++tok;
+ tok++;
if (*tok >= KW_D0 && *tok <= KW_A7)
cnt = *tok++ & 15;
if (*tok != '/')
break;
- ++tok;
+ tok++;
}
*a_rmask = rmask;
return OK;
}
+
}
else if (*tok == '#')
{
- ++tok;
+ tok++;
+
if (expr(AnEXPR, &AnEXVAL, &AnEXATTR, &AnESYM) != OK)
return ERROR;
// ([bd,PC,Xn],od)
else if (*tok == '(')
{
- ++tok;
+ tok++;
if ((*tok >= KW_A0) && (*tok <= KW_A7))
{
if (*tok == ')')
{
- ++tok;
+ tok++;
if (*tok == '+')
{
- ++tok;
+ tok++;
AMn = APOSTINC;
}
else
}
else if (*tok == KW_PC)
{ // (PC,Xn[.siz][*scale])
- ++tok;
+ tok++;
AMn = PCINDEXED;
// Common index handler; enter here with `tok' pointing at the comma.
switch ((int)*tok)
{ // Index reg size: <empty> | .W | .L
case DOTW:
- ++tok;
+ tok++;
default:
AnIXSIZ = 0;
break;
case DOTL:
AnIXSIZ = 0x0800;
- ++tok;
+ tok++;
break;
case DOTB: // .B not allowed here...
goto badmode;
if (*tok == '*')
{ // scale: *1, *2, *4, *8
- ++tok;
+ tok++;
+
if (*tok++ != CONST || *tok > 8)
goto badmode;
if ((*tok >= KW_A0) && (*tok <= KW_A7))
{
AnREG = *tok & 7;
- ++tok;
+ tok++;
if (*tok == ',')
{
else if (*tok == ')')
{
AMn = ADISP;
- ++tok;
+ tok++;
goto AnOK;
}
else
else if (*tok == ')')
{
AMn = PCDISP; // expr(PC)
- ++tok;
+ tok++;
goto AnOK;
}
else
else if (*tok == KW_CCR)
{
AMn = AM_CCR;
- ++tok;
+ tok++;
goto AnOK;
}
else if (*tok == KW_SR)
{
AMn = AM_SR;
- ++tok;
+ tok++;
goto AnOK;
}
else if (*tok == KW_USP)
{
AMn = AM_USP;
- ++tok;
+ tok++;
goto AnOK;
}
// expr
if (*tok == DOTW)
{ // expr.W
- ++tok;
+ tok++;
AMn = ABSW;
goto AnOK;
}
if (*tok == DOTL)
{ // force .L
- ++tok;
+ tok++;
AMn = ABSL;
}
if (*tok == ')')
{
AMn = ADISP;
- ++tok;
+ tok++;
goto AnOK;
}
if (*++tok == ')')
{
AMn = PCDISP;
- ++tok;
+ tok++;
goto AnOK;
}
}
}
- if (*tok == EOL) // EOL is legal here...
+ // EOL is legal here...
+ if (*tok == EOL)
goto normal;
// Next token MUST be a symbol
siz = SIZN;
if (*tok == DOTW)
- siz = SIZW, ++tok;
+ siz = SIZW, tok++;
else if (*tok == DOTL)
- siz = SIZL, ++tok;
+ siz = SIZL, tok++;
else if (*tok == DOTB)
- siz = SIZB, ++tok;
+ siz = SIZB, tok++;
// Do special directives (500..999) (These must be handled in "real time")
if (state >= 500 && state < 1000)
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;
+// break;
}
+ // If not tokenized keyword OR token was not found
if (j < 0 || state < 0)
{
*tk++ = SYMBOL;
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;
}
#define MAJOR 1 // Major version number
#define MINOR 2 // Minor version number
-#define PATCH 6 // Patch release number
+#define PATCH 7 // Patch release number
#endif // __VERSION_H__