initial strings suppport in config file
This commit is contained in:
1 parent
4907a146da
commit
82c5c92959
6 files changed
+107
-104
No files matched your search
+8
-17
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
;; #CONFIG# PLATFORM_COMMODORE_64 YES
|
;; #CONFIG# PLATFORM_COMMODORE_64 YES
|
||||||
;; #CONFIG# BRAND_CUSTOM_BUILD YES
|
;; #CONFIG# BRAND_CUSTOM_BUILD YES
|
||||||
!macro CONFIG_CUSTOM_BRAND { !pet "custom build" }
|
;; #CONFIG# CUSTOM_BRAND "CUSTOM BUILD"
|
||||||
|
|
||||||
|
|
||||||
; --- Processor instruction set
|
; --- Processor instruction set
|
||||||
@@ -94,25 +94,16 @@
|
|||||||
!pet "l"
|
!pet "l"
|
||||||
}
|
}
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F1 YES
|
;; #CONFIG# KEYCMD_F1 "@8$"
|
||||||
!macro CONFIG_KEYCMD_F1 { !pet "@" }
|
;; #CONFIG# KEYCMD_F2 "LOAD"
|
||||||
;; #CONFIG# KEYCMD_F2 NO
|
;; #CONFIG# KEYCMD_F3 "@9$"
|
||||||
; !macro CONFIG_KEYCMD_F2 { !pet "" }
|
;; #CONFIG# KEYCMD_F4 "RUN:"
|
||||||
;; #CONFIG# KEYCMD_F3 YES
|
;; #CONFIG# KEYCMD_F5 "@10$"
|
||||||
!macro CONFIG_KEYCMD_F3 { !pet "run:" }
|
|
||||||
;; #CONFIG# KEYCMD_F4 NO
|
|
||||||
; !macro CONFIG_KEYCMD_F4 { !pet "" }
|
|
||||||
;; #CONFIG# KEYCMD_F5 YES
|
|
||||||
!macro CONFIG_KEYCMD_F5 { !pet "load" }
|
|
||||||
;; #CONFIG# KEYCMD_F6 NO
|
;; #CONFIG# KEYCMD_F6 NO
|
||||||
; !macro CONFIG_KEYCMD_F6 { !pet "" }
|
;; #CONFIG# KEYCMD_F7 "@11$"
|
||||||
;; #CONFIG# KEYCMD_F7 YES
|
|
||||||
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
|
|
||||||
;; #CONFIG# KEYCMD_F8 NO
|
;; #CONFIG# KEYCMD_F8 NO
|
||||||
; !macro CONFIG_KEYCMD_F8 { !pet "" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_HELP YES
|
;; #CONFIG# KEYCMD_HELP "LIST"
|
||||||
!macro CONFIG_KEYCMD_HELP { !pet "list" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F9 NO
|
;; #CONFIG# KEYCMD_F9 NO
|
||||||
;; #CONFIG# KEYCMD_F10 NO
|
;; #CONFIG# KEYCMD_F10 NO
|
||||||
|
|||||||
+7
-16
@@ -82,25 +82,16 @@
|
|||||||
!pet "l"
|
!pet "l"
|
||||||
}
|
}
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F1 YES
|
;; #CONFIG# KEYCMD_F1 "@8$"
|
||||||
!macro CONFIG_KEYCMD_F1 { !pet "@" }
|
;; #CONFIG# KEYCMD_F2 "LOAD"
|
||||||
;; #CONFIG# KEYCMD_F2 NO
|
;; #CONFIG# KEYCMD_F3 "@9$"
|
||||||
; !macro CONFIG_KEYCMD_F2 { !pet "" }
|
;; #CONFIG# KEYCMD_F4 "RUN:"
|
||||||
;; #CONFIG# KEYCMD_F3 YES
|
;; #CONFIG# KEYCMD_F5 "@10$"
|
||||||
!macro CONFIG_KEYCMD_F3 { !pet "run:" }
|
|
||||||
;; #CONFIG# KEYCMD_F4 NO
|
|
||||||
; !macro CONFIG_KEYCMD_F4 { !pet "" }
|
|
||||||
;; #CONFIG# KEYCMD_F5 YES
|
|
||||||
!macro CONFIG_KEYCMD_F5 { !pet "load" }
|
|
||||||
;; #CONFIG# KEYCMD_F6 NO
|
;; #CONFIG# KEYCMD_F6 NO
|
||||||
; !macro CONFIG_KEYCMD_F6 { !pet "" }
|
;; #CONFIG# KEYCMD_F7 "@11$"
|
||||||
;; #CONFIG# KEYCMD_F7 YES
|
|
||||||
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
|
|
||||||
;; #CONFIG# KEYCMD_F8 NO
|
;; #CONFIG# KEYCMD_F8 NO
|
||||||
; !macro CONFIG_KEYCMD_F8 { !pet "" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_HELP YES
|
;; #CONFIG# KEYCMD_HELP "LIST"
|
||||||
!macro CONFIG_KEYCMD_HELP { !pet "list" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F9 NO
|
;; #CONFIG# KEYCMD_F9 NO
|
||||||
;; #CONFIG# KEYCMD_F10 NO
|
;; #CONFIG# KEYCMD_F10 NO
|
||||||
|
|||||||
+13
-28
@@ -61,38 +61,23 @@
|
|||||||
!byte $5F
|
!byte $5F
|
||||||
!pet "l" }
|
!pet "l" }
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F1 YES
|
;; #CONFIG# KEYCMD_F1 "@8$"
|
||||||
!macro CONFIG_KEYCMD_F1 { !pet "@" }
|
;; #CONFIG# KEYCMD_F2 "LOAD"
|
||||||
;; #CONFIG# KEYCMD_F2 NO
|
;; #CONFIG# KEYCMD_F3 "@9$"
|
||||||
; !macro CONFIG_KEYCMD_F2 { !pet "" }
|
;; #CONFIG# KEYCMD_F4 "RUN:"
|
||||||
;; #CONFIG# KEYCMD_F3 YES
|
;; #CONFIG# KEYCMD_F5 "@10$"
|
||||||
!macro CONFIG_KEYCMD_F3 { !pet "run:" }
|
|
||||||
;; #CONFIG# KEYCMD_F4 NO
|
|
||||||
; !macro CONFIG_KEYCMD_F4 { !pet "" }
|
|
||||||
;; #CONFIG# KEYCMD_F5 YES
|
|
||||||
!macro CONFIG_KEYCMD_F5 { !pet "load" }
|
|
||||||
;; #CONFIG# KEYCMD_F6 NO
|
;; #CONFIG# KEYCMD_F6 NO
|
||||||
; !macro CONFIG_KEYCMD_F6 { !pet "" }
|
;; #CONFIG# KEYCMD_F7 "@11$"
|
||||||
;; #CONFIG# KEYCMD_F7 YES
|
|
||||||
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
|
|
||||||
;; #CONFIG# KEYCMD_F8 NO
|
;; #CONFIG# KEYCMD_F8 NO
|
||||||
; !macro CONFIG_KEYCMD_F8 { !pet "" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_HELP YES
|
;; #CONFIG# KEYCMD_HELP "LIST"
|
||||||
!macro CONFIG_KEYCMD_HELP { !pet "list" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F9 YES
|
;; #CONFIG# KEYCMD_F9 "REM F9"
|
||||||
!macro CONFIG_KEYCMD_F9 { !pet "rem f9" }
|
;; #CONFIG# KEYCMD_F10 "REM F10"
|
||||||
;; #CONFIG# KEYCMD_F10 YES
|
;; #CONFIG# KEYCMD_F11 "REM F11"
|
||||||
!macro CONFIG_KEYCMD_F10 { !pet "rem f10" }
|
;; #CONFIG# KEYCMD_F12 "REM F12"
|
||||||
;; #CONFIG# KEYCMD_F11 YES
|
;; #CONFIG# KEYCMD_F13 "REM F13"
|
||||||
!macro CONFIG_KEYCMD_F11 { !pet "rem f11" }
|
;; #CONFIG# KEYCMD_F14 "REM F14"
|
||||||
;; #CONFIG# KEYCMD_F12 YES
|
|
||||||
!macro CONFIG_KEYCMD_F12 { !pet "rem f12" }
|
|
||||||
;; #CONFIG# KEYCMD_F13 YES
|
|
||||||
!macro CONFIG_KEYCMD_F13 { !pet "rem f13" }
|
|
||||||
;; #CONFIG# KEYCMD_F14 YES
|
|
||||||
!macro CONFIG_KEYCMD_F14 { !pet "rem f14" }
|
|
||||||
|
|
||||||
|
|
||||||
; --- Screen editor
|
; --- Screen editor
|
||||||
|
|||||||
+7
-16
@@ -82,25 +82,16 @@
|
|||||||
!pet "l"
|
!pet "l"
|
||||||
}
|
}
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F1 YES
|
;; #CONFIG# KEYCMD_F1 "@8$"
|
||||||
!macro CONFIG_KEYCMD_F1 { !pet "@" }
|
;; #CONFIG# KEYCMD_F2 "LOAD"
|
||||||
;; #CONFIG# KEYCMD_F2 NO
|
;; #CONFIG# KEYCMD_F3 "@9$"
|
||||||
; !macro CONFIG_KEYCMD_F2 { !pet "" }
|
;; #CONFIG# KEYCMD_F4 "RUN:"
|
||||||
;; #CONFIG# KEYCMD_F3 YES
|
;; #CONFIG# KEYCMD_F5 "@10$"
|
||||||
!macro CONFIG_KEYCMD_F3 { !pet "run:" }
|
|
||||||
;; #CONFIG# KEYCMD_F4 NO
|
|
||||||
; !macro CONFIG_KEYCMD_F4 { !pet "" }
|
|
||||||
;; #CONFIG# KEYCMD_F5 YES
|
|
||||||
!macro CONFIG_KEYCMD_F5 { !pet "load" }
|
|
||||||
;; #CONFIG# KEYCMD_F6 NO
|
;; #CONFIG# KEYCMD_F6 NO
|
||||||
; !macro CONFIG_KEYCMD_F6 { !pet "" }
|
;; #CONFIG# KEYCMD_F7 "@11$"
|
||||||
;; #CONFIG# KEYCMD_F7 YES
|
|
||||||
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
|
|
||||||
;; #CONFIG# KEYCMD_F8 NO
|
;; #CONFIG# KEYCMD_F8 NO
|
||||||
; !macro CONFIG_KEYCMD_F8 { !pet "" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_HELP YES
|
;; #CONFIG# KEYCMD_HELP "LIST"
|
||||||
!macro CONFIG_KEYCMD_HELP { !pet "list" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F9 NO
|
;; #CONFIG# KEYCMD_F9 NO
|
||||||
;; #CONFIG# KEYCMD_F10 NO
|
;; #CONFIG# KEYCMD_F10 NO
|
||||||
|
|||||||
@@ -72,25 +72,16 @@
|
|||||||
!pet "l"
|
!pet "l"
|
||||||
}
|
}
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F1 YES
|
;; #CONFIG# KEYCMD_F1 "@8$"
|
||||||
!macro CONFIG_KEYCMD_F1 { !pet "@" }
|
;; #CONFIG# KEYCMD_F2 "LOAD"
|
||||||
;; #CONFIG# KEYCMD_F2 NO
|
;; #CONFIG# KEYCMD_F3 "@9$"
|
||||||
; !macro CONFIG_KEYCMD_F2 { !pet "" }
|
;; #CONFIG# KEYCMD_F4 "RUN:"
|
||||||
;; #CONFIG# KEYCMD_F3 YES
|
;; #CONFIG# KEYCMD_F5 "@10$"
|
||||||
!macro CONFIG_KEYCMD_F3 { !pet "run:" }
|
|
||||||
;; #CONFIG# KEYCMD_F4 NO
|
|
||||||
; !macro CONFIG_KEYCMD_F4 { !pet "" }
|
|
||||||
;; #CONFIG# KEYCMD_F5 YES
|
|
||||||
!macro CONFIG_KEYCMD_F5 { !pet "load" }
|
|
||||||
;; #CONFIG# KEYCMD_F6 NO
|
;; #CONFIG# KEYCMD_F6 NO
|
||||||
; !macro CONFIG_KEYCMD_F6 { !pet "" }
|
;; #CONFIG# KEYCMD_F7 "@11$"
|
||||||
;; #CONFIG# KEYCMD_F7 YES
|
|
||||||
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
|
|
||||||
;; #CONFIG# KEYCMD_F8 NO
|
;; #CONFIG# KEYCMD_F8 NO
|
||||||
; !macro CONFIG_KEYCMD_F8 { !pet "" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_HELP YES
|
;; #CONFIG# KEYCMD_HELP "LIST"
|
||||||
!macro CONFIG_KEYCMD_HELP { !pet "list" }
|
|
||||||
|
|
||||||
;; #CONFIG# KEYCMD_F9 NO
|
;; #CONFIG# KEYCMD_F9 NO
|
||||||
;; #CONFIG# KEYCMD_F10 NO
|
;; #CONFIG# KEYCMD_F10 NO
|
||||||
|
|||||||
+65
-11
@@ -108,17 +108,18 @@ private:
|
|||||||
bool layoutProcessingDone;
|
bool layoutProcessingDone;
|
||||||
|
|
||||||
typedef struct ConfigEntry {
|
typedef struct ConfigEntry {
|
||||||
std::string key;
|
std::string key;
|
||||||
std::string valStr; // XXX add support for string values
|
std::vector<uint8_t> valBlob;
|
||||||
uint32_t valInt;
|
uint32_t valInt;
|
||||||
bool valIntValid;
|
bool valIntValid;
|
||||||
} ConfigEntry;
|
} ConfigEntry;
|
||||||
|
|
||||||
std::map<uint32_t, ConfigEntry> configEntries;
|
std::map<uint32_t, ConfigEntry> configEntries;
|
||||||
|
|
||||||
void preprocessLine(const std::string &line, uint32_t lineNum);
|
void preprocessLine(const std::string &line, uint32_t lineNum);
|
||||||
void preprocessLine_Alias(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter, uint32_t lineNum);
|
void preprocessLine_Alias(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter, uint32_t lineNum);
|
||||||
void preprocessLine_Config(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter, uint32_t lineNum);
|
void preprocessLine_Config(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter,
|
||||||
|
const std::string &line, uint32_t lineNum);
|
||||||
void preprocessLine_Import(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter);
|
void preprocessLine_Import(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter);
|
||||||
void preprocessLine_Layout(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter);
|
void preprocessLine_Layout(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter);
|
||||||
};
|
};
|
||||||
@@ -712,8 +713,7 @@ void SourceFile::preprocess()
|
|||||||
}
|
}
|
||||||
else if (configEntries.find(lineNum) != configEntries.end())
|
else if (configEntries.find(lineNum) != configEntries.end())
|
||||||
{
|
{
|
||||||
// XXX add spacing
|
|
||||||
// XXX add support for string values
|
|
||||||
outStream << "!set CONFIG_" << configEntries[lineNum].key << " = ";
|
outStream << "!set CONFIG_" << configEntries[lineNum].key << " = ";
|
||||||
if (configEntries[lineNum].valIntValid)
|
if (configEntries[lineNum].valIntValid)
|
||||||
{
|
{
|
||||||
@@ -726,6 +726,20 @@ void SourceFile::preprocess()
|
|||||||
|
|
||||||
outStream << " " << line;
|
outStream << " " << line;
|
||||||
|
|
||||||
|
if (!configEntries[lineNum].valBlob.empty())
|
||||||
|
{
|
||||||
|
outStream << "\n!macro CONFIG_" << configEntries[lineNum].key << " { !byte ";
|
||||||
|
|
||||||
|
bool first = true;
|
||||||
|
for (auto &byte : configEntries[lineNum].valBlob)
|
||||||
|
{
|
||||||
|
outStream << std::string(first ? "$" : ", $") << std::string((byte < 10) ? "0" : "") <<
|
||||||
|
std::hex << (int) byte;
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
outStream << " }";
|
||||||
|
}
|
||||||
|
|
||||||
const std::string outString = outStream.str();
|
const std::string outString = outStream.str();
|
||||||
content.insert(content.end(), outString.begin(), outString.end());
|
content.insert(content.end(), outString.begin(), outString.end());
|
||||||
}
|
}
|
||||||
@@ -768,7 +782,7 @@ void SourceFile::preprocessLine(const std::string &line, uint32_t lineNum)
|
|||||||
// Check if supported directive
|
// Check if supported directive
|
||||||
|
|
||||||
if (iter->compare("#ALIAS#") == 0) preprocessLine_Alias(tokens, ++iter, lineNum);
|
if (iter->compare("#ALIAS#") == 0) preprocessLine_Alias(tokens, ++iter, lineNum);
|
||||||
else if (iter->compare("#CONFIG#") == 0) preprocessLine_Config(tokens, ++iter, lineNum);
|
else if (iter->compare("#CONFIG#") == 0) preprocessLine_Config(tokens, ++iter, line, lineNum);
|
||||||
else if (iter->compare("#IMPORT#") == 0) preprocessLine_Import(tokens, ++iter);
|
else if (iter->compare("#IMPORT#") == 0) preprocessLine_Import(tokens, ++iter);
|
||||||
else if (iter->compare("#LAYOUT#") == 0) preprocessLine_Layout(tokens, ++iter);
|
else if (iter->compare("#LAYOUT#") == 0) preprocessLine_Layout(tokens, ++iter);
|
||||||
}
|
}
|
||||||
@@ -803,7 +817,8 @@ void SourceFile::preprocessLine_Alias(const std::list<std::string> &tokens, std:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SourceFile::preprocessLine_Config(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter, uint32_t lineNum)
|
void SourceFile::preprocessLine_Config(const std::list<std::string> &tokens, std::list<std::string>::iterator &iter,
|
||||||
|
const std::string &line, uint32_t lineNum)
|
||||||
{
|
{
|
||||||
if (ignore) return;
|
if (ignore) return;
|
||||||
|
|
||||||
@@ -821,6 +836,46 @@ void SourceFile::preprocessLine_Config(const std::list<std::string> &tokens, std
|
|||||||
configEntries[lineNum].key = key;
|
configEntries[lineNum].key = key;
|
||||||
configEntries[lineNum].valIntValid = false;
|
configEntries[lineNum].valIntValid = false;
|
||||||
}
|
}
|
||||||
|
else if (valStr.length() > 1 && valStr[0] == '"')
|
||||||
|
{
|
||||||
|
// This is a string value
|
||||||
|
|
||||||
|
auto pos = line.find('"', 0);
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
char byte;
|
||||||
|
auto advance = [&byte, &line, &pos]()
|
||||||
|
{
|
||||||
|
if ((line.size() <= ++pos) || (line[pos] == '\n')) ERROR("syntax error, unfinished string in '#CONFIG#'");
|
||||||
|
byte = line[pos];
|
||||||
|
};
|
||||||
|
|
||||||
|
advance();
|
||||||
|
|
||||||
|
// Convert string from ASCII to PETSCII
|
||||||
|
|
||||||
|
if (byte == '"') break;
|
||||||
|
if (byte == '\\')
|
||||||
|
{
|
||||||
|
advance();
|
||||||
|
|
||||||
|
if (byte == '"')
|
||||||
|
{
|
||||||
|
configEntries[lineNum].valBlob.push_back(byte);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX handle hex values
|
||||||
|
}
|
||||||
|
else if ((byte >= 0x20 && byte <= 0x5B) || byte == 0x5D) configEntries[lineNum].valBlob.push_back(byte);
|
||||||
|
else ERROR("syntax error, invalid character in string in '#CONFIG#'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configEntries[lineNum].valBlob.empty()) ERROR("syntax error, empty string in '#CONFIG#'");
|
||||||
|
|
||||||
|
configEntries[lineNum].key = key;
|
||||||
|
configEntries[lineNum].valIntValid = false;
|
||||||
|
}
|
||||||
else if (valStr.length() > 1 && valStr[0] == '$')
|
else if (valStr.length() > 1 && valStr[0] == '$')
|
||||||
{
|
{
|
||||||
// This is a hexadecimal value
|
// This is a hexadecimal value
|
||||||
@@ -857,8 +912,7 @@ void SourceFile::preprocessLine_Config(const std::list<std::string> &tokens, std
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// XXX add support for string values
|
ERROR("syntax error, unknown key in '#CONFIG#' line ");
|
||||||
ERROR("syntax error, unknown key in '#CONFIG#'");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user