예제 #1
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);
        }