public FCNS(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Reader.ReadInt32(); //4 bytes always set to 0. int Version = Reader.ReadInt32(); Reader.ReadInt32(); //'SNCF' uint Count = Reader.ReadUInt32(); for(int i = 0; i < Count; i++) { if(Version == 1) { FCNSConstant Constant = new FCNSConstant(); Constant.Name = Reader.ReadPaddedCString(); Constant.Value = Reader.ReadPaddedCString(); Reader.ReadPaddedCString(); //Description } else { FCNSConstant Constant = new FCNSConstant(); Constant.Name = Reader.ReadString(); Constant.Value = Reader.ReadString(); Reader.ReadString(); //Description } } Reader.Close(); m_Data = null; }
public CST(IFFChunk BaseChunk) : base(BaseChunk) { FileReader Reader = new FileReader(new MemoryStream(m_Data), false); Version = Reader.ReadInt16(); ushort NumStrings = 0; if ((Reader.StreamLength - Reader.Position) > 2) { switch (Version) { case 0: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = LanguageCodes.unused; Str.TranslatedStr = Reader.ReadPascalString(); if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -1: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = LanguageCodes.unused; Str.TranslatedStr = Reader.ReadCString(); if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -2: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = LanguageCodes.unused; Str.TranslatedStr = Reader.ReadCString(); Reader.ReadCString(); //Comment if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -3: NumStrings = Reader.ReadUShort(); for (int i = 0; i < NumStrings; i++) { TranslatedString Str = new TranslatedString(); Str.LangCode = (LanguageCodes)Reader.ReadByte(); Str.TranslatedStr = Reader.ReadCString(); Reader.ReadCString(); //Comment if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } break; case -4: byte LanguageSets = Reader.ReadByte(); for (int i = 0; i < LanguageSets; i++) { NumStrings = Reader.ReadUShort(); for (int j = 0; j < NumStrings; j++) { TranslatedString Str = new TranslatedString(); Str.LangCode = (LanguageCodes)(Reader.ReadByte() + 1); Str.TranslatedStr = Reader.ReadString(); Reader.ReadString(); //Comment if (Strings.ContainsKey(Str.LangCode)) Strings[Str.LangCode].Add(Str); else { List<TranslatedString> LanguageSet = new List<TranslatedString>(); LanguageSet.Add(Str); Strings.Add(Str.LangCode, LanguageSet); } } } break; } } Reader.Close(); m_Data = null; }
private void Init(Stream Data) { m_Reader = new FileReader(Data, true); string MagicNumber = m_Reader.ReadString(60); if (!MagicNumber.Equals("IFF FILE 2.5:TYPE FOLLOWED BY SIZE\0 JAMIE DOORNBOS & MAXIS 1\0", StringComparison.InvariantCultureIgnoreCase)) throw new IFFException("MagicNumber was wrong - IFF.cs!"); m_Reader.ReadUInt32(); //RSMP offset //Size of a chunk header is 76 bytes. while ((m_Reader.StreamLength - m_Reader.Position) > 76) { IFFChunk Chunk; if (m_Device != null) Chunk = new IFFChunk(m_Reader, m_Device, this); else Chunk = new IFFChunk(m_Reader, this); switch (Chunk.Type) { case IFFChunkTypes.FBMP: FBMP FBMPChunk = new FBMP(Chunk); m_FBMPChunks.Add(Chunk.ID, FBMPChunk); break; case IFFChunkTypes.FWAV: FWAV FWAVChunk = new FWAV(Chunk); m_FWAVChunks.Add(Chunk.ID, FWAVChunk); break; case IFFChunkTypes.BMP_: BMP_ BMPChunk = new BMP_(Chunk); m_BMP_Chunks.Add(Chunk.ID, BMPChunk); break; case IFFChunkTypes.DGRP: DGRP DGRPChunk = new DGRP(Chunk); m_DGRPChunks.Add(Chunk.ID, DGRPChunk); break; case IFFChunkTypes.BCON: BCON BCONChunk = new BCON(Chunk); m_BCONChunks.Add(Chunk.ID, BCONChunk); break; case IFFChunkTypes.GLOB: GLOB GlobChunk = new GLOB(Chunk); m_GLOBChunks.Add(Chunk.ID, GlobChunk); break; case IFFChunkTypes.OBJD: OBJD OBJDChunk = new OBJD(Chunk); m_OBJDs.Add(OBJDChunk); break; case IFFChunkTypes.TTAs: TTAs TTAsChunk = new TTAs(Chunk); m_TTAsChunks.Add(Chunk.ID, TTAsChunk); break; case IFFChunkTypes.TTAB: TTAB TTABChunk = new TTAB(Chunk); TTABChunk.Type = Chunk.Type; TTABChunk.ID = Chunk.ID; m_TTABChunks.Add(Chunk.ID, TTABChunk); break; case IFFChunkTypes.TPRP: TPRP TPRPChunk = new TPRP(Chunk); m_TPRPChunks.Add(Chunk.ID, TPRPChunk); break; case IFFChunkTypes.STR: STR STRChunk = new STR(Chunk); m_STRChunks.Add(Chunk.ID, STRChunk); break; case IFFChunkTypes.BHAV: BHAV BHAVChunk = new BHAV(Chunk); m_BHAVChunks.Add(Chunk.ID, BHAVChunk); break; case IFFChunkTypes.OBJf: OBJf OBJfChunk = new OBJf(Chunk); m_OBJfChunks.Add(Chunk.ID, OBJfChunk); break; case IFFChunkTypes.FCNS: FCNS FCNSChunk = new FCNS(Chunk); m_FCNSChunks.Add(Chunk.ID, FCNSChunk); break; case IFFChunkTypes.SPR: SPR SPRChunk = new SPR(Chunk); m_SPRChunks.Add(Chunk.ID, SPRChunk); break; case IFFChunkTypes.SPR2: SPR2 SPR2Chunk = new SPR2(Chunk); m_SPR2Chunks.Add(Chunk.ID, SPR2Chunk); break; case IFFChunkTypes.PALT: PALT PALTChunk = new PALT(Chunk); m_PALTChunks.Add(Chunk.ID, PALTChunk); break; case IFFChunkTypes.CTSS: CTSS CTSSChunk = new CTSS(Chunk); m_CTSSChunks.Add(Chunk.ID, CTSSChunk); break; case IFFChunkTypes.CST: CST CSTChunk = new CST(Chunk); m_CSTChunks.Add(Chunk.ID, CSTChunk); break; } } }