Ejemplo n.º 1
0
        public static bloScreen loadBlo1(Stream stream)
        {
            aBinaryReader reader = new aBinaryReader(stream, Endianness.Big, Encoding.GetEncoding(1252));
            bloScreen     scrn   = new bloScreen();

            if (reader.Read32() != cSCRN)
            {
                return(null);
            }
            if (reader.Read32() != cBLO1)
            {
                return(null);
            }
            reader.Step(24);
            if (reader.Read32() != cINF1)
            {
                return(null);
            }
            long inf1size = reader.Read32();
            int  width    = reader.ReadS16();
            int  height   = reader.ReadS16();

            scrn.mRect.set(0, 0, width, height);
            scrn.mTintColor = new bloColor(reader.Read32());
            if (!loadBlo1(scrn, reader))
            {
                return(null);
            }
            return(scrn);
        }
Ejemplo n.º 2
0
        public bloViewer(bloScreen screen)
        {
            var rectangle = screen.getRectangle();

            initScreen(screen, rectangle.width, rectangle.height);
            initContext();
        }
Ejemplo n.º 3
0
        static void openViewer(bloScreen screen, string title, int width, int height)
        {
            var viewer = new bloViewer(screen);

            viewer.setTitle(title);
            viewer.setSize(width, height);
            viewer.run();
        }
Ejemplo n.º 4
0
        public static bloScreen loadCompact(Stream stream)
        {
            aBinaryReader reader = new aBinaryReader(stream, Endianness.Big, Encoding.GetEncoding(1252));
            bloScreen     scrn   = new bloScreen();

            if (!loadCompact(scrn, reader))
            {
                return(null);
            }
            return(scrn);
        }
Ejemplo n.º 5
0
        static bloScreen loadScreen(string input, bloFormat format)
        {
            bloScreen screen = null;

            using (Stream stream = File.OpenRead(input)) {
                switch (format)
                {
                case bloFormat.Compact: screen = bloScreen.loadCompact(stream); break;

                case bloFormat.Blo1: screen = bloScreen.loadBlo1(stream); break;

                case bloFormat.Xml: screen = bloScreen.loadXml(stream); break;
                }
            }
            return(screen);
        }
Ejemplo n.º 6
0
        public static bloScreen loadXml(Stream stream)
        {
            var settings = new XmlReaderSettings()
            {
                CheckCharacters = false
            };
            var       reader   = XmlReader.Create(stream, settings);
            var       document = new xDocument(reader);
            bloScreen scrn     = new bloScreen();

            var oldFinder = bloResourceFinder.getFinder();
            var newFinder = new bloResourceFinder(oldFinder);

            bloResourceFinder.setFinder(newFinder);

            var root = document.Root;

            if (root == null || root.Name != "screen")
            {
                return(null);
            }

            var info   = root.Element("info");
            var width  = (info.Element("width") | 640);
            var height = (info.Element("height") | 480);

            scrn.mRect.set(0, 0, width, height);
            scrn.mTintColor = bloXml.loadColor(info.Element("tint-color"), new bloColor(bloColor.cZero));

            var searchPaths = root.Element("search-paths");

            foreach (var searchPath in searchPaths.Elements("path"))
            {
                newFinder.addGlobalPath(searchPath);
            }

            loadXml(scrn, root);

            bloResourceFinder.setFinder(oldFinder);

            return(scrn);
        }
Ejemplo n.º 7
0
        static void openViewer(bloScreen screen, string title)
        {
            var rectangle = screen.getRectangle();

            openViewer(screen, title, rectangle.width, rectangle.height);
        }
Ejemplo n.º 8
0
 void initScreen(bloScreen screen, int width, int height)
 {
     mScreen = screen;
     setSize(width, height);
 }
Ejemplo n.º 9
0
 public bloViewer(bloScreen screen, int width, int height)
 {
     initScreen(screen, width, height);
     initContext();
 }
Ejemplo n.º 10
0
        static int doCommandLine(aCommandLine cmd)
        {
            bool      inputSet    = false;
            string    input       = null;
            bloFormat inputFormat = bloFormat.Blo1;

            bool      outputSet    = false;
            string    output       = null;
            bloFormat outputFormat = bloFormat.Blo1;

            var searchPaths = new List <string>(5);

            foreach (var param in cmd)
            {
                switch (param.Name.ToLowerInvariant())
                {
                case "-input": {
                    if (param.Count < 1)
                    {
                        break;
                    }
                    inputSet    = true;
                    input       = param[0];
                    inputFormat = (param.Count >= 2 ? parseFormat(param[1]) : bloFormat.Blo1);
                    break;
                }

                case "-output": {
                    if (param.Count < 1)
                    {
                        break;
                    }
                    outputSet    = true;
                    output       = param[0];
                    outputFormat = (param.Count >= 2 ? parseFormat(param[1]) : bloFormat.Blo1);
                    break;
                }

                case "-search-paths": {
                    foreach (var arg in param)
                    {
                        searchPaths.Add(arg);
                    }
                    break;
                }
                }
            }

            if (!inputSet || !outputSet)
            {
                return(doUsage());
            }

            var inputFile  = Path.GetFullPath(input);
            var outputFile = Path.GetFullPath(output);

            var inputPath  = Path.GetDirectoryName(inputFile);
            var outputPath = Path.GetDirectoryName(outputFile);

            var finder = new bloResourceFinder(inputPath);

            foreach (var searchPath in searchPaths)
            {
                finder.addGlobalPath(searchPath);
            }
            bloResourceFinder.setFinder(finder);

            if (!File.Exists(inputFile))
            {
                Console.WriteLine("Could not find input file '{0}'", inputFile);
                return(1);
            }

            if (inputFile == outputFile)
            {
                Console.WriteLine("Input and output files cannot be the same.");
                return(1);
            }

            if (inputFormat == outputFormat)
            {
                File.Copy(inputFile, outputFile);
                return(0);
            }

            bloScreen screen = null;

            using (var stream = File.OpenRead(inputFile)) {
                switch (inputFormat)
                {
                case bloFormat.Compact: screen = bloScreen.loadCompact(stream); break;

                case bloFormat.Blo1: screen = bloScreen.loadBlo1(stream); break;

                case bloFormat.Xml: screen = bloScreen.loadXml(stream); break;

                default: {
                    Console.WriteLine("Unimplemented input format {0}", inputFormat);
                    return(1);
                }
                }
            }

            if (screen == null)
            {
                Console.WriteLine("Failed to input file '{0}'", inputFile);
                return(1);
            }

            using (var stream = File.Create(outputFile)) {
                switch (outputFormat)
                {
                case bloFormat.Compact: screen.saveCompact(stream); break;

                case bloFormat.Blo1: screen.saveBlo1(stream); break;

                case bloFormat.Xml: screen.saveXml(stream); break;

                default: {
                    Console.WriteLine("Unimplemented output format {0}", outputFormat);
                    return(1);
                }
                }
            }

            return(0);
        }