bytecode instruction object
Inheritance: MultiByteAction
Example #1
0
        /// <summary>
        /// Read <see cref="SwfDotNet.IO.ByteCode.Actions.ActionPushList">ActionDefineFunction2</see> from swf.
        /// including inner actions
        /// </summary>
        private ActionDefineFunction2 ReadActionDefineFunction2(BinaryReader br)
        {
            int start = Convert.ToInt32(br.BaseStream.Position);
            // read block length
            int len = Convert.ToInt32(br.ReadUInt16());

            string name = BinaryStringRW.ReadString(br);
            int numParams = Convert.ToInt32(br.ReadUInt16());
            int numRegs = Convert.ToInt32(br.ReadByte());
            byte flags1 = br.ReadByte();
            byte flags2 = br.ReadByte();

            ActionDefineFunction2.VariableFlagSet f
                = new ActionDefineFunction2.VariableFlagSet(
                      (flags1 & 0x80) == 0x80,
                      (flags1 & 0x40) == 0x40,
                      (flags1 & 0x20) == 0x20,
                      (flags1 & 0x10) == 0x10,
                      (flags1 & 0x08) == 0x08,
                      (flags1 & 0x04) == 0x04,
                      (flags1 & 0x02) == 0x02,
                      (flags1 & 0x01) == 0x01,
                      (flags2 & 0x01) == 0x01
            );

            // read parameters
            ActionDefineFunction2.RegParamPair[] paramList = new ActionDefineFunction2.RegParamPair[numParams];

            for (int i=0; i<numParams; i++) {
                int r = Convert.ToInt32(br.ReadByte());
                string p =  BinaryStringRW.ReadString(br);
                paramList[i] = new ActionDefineFunction2.RegParamPair(r,p);
            }
            int blockSize = Convert.ToInt32(br.ReadUInt16());

            // read function body
            ArrayList InnerActions = ReadActions(br.ReadBytes(blockSize));
            ActionDefineFunction2 a = new ActionDefineFunction2(name,paramList,numRegs,f,InnerActions);

            int end =Convert.ToInt32( br.BaseStream.Position );
            ////a.ByteSize = len+3+blockSize;
            //a.ByteSize = end-start+1;

            return a;
        }