OSDN Git Service

メイン処理の呼び出しを追加。一通り完成
authorstarg <starg@users.osdn.me>
Sat, 13 Aug 2016 03:05:52 +0000 (12:05 +0900)
committerstarg <starg@users.osdn.me>
Sat, 13 Aug 2016 03:05:52 +0000 (12:05 +0900)
src/driver/yamml.cpp

index c4c2290..e630184 100644 (file)
 #include "msgcallback.hpp"
 #include "stderrwriter.hpp"
 
+std::string CreateDefaultOutputName(const std::string& input)
+{
+    auto dotPos = input.rfind('.');
+
+    if (dotPos == input.npos)
+    {
+        return input + ".mid";
+    }
+    else
+    {
+        return input.substr(0, dotPos) + ".mid";
+    }
+}
+
 int main(int argc, char** argv)
 {
     static_cast<void>(argc);
@@ -116,6 +130,24 @@ int main(int argc, char** argv)
             return 0;
         }
 
+        auto pStdErrWriter = YAMML::Driver::CreateStdErrWriter();
+        auto inputName = vm["input"].as<std::string>();
+
+        auto output = YAMML::Driver::CompileYAMML(
+            inputName,
+            YAMML::Driver::ReadTextFile(inputName),
+            vm.count("entry") ? vm["entry"].as<std::string>() : "Main",
+            YAMML::Driver::MessagePrinter(pStdErrWriter.get())
+        );
+
+        if (output.is_initialized())
+        {
+            YAMML::Driver::WriteBinaryFile(
+                vm.count("out") ? vm["out"].as<std::string>() : CreateDefaultOutputName(inputName),
+                output.value()
+            );
+        }
+
         std::cout.flush();
     }
     catch (const YAMML::Driver::FileOpenException& e)