initial strings suppport in config file

This commit is contained in:
FeralChild64 committed 2020-09-22 19:24:06 +02:00
1 parent 4907a146da
commit 82c5c92959
6 files changed
+107 -104

No files matched your search

+8 -17
View File
@@ -15,7 +15,7 @@
;; #CONFIG# PLATFORM_COMMODORE_64 YES
;; #CONFIG# BRAND_CUSTOM_BUILD YES
!macro CONFIG_CUSTOM_BRAND { !pet "custom build" }
;; #CONFIG# CUSTOM_BRAND "CUSTOM BUILD"
; --- Processor instruction set
@@ -94,25 +94,16 @@
!pet "l"
}
;; #CONFIG# KEYCMD_F1 YES
!macro CONFIG_KEYCMD_F1 { !pet "@" }
;; #CONFIG# KEYCMD_F2 NO
; !macro CONFIG_KEYCMD_F2 { !pet "" }
;; #CONFIG# KEYCMD_F3 YES
!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_F1 "@8$"
;; #CONFIG# KEYCMD_F2 "LOAD"
;; #CONFIG# KEYCMD_F3 "@9$"
;; #CONFIG# KEYCMD_F4 "RUN:"
;; #CONFIG# KEYCMD_F5 "@10$"
;; #CONFIG# KEYCMD_F6 NO
; !macro CONFIG_KEYCMD_F6 { !pet "" }
;; #CONFIG# KEYCMD_F7 YES
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
;; #CONFIG# KEYCMD_F7 "@11$"
;; #CONFIG# KEYCMD_F8 NO
; !macro CONFIG_KEYCMD_F8 { !pet "" }
;; #CONFIG# KEYCMD_HELP YES
!macro CONFIG_KEYCMD_HELP { !pet "list" }
;; #CONFIG# KEYCMD_HELP "LIST"
;; #CONFIG# KEYCMD_F9 NO
;; #CONFIG# KEYCMD_F10 NO
+7 -16
View File
@@ -82,25 +82,16 @@
!pet "l"
}
;; #CONFIG# KEYCMD_F1 YES
!macro CONFIG_KEYCMD_F1 { !pet "@" }
;; #CONFIG# KEYCMD_F2 NO
; !macro CONFIG_KEYCMD_F2 { !pet "" }
;; #CONFIG# KEYCMD_F3 YES
!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_F1 "@8$"
;; #CONFIG# KEYCMD_F2 "LOAD"
;; #CONFIG# KEYCMD_F3 "@9$"
;; #CONFIG# KEYCMD_F4 "RUN:"
;; #CONFIG# KEYCMD_F5 "@10$"
;; #CONFIG# KEYCMD_F6 NO
; !macro CONFIG_KEYCMD_F6 { !pet "" }
;; #CONFIG# KEYCMD_F7 YES
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
;; #CONFIG# KEYCMD_F7 "@11$"
;; #CONFIG# KEYCMD_F8 NO
; !macro CONFIG_KEYCMD_F8 { !pet "" }
;; #CONFIG# KEYCMD_HELP YES
!macro CONFIG_KEYCMD_HELP { !pet "list" }
;; #CONFIG# KEYCMD_HELP "LIST"
;; #CONFIG# KEYCMD_F9 NO
;; #CONFIG# KEYCMD_F10 NO
+13 -28
View File
@@ -61,38 +61,23 @@
!byte $5F
!pet "l" }
;; #CONFIG# KEYCMD_F1 YES
!macro CONFIG_KEYCMD_F1 { !pet "@" }
;; #CONFIG# KEYCMD_F2 NO
; !macro CONFIG_KEYCMD_F2 { !pet "" }
;; #CONFIG# KEYCMD_F3 YES
!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_F1 "@8$"
;; #CONFIG# KEYCMD_F2 "LOAD"
;; #CONFIG# KEYCMD_F3 "@9$"
;; #CONFIG# KEYCMD_F4 "RUN:"
;; #CONFIG# KEYCMD_F5 "@10$"
;; #CONFIG# KEYCMD_F6 NO
; !macro CONFIG_KEYCMD_F6 { !pet "" }
;; #CONFIG# KEYCMD_F7 YES
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
;; #CONFIG# KEYCMD_F7 "@11$"
;; #CONFIG# KEYCMD_F8 NO
; !macro CONFIG_KEYCMD_F8 { !pet "" }
;; #CONFIG# KEYCMD_HELP YES
!macro CONFIG_KEYCMD_HELP { !pet "list" }
;; #CONFIG# KEYCMD_HELP "LIST"
;; #CONFIG# KEYCMD_F9 YES
!macro CONFIG_KEYCMD_F9 { !pet "rem f9" }
;; #CONFIG# KEYCMD_F10 YES
!macro CONFIG_KEYCMD_F10 { !pet "rem f10" }
;; #CONFIG# KEYCMD_F11 YES
!macro CONFIG_KEYCMD_F11 { !pet "rem f11" }
;; #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" }
;; #CONFIG# KEYCMD_F9 "REM F9"
;; #CONFIG# KEYCMD_F10 "REM F10"
;; #CONFIG# KEYCMD_F11 "REM F11"
;; #CONFIG# KEYCMD_F12 "REM F12"
;; #CONFIG# KEYCMD_F13 "REM F13"
;; #CONFIG# KEYCMD_F14 "REM F14"
; --- Screen editor
+7 -16
View File
@@ -82,25 +82,16 @@
!pet "l"
}
;; #CONFIG# KEYCMD_F1 YES
!macro CONFIG_KEYCMD_F1 { !pet "@" }
;; #CONFIG# KEYCMD_F2 NO
; !macro CONFIG_KEYCMD_F2 { !pet "" }
;; #CONFIG# KEYCMD_F3 YES
!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_F1 "@8$"
;; #CONFIG# KEYCMD_F2 "LOAD"
;; #CONFIG# KEYCMD_F3 "@9$"
;; #CONFIG# KEYCMD_F4 "RUN:"
;; #CONFIG# KEYCMD_F5 "@10$"
;; #CONFIG# KEYCMD_F6 NO
; !macro CONFIG_KEYCMD_F6 { !pet "" }
;; #CONFIG# KEYCMD_F7 YES
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
;; #CONFIG# KEYCMD_F7 "@11$"
;; #CONFIG# KEYCMD_F8 NO
; !macro CONFIG_KEYCMD_F8 { !pet "" }
;; #CONFIG# KEYCMD_HELP YES
!macro CONFIG_KEYCMD_HELP { !pet "list" }
;; #CONFIG# KEYCMD_HELP "LIST"
;; #CONFIG# KEYCMD_F9 NO
;; #CONFIG# KEYCMD_F10 NO
+7 -16
View File
@@ -72,25 +72,16 @@
!pet "l"
}
;; #CONFIG# KEYCMD_F1 YES
!macro CONFIG_KEYCMD_F1 { !pet "@" }
;; #CONFIG# KEYCMD_F2 NO
; !macro CONFIG_KEYCMD_F2 { !pet "" }
;; #CONFIG# KEYCMD_F3 YES
!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_F1 "@8$"
;; #CONFIG# KEYCMD_F2 "LOAD"
;; #CONFIG# KEYCMD_F3 "@9$"
;; #CONFIG# KEYCMD_F4 "RUN:"
;; #CONFIG# KEYCMD_F5 "@10$"
;; #CONFIG# KEYCMD_F6 NO
; !macro CONFIG_KEYCMD_F6 { !pet "" }
;; #CONFIG# KEYCMD_F7 YES
!macro CONFIG_KEYCMD_F7 { !pet "@$" }
;; #CONFIG# KEYCMD_F7 "@11$"
;; #CONFIG# KEYCMD_F8 NO
; !macro CONFIG_KEYCMD_F8 { !pet "" }
;; #CONFIG# KEYCMD_HELP YES
!macro CONFIG_KEYCMD_HELP { !pet "list" }
;; #CONFIG# KEYCMD_HELP "LIST"
;; #CONFIG# KEYCMD_F9 NO
;; #CONFIG# KEYCMD_F10 NO
+65 -11
View File
@@ -108,17 +108,18 @@ private:
bool layoutProcessingDone;
typedef struct ConfigEntry {
std::string key;
std::string valStr; // XXX add support for string values
uint32_t valInt;
bool valIntValid;
std::string key;
std::vector<uint8_t> valBlob;
uint32_t valInt;
bool valIntValid;
} ConfigEntry;
std::map<uint32_t, ConfigEntry> configEntries;
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_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_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())
{
// XXX add spacing
// XXX add support for string values
outStream << "!set CONFIG_" << configEntries[lineNum].key << " = ";
if (configEntries[lineNum].valIntValid)
{
@@ -726,6 +726,20 @@ void SourceFile::preprocess()
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();
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
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("#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;
@@ -821,6 +836,46 @@ void SourceFile::preprocessLine_Config(const std::list<std::string> &tokens, std
configEntries[lineNum].key = key;
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] == '$')
{
// This is a hexadecimal value
@@ -857,8 +912,7 @@ void SourceFile::preprocessLine_Config(const std::list<std::string> &tokens, std
}
else
{
// XXX add support for string values
ERROR("syntax error, unknown key in '#CONFIG#'");
ERROR("syntax error, unknown key in '#CONFIG#' line ");
}
}