mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
@@ -396,7 +396,9 @@ void fstk_RunInclude(char *tzFileName)
|
||||
oFailedOnMissingInclude = true;
|
||||
return;
|
||||
}
|
||||
err(1, "Unable to open included file '%s'", tzFileName);
|
||||
yyerror("Unable to open included file '%s': %s", tzFileName,
|
||||
strerror(errno));
|
||||
return;
|
||||
}
|
||||
|
||||
pushcontext();
|
||||
@@ -540,7 +542,8 @@ void fstk_Init(char *pFileName)
|
||||
} else {
|
||||
pCurrentFile = fopen(pFileName, "rb");
|
||||
if (pCurrentFile == NULL)
|
||||
err(1, "Unable to open file '%s'", pFileName);
|
||||
yyerror("Unable to open file '%s': %s", pFileName,
|
||||
strerror(errno));
|
||||
}
|
||||
nFileStackDepth = 0;
|
||||
|
||||
|
||||
@@ -366,71 +366,73 @@ uint32_t lex_FloatAlloc(const struct sLexFloat *token)
|
||||
* Make sure that only non-zero ASCII characters are used. Also, check if the
|
||||
* start is greater than the end of the range.
|
||||
*/
|
||||
void lex_CheckCharacterRange(uint16_t start, uint16_t end)
|
||||
bool lex_CheckCharacterRange(uint16_t start, uint16_t end)
|
||||
{
|
||||
if (start > end || start < 1 || end > 127) {
|
||||
errx(1, "Invalid character range (start: %u, end: %u)",
|
||||
start, end);
|
||||
yyerror("Invalid character range (start: %u, end: %u)",
|
||||
start, end);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void lex_FloatDeleteRange(uint32_t id, uint16_t start, uint16_t end)
|
||||
{
|
||||
lex_CheckCharacterRange(start, end);
|
||||
|
||||
while (start <= end) {
|
||||
tFloatingChars[start] &= ~id;
|
||||
start++;
|
||||
if (lex_CheckCharacterRange(start, end)) {
|
||||
while (start <= end) {
|
||||
tFloatingChars[start] &= ~id;
|
||||
start++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void lex_FloatAddRange(uint32_t id, uint16_t start, uint16_t end)
|
||||
{
|
||||
lex_CheckCharacterRange(start, end);
|
||||
|
||||
while (start <= end) {
|
||||
tFloatingChars[start] |= id;
|
||||
start++;
|
||||
if (lex_CheckCharacterRange(start, end)) {
|
||||
while (start <= end) {
|
||||
tFloatingChars[start] |= id;
|
||||
start++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void lex_FloatDeleteFirstRange(uint32_t id, uint16_t start, uint16_t end)
|
||||
{
|
||||
lex_CheckCharacterRange(start, end);
|
||||
|
||||
while (start <= end) {
|
||||
tFloatingFirstChar[start] &= ~id;
|
||||
start++;
|
||||
if (lex_CheckCharacterRange(start, end)) {
|
||||
while (start <= end) {
|
||||
tFloatingFirstChar[start] &= ~id;
|
||||
start++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void lex_FloatAddFirstRange(uint32_t id, uint16_t start, uint16_t end)
|
||||
{
|
||||
lex_CheckCharacterRange(start, end);
|
||||
|
||||
while (start <= end) {
|
||||
tFloatingFirstChar[start] |= id;
|
||||
start++;
|
||||
if (lex_CheckCharacterRange(start, end)) {
|
||||
while (start <= end) {
|
||||
tFloatingFirstChar[start] |= id;
|
||||
start++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void lex_FloatDeleteSecondRange(uint32_t id, uint16_t start, uint16_t end)
|
||||
{
|
||||
lex_CheckCharacterRange(start, end);
|
||||
|
||||
while (start <= end) {
|
||||
tFloatingSecondChar[start] &= ~id;
|
||||
start++;
|
||||
if (lex_CheckCharacterRange(start, end)) {
|
||||
while (start <= end) {
|
||||
tFloatingSecondChar[start] &= ~id;
|
||||
start++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void lex_FloatAddSecondRange(uint32_t id, uint16_t start, uint16_t end)
|
||||
{
|
||||
lex_CheckCharacterRange(start, end);
|
||||
|
||||
while (start <= end) {
|
||||
tFloatingSecondChar[start] |= id;
|
||||
start++;
|
||||
if (lex_CheckCharacterRange(start, end)) {
|
||||
while (start <= end) {
|
||||
tFloatingSecondChar[start] |= id;
|
||||
start++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -824,7 +826,7 @@ scanagain:
|
||||
nLineNo++;
|
||||
goto scanagain;
|
||||
} else {
|
||||
errx(1, "Expected a new line after the continuation character.");
|
||||
yyerror("Expected a new line after the continuation character.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -974,7 +976,7 @@ static uint32_t yylex_MACROARGS(void)
|
||||
ch = 0;
|
||||
break;
|
||||
} else {
|
||||
errx(1, "Expected a new line after the continuation character.");
|
||||
yyerror("Expected a new line after the continuation character.");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -142,7 +142,7 @@ void opt_Parse(char *s)
|
||||
newopt.gbgfx[2] = s[3];
|
||||
newopt.gbgfx[3] = s[4];
|
||||
} else {
|
||||
errx(1, "Must specify exactly 4 characters for option 'g'");
|
||||
yyerror("Must specify exactly 4 characters for option 'g'");
|
||||
}
|
||||
break;
|
||||
case 'b':
|
||||
@@ -150,7 +150,7 @@ void opt_Parse(char *s)
|
||||
newopt.binary[0] = s[1];
|
||||
newopt.binary[1] = s[2];
|
||||
} else {
|
||||
errx(1, "Must specify exactly 2 characters for option 'b'");
|
||||
yyerror("Must specify exactly 2 characters for option 'b'");
|
||||
}
|
||||
break;
|
||||
case 'z':
|
||||
@@ -159,16 +159,16 @@ void opt_Parse(char *s)
|
||||
unsigned int fillchar;
|
||||
|
||||
result = sscanf(&s[1], "%x", &fillchar);
|
||||
if (!((result == EOF) || (result == 1)))
|
||||
errx(1, "Invalid argument for option 'z'");
|
||||
|
||||
newopt.fillchar = fillchar;
|
||||
if (result != EOF && result != 1)
|
||||
yyerror("Invalid argument for option 'z'");
|
||||
else
|
||||
newopt.fillchar = fillchar;
|
||||
} else {
|
||||
errx(1, "Invalid argument for option 'z'");
|
||||
yyerror("Invalid argument for option 'z'");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
fatalerror("Unknown option");
|
||||
yyerror("Unknown option");
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user