示例#1
0
        public void ReadColiObjects(Coli coli)
        {
            this.BaseStream.Seek(coli.ContentOffset, SeekOrigin.Begin);
            while (this.BaseStream.Position < (coli.ContentOffset + coli.Size))
            {
                ColiObject newColiObj;
                uint       coliLayer = this.ReadUInt32();
                uint       coliShape = this.ReadUInt32();
                switch (coliShape)
                {
                case 0x01:
                    newColiObj = new ColiType1(coliLayer, this);
                    break;

                case 0x02:
                    newColiObj = new ColiType2(coliLayer, this);
                    break;

                case 0x03:
                    newColiObj = new ColiType3(coliLayer, this);
                    break;

                case 0x05:
                    newColiObj = new ColiType5(coliLayer, this);
                    break;

                default:
                    newColiObj = new ColiObject(coliLayer, coliShape);
                    break;
                }
                coli.ColiDatas.Add(newColiObj);
                // skip the terminator
                this.BaseStream.Seek(4, SeekOrigin.Current);
            }
        }
示例#2
0
        public Coli ReadColis(Cols cols)
        {
            this.BaseStream.Seek(cols.HeaderOffset, SeekOrigin.Begin);
            Coli coli = this.ReadColiMetadata();

            while ((this.BaseStream.Position < (cols.ContentOffset + cols.Size)) && coli != null)
            {
                this.BaseStream.Seek(coli.ContentOffset, SeekOrigin.Begin);
                this.ReadColiObjects(coli);
                cols.Colis.Add(coli);
                coli = this.ReadColiMetadata();
            }
            return(coli);
        }
示例#3
0
        public Coli ReadColiMetadata()
        {
            Coli coli     = null;
            long?position = SMFileUtils.FindNextString(this, Coli.Identifier);

            if (position.HasValue)
            {
                coli = new Coli();
                coli.HeaderOffset = position.Value;
                coli.SizeOffset   = position.Value + Coli.Identifier.Length;
                this.BaseStream.Seek(position.Value + Coli.Identifier.Length, SeekOrigin.Begin);
                coli.Size          = BitConverter.ToUInt32(this.ReadBytes(4), 0);
                coli.ContentOffset = this.BaseStream.Position;
            }
            return(coli);
        }