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); }
public bloViewer(bloScreen screen) { var rectangle = screen.getRectangle(); initScreen(screen, rectangle.width, rectangle.height); initContext(); }
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(); }
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); }
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); }
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); }
static void openViewer(bloScreen screen, string title) { var rectangle = screen.getRectangle(); openViewer(screen, title, rectangle.width, rectangle.height); }
void initScreen(bloScreen screen, int width, int height) { mScreen = screen; setSize(width, height); }
public bloViewer(bloScreen screen, int width, int height) { initScreen(screen, width, height); initContext(); }
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); }