Removed (pretty inconsistently used) tab chars from source code base.
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
/*****************************************************************************/
|
||||
/* */
|
||||
/* scanner.c */
|
||||
/* scanner.c */
|
||||
/* */
|
||||
/* Configuration file scanner for the ld65 linker */
|
||||
/* Configuration file scanner for the ld65 linker */
|
||||
/* */
|
||||
/* */
|
||||
/* */
|
||||
@@ -53,13 +53,13 @@
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Data */
|
||||
/* Data */
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
|
||||
/* Current token and attributes */
|
||||
cfgtok_t CfgTok;
|
||||
cfgtok_t CfgTok;
|
||||
StrBuf CfgSVal = STATIC_STRBUF_INITIALIZER;
|
||||
unsigned long CfgIVal;
|
||||
|
||||
@@ -67,17 +67,17 @@ unsigned long CfgIVal;
|
||||
FilePos CfgErrorPos;
|
||||
|
||||
/* Input source for the configuration */
|
||||
static const char* CfgName = 0;
|
||||
static const char* CfgName = 0;
|
||||
|
||||
/* Other input stuff */
|
||||
static int C = ' ';
|
||||
static int C = ' ';
|
||||
static FilePos InputPos;
|
||||
static FILE* InputFile = 0;
|
||||
static FILE* InputFile = 0;
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Error handling */
|
||||
/* Error handling */
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ void CfgError (const FilePos* Pos, const char* Format, ...)
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Code */
|
||||
/* Code */
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
@@ -130,13 +130,13 @@ static void NextChar (void)
|
||||
|
||||
/* Count columns */
|
||||
if (C != EOF) {
|
||||
++InputPos.Col;
|
||||
++InputPos.Col;
|
||||
}
|
||||
|
||||
/* Count lines */
|
||||
if (C == '\n') {
|
||||
++InputPos.Line;
|
||||
InputPos.Col = 0;
|
||||
++InputPos.Line;
|
||||
InputPos.Col = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,9 +146,9 @@ static unsigned DigitVal (int C)
|
||||
/* Return the value for a numeric digit */
|
||||
{
|
||||
if (isdigit (C)) {
|
||||
return C - '0';
|
||||
return C - '0';
|
||||
} else {
|
||||
return toupper (C) - 'A' + 10;
|
||||
return toupper (C) - 'A' + 10;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ void CfgNextTok (void)
|
||||
Again:
|
||||
/* Skip whitespace */
|
||||
while (isspace (C)) {
|
||||
NextChar ();
|
||||
NextChar ();
|
||||
}
|
||||
|
||||
/* Remember the current position */
|
||||
@@ -237,41 +237,41 @@ Again:
|
||||
/* Identifier? */
|
||||
if (C == '_' || IsAlpha (C)) {
|
||||
|
||||
/* Read the identifier */
|
||||
SB_Clear (&CfgSVal);
|
||||
while (C == '_' || IsAlNum (C)) {
|
||||
/* Read the identifier */
|
||||
SB_Clear (&CfgSVal);
|
||||
while (C == '_' || IsAlNum (C)) {
|
||||
SB_AppendChar (&CfgSVal, C);
|
||||
NextChar ();
|
||||
}
|
||||
SB_Terminate (&CfgSVal);
|
||||
CfgTok = CFGTOK_IDENT;
|
||||
return;
|
||||
NextChar ();
|
||||
}
|
||||
SB_Terminate (&CfgSVal);
|
||||
CfgTok = CFGTOK_IDENT;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Hex number? */
|
||||
if (C == '$') {
|
||||
NextChar ();
|
||||
if (!isxdigit (C)) {
|
||||
CfgError (&CfgErrorPos, "Hex digit expected");
|
||||
}
|
||||
CfgIVal = 0;
|
||||
while (isxdigit (C)) {
|
||||
CfgIVal = CfgIVal * 16 + DigitVal (C);
|
||||
NextChar ();
|
||||
}
|
||||
CfgTok = CFGTOK_INTCON;
|
||||
return;
|
||||
NextChar ();
|
||||
if (!isxdigit (C)) {
|
||||
CfgError (&CfgErrorPos, "Hex digit expected");
|
||||
}
|
||||
CfgIVal = 0;
|
||||
while (isxdigit (C)) {
|
||||
CfgIVal = CfgIVal * 16 + DigitVal (C);
|
||||
NextChar ();
|
||||
}
|
||||
CfgTok = CFGTOK_INTCON;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Decimal number? */
|
||||
if (isdigit (C)) {
|
||||
CfgIVal = 0;
|
||||
while (isdigit (C)) {
|
||||
CfgIVal = CfgIVal * 10 + DigitVal (C);
|
||||
NextChar ();
|
||||
}
|
||||
CfgTok = CFGTOK_INTCON;
|
||||
return;
|
||||
CfgIVal = 0;
|
||||
while (isdigit (C)) {
|
||||
CfgIVal = CfgIVal * 10 + DigitVal (C);
|
||||
NextChar ();
|
||||
}
|
||||
CfgTok = CFGTOK_INTCON;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Other characters */
|
||||
@@ -297,99 +297,99 @@ Again:
|
||||
CfgTok = CFGTOK_DIV;
|
||||
break;
|
||||
|
||||
case '(':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_LPAR;
|
||||
break;
|
||||
case '(':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_LPAR;
|
||||
break;
|
||||
|
||||
case ')':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_RPAR;
|
||||
break;
|
||||
case ')':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_RPAR;
|
||||
break;
|
||||
|
||||
case '{':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_LCURLY;
|
||||
break;
|
||||
case '{':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_LCURLY;
|
||||
break;
|
||||
|
||||
case '}':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_RCURLY;
|
||||
break;
|
||||
case '}':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_RCURLY;
|
||||
break;
|
||||
|
||||
case ';':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_SEMI;
|
||||
break;
|
||||
case ';':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_SEMI;
|
||||
break;
|
||||
|
||||
case '.':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_DOT;
|
||||
break;
|
||||
case '.':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_DOT;
|
||||
break;
|
||||
|
||||
case ',':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_COMMA;
|
||||
break;
|
||||
case ',':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_COMMA;
|
||||
break;
|
||||
|
||||
case '=':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_EQ;
|
||||
break;
|
||||
case '=':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_EQ;
|
||||
break;
|
||||
|
||||
case ':':
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_COLON;
|
||||
break;
|
||||
NextChar ();
|
||||
CfgTok = CFGTOK_COLON;
|
||||
break;
|
||||
|
||||
case '\"':
|
||||
StrVal ();
|
||||
break;
|
||||
break;
|
||||
|
||||
case '#':
|
||||
/* Comment */
|
||||
while (C != '\n' && C != EOF) {
|
||||
NextChar ();
|
||||
}
|
||||
if (C != EOF) {
|
||||
goto Again;
|
||||
}
|
||||
CfgTok = CFGTOK_EOF;
|
||||
break;
|
||||
/* Comment */
|
||||
while (C != '\n' && C != EOF) {
|
||||
NextChar ();
|
||||
}
|
||||
if (C != EOF) {
|
||||
goto Again;
|
||||
}
|
||||
CfgTok = CFGTOK_EOF;
|
||||
break;
|
||||
|
||||
case '%':
|
||||
NextChar ();
|
||||
switch (C) {
|
||||
NextChar ();
|
||||
switch (C) {
|
||||
|
||||
case 'O':
|
||||
NextChar ();
|
||||
if (OutputName) {
|
||||
case 'O':
|
||||
NextChar ();
|
||||
if (OutputName) {
|
||||
SB_CopyStr (&CfgSVal, OutputName);
|
||||
} else {
|
||||
SB_Clear (&CfgSVal);
|
||||
}
|
||||
} else {
|
||||
SB_Clear (&CfgSVal);
|
||||
}
|
||||
SB_Terminate (&CfgSVal);
|
||||
OutputNameUsed = 1;
|
||||
CfgTok = CFGTOK_STRCON;
|
||||
break;
|
||||
CfgTok = CFGTOK_STRCON;
|
||||
break;
|
||||
|
||||
case 'S':
|
||||
NextChar ();
|
||||
CfgIVal = StartAddr;
|
||||
CfgTok = CFGTOK_INTCON;
|
||||
break;
|
||||
case 'S':
|
||||
NextChar ();
|
||||
CfgIVal = StartAddr;
|
||||
CfgTok = CFGTOK_INTCON;
|
||||
break;
|
||||
|
||||
default:
|
||||
CfgError (&CfgErrorPos, "Invalid format specification");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
CfgError (&CfgErrorPos, "Invalid format specification");
|
||||
}
|
||||
break;
|
||||
|
||||
case EOF:
|
||||
CfgTok = CFGTOK_EOF;
|
||||
break;
|
||||
CfgTok = CFGTOK_EOF;
|
||||
break;
|
||||
|
||||
default:
|
||||
CfgError (&CfgErrorPos, "Invalid character `%c'", C);
|
||||
default:
|
||||
CfgError (&CfgErrorPos, "Invalid character `%c'", C);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -400,7 +400,7 @@ void CfgConsume (cfgtok_t T, const char* Msg)
|
||||
/* Skip a token, print an error message if not found */
|
||||
{
|
||||
if (CfgTok != T) {
|
||||
CfgError (&CfgErrorPos, "%s", Msg);
|
||||
CfgError (&CfgErrorPos, "%s", Msg);
|
||||
}
|
||||
CfgNextTok ();
|
||||
}
|
||||
@@ -427,7 +427,7 @@ void CfgOptionalComma (void)
|
||||
/* Consume a comma if there is one */
|
||||
{
|
||||
if (CfgTok == CFGTOK_COMMA) {
|
||||
CfgNextTok ();
|
||||
CfgNextTok ();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -437,7 +437,7 @@ void CfgOptionalAssign (void)
|
||||
/* Consume an equal sign if there is one */
|
||||
{
|
||||
if (CfgTok == CFGTOK_EQ) {
|
||||
CfgNextTok ();
|
||||
CfgNextTok ();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -447,7 +447,7 @@ void CfgAssureInt (void)
|
||||
/* Make sure the next token is an integer */
|
||||
{
|
||||
if (CfgTok != CFGTOK_INTCON) {
|
||||
CfgError (&CfgErrorPos, "Integer constant expected");
|
||||
CfgError (&CfgErrorPos, "Integer constant expected");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -457,7 +457,7 @@ void CfgAssureStr (void)
|
||||
/* Make sure the next token is a string constant */
|
||||
{
|
||||
if (CfgTok != CFGTOK_STRCON) {
|
||||
CfgError (&CfgErrorPos, "String constant expected");
|
||||
CfgError (&CfgErrorPos, "String constant expected");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -467,7 +467,7 @@ void CfgAssureIdent (void)
|
||||
/* Make sure the next token is an identifier */
|
||||
{
|
||||
if (CfgTok != CFGTOK_IDENT) {
|
||||
CfgError (&CfgErrorPos, "Identifier expected");
|
||||
CfgError (&CfgErrorPos, "Identifier expected");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -477,7 +477,7 @@ void CfgRangeCheck (unsigned long Lo, unsigned long Hi)
|
||||
/* Check the range of CfgIVal */
|
||||
{
|
||||
if (CfgIVal < Lo || CfgIVal > Hi) {
|
||||
CfgError (&CfgErrorPos, "Range error");
|
||||
CfgError (&CfgErrorPos, "Range error");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -491,16 +491,16 @@ void CfgSpecialToken (const IdentTok* Table, unsigned Size, const char* Name)
|
||||
/* We need an identifier */
|
||||
if (CfgTok == CFGTOK_IDENT) {
|
||||
|
||||
/* Make it upper case */
|
||||
/* Make it upper case */
|
||||
SB_ToUpper (&CfgSVal);
|
||||
|
||||
/* Linear search */
|
||||
for (I = 0; I < Size; ++I) {
|
||||
if (SB_CompareStr (&CfgSVal, Table[I].Ident) == 0) {
|
||||
CfgTok = Table[I].Tok;
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* Linear search */
|
||||
for (I = 0; I < Size; ++I) {
|
||||
if (SB_CompareStr (&CfgSVal, Table[I].Ident) == 0) {
|
||||
CfgTok = Table[I].Tok;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -514,21 +514,21 @@ void CfgBoolToken (void)
|
||||
/* Map an identifier or integer to a boolean token */
|
||||
{
|
||||
static const IdentTok Booleans [] = {
|
||||
{ "YES", CFGTOK_TRUE },
|
||||
{ "NO", CFGTOK_FALSE },
|
||||
{ "YES", CFGTOK_TRUE },
|
||||
{ "NO", CFGTOK_FALSE },
|
||||
{ "TRUE", CFGTOK_TRUE },
|
||||
{ "FALSE", CFGTOK_FALSE },
|
||||
};
|
||||
|
||||
/* If we have an identifier, map it to a boolean token */
|
||||
if (CfgTok == CFGTOK_IDENT) {
|
||||
CfgSpecialToken (Booleans, ENTRY_COUNT (Booleans), "Boolean");
|
||||
CfgSpecialToken (Booleans, ENTRY_COUNT (Booleans), "Boolean");
|
||||
} else {
|
||||
/* We expected an integer here */
|
||||
if (CfgTok != CFGTOK_INTCON) {
|
||||
CfgError (&CfgErrorPos, "Boolean value expected");
|
||||
}
|
||||
CfgTok = (CfgIVal == 0)? CFGTOK_FALSE : CFGTOK_TRUE;
|
||||
/* We expected an integer here */
|
||||
if (CfgTok != CFGTOK_INTCON) {
|
||||
CfgError (&CfgErrorPos, "Boolean value expected");
|
||||
}
|
||||
CfgTok = (CfgIVal == 0)? CFGTOK_FALSE : CFGTOK_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -577,7 +577,7 @@ void CfgCloseInput (void)
|
||||
/* Close the input file if we had one */
|
||||
if (InputFile) {
|
||||
(void) fclose (InputFile);
|
||||
InputFile = 0;
|
||||
InputFile = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user