public static int Write(Level level, Stream file, string fileName, string guid) { string result; fileName += "_data_"; guid = "data_" + guid; int length = 0; using (MemoryStream memStream = new MemoryStream()) { StringBuilder builder = new StringBuilder(); using (BinaryWriter writer = new BinaryWriter(memStream)) { level.Write(writer); length = (int)memStream.Length; memStream.Seek(0, SeekOrigin.Begin); builder.Append("\n@{{BLOCK(" + guid + ")\n\n"); builder.Append("\t.section .rodata\n"); builder.Append("\t.align 2\n"); builder.Append("\t.global " + guid + " @ " + memStream.Length + " bytes\n"); builder.Append(guid + ":\n"); long dqwords = memStream.Length / 16; long mod = memStream.Length % 16; for (long i = 0; i < dqwords; ++i) { builder.Append("\t.byte "); int read = memStream.ReadByte(); byte tempByte = (byte)(read & 0xFF); builder.Append("0x" + tempByte.ToString("X02")); for (int j = 1; j < 16; ++j) { builder.Append(",0x" + ((byte)memStream.ReadByte()).ToString("X02")); } builder.Append('\n'); } if (mod > 0) { builder.Append("\t.byte 0x" + ((byte)memStream.ReadByte()).ToString("X02")); for (int i = 1; i < mod; ++i) builder.Append(",0x" + ((byte)memStream.ReadByte()).ToString("X02")); } builder.Append("\n\n@}}BLOCK(" + guid + ")\n"); } result = builder.ToString(); } byte[] arr = Encoding.ASCII.GetBytes(result); file.Write(arr, 0, arr.Length); return length; }