Example #1
0
        public override int Write(System.IO.BinaryWriter bw)
        {
            long p   = bw.BaseStream.Position;
            int  len = 0;

            bw.Write(RiffParser.ToFourCC("LIST"));
            bw.Write(0);
            bw.Write(RiffParser.ToFourCC(name));
            if (this.subList.Count > 0)
            {
                foreach (RIFFBase rb in this.subList)
                {
                    len += rb.Write(bw);
                }
            }
            else
            {
                //bw.Write(content);
                len = content.Length;
            }
            long sp = bw.BaseStream.Position;

            bw.BaseStream.Position -= len + 8;
            bw.Write(len + 4);
            bw.BaseStream.Position = sp;
            if ((len & 1) != 0)
            {
                bw.Write(false);
            }
            return((int)(bw.BaseStream.Position - p));
        }
Example #2
0
        public override int Write(BinaryWriter bw)
        {
            long sp = bw.BaseStream.Position;

            int[]      blockSizes = new int[0];
            byte[]     data       = RiffConn.WriteRiff(subList, ref blockSizes, true);
            FileStream fs         = File.Open("C:\\data1", FileMode.OpenOrCreate | FileMode.Truncate);

            fs.Write(data, 0, data.Length);
            fs.Close();
            byte[]       zdata  = ZLibNet.ZLibCompressor.Compress(data);
            byte[]       blocks = new byte[blockSizes.Length * 4];
            MemoryStream ms     = new MemoryStream(blocks);
            BinaryWriter b2     = new BinaryWriter(ms);

            for (int i = 0, j = 0; i < blocks.Length; i += 4, j++)
            {
                b2.Write(blockSizes[j]);
            }
            fs = File.Open("C:\\blocks1", FileMode.OpenOrCreate | FileMode.Truncate);
            fs.Write(blocks, 0, blocks.Length);
            fs.Close();
            b2.Close();
            ms.Close();
            byte[] zblk = ZLibNet.ZLibCompressor.Compress(blocks);
            byte[] wt;
            ms = new MemoryStream();
            ms.SetLength(99999999);
            BinaryWriter bww = new BinaryWriter(ms);

            bww.Write(RiffParser.ToFourCC("cmpr"));
            bww.Write(zdata.Length + 8);
            bww.Write(data.Length);
            bww.Write(zblk.Length + 8);
            bww.Write(blocks.Length);
            bww.Write(Encoding.UTF8.GetBytes("CPng\x01\x00\x04\x00"));
            bww.Write(zdata);
            bww.Write(Encoding.UTF8.GetBytes("CPng\x01\x00\x04\x00"));
            bww.Write(zblk);
            int p = (int)ms.Position;

            wt = new byte[p];
            Array.Copy(ms.GetBuffer(), wt, p);
            bww.Close();
            ms.Close();
            bw.Write(RiffParser.ToFourCC("LIST"));
            bw.Write(wt.Length);
            bw.Write(wt, 0, p);
            int len = (int)(bw.BaseStream.Position - sp);

            if ((len & 1) != 0)
            {
                bw.Write(false);
            }
            return(len);
        }
        public override int Write(System.IO.BinaryWriter bw)
        {
            if (this.content != null)
            {
                return(base.Write(bw));
            }
            long p = bw.BaseStream.Position;

            bw.Write(RiffParser.ToFourCC(name));
            bw.Write(2);
            bw.Write((short)(m_version * 100));
            return((int)(bw.BaseStream.Position - p));
        }
Example #4
0
        public void Write(String cdrPath)
        {
            if (m_cdrFile == null)
            {
                return;
            }
            FileStream   fs = File.Open(cdrPath, FileMode.OpenOrCreate);
            BinaryWriter bw = new BinaryWriter(fs);

            bw.Write(RiffParser.ToFourCC("RIFF"));
            bw.Write(0);
            bw.Write(RiffParser.ToFourCC(m_cdrFile.verType));
            foreach (RIFFBase rl in m_cdrFile.list)
            {
                rl.Write(bw);
            }
            int pos = (int)fs.Position;

            bw.Seek(4, SeekOrigin.Begin);
            bw.Write(pos - 8);
            bw.Close();
            fs.Close();
        }
Example #5
0
        public static byte[] WriteRiff(List <RIFFBase> list, ref int[] blockSizes, bool outBlockSize = false)
        {
            byte[]     tmp = new byte[0xffffff];
            List <int> bs  = null;

            if (outBlockSize)
            {
                bs = new List <int>(blockSizes);
            }
            MemoryStream ms = new MemoryStream();
            BinaryWriter bw = new BinaryWriter(ms);

            foreach (RIFFBase rl in list)
            {
                switch (rl.Type)
                {
                case RiffType.Chunk:
                    bw.Write(RiffParser.ToFourCC(rl.name));
                    byte[] content = ((RiffChunk)rl).GetContent();
                    if (bs != null)
                    {
                        bs.Add(content.Length);
                        bw.Write(bs.Count - 1);
                    }
                    else
                    {
                        bw.Write(content.Length);
                    }
                    bw.Write(content);
                    if ((content.Length & 1) != 0)
                    {
                        bw.Write(false);
                    }
                    break;

                case RiffType.LIST:
                    bw.Write(RiffParser.ToFourCC("LIST"));
                    int bsIndex = -1;
                    if (bw != null)
                    {
                        bsIndex = bs.Count;
                        bs.Add(0);
                    }
                    bw.Write(0);
                    bw.Write(RiffParser.ToFourCC(rl.name));
                    long op = bw.BaseStream.Position;
                    blockSizes = bs.ToArray();
                    if (((RiffList)rl).subList.Count > 0)
                    {
                        byte[] t1 = WriteRiff(((RiffList)rl).subList, ref blockSizes, outBlockSize);
                        bs = new List <int>(blockSizes);
                        bw.Write(t1);
                    }
                    else
                    {
                        bw.Write(rl.content);
                    }
                    long sp  = bw.BaseStream.Position;
                    int  len = (int)(sp - op);
                    bw.BaseStream.Position -= len + 8;
                    if (bs == null)
                    {
                        bw.Write(len);
                    }
                    else
                    {
                        bs.Insert(bsIndex, len + 4);
                        bs.RemoveAt(bsIndex + 1);
                        bw.Write(bsIndex);
                    }
                    bw.BaseStream.Position = sp;
                    break;
                }
            }
            int p = (int)ms.Position;

            byte[] o = new byte[p];
            Array.Copy(ms.GetBuffer(), o, p);
            bw.Close();
            ms.Close();
            blockSizes = bs.ToArray();
            return(o);
        }