Beispiel #1
0
		public MSBT(string filename)
		{
			File = new FileInfo(filename);

			if (File.Exists && filename.Length > 0)
			{
				FileStream fs = System.IO.File.Open(File.FullName, FileMode.Open, FileAccess.Read, FileShare.None);
				BinaryReaderX br = new BinaryReaderX(fs);

				// Initialize Members
				LBL1.Labels = new List<Entry>();
				ATR1.Attributes = new List<UInt32>();
				TXT2.OriginalEntries = new List<Entry>();
				TXT2.Entries = new List<Entry>();

				// Header
				Header.Identifier = br.ReadBytes(8);
				if (Encoding.ASCII.GetString(Header.Identifier) != "MsgStdBn")
					throw new InvalidMSBTException("The file provided is not a valid MSBT file.");
				Header.ByteOrderMark = br.ReadBytes(2);

				// Byte Order
				br.ByteOrder = Header.ByteOrderMark[0] > Header.ByteOrderMark[1] ? ByteOrder.LittleEndian : ByteOrder.BigEndian;

				Header.Unknown1 = br.ReadUInt16();
				Header.Unknown2 = br.ReadUInt16();
				Header.NumberOfSections = br.ReadUInt16();
				Header.Unknown3 = br.ReadUInt16();
				Header.FileSizeOffset = (UInt32)br.BaseStream.Position;
				Header.FileSize = br.ReadUInt32();
				Header.Unknown4 = br.ReadBytes(10);

				if (Header.FileSize != br.BaseStream.Length)
					throw new InvalidMSBTException("The file provided is not a valid MSBT file.");

				SectionOrder.Clear();
				for (int i = 0; i < Header.NumberOfSections; i++)
				{
					// Section Detection
					if (br.PeekString() == "LBL1")
					{
						ReadLBL1(br);
						SectionOrder.Add("LBL1");
					}
					else if (br.PeekString() == "NLI1")
					{
						ReadNLI1(br);
						SectionOrder.Add("NLI1");
					}
					else if (br.PeekString() == "ATR1")
					{
						ReadATR1(br);
						SectionOrder.Add("ATR1");
					}
					else if (br.PeekString() == "TSY1")
					{
						ReadTSY1(br);
						SectionOrder.Add("TSY1");
					}
					else if (br.PeekString() == "TXT2")
					{
						ReadTXT2(br);
						SectionOrder.Add("TXT2");
					}
				}

				br.Close();
			}
		}