Example #1
0
        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();
                    }
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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>();
        }