public override void Import(params DataStream[] strIn) { // TODO: Encoding and Endianess should be specified by a parameter DataWriter dw = new DataWriter(this.data, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis")); XDocument xmlDoc = XDocument.Load(strIn[0].BaseStream); foreach (XElement xmlBlock in xmlDoc.Root.Elements()) { if (!xmlBlock.Name.LocalName.StartsWith("Block")) continue; foreach (XElement xmlText in xmlBlock.Elements("Text")) { uint offset = Convert.ToUInt32(xmlText.Attribute("Offset").Value, 16); int size = Convert.ToInt32(xmlText.Attribute("Size").Value, 10); string text = xmlText.Value.FromXmlString('<', '>').ApplyTable("replace", true); // Write string try { this.data.Seek(offset, SeekMode.Origin); dw.Write(text, size); } catch { // Do nothing, don't copy the new string } } } }
public override void Write(DataStream strOut) { DataWriter writer = new DataWriter(strOut); writer.Write(this.type); foreach (Block b in this.blocks) b.Write(strOut); }
public override void Write(DataStream strOut) { DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis")); writer.Write((ushort)this.entries.Length); foreach (Entry e in this.entries) { writer.Write(e.Id); writer.Write(e.Text, typeof(ushort), "replace", true); } }
public override void Write(DataStream strOut) { DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis")); writer.Write((ushort)this.text.Length); for (int i = 0; i < this.text.Length; i++) { string text = this.text[i].Replace("\n", "\\n"); text = text.ApplyTable("replace", true); writer.Write(text, 0x80); } }
public override void Write(DataStream strOut) { DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis")); writer.Write((ushort)this.entries.Length); foreach (Entry e in this.entries) { writer.Write(e.Unknown1); writer.Write(e.Unknown2); writer.Write(e.Text.ApplyTable("replace", true), 0x30); } }
public void Run(DataStream strOut) { var writer = new DataWriter(strOut); // For each block of samples foreach (var sample in Samples) { // Mix channels for (int i = 0; i < sample.GetLength(0); i++) for (int c = 0; c < sample.GetLength(1); c++) writer.Write(sample[i, c]); } }
public override void Write(DataStream strOut) { DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis")); writer.Write((ushort)this.blocks.Length); foreach (Block b in this.blocks) { writer.Write(this.GetBlockSize(b)); writer.Write(b.Id); foreach (string t in b.Elements) writer.Write(t, typeof(ushort), "replace", true); writer.Write((byte)0x00); } }
public override void Write(DataStream strOut) { Encoding encoding = Encoding.GetEncoding("shift_jis"); DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, encoding); writer.Write((uint)this.entries.Length); foreach (Entry e in this.entries) { string text = e.Text.ApplyTable("replace", true); byte[] data = encoding.GetBytes(text); writer.Write(e.Index); writer.Write((uint)data.Length); writer.Write(data); } }
public override void Write(DataStream strOut) { DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis")); int numSubBlocks = 0; foreach (Entry e in this.entries) numSubBlocks += e.Dungeons.Length; writer.Write((ushort)this.entries.Length); writer.Write((ushort)numSubBlocks); foreach (Entry e in this.entries) { writer.Write(e.Title.ApplyTable("replace", true), 0x40); writer.Write((ushort)e.Dungeons.Length); foreach (Dungeon d in e.Dungeons) { writer.Write(d.Text.ApplyTable("replace", true), 0x40); writer.Write(d.ScriptName.ApplyTable("replace", true), 0x08); } } }
/// <summary> /// Write the header of a NDS game ROM. /// </summary> /// <param name="str">Stream to write the header.</param> public override void Write(DataStream str) { DataWriter dw = new DataWriter(str); dw.Write(this.gameTitle); // At 0x00 dw.Write(this.gameCode); dw.Write(this.makerCode); // At 0x10 dw.Write(this.unitCode); dw.Write(this.encryptionSeed); dw.Write((byte)(Math.Log(this.cartridgeSize, 2) - MinCartridge)); dw.Write(this.reserved); dw.Write(this.RomVersion); dw.Write(this.internalFlags); dw.Write(this.arm9Offset); // At 0x20 dw.Write(this.arm9EntryAddress); dw.Write(this.arm9RamAddress); dw.Write(this.arm9Size); dw.Write(this.arm7Offset); // At 0x30 dw.Write(this.arm7EntryAddress); dw.Write(this.arm7RamAddress); dw.Write(this.arm7Size); dw.Write(this.fntOffset); // At 0x40 dw.Write(this.fntSize); dw.Write(this.fatOffset); dw.Write(this.fatSize); dw.Write(this.ov9TableOffset); // At 0x50 dw.Write(this.ov9TableSize); dw.Write(this.ov7TableOffset); dw.Write(this.ov7TableSize); dw.Write(this.flagsRead); dw.Write(this.flagsInit); dw.Write(this.bannerOffset); dw.Write(this.secureCRC16); dw.Write(this.romTimeout); dw.Write(this.arm9Autoload); dw.Write(this.arm7Autoload); dw.Write(this.secureDisable); dw.Write(this.romSize); dw.Write(this.headerSize); dw.Write(this.reserved2); dw.Write(this.nintendoLogo); dw.Write(this.logoCRC16); dw.Write(this.headerCRC16); dw.Write(this.debugRomOffset); dw.Write(this.debugSize); dw.Write(this.debugRamAddress); dw.Write(this.reserved3); dw.Write(this.unknown); }
public override void Write(DataStream strOut) { Encoding encoding = Encoding.GetEncoding("shift_jis"); DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, encoding); writer.Write(this.id); foreach (string s in this.startBlocks) { byte[] data = encoding.GetBytes(s.ApplyTable("replace", true)); writer.Write((ushort)data.Length); writer.Write(data); } writer.Write(this.unknown); writer.Write((byte)this.endBlocks.Length); foreach (string s in this.endBlocks) { byte[] data = encoding.GetBytes(s.ApplyTable("replace", true)); writer.Write((ushort)data.Length); writer.Write(data); } writer.Write((byte)this.unknown2.Length); foreach (byte[] unk in this.unknown2) { writer.Write((byte)(unk.Length - 4)); writer.Write(unk); } }
public override void Write(DataStream strOut) { StringBuilder text = new StringBuilder(); foreach (SubtitleEntry entry in this.entries) { switch (entry.Type) { case SubtitleType.Text: text.Append(entry.Data.ApplyTable("replace", true)); break; case SubtitleType.SyncTime: text.AppendFormat("/sync {0}", entry.Data); break; case SubtitleType.Voice: text.AppendFormat("/stream {0}", entry.Data); break; case SubtitleType.Comment: text.AppendFormat("#{0}", entry.Data.ApplyTable("replace", true)); break; case SubtitleType.Clear: text.Append("/clear"); break; } text.Append(ExtraSplit); text.Append(Split); } DataWriter writer = new DataWriter(strOut, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis")); writer.Write(text.ToString()); }
/// <summary> /// Write a <see cref="Fnt" /> section in a stream. /// </summary> /// <param name="str">Stream to write to.</param> public override void Write(DataStream str) { DataWriter dw = new DataWriter(str); long baseOffset = str.RelativePosition; // Write main tables foreach (Fnt.FntTable table in this.tables) { dw.Write(table.Offset); dw.Write(table.IdFirstFile); dw.Write(table.IdParentFolder); } // Write subtables foreach (Fnt.FntTable table in this.tables) table.Write(str, baseOffset); }
/// <summary> /// Write the banner to a stream. /// </summary> /// <param name="str">Stream to write to.</param> public override void Write(DataStream str) { DataWriter dw = new DataWriter(str, EndiannessMode.LittleEndian, Encoding.Unicode); dw.Write(this.version); dw.Write(this.crc16); dw.Write(this.crc16v2); dw.Write(this.reserved); dw.Write(this.tileData); dw.Write(this.palette); dw.Write(this.japaneseTitle, 0x100); dw.Write(this.englishTitle, 0x100); dw.Write(this.frenchTitle, 0x100); dw.Write(this.germanTitle, 0x100); dw.Write(this.italianTitle, 0x100); dw.Write(this.spanishTitle, 0x100); str.WritePadding(FileSystem.PaddingByte, FileSystem.PaddingAddress); }
public override void Write(DataStream stream) { base.Write(stream); Encoding encoding = Encoding.GetEncoding("shift_jis"); DataWriter writer = new DataWriter( stream, EndiannessMode.LittleEndian, encoding); writer.Write((byte)(this.Size - 5)); writer.Write((byte)this.SubEntries.Length); foreach (SubEntry sub in this.SubEntries) { writer.Write(sub.ScriptName, typeof(byte)); writer.Write(sub.Unknown); } }
public override void Write(DataStream stream) { base.Write(stream); Encoding encoding = Encoding.GetEncoding("shift_jis"); DataWriter writer = new DataWriter( stream, EndiannessMode.LittleEndian, encoding); byte[] data = encoding.GetBytes(this.Text); writer.Write((byte)data.Length); writer.Write(data); writer.Write(this.Unknown); }
public override void Write(DataStream stream) { base.Write(stream); Encoding encoding = Encoding.GetEncoding("shift_jis"); DataWriter writer = new DataWriter( stream, EndiannessMode.LittleEndian, encoding); string text = SetFurigana(this.Text); byte[] data = encoding.GetBytes(text.ApplyTable("replace", true)); writer.Write((byte)data.Length); writer.Write(data); }
public virtual void Write(DataStream stream) { DataWriter writer = new DataWriter(stream); writer.Write(this.Id); }
public void Write(DataStream stream) { DataWriter writer = new DataWriter(stream); writer.Write(this.GetSize()); foreach (Entry e in this.Entries) e.Write(stream); writer.Write(0xFFFFFFFF); }
public void Write(DataStream str, long baseOffset) { DataWriter bw = new DataWriter(str); // Go to offset if we can. Maybe we are writing in a position // that it doesn't exist still (it will write written later) // so in this case we fill it with zeros long tableOffset = baseOffset + this.Offset; if (tableOffset > str.Length) str.WriteTimes(0, tableOffset - str.Length); // And finally seek there str.Seek(baseOffset + this.Offset, SeekMode.Origin); byte nodeType; // Write file info foreach (ElementInfo info in this.Files) { nodeType = (byte)DefaultEncoding.GetByteCount(info.Name); // Name length bw.Write(nodeType); bw.Write(DefaultEncoding.GetBytes(info.Name)); } // Write folder info foreach (ElementInfo info in this.Folders) { nodeType = (byte)(0x80 | DefaultEncoding.GetByteCount(info.Name)); bw.Write(nodeType); bw.Write(DefaultEncoding.GetBytes(info.Name)); bw.Write(info.Id); } bw.Write((byte)0x00); // End of info bw = null; }
void WriteChunk(short[,] samples, int channel, DataStream strOut) { var writer = new DataWriter(strOut); byte scale; byte coefIdx; byte[] values = SearchBestParameters(samples, channel, out scale, out coefIdx); uint currentWord = 0; for (int i = 0; i < Format.SamplesPerChunk; i++) { if (i != 0 && i % 8 == 0) { currentWord ^= 0x80808080; writer.Write(currentWord); currentWord = 0; } byte val = (i >= values.Length) ? (byte)0 : (byte)(values[i] & 0xF); currentWord |= (uint)(val << (i * 4)); } // Set the header byte header = (byte)((coefIdx << 4) | scale); currentWord |= (uint)(header << 24); // Write the last word currentWord ^= 0x80808080; writer.Write(currentWord); }
public override void Write(DataStream strOut) { var data = new DataStream(new System.IO.MemoryStream(), 0, 0); var writer = new DataWriter(data, EndiannessMode.LittleEndian, Encoding.GetEncoding("shift_jis")); if (hasNumBlock) writer.Write((ushort)blocks.Length); foreach (Block b in blocks) { if (fileName == "MagicParam") writer.Write(b.Text.ApplyTable("replace", true), textSize + 8, nullTermina); else writer.Write(b.Text.ApplyTable("replace", true), textSize, nullTermina); writer.Write(b.Data); // Hack for imagen name: new long name field if (longTxtSize > 0) { writer.Write(b.LongText ?? b.Text, longTxtSize, "replace", true); } } if (isEncoded) { data.Seek(0, SeekMode.Origin); Codec(data, strOut); // Encode data to strOut } else { data.WriteTo(strOut); } }
/// <summary> /// Write the Fat to a stream. /// </summary> /// <param name="str">Stream to write to.</param> public override void Write(DataStream str) { DataWriter dw = new DataWriter(str); uint offset = (uint)str.Position + this.Size + this.firstOffset; offset = offset.Pad(FileSystem.PaddingAddress); foreach (GameFile file in this.files) { OverlayFile overlay = file as OverlayFile; if (overlay == null) { dw.Write(offset); // Start offset offset += (uint)file.Length; dw.Write(offset); // End offset } else { dw.Write(overlay.WriteAddress); dw.Write((uint)(overlay.WriteAddress + overlay.Length)); } offset = offset.Pad(FileSystem.PaddingAddress); // Pad offset } }
/// <summary> /// Write the table info of this overlay. /// </summary> /// <param name="str">Stream to write to.</param> public void WriteTable(DataStream str) { DataWriter dw = new DataWriter(str); this.EncodedSize = (uint)this.Length; uint encodingInfo = this.EncodedSize; encodingInfo |= (uint)((this.IsEncoded ? 1 : 0) << 24); encodingInfo |= (uint)((this.IsSigned ? 2 : 0) << 24); dw.Write(this.OverlayId); dw.Write(this.RamAddress); dw.Write(this.RamSize); dw.Write(this.BssSize); dw.Write(this.StaticInitStart); dw.Write(this.StaticInitEnd); dw.Write((uint)(ushort)this.Tags["Id"]); dw.Write(encodingInfo); }