int LibMain::Run(int argc, char **argv) { Utils::banner(argv[0]); CmdSwitchFile internalConfig(SwitchParser); std::string configName = Utils::QualifiedFile(argv[0], ".cfg"); std::fstream configTest(configName.c_str(), std::ios::in); if (!configTest.fail()) { configTest.close(); if (!internalConfig.Parse(configName.c_str())) Utils::fatal("Corrupt configuration file"); } if (!SwitchParser.Parse(&argc, argv)) { Utils::usage(argv[0], usageText); } if (argc < 2 && File.GetCount() < 3) { Utils::usage(argv[0], usageText); } // setup ObjString outputFile = argv[1]; size_t n = outputFile.find_last_of('.'); if (n == std::string::npos || (n != outputFile.size()-1 && outputFile[n+1] != 'l')) { outputFile += ".l"; } LibManager librarian(outputFile, caseSensitiveSwitch.GetValue()); if (librarian.IsOpen()) if (!librarian.LoadLibrary()) { std::cout << outputFile.c_str() << " is not a library" << std::endl; return 1; } for (int i= 2; i < argc; i++) AddFile(librarian, argv[i]); for (int i = 1; i < File.GetCount(); i++) AddFile(librarian, File.GetValue()[i]); for (CmdFiles::FileNameIterator it = addFiles.FileNameBegin(); it != addFiles.FileNameEnd(); ++it) { librarian.AddFile(*(*it)); } for (CmdFiles::FileNameIterator it = replaceFiles.FileNameBegin(); it != replaceFiles.FileNameEnd(); ++it) { librarian.ReplaceFile(*(*it)); } if (modified) if (!librarian.SaveLibrary()) { std::cout << "Error writing library file" << std::endl; return 1; } return 0; }
int BRCMain::Run(int argc, char **argv) { Utils::banner(argv[0]); CmdSwitchFile internalConfig(SwitchParser); std::string configName = Utils::QualifiedFile(argv[0], ".cfg"); std::fstream configTest(configName.c_str(), std::ios::in); if (!configTest.fail()) { configTest.close(); if (!internalConfig.Parse(configName.c_str())) Utils::fatal("Corrupt configuration file"); } if (!SwitchParser.Parse(&argc, argv)) { Utils::usage(argv[0], usageText); } if (argc < 2 || (argc == 2 && File.GetCount() < 2)) { Utils::usage(argv[0], usageText); } // setup ObjString outputFile = Utils::QualifiedFile(argv[1], ".obr"); CmdFiles files(argv + 2); if (File.GetCount()) files.Add(File.GetValue() + 1); BRCLoader loader(files); bool ok = loader.load(); if (ok) { BRCWriter writer(outputFile, loader); ok = writer.write(); } return !ok; }
int AsmMain::Run(int argc, char *argv[]) { int rv = 0; Utils::banner(argv[0]); CmdSwitchFile internalConfig(SwitchParser); std::string configName = Utils::QualifiedFile(argv[0], ".cfg"); std::fstream configTest(configName.c_str(), std::ios::in); if (configTest != NULL) { configTest.close(); if (!internalConfig.Parse(configName.c_str())) Utils::fatal("Corrupt configuration file"); } if (!SwitchParser.Parse(&argc, argv) || (argc == 1 && File.GetCount() <= 1)) { Utils::usage(argv[0], usageText); } CmdFiles files(argv+1); if (File.GetValue()) files.Add(File.GetValue() + 1); if (files.GetSize() > 1 && OutputFile.GetValue().size()) Utils::fatal("Cannot specify output file for multiple input files"); std::string sysSrchPth; std::string srchPth; if (includePath.GetValue().size()) { size_t n = includePath.GetValue().find_first_of(';'); if (n == std::string::npos) { sysSrchPth = includePath.GetValue(); } else { sysSrchPth = includePath.GetValue().substr(0, n); srchPth = includePath.GetValue().substr(n+1); } } for (CmdFiles::FileNameIterator it = files.FileNameBegin(); it != files.FileNameEnd(); ++it) { std::string inName = (*it)->c_str(); int npos = inName.find_last_of("."); if (npos == std::string::npos || npos && inName[npos-1] == '.' || (npos != inName.size()-1 && inName[npos+1] == CmdFiles::DIR_SEP[0])) { inName = Utils::QualifiedFile( (*it)->c_str(), ".asm"); } PreProcessor pp(inName, srchPth, sysSrchPth, false, false, '%', false, false, true); int n = Defines.GetCount(); for (int i=0; i < n; i++) { CmdSwitchDefine::define *v = Defines.GetValue(i); pp.Define(v->name, v->value, false); } std::string outName; if (OutputFile.GetValue().size() != 0) outName = OutputFile.GetValue(); else outName = Utils::QualifiedFile( (*it)->c_str(), ".o"); if (PreprocessOnly.GetValue()) { std::string working = Utils::QualifiedFile((*it)->c_str(), ".i"); std::fstream out(working.c_str(), std::ios::out); if (out == NULL) { Utils::fatal(std::string(std::string("Could not open ") + working.c_str() + " for write.").c_str()); } else { while (pp.GetLine(working)) { CheckAssign(working, pp); out << working << std::endl; } } out.close(); } else { Listing listing; AsmFile asmFile(pp, CaseInsensitive.GetValue(), listing); if (asmFile.Read()) { if (!asmFile.Write(outName, inName) || Errors::ErrorCount()) { rv = 1; } else if (CreateListFile.GetValue()) { std::string listingName = Utils::QualifiedFile( (*it)->c_str(), ".lst"); if (!listing.Write(listingName, inName, CreateListFile.GetValue('m'))) { rv = 1; } } } else { rv = 1; } if (rv) unlink(outName.c_str()); } } return rv; }