Advertisement
Guest User

Untitled

a guest
Jun 12th, 2015
432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.45 KB | None | 0 0
  1. int __usercall ReadComplexField@<eax>(__int64 Index@<rax>, __int64 a2@<rbx>, __int64 a3@<rbp>, __int64 a4@<rdi>, __int64 a5@<rsi>, __int64 ArrayAreaStartPointer@<r10>, __int64 a7@<r11>, __int64 a8@<r12>, __int64 a9@<r13>, struct_StreamReader2 *StreamReader2@<r14>, __int64 a11@<r15>, __int64 a12, __int64 a13, __int64 a14, __int64 a15, __int64 a16, __int64 a17, __int64 a18, int a19, int a20, int a21, __int64 a22, __int64 a23)
  2. {
  3.   _UNKNOWN *v23; // rbx@1
  4.   __int64 v24; // rbp@1
  5.   __int64 IntCounter; // rcx@2
  6.   __int64 currentPOS; // r8@2
  7.   ArrayRepListEntry *ArrayRepList; // rax@2
  8.   __int64 Repeats; // r9@2
  9.   unsigned int *tArray; // rsi@2
  10.   ComplexField *CFieldDesc; // rdx@2
  11.   _DWORD *ActualOffset; // rdi@2
  12.   FieldDescriptor *FieldDesc; // rcx@2
  13.   unsigned int FieldType; // eax@2
  14.   bool v34; // cf@3
  15.   ComplexField *tCField; // r10@5
  16.   signed __int64 Size; // rsi@7
  17.   __int64 count; // r11@7
  18.   FieldDescriptor *tField; // rax@8
  19.   __int64 count2; // rbx@18
  20.   ComplexField *v40; // rbp@22
  21.   __int64 count3; // rbx@27
  22.   __int64 v43; // rax@28
  23.   __int64 v44; // rax@29
  24.  
  25.   *(_QWORD *)(a7 + 32) = a2;
  26.   *(_QWORD *)(a7 - 16) = a3;
  27.   *(_QWORD *)(a7 - 24) = a5;
  28.   *(_QWORD *)(a7 - 32) = a4;
  29.   *(_QWORD *)(a7 - 40) = a8;
  30.   *(_QWORD *)(a7 - 48) = a9;
  31.   *(_QWORD *)(a7 - 56) = a11;
  32.   v23 = &unk_141D66DC0;
  33.   v24 = (__int64)&unk_14289EA50;
  34.   do
  35.   {
  36.     IntCounter = 3 * Index;
  37.     currentPOS = (unsigned int)Index;
  38.     ArrayRepList = (ArrayRepListEntry *)StreamReader2->EBXEntry.ArrayRepListOffset;
  39.     Repeats = ArrayRepList[(unsigned __int64)(4 * IntCounter) / 0xC].Repeats;
  40.     tArray = (unsigned int *)(ArrayAreaStartPointer + ArrayRepList[(unsigned __int64)(4 * IntCounter) / 0xC].offset);
  41.     CFieldDesc = &StreamReader2->EBXEntry.ComplexDescOffset[ArrayRepList[(unsigned __int64)(4 * IntCounter) / 0xC].Index];
  42.     ActualOffset = (_DWORD *)(StreamReader2->ArrayStart + *(_DWORD *)(StreamReader2->ArrayRepList2 + 4 * currentPOS));
  43.     *(ActualOffset - 1) = Repeats;
  44.     FieldDesc = &StreamReader2->EBXEntry.FieldDescStart[CFieldDesc->fieldStartIndex];
  45.     FieldType = ((unsigned int)FieldDesc->type >> 4) & 0x1F;
  46.     if ( (signed int)FieldType < 0xA )
  47.     {
  48.       switch ( FieldType )
  49.       {
  50.         case 8u:
  51.           tCField = &StreamReader2->EBXEntry.ComplexDescOffset[FieldDesc->reference];
  52.           if ( tCField->secondarySize & 0x8000 )
  53.           {
  54.             if ( (_DWORD)Repeats )
  55.             {
  56.               Size = (char *)tArray - (char *)ActualOffset;
  57.               count = Repeats;
  58.               do
  59.               {
  60.                 CFieldDesc = (ComplexField *)tCField->numField;
  61.                 currentPOS = *(_DWORD *)((char *)ActualOffset + Size);
  62.                 FieldDesc = 0i64;
  63.                 tField = &StreamReader2->EBXEntry.FieldDescStart[tCField->fieldStartIndex];
  64.                 if ( tCField->numField )
  65.                 {
  66.                   while ( tField->offset != (_DWORD)currentPOS )
  67.                   {
  68.                     FieldDesc = (FieldDescriptor *)(unsigned int)((_DWORD)FieldDesc + 1);
  69.                     ++tField;
  70.                     if ( (unsigned int)FieldDesc >= (unsigned int)CFieldDesc )
  71.                     {
  72.                       goto LABEL_13;
  73.                     }
  74.                   }
  75.                   FieldDesc = (FieldDescriptor *)tField->secondaryOffset;
  76.                   *ActualOffset = (_DWORD)FieldDesc;
  77.                 }
  78. LABEL_13:
  79.                 ++ActualOffset;
  80.                 --count;
  81.               }
  82.               while ( count );
  83.             }
  84.           }
  85.           else
  86.           {
  87.             sub_1441D0E8C();
  88.           }
  89.           break;
  90.         case 3u:
  91.           if ( (_DWORD)Repeats )
  92.           {
  93.             count2 = Repeats;
  94.             do
  95.             {
  96.               ReadField_0((struct_StreamReader3 *)StreamReader2, tArray, ActualOffset);
  97.               ++tArray;
  98.               ActualOffset += 2;
  99.               --count2;
  100.             }
  101.             while ( count2 );
  102.           }
  103.           break;
  104.         case 2u:
  105.           v40 = &StreamReader2->EBXEntry.ComplexDescOffset[FieldDesc->reference];
  106.           JUMPOUT((v40->type >> 15) & 1, 0, NormalFieldReader);
  107.           v34 = (signed int)Repeats * (unsigned __int64)v40->offset >> 32 != 0;
  108.           sub_1441D0E8C();
  109.           v24 = (__int64)&unk_14289EA50;
  110.           break;
  111.         default:
  112.           if ( FieldType == 7 && (_DWORD)Repeats )
  113.           {
  114.             count3 = Repeats;
  115.             do
  116.             {
  117.               v43 = *tArray;
  118.               if ( (_DWORD)v43 == -1 )
  119.               {
  120.                 a22 = v24;
  121.                 sub_142FCFFAF((__int64)&a22, (__int64)CFieldDesc);
  122.                 v44 = v24;
  123.               }
  124.               else
  125.               {
  126.                 v44 = StreamReader2->qword4D0 + v43;
  127.               }
  128.               *(_QWORD *)ActualOffset = v44;
  129.               ActualOffset += 2;
  130.               ++tArray;
  131.               --count3;
  132.             }
  133.             while ( count3 );
  134.           }
  135.           break;
  136.       }
  137.     }
  138.     else
  139.     {
  140.       v34 = (signed int)Repeats * (unsigned __int64)*((_BYTE *)v23 + (signed int)FieldType) >> 32 != 0;
  141.       sub_1441D0E8C();
  142.     }
  143.     ArrayAreaStartPointer = a23;
  144.     Index = (unsigned int)(a21 + 1);
  145.     v23 = &unk_141D66DC0;
  146.     a21 = Index;
  147.   }
  148.   while ( (unsigned int)Index < StreamReader2->EBXEntry.Header.numArrayRepeater );
  149.   return sub_142FF1326(FieldDesc, CFieldDesc, currentPOS, Repeats, a12, a13, a14, a15, a16, a17, a18);
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement