public Tag Read(Stream fs, TrackerFormat format) { Tag tag = new Tag(); int start_offset = 0; int end_offset = 0; string sig = null; switch (format) { case TrackerFormat.S3m: end_offset = 28; break; case TrackerFormat.Mod: end_offset = 20; break; case TrackerFormat.Xm: start_offset = 17; end_offset = 20; break; case TrackerFormat.It: sig = "IMPM"; end_offset = 26; break; } //Parse the tag -)------------------------------------------------ fs.Seek(start_offset, SeekOrigin.Begin); byte[] b; if (sig != null) { b = new byte[sig.Length]; fs.Read(b, 0, sig.Length); if (Encoding.ASCII.GetString(b) != sig) { return(tag); } } b = new byte[end_offset]; fs.Read(b, 0, end_offset); string content = Encoding.ASCII.GetString(b, 0, end_offset); int term = content.IndexOf('\0'); if (term == -1) { term = end_offset; } content = content.Substring(0, term).Trim(); tag.AddTitle(content); return(tag); }
public Tag Read(Stream fs, TrackerFormat format) { Tag tag = new Tag(); int start_offset = 0; int end_offset = 0; string sig = null; switch (format) { case TrackerFormat.S3m: end_offset = 28; break; case TrackerFormat.Mod: end_offset = 20; break; case TrackerFormat.Xm: start_offset = 17; end_offset = 20; break; case TrackerFormat.It: sig = "IMPM"; end_offset = 26; break; } //Parse the tag -)------------------------------------------------ fs.Seek(start_offset, SeekOrigin.Begin); byte[] b; if (sig != null) { b = new byte[sig.Length]; fs.Read(b, 0, sig.Length); if (Encoding.ASCII.GetString(b) != sig) return tag; } b = new byte[end_offset]; fs.Read(b, 0, end_offset); string content = Encoding.ASCII.GetString(b, 0, end_offset); int term = content.IndexOf('\0'); if (term == -1) term = end_offset; content = content.Substring(0, term).Trim(); tag.AddTitle(content); return tag; }