public Hot(byte[] FileData) { StreamReader Reader = new StreamReader(new MemoryStream(FileData)); bool EventState = false, OptionsState = false, TrackDataState = false; while (!Reader.EndOfStream) { string CurrentLine = Reader.ReadLine().Trim().Replace("\r\n", ""); switch (CurrentLine) { case "[EventMappingEquate]": EventState = true; break; case "[Options]": OptionsState = true; break; case "[TrackData]": TrackDataState = true; break; } if (!CurrentLine.Contains("[")) { if (!CurrentLine.Contains("]")) { if (!CurrentLine.Contains("")) { //EventMappingEquate fields look like: kSndobPlay=1 if (EventState) { string[] EventParams = CurrentLine.Split("=".ToCharArray()); EventMappingEquate EMappingEquate = new EventMappingEquate(); EMappingEquate.Label = EventParams[0]; EMappingEquate.Value = int.Parse(EventParams[1]); } //Options fields look like: Version=1 else if (OptionsState) { string[] OptionParams = CurrentLine.Split("=".ToCharArray()); switch (OptionParams[0]) { case "Version": m_Version = int.Parse(OptionParams[1]); break; case "LoadPriority": m_LoadPriority = int.Parse(OptionParams[1]); break; } } //TrackData fields look like: 0xb0f4=0x10 else if (TrackDataState) { string[] TrackParams = CurrentLine.Split("=".ToCharArray()); TrackData TData = new TrackData(); TData.FileID = long.Parse(TrackParams[0]); TData.SubRoutineOffset = int.Parse(TrackParams[1]); } } } } } }