private int length()
        {
            int i, i0;
            int length = 0x10;

            for (i = 0; i < Array.Length; i++)
            {
                ENRSEntry enrs = Array[i];
                length += GetSize(i > 0 ? enrs.Offset - Array[i - 1].Offset : enrs.Offset);
                length += GetSize(enrs.Count);
                length += GetSize(enrs.Size);
                length += GetSize(enrs.Repeat);

                if (enrs.Repeat < 1)
                {
                    continue;
                }

                for (i0 = 0; i0 < enrs.Count; i0++)
                {
                    if (enrs.Sub[i0].Type <ENRSEntry.Type.WORD ||
                                           enrs.Sub[i0].Type> ENRSEntry.Type.QWORD)
                    {
                        return(length.A(0x10));
                    }

                    length += GetSizeType(i0 > 0 ? enrs.Sub[i0].Skip -
                                          enrs.Sub[i0 - 1].SizeSkip : enrs.Sub[i0].Skip);
                    length += GetSize(enrs.Sub[i0].Reverse);
                }
            }
            return(length.A(0x10));
Exemple #2
0
        private int length()
        {
            if (Array == null)
            {
                return(0);
            }

            int i, i0;
            int length = 0x10;

            for (i = 0; i < Array.Length; i++)
            {
                ENRSEntry enrs = Array[i];
                if (GetSize(enrs.Offset, ref length))
                {
                    goto End;
                }
                if (GetSize(enrs.Count, ref length))
                {
                    goto End;
                }
                if (GetSize(enrs.Size, ref length))
                {
                    goto End;
                }
                if (GetSize(enrs.Repeat, ref length))
                {
                    goto End;
                }

                if (enrs.Repeat < 1)
                {
                    continue;
                }

                for (i0 = 0; i0 < enrs.Count; i0++)
                {
                    if (enrs.Sub[i0].Type <ENRSEntry.Type.WORD ||
                                           enrs.Sub[i0].Type> ENRSEntry.Type.QWORD)
                    {
                        return(length.A(0x10));
                    }

                    if (GetSizeType(enrs.Sub[i0].Skip, ref length))
                    {
                        goto End;
                    }
                    if (GetSize(enrs.Sub[i0].Reverse, ref length))
                    {
                        goto End;
                    }
                }
            }
End:
            return(length.A(0x10));
        public unsafe byte[] Write()
        {
            int i, i0;

            byte[] data;

            if (IsNull || Array.Length < 1)
            {
                return(new byte[0x20]);
            }

            data = new byte[Length];
            fixed(byte *ptr = data)
            {
                ((int *)ptr)[1] = Array.Length;

                byte *localPtr = ptr + 0x10;

                for (i = 0; i < Array.Length; i++)
                {
                    ENRSEntry enrsEntry = Array[i];
                    WriteENRSValue(ref localPtr, i > 0 ? enrsEntry.Offset -
                                   Array[i - 1].Offset : enrsEntry.Offset);
                    WriteENRSValue(ref localPtr, enrsEntry.Count > enrsEntry.Sub.Length ?
                                   enrsEntry.Sub.Length : enrsEntry.Count);
                    WriteENRSValue(ref localPtr, enrsEntry.Size);
                    WriteENRSValue(ref localPtr, enrsEntry.Repeat);

                    if (enrsEntry.Repeat < 1)
                    {
                        continue;
                    }

                    for (i0 = 0; i0 < enrsEntry.Count && i0 < enrsEntry.Sub.Length; i0++)
                    {
                        if (enrsEntry.Sub[i0].Type <ENRSEntry.Type.WORD ||
                                                    enrsEntry.Sub[i0].Type> ENRSEntry.Type.QWORD)
                        {
                            return(data);
                        }

                        WriteENRSValue(ref localPtr, i0 > 0 ? enrsEntry.Sub[i0].Skip -
                                       enrsEntry.Sub[i0 - 1].SizeSkip : enrsEntry.Sub[i0].Skip, enrsEntry.Sub[i0].Type);
                        WriteENRSValue(ref localPtr, enrsEntry.Sub[i0].Reverse);
                    }
                }
            }

            return(data);
        }
Exemple #4
0
        public unsafe byte[] Write()
        {
            int i, i0;

            byte[] data;

            if (IsNull || Array.Length < 1)
            {
                return(new byte[0x20]);
            }

            data = new byte[Length];
            fixed(byte *ptr = data)
            {
                ((int *)ptr)[1] = Array.Length;

                byte *localPtr = ptr + 0x10;

                for (i = 0; i < Array.Length; i++)
                {
                    ENRSEntry enrsEntry = Array[i];
                    if (WriteENRSValue(ref localPtr, enrsEntry.Offset))
                    {
                        goto End;
                    }
                    if (WriteENRSValue(ref localPtr, enrsEntry.Count))
                    {
                        goto End;
                    }
                    if (WriteENRSValue(ref localPtr, enrsEntry.Size))
                    {
                        goto End;
                    }
                    if (WriteENRSValue(ref localPtr, enrsEntry.Repeat))
                    {
                        goto End;
                    }

                    if (enrsEntry.Repeat < 1)
                    {
                        continue;
                    }

                    for (i0 = 0; i0 < enrsEntry.Count && i0 < enrsEntry.Sub.Length; i0++)
                    {
                        if (enrsEntry.Sub[i0].Type > ENRSEntry.Type.QWORD)
                        {
                            return(data);
                        }

                        if (WriteENRSValue(ref localPtr, enrsEntry.Sub[i0].Skip, enrsEntry.Sub[i0].Type))
                        {
                            goto End;
                        }
                        if (WriteENRSValue(ref localPtr, enrsEntry.Sub[i0].Reverse))
                        {
                            goto End;
                        }
                    }
                }
            }

End:
            return(data);
        }