public static void Main(string[] args) { var swi_settings = new SwiPrologInitializationSettings { HomeDirectory = @"C:\Program Files\swipl", SetHomeDirectoryEnvironmentVariable = true, BinaryDirectory = @"C:\Program Files\swipl\bin", PrependBinaryDirectoryToPath = true }; var xsb_settings = new XsbPrologInitializationSettings { HomeDirectory = @"C:\Program Files (x86)\XSB", BinaryDirectory = @"C:\Program Files (x86)\XSB\config\x64-pc-windows\bin", PrependBinaryDirectoryToPath = true }; using (var engine = new V8ScriptEngine()) { engine.AddHostType("Console", typeof(Console)); if (Directory.Exists(swi_settings.HomeDirectory)) { using (var swi = new SwiPrologEngine(swi_settings)) { Console.WriteLine("SWI Prolog " + swi.Version); engine.AddHostObject("swi", swi); string script1 = File.OpenText("script1.js").ReadToEnd(); engine.Execute(script1); Console.WriteLine(); } } if (Directory.Exists(xsb_settings.HomeDirectory)) { using (var xsb = new XsbPrologEngine(xsb_settings)) { Console.WriteLine("XSB Prolog " + xsb.Version); engine.AddHostObject("xsb", xsb); string script2 = File.OpenText("script2.js").ReadToEnd(); engine.Execute(script2); Console.WriteLine(); } } } }
public static void Initialize(TestContext context) { var settings = new XsbPrologInitializationSettings { HomeDirectory = @"C:\Program Files (x86)\XSB", BinaryDirectory = @"C:\Program Files (x86)\XSB\config\x64-pc-windows\bin", PrependBinaryDirectoryToPath = true }; v8 = new V8ScriptEngine(); prolog = new XsbPrologEngine(settings); v8.AddHostType("Console", typeof(Console)); v8.AddHostObject("prolog", prolog); }
public XsbPrologEngine(XsbPrologInitializationSettings settings) { if (settings == null) { throw new ArgumentNullException(nameof(settings)); } bool isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); if (!isWindows) { throw new Exception("This project presently is built for 64-bit Windows."); } bool is64bit = Environment.Is64BitOperatingSystem && Environment.Is64BitProcess; if (!is64bit) { throw new Exception("This project presently is built for 64-bit Windows."); } if (!Directory.Exists(settings.HomeDirectory)) { throw new Exception("The specified home directory for XSB Prolog does not exist."); } if (settings.SetHomeDirectoryEnvironmentVariable) { Environment.SetEnvironmentVariable("XSB_DIR", settings.HomeDirectory); } if (settings.PrependBinaryDirectoryToPath) { Environment.SetEnvironmentVariable("Path", settings.BinaryDirectory + Path.PathSeparator + "%Path%"); } string[] parameters = settings.GenerateParameters(); if (xsb.xsb_init(parameters.Length, parameters) != 0) { throw new XsbException("Failed to initialize XSB engine.\n" + "Error code: " + xsb.xsb_get_init_error_type() + "\n" + "Error message: " + xsb.xsb_get_init_error_message()); } foreignPredicates = new List <Delegate>(); }