CAssemblerCommand* parseDirectiveTable(Parser& parser, int flags) { const Token& start = parser.peekToken(); std::vector<Expression> list; if (parser.parseExpressionList(list,1,2) == false) return nullptr; std::wstring fileName; if (list[0].evaluateString(fileName,true) == false) { parser.printError(start,L"Invalid file name"); return nullptr; } TextFile::Encoding encoding = TextFile::GUESS; if (list.size() == 2) { std::wstring encodingName; if (list[1].evaluateString(encodingName,true) == false) { parser.printError(start,L"Invalid encoding name"); return nullptr; } encoding = getEncodingFromString(encodingName); } return new TableCommand(fileName,encoding); }
CAssemblerCommand* parseDirectiveInclude(Parser& parser, int flags) { const Token& start = parser.peekToken(); std::vector<Expression> parameters; if (parser.parseExpressionList(parameters,1,2) == false) return nullptr; std::wstring fileName; if (parameters[0].evaluateString(fileName,true) == false) return nullptr; fileName = getFullPathName(fileName); TextFile::Encoding encoding = TextFile::GUESS; if (parameters.size() == 2) { std::wstring encodingName; if (parameters[1].evaluateString(encodingName,true) == false && parameters[1].evaluateIdentifier(encodingName) == false) return nullptr; encoding = getEncodingFromString(encodingName); } // don't include the file if it's inside a false block if (parser.isInsideTrueBlock() == false) return new DummyCommand(); if (fileExists(fileName) == false) { parser.printError(start,L"Included file \"%s\" does not exist",fileName); return nullptr; } TextFile f; if (f.open(fileName,TextFile::Read,encoding) == false) { parser.printError(start,L"Could not open included file \"%s\"",fileName); return nullptr; } return parser.parseFile(f); }
bool DirectiveInclude(ArgumentList& List, int flags) { std::wstring fileName = getFullPathName(List[0].text); TextFile::Encoding encoding = TextFile::GUESS; if (List.size() == 2) encoding = getEncodingFromString(List[1].text); int FileNum = Global.FileInfo.FileNum; int LineNum = Global.FileInfo.LineNumber; if (fileExists(fileName) == false) { Logger::printError(Logger::Error,L"Included file \"%s\" does not exist",fileName.c_str()); return false; } LoadAssemblyFile(fileName,encoding); Global.FileInfo.FileNum = FileNum; Global.FileInfo.LineNumber = LineNum; return true; }
bool DirectiveLoadTable(ArgumentList& List, int flags) { std::wstring fileName = getFullPathName(List[0].text); if (fileExists(fileName) == false) { Logger::printError(Logger::Error,L"Table file \"%s\" does not exist",fileName.c_str()); return false; } TextFile::Encoding encoding = TextFile::GUESS; if (List.size() == 2) encoding = getEncodingFromString(List[1].text); if (Global.Table.load(fileName,encoding) == false) { Logger::printError(Logger::Error,L"Invalid table file \"%s\"",fileName.c_str()); return false; } return true; }