示例#1
0
        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);
        }
示例#2
0
		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;
		}