.686P .MODEL FLAT ASSUME FS: NOTHING ; --------------------------------------------------------------------------- TMndxFindResult struc ; (sizeof=0x1C) ; XREF: GAME_OBJECT_03F7E848::sub_E94500_r szSearchMask dd ? ; XREF: TMndxFindResult__SetPath+2D_w ; TMndxFindResult__Constructor+4_w ... cchSearchMask dd ? ; XREF: TMndxFindResult__SetPath:loc_1956E9A_w ; TMndxFindResult__Constructor+6_w ... field_8 dd ? ; XREF: TMndxFindResult__Constructor+9_w szFoundPath dd ? ; XREF: TMndxFindResult__Constructor+C_w ; TFileNameDatabase__FindFileInDatabase+55_w cchFoundPath dd ? ; XREF: TMndxFindResult__Constructor+F_w ; TFileNameDatabase__FindFileInDatabase+5B_w FileNameIndex dd ? ; XREF: TMndxFindResult__Constructor+12_w ; TFileNameDatabase__FindFileInDatabase+6B_w pStruct40 dd ? ; XREF: MAR_FILE__FindFileInDatabase+19_r ; TMndxFindResult__SetPath:loc_1956E8C_r ... TMndxFindResult ends ; --------------------------------------------------------------------------- TRIPLET struc ; (sizeof=0xC) BitIndex dd ? ; XREF: TFileNameDatabase__CheckNextPathFragment+39_r NextKey dd ? ; XREF: TFileNameDatabase__CheckNextPathFragment+8C_r ; TSparseArray__GetItemValue:loc_1959B8F_r ... Distance dd ? ; XREF: TFileNameDatabase__CheckNextPathFragment+3E_r ; TSparseArray__GetItemValue:loc_1959BBE_r ... TRIPLET ends ; --------------------------------------------------------------------------- NAME_ENTRY struc ; (sizeof=0xC) ExpectedHashModifier dd ? NextHashModifier dd ? ; XREF: TArchiveDatabase__sub_1958B00+D3r ; sub_1958D70+2Cr FragmentOffset dd ? ; XREF: TArchiveDatabase__sub_1958B00+45r ; sub_1958D70+36r NAME_ENTRY ends ; --------------------------------------------------------------------------- TStruct14 struc ; (sizeof=0x14) ; XREF: TFileNameDatabase::sub_1959460r HashValue dd ? ; XREF: TGenericArray__InsertItem_STRUCT14+44r ; TGenericArray__InsertItem_STRUCT14+46w ... field_4 dd ? ; XREF: TGenericArray__InsertItem_STRUCT14+48r ; TGenericArray__InsertItem_STRUCT14+4Bw ... field_8 dd ? ; XREF: TGenericArray__InsertItem_STRUCT14+4Er ; TGenericArray__InsertItem_STRUCT14+51w ... field_C dd ? ; XREF: TGenericArray__InsertItem_STRUCT14+54r ; TGenericArray__InsertItem_STRUCT14+57w ... field_10 dd ? ; XREF: TGenericArray__InsertItem_STRUCT14+5Ar ; TGenericArray__InsertItem_STRUCT14+5Dw ... TStruct14 ends ; --------------------------------------------------------------------------- TGenericArray struc ; (sizeof=0x15) ; XREF: TGenericArray::LoadDwordsArrayWithCopyr ; TFileNameDatabase::LoadBytesr ... DataBuffer dd ? ; XREF: TMndxFindResult__CreateStruct40+24w ; TMndxFindResult__CreateStruct40+35w ... field_4 dd ? ; XREF: TMndxFindResult__CreateStruct40+26w ; TMndxFindResult__CreateStruct40+38w ... ItemArray dd ? ; XREF: TMndxFindResult__CreateStruct40+29w ; TMndxFindResult__CreateStruct40+3Bw ... ItemCount dd ? ; XREF: TMndxFindResult__CreateStruct40+2Cw ; TMndxFindResult__CreateStruct40+3Ew ... MaxItemCount dd ? ; XREF: TFileNameDatabasePtr__CreateDatabase+27o ; TMndxFindResult__CreateStruct40+2Fw ... bIsValidArray db ? ; XREF: LoadAndVerifyIndexFileHeader+31w ; TMndxFindResult__CreateStruct40+32w ... TGenericArray ends ; --------------------------------------------------------------------------- TBitEntryArray struc ; (sizeof=0x24) ; XREF: TGenericArrayEx::LoadFromStream_Exchanger ; TFileNameDatabaser DataBuffer dd ? ; XREF: TArchiveDatabase__Destructor+64r ; TArchiveDatabase__Constructor+1A3w field_4 dd ? ; XREF: TArchiveDatabase__Constructor+1A9w ItemArray dd ? ; XREF: sub_1957350+31r ; sub_19573D0+1Fr ... ItemCount dd ? ; XREF: TArchiveDatabase__Constructor+1B5w MaxItemCount dd ? ; XREF: TArchiveDatabase__Constructor+1BBw bIsValidArray db ? ; XREF: TArchiveDatabase__Constructor+1C1w db ? ; undefined db ? ; undefined db ? ; undefined BitsPerEntry dd ? ; XREF: sub_1957350+1Fr ; sub_19573D0+6r ... EntryBitMask dd ? ; XREF: sub_1957350:loc_19573B1r ; sub_19573D0:loc_1957419r ... TotalEntries dd ? ; XREF: TGenericArrayEx__LoadFromStream:loc_195861Bw ; TArchiveDatabase__Constructor+1D3w TBitEntryArray ends ; TFileNameDatabase__Constructor+1D3_w ; --------------------------------------------------------------------------- TStruct40 struc ; (sizeof=0x40) array_00 TGenericArray <> ; XREF: TMndxFindResult__CreateStruct40+24w ; TMndxFindResult__CreateStruct40+26w ... db ? ; undefined db ? ; undefined db ? ; undefined array_18 TGenericArray <> ; XREF: TMndxFindResult__CreateStruct40+35w ; TMndxFindResult__CreateStruct40+38w ... db ? ; undefined db ? ; undefined db ? ; undefined HashValue dd ? ; XREF: TMndxFindResult__CreateStruct40+47w ; TFileNameDatabase__CheckNextPathFragment+1Ar ... CharIndex dd ? ; XREF: TMndxFindResult__CreateStruct40+4Aw ; TFileNameDatabase__CheckNextPathFragment+11r ... ItemCount dd ? ; XREF: TMndxFindResult__CreateStruct40+4Dw ; TStruct40__InitSearchBuffers+6Bw ... SearchPhase dd ? ; XREF: TMndxFindResult__CreateStruct40+50w ; TFileNameDatabase__FindFileInDatabase+17w ... TStruct40 ends ; --------------------------------------------------------------------------- TSparseArray struc ; (sizeof=0x65) ; XREF: TSparseArray::LoadFromStream_Exchange_r ; TNameIndexStruct_r ... ItemIsPresent TGenericArray <> ; XREF: LoadAndVerifyIndexFileHeader+31_w ; TFileNameDatabase__Destructor+4C_r ... db ? ; undefined db ? ; undefined db ? ; undefined TotalItemCount dd ? ; XREF: TSparseArray__ExchangeWith+4D_r ; TSparseArray__ExchangeWith+56_w ... ValidItemCount dd ? ; XREF: TFileNameDatabasePtr__GetFileNameCount:loc_1956D32_r ; TSparseArray__ExchangeWith+59_r ... ArrayTriplets_20 TGenericArray <> ; XREF: TFileNameDatabase__Destructor+40_r ; TFileNameDatabase__Destructor+94_r ... db ? ; undefined db ? ; undefined db ? ; undefined ArrayDwords_38 TGenericArray <> ; XREF: TFileNameDatabasePtr__CreateDatabase+27_o ; TFileNameDatabase__Destructor+34_r ... db ? ; undefined db ? ; undefined db ? ; undefined ArrayDwords_50 TGenericArray <> ; XREF: TFileNameDatabase__Destructor+28_r ; TFileNameDatabase__Destructor+7C_r ... TSparseArray ends ; --------------------------------------------------------------------------- TNameIndexStruct struc ; (sizeof=0x7D) ; XREF: TNameIndexStruct::LoadFromStream_Exchange_r ; TFileNameDatabaser NameFragments TGenericArray <> ; XREF: TFileNameDatabase__Destructor+58_r ; TFileNameDatabase__LoadFromStream+82_r ... db ? ; undefined db ? ; undefined db ? ; undefined Struct68 TSparseArray <> ; XREF: LoadAndVerifyIndexFileHeader+31_w ; TFileNameDatabase__Destructor+28_r ... TNameIndexStruct ends ; --------------------------------------------------------------------------- TByteStream struc ; (sizeof=0x18) ; XREF: TFileNameDatabasePtr::CreateDatabase_r ; TFileNameDatabase_r pbData dd ? ; XREF: TByteStream__Constructor+4_w ; TByteStream__IsMarDataValid+2_r ... pvMappedFile dd ? ; XREF: TByteStream__Constructor+6_w ; TByteStream__Destructor+3_r cbData dd ? ; XREF: TByteStream__Constructor+9_w ; TByteStream__GetBytes:loc_1959A05_r ... field_C dd ? ; XREF: TByteStream__Constructor+C_w hFile dd ? ; XREF: TByteStream__Constructor+F_w ; TByteStream__Destructor:loc_19599D2_r hMap dd ? ; XREF: TByteStream__Constructor+12_w ; TByteStream__Destructor:loc_19599C2_r TByteStream ends ; --------------------------------------------------------------------------- TStruct10 struc ; (sizeof=0x10) ; XREF: TStruct10::sub_1957800_r ; TFileNameDatabase_r field_0 dd ? ; XREF: sub_19572E0+24_w ; TFileNameDatabase__Constructor+21A_w field_4 dd ? ; XREF: sub_1956FD0+28_w ; sub_1956FD0:loc_1957001_w ... field_8 dd ? ; XREF: sub_19572E0+4A_w ; sub_19572E0+5B_w ... field_C dd ? ; XREF: sub_1957050:loc_1957074_w ; sub_1957050:loc_1957081_w ... TStruct10 ends ; --------------------------------------------------------------------------- TFileNameDatabasePtr struc ; (sizeof=0x4) ; XREF: TFileNameDatabase_r ; MAR_FILE_r pDatabase dd ? ; XREF: MAR_FILE__Constructor+1D_w ; MAR_FILE__CreateDatabase+22_w ... TFileNameDatabasePtr ends ; --------------------------------------------------------------------------- TFileNameDatabase struc ; (sizeof=0x240) ; XREF: TFileNameDatabase::LoadFromStream_Exchange_r Struct68_00 TSparseArray <> ; XREF: TFileNameDatabasePtr__CreateDatabase+27_o ; TFileNameDatabase__Destructor+D9_r ... db ? ; undefined db ? ; undefined db ? ; undefined FileNameIndexes TSparseArray <> ; XREF: TFileNameDatabasePtr__GetFileNameCount:loc_1956D32_r ; TFileNameDatabase__Destructor+AC_r ... db ? ; undefined db ? ; undefined db ? ; undefined Struct68_D0 TSparseArray <> ; XREF: TFileNameDatabase__Destructor+7C_r ; TFileNameDatabase__Destructor+88_r ... db ? ; undefined db ? ; undefined db ? ; undefined FrgmDist_LoBits TGenericArray <> ; XREF: TFileNameDatabase__Destructor+70_r ; TFileNameDatabase__CheckNextPathFragment:loc_1957AC9_r ... db ? ; undefined db ? ; undefined db ? ; undefined FrgmDist_HiBits TBitEntryArray <> ; XREF: TFileNameDatabase__Destructor+64_r ; TFileNameDatabase__CheckNextPathFragment+119_r ... IndexStruct_174 TNameIndexStruct <> ; XREF: TFileNameDatabase__Destructor+28_r ; TFileNameDatabase__Destructor+34_r ... db ? ; undefined db ? ; undefined db ? ; undefined NextDB TFileNameDatabasePtr <> ; XREF: TFileNameDatabase__Destructor+1D_o ; TFileNameDatabase__CheckNextPathFragment+52_r ... NameFragTable TGenericArray <> ; XREF: TFileNameDatabase__Destructor+E_r ; TFileNameDatabase__CheckNextPathFragment+2F_r ... db ? ; undefined db ? ; undefined db ? ; undefined NameFragIndexMask dd ? ; XREF: TFileNameDatabase__CheckNextPathFragment+26_r ; sub_1957B80:loc_1957B95_r ... field_214 dd ? ; XREF: TFileNameDatabase__Constructor+20E_w ; TFileNameDatabase__LoadFromStream+110_w Struct10 TStruct10 <> ; XREF: TFileNameDatabase__Constructor+21A_w ; TFileNameDatabase__Constructor+224_w ... MarStream TByteStream <> ; XREF: TFileNameDatabase__Destructor+3_o ; TFileNameDatabase__Constructor+214_o TFileNameDatabase ends ; --------------------------------------------------------------------------- MAR_FILE struc ; (sizeof=0xC) pDatabasePtr TFileNameDatabasePtr <> ; XREF: MAR_FILE__Constructor+1D_w ; MAR_FILE__CreateDatabase+22_w ... pbMarFileData dd ? ; XREF: MAR_FILE__Constructor+1A_w ; MAR_FILE__CreateDatabase+1B_r ... cbMarFileData dd ? ; XREF: MAR_FILE__Constructor+12_w ; MAR_FILE__CreateDatabase+18_r ... MAR_FILE ends .DATA table_1BA1818 db 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0 db 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0 db 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0 db 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0 db 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0 db 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0 db 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0 db 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 db 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0 db 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0 db 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0 db 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0 db 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0 db 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0 db 2, 0, 1, 0, 3 dup(7), 1, 7, 2 dup(2), 1, 7, 2 dup(3) db 1, 3, 2 dup(2), 1, 7, 2 dup(4), 1, 4, 2 dup(2), 1, 4 db 2 dup(3), 1, 3, 2 dup(2), 1, 7, 2 dup(5), 1, 5, 2 dup(2) db 1, 5, 2 dup(3), 1, 3, 2 dup(2), 1, 5, 2 dup(4), 1, 4 db 2 dup(2), 1, 4, 2 dup(3), 1, 3, 2 dup(2), 1, 7, 2 dup(6) db 1, 6, 2 dup(2), 1, 6, 2 dup(3), 1, 3, 2 dup(2), 1, 6 db 2 dup(4), 1, 4, 2 dup(2), 1, 4, 2 dup(3), 1, 3, 2 dup(2) db 1, 6, 2 dup(5), 1, 5, 2 dup(2), 1, 5, 2 dup(3), 1, 3 db 2 dup(2), 1, 5, 2 dup(4), 1, 4, 2 dup(2), 1, 4, 2 dup(3) db 1, 3, 2 dup(2), 1, 3 dup(7), 1, 7, 2 dup(2), 1, 7, 2 dup(3) db 1, 3, 2 dup(2), 1, 7, 2 dup(4), 1, 4, 2 dup(2), 1, 4 db 2 dup(3), 1, 3, 2 dup(2), 1, 7, 2 dup(5), 1, 5, 2 dup(2) db 1, 5, 2 dup(3), 1, 3, 2 dup(2), 1, 5, 2 dup(4), 1, 4 db 2 dup(2), 1, 4, 2 dup(3), 1, 3, 2 dup(2), 1, 7, 2 dup(6) db 1, 6, 2 dup(2), 1, 6, 2 dup(3), 1, 3, 2 dup(2), 1, 6 db 2 dup(4), 1, 4, 2 dup(2), 1, 4, 2 dup(3), 1, 3, 2 dup(2) db 1, 6, 2 dup(5), 1, 5, 2 dup(2), 1, 5, 2 dup(3), 1, 3 db 2 dup(2), 1, 5, 2 dup(4), 1, 4, 2 dup(2), 1, 4, 2 dup(3) db 1, 3, 2 dup(2), 1, 7 dup(7), 2, 3 dup(7), 3, 7, 2 dup(3) db 2, 3 dup(7), 4, 7, 2 dup(4), 2, 7, 2 dup(4), 3, 4, 2 dup(3) db 2, 3 dup(7), 5, 7, 2 dup(5), 2, 7, 2 dup(5), 3, 5, 2 dup(3) db 2, 7, 2 dup(5), 4, 5, 2 dup(4), 2, 5, 2 dup(4), 3, 4 db 2 dup(3), 2, 3 dup(7), 6, 7, 2 dup(6), 2, 7, 2 dup(6) db 3, 6, 2 dup(3), 2, 7, 2 dup(6), 4, 6, 2 dup(4), 2, 6 db 2 dup(4), 3, 4, 2 dup(3), 2, 7, 2 dup(6), 5, 6, 2 dup(5) db 2, 6, 2 dup(5), 3, 5, 2 dup(3), 2, 6, 2 dup(5), 4, 5 db 2 dup(4), 2, 5, 2 dup(4), 3, 4, 2 dup(3), 2, 7 dup(7) db 2, 3 dup(7), 3, 7, 2 dup(3), 2, 3 dup(7), 4, 7, 2 dup(4) db 2, 7, 2 dup(4), 3, 4, 2 dup(3), 2, 3 dup(7), 5, 7, 2 dup(5) db 2, 7, 2 dup(5), 3, 5, 2 dup(3), 2, 7, 2 dup(5), 4, 5 db 2 dup(4), 2, 5, 2 dup(4), 3, 4, 2 dup(3), 2, 3 dup(7) db 6, 7, 2 dup(6), 2, 7, 2 dup(6), 3, 6, 2 dup(3), 2, 7 db 2 dup(6), 4, 6, 2 dup(4), 2, 6, 2 dup(4), 3, 4, 2 dup(3) db 2, 7, 2 dup(6), 5, 6, 2 dup(5), 2, 6, 2 dup(5), 3, 5 db 2 dup(3), 2, 6, 2 dup(5), 4, 5, 2 dup(4), 2, 5, 2 dup(4) db 3, 4, 2 dup(3), 2, 0Fh dup(7), 3, 7 dup(7), 4, 3 dup(7) db 4, 7, 2 dup(4), 3, 7 dup(7), 5, 3 dup(7), 5, 7, 2 dup(5) db 3, 3 dup(7), 5, 7, 2 dup(5), 4, 7, 2 dup(5), 4, 5, 2 dup(4) db 3, 7 dup(7), 6, 3 dup(7), 6, 7, 2 dup(6), 3, 3 dup(7) db 6, 7, 2 dup(6), 4, 7, 2 dup(6), 4, 6, 2 dup(4), 3, 3 dup(7) db 6, 7, 2 dup(6), 5, 7, 2 dup(6), 5, 6, 2 dup(5), 3, 7 db 2 dup(6), 5, 6, 2 dup(5), 4, 6, 2 dup(5), 4, 5, 2 dup(4) db 3, 0Fh dup(7), 3, 7 dup(7), 4, 3 dup(7), 4, 7, 2 dup(4) db 3, 7 dup(7), 5, 3 dup(7), 5, 7, 2 dup(5), 3, 3 dup(7) db 5, 7, 2 dup(5), 4, 7, 2 dup(5), 4, 5, 2 dup(4), 3, 7 dup(7) db 6, 3 dup(7), 6, 7, 2 dup(6), 3, 3 dup(7), 6, 7, 2 dup(6) db 4, 7, 2 dup(6), 4, 6, 2 dup(4), 3, 3 dup(7), 6, 7, 2 dup(6) db 5, 7, 2 dup(6), 5, 6, 2 dup(5), 3, 7, 2 dup(6), 5, 6 db 2 dup(5), 4, 6, 2 dup(5), 4, 5, 2 dup(4), 3, 1Fh dup(7) db 4, 0Fh dup(7), 5, 7 dup(7), 5, 3 dup(7), 5, 7, 2 dup(5) db 4, 0Fh dup(7), 6, 7 dup(7), 6, 3 dup(7), 6, 7, 2 dup(6) db 4, 7 dup(7), 6, 3 dup(7), 6, 7, 2 dup(6), 5, 3 dup(7) db 6, 7, 2 dup(6), 5, 7, 2 dup(6), 5, 6, 2 dup(5), 4, 1Fh dup(7) db 4, 0Fh dup(7), 5, 7 dup(7), 5, 3 dup(7), 5, 7, 2 dup(5) db 4, 0Fh dup(7), 6, 7 dup(7), 6, 3 dup(7), 6, 7, 2 dup(6) db 4, 7 dup(7), 6, 3 dup(7), 6, 7, 2 dup(6), 5, 3 dup(7) db 6, 7, 2 dup(6), 5, 7, 2 dup(6), 5, 6, 2 dup(5), 4, 3Fh dup(7) db 5, 1Fh dup(7), 6, 0Fh dup(7), 6, 7 dup(7), 6, 3 dup(7) db 6, 7, 2 dup(6), 5, 3Fh dup(7), 5, 1Fh dup(7), 6, 0Fh dup(7) db 6, 7 dup(7), 6, 3 dup(7), 6, 7, 2 dup(6), 5, 7Fh dup(7) db 6, 7Fh dup(7), 6, 100h dup(7) unk_53ABE00 db 0 .CODE ; ; void * operator_new_safe(size_t ByteCount, void * unk_53ABE00); ; EXTERN _allocate_zeroed_memory_x86:PROC EXTERN _free_memory_x86:PROC j_operator_new_safe PROC push ebp mov ebp, esp push [ebp+08] call _allocate_zeroed_memory_x86 add esp, 4 mov esp, ebp pop ebp ret j_operator_new_safe ENDP operator_delete PROC push ebp mov ebp, esp push [ebp+08] call _free_memory_x86 add esp, 4 mov esp, ebp pop ebp ret operator_delete ENDP TSparseArray__GetItemValue proc near ; CODE XREF: sub_1957350+1A_p ; TFileNameDatabase__CheckNextPathFragment+103_p ... arg_0 = dword ptr 8 push ebp mov ebp, esp mov edx, [ecx+28h] push ebx push esi push edi mov edi, [ebp+arg_0] mov eax, edi shr eax, 9 lea eax, [eax+eax*2] mov esi, [edx+eax*4] lea eax, [edx+eax*4] mov edx, edi shr edx, 6 and edx, 7 dec edx cmp edx, 6 ; switch 7 cases ja short loc_1959BE0 ; jumptable 01959B88 default case jmp ds:off_1959C90[edx*4] ; switch jump loc_1959B8F: ; DATA XREF: .text:off_1959C90o mov eax, [eax+4] ; jumptable 01959B88 case 0 and eax, 7Fh jmp short loc_1959BDE ; --------------------------------------------------------------------------- loc_1959B97: ; CODE XREF: TSparseArray__GetItemValue+28_j ; DATA XREF: .text:off_1959C90o mov edx, [eax+4] ; jumptable 01959B88 case 1 shr edx, 7 and edx, 0FFh add esi, edx jmp short loc_1959BE0 ; jumptable 01959B88 default case ; --------------------------------------------------------------------------- loc_1959BA7: ; CODE XREF: TSparseArray__GetItemValue+28_j ; DATA XREF: .text:off_1959C90o mov eax, [eax+4] ; jumptable 01959B88 case 2 shr eax, 0Fh and eax, 0FFh jmp short loc_1959BDE ; --------------------------------------------------------------------------- loc_1959BB4: ; CODE XREF: TSparseArray__GetItemValue+28_j ; DATA XREF: .text:off_1959C90o mov edx, [eax+4] ; jumptable 01959B88 case 3 shr edx, 17h add esi, edx jmp short loc_1959BE0 ; jumptable 01959B88 default case ; --------------------------------------------------------------------------- loc_1959BBE: ; CODE XREF: TSparseArray__GetItemValue+28_j ; DATA XREF: .text:off_1959C90o mov eax, [eax+8] ; jumptable 01959B88 case 4 jmp short loc_1959BD9 ; --------------------------------------------------------------------------- loc_1959BC3: ; CODE XREF: TSparseArray__GetItemValue+28_j ; DATA XREF: .text:off_1959C90o mov edx, [eax+8] ; jumptable 01959B88 case 5 shr edx, 9 and edx, 1FFh add esi, edx jmp short loc_1959BE0 ; jumptable 01959B88 default case ; --------------------------------------------------------------------------- loc_1959BD3: ; CODE XREF: TSparseArray__GetItemValue+28_j ; DATA XREF: .text:off_1959C90o mov eax, [eax+8] ; jumptable 01959B88 case 6 shr eax, 12h loc_1959BD9: ; CODE XREF: TSparseArray__GetItemValue+61_j and eax, 1FFh loc_1959BDE: ; CODE XREF: TSparseArray__GetItemValue+35_j ; TSparseArray__GetItemValue+52_j add esi, eax loc_1959BE0: ; CODE XREF: TSparseArray__GetItemValue+26_j ; TSparseArray__GetItemValue+45_j ... mov ebx, edi ; jumptable 01959B88 default case shr ebx, 5 test bl, 1 jz short loc_1959C31 mov edx, [ecx+8] mov edx, [edx+ebx*4-4] mov eax, edx shr eax, 1 and eax, 55555555h and edx, 55555555h add eax, edx mov edx, eax and eax, 33333333h shr edx, 2 and edx, 33333333h add edx, eax mov eax, edx shr eax, 4 and eax, 0F0F0F0Fh and edx, 0F0F0F0Fh add eax, edx imul eax, 1010101h shr eax, 18h add esi, eax loc_1959C31: ; CODE XREF: TSparseArray__GetItemValue+88_j mov edx, [ecx+8] mov ecx, edi and ecx, 1Fh mov eax, 1 shl eax, cl mov ecx, [edx+ebx*4] pop edi dec eax and ecx, eax mov eax, ecx shr eax, 1 and eax, 55555555h and ecx, 55555555h add eax, ecx mov ecx, eax and eax, 33333333h shr ecx, 2 and ecx, 33333333h add ecx, eax mov eax, ecx shr eax, 4 and eax, 0F0F0F0Fh and ecx, 0F0F0F0Fh add eax, ecx imul eax, 1010101h shr eax, 18h add eax, esi pop esi pop ebx pop ebp retn 4 off_1959C90 dd offset loc_1959B8F ; DATA XREF: TSparseArray__GetItemValue+28_r dd offset loc_1959B97 ; jump table for switch statement dd offset loc_1959BA7 dd offset loc_1959BB4 dd offset loc_1959BBE dd offset loc_1959BC3 dd offset loc_1959BD3 TSparseArray__GetItemValue endp ;------------------------------------------------------------------------------ ; TArchiveDatabase__sub_1959CB0 TArchiveDatabase__sub_1959CB0 proc near ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+A1_p ; sub_1958B00+E8_p ... pThis = dword ptr -4 dwKey = dword ptr 8 push ebp mov ebp, esp push ecx mov edx, [ebp+dwKey] mov eax, edx shr eax, 9 mov [ebp+pThis], ecx test edx, 1FFh ; if(dwKey & 0x01FF) jnz short loc_1959CD3 mov ecx, [ecx+40h] mov eax, [ecx+eax*4] ; EAX = pDatabase->NextKeyTable[dwKey >> 0x09] mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1959CD3: ; CODE XREF: TFileNameDatabase__FindNextMatch+15_j push ebx push esi mov esi, [ecx+40h] lea esi, [esi+eax*4] mov eax, [esi] mov esi, [esi+4] shr eax, 9 add esi, 1FFh push edi shr esi, 9 lea edi, [eax+0Ah] mov [ebp+dwKey], esi cmp edi, esi jb short loc_1959D2E mov edi, [ecx+28h] lea esi, [eax+eax*2+3] lea esi, [edi+esi*4] mov edi, eax shl edi, 9 mov ebx, edi sub ebx, [esi] add ebx, 200h cmp edx, ebx jb short loc_1959D5F loc_1959D14: ; CODE XREF: TFileNameDatabase__FindNextMatch+7Aj add edi, 200h add esi, 0Ch mov ebx, edi sub ebx, [esi] inc eax add ebx, 200h cmp edx, ebx jnb short loc_1959D14 jmp short loc_1959D5F ; --------------------------------------------------------------------------- loc_1959D2E: ; CODE XREF: TFileNameDatabase__FindNextMatch+45_j lea edi, [eax+1] cmp edi, esi jnb short loc_1959D5F mov ecx, [ecx+28h] loc_1959D38: ; CODE XREF: TFileNameDatabase__FindNextMatch+AAj add esi, eax shr esi, 1 mov ebx, esi shl ebx, 9 lea edi, [esi+esi*2] sub ebx, [ecx+edi*4] cmp edx, ebx jnb short loc_1959D50 mov [ebp+dwKey], esi jmp short loc_1959D55 ; --------------------------------------------------------------------------- loc_1959D50: ; CODE XREF: TFileNameDatabase__FindNextMatch+99_j mov eax, esi mov esi, [ebp+dwKey] loc_1959D55: ; CODE XREF: TFileNameDatabase__FindNextMatch+9E_j lea edi, [eax+1] cmp edi, esi jb short loc_1959D38 mov ecx, [ebp+pThis] loc_1959D5F: ; CODE XREF: TFileNameDatabase__FindNextMatch+62_j ; TFileNameDatabase__FindNextMatch+7C_j ... mov ecx, [ecx+28h] lea esi, [eax+eax*2] mov edi, [ecx+esi*4] ; EDI = Struct68_00.ArrayTriplets_20.ItemArray[eax] lea esi, [ecx+esi*4] ; ESI = Struct68_00.ArrayTriplets_20.ItemArray + eax mov ecx, eax shl ecx, 9 sub edi, ecx shl eax, 4 add edx, edi mov edi, eax mov eax, [esi+4] mov ecx, eax shr ecx, 17h mov ebx, 100h sub ebx, ecx cmp edx, ebx jnb short loc_1959DE8 mov ecx, eax shr ecx, 7 and ecx, 0FFh mov esi, 80h sub esi, ecx cmp edx, esi jnb short loc_1959DC0 and eax, 7Fh mov ecx, 40h sub ecx, eax cmp edx, ecx jb loc_1959E53 add edi, 2 lea edx, [edx+eax-40h] jmp loc_1959E53 ; --------------------------------------------------------------------------- loc_1959DC0: ; CODE XREF: TFileNameDatabase__FindNextMatch+F0_j shr eax, 0Fh and eax, 0FFh mov esi, 0C0h sub esi, eax cmp edx, esi jnb short loc_1959DDC add edi, 4 lea edx, [edx+ecx-80h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959DDC: ; CODE XREF: TFileNameDatabase__FindNextMatch+121_j add edi, 6 lea edx, [edx+eax-0C0h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959DE8: ; CODE XREF: TFileNameDatabase__FindNextMatch+DA_j mov esi, [esi+8] mov eax, esi shr eax, 9 and eax, 1FFh mov ebx, 180h sub ebx, eax cmp edx, ebx jnb short loc_1959E29 and esi, 1FFh mov eax, 140h sub eax, esi cmp edx, eax jnb short loc_1959E1D add edi, 8 lea edx, [edx+ecx-100h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959E1D: ; CODE XREF: TFileNameDatabase__FindNextMatch+15F_j add edi, 0Ah lea edx, [edx+esi-140h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959E29: ; CODE XREF: TFileNameDatabase__FindNextMatch+14E_j shr esi, 12h and esi, 1FFh mov ecx, 1C0h sub ecx, esi cmp edx, ecx jnb short loc_1959E49 add edi, 0Ch lea edx, [edx+eax-180h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959E49: ; CODE XREF: TFileNameDatabase__FindNextMatch+18B_j add edi, 0Eh lea edx, [edx+esi-1C0h] loc_1959E53: ; CODE XREF: TFileNameDatabase__FindNextMatch+FE_j ; TFileNameDatabase__FindNextMatch+10B_j ... mov eax, [ebp+pThis] mov ebx, [eax+8] mov ecx, [ebx+edi*4] not ecx mov eax, ecx shr eax, 1 and eax, 55555555h mov esi, ecx and esi, 55555555h add eax, esi mov esi, eax shr esi, 2 and eax, 33333333h and esi, 33333333h add esi, eax mov eax, esi shr eax, 4 and esi, 0F0F0F0Fh and eax, 0F0F0F0Fh add eax, esi imul eax, 1010101h mov esi, eax shr esi, 18h cmp edx, esi jb short loc_1959EEA mov ecx, [ebx+edi*4+4] inc edi sub edx, esi not ecx mov eax, ecx shr eax, 1 and eax, 55555555h mov esi, ecx and esi, 55555555h add eax, esi mov esi, eax shr esi, 2 and eax, 33333333h and esi, 33333333h add esi, eax mov eax, esi shr eax, 4 and eax, 0F0F0F0Fh and esi, 0F0F0F0Fh add eax, esi imul eax, 1010101h loc_1959EEA: ; CODE XREF: TFileNameDatabase__FindNextMatch+1F2_j mov esi, eax shr esi, 8 and esi, 0FFh shl edi, 5 cmp edx, esi jnb short loc_1959F0D and eax, 0FFh cmp edx, eax jb short loc_1959F2B add edi, 8 shr ecx, 8 jmp short loc_1959F29 ; --------------------------------------------------------------------------- loc_1959F0D: ; CODE XREF: TFileNameDatabase__FindNextMatch+24A_j shr eax, 10h and eax, 0FFh cmp edx, eax jnb short loc_1959F23 add edi, 10h shr ecx, 10h sub edx, esi jmp short loc_1959F2B ; --------------------------------------------------------------------------- loc_1959F23: ; CODE XREF: TFileNameDatabase__FindNextMatch+267_j add edi, 18h shr ecx, 18h loc_1959F29: ; CODE XREF: TFileNameDatabase__FindNextMatch+25B_j sub edx, eax loc_1959F2B: ; CODE XREF: TFileNameDatabase__FindNextMatch+253_j ; TFileNameDatabase__FindNextMatch+271_j and ecx, 0FFh shl edx, 8 movzx eax, byte ptr ds:table_1BA1818[ecx+edx] add eax, edi pop edi pop esi pop ebx mov esp, ebp pop ebp retn 4 TArchiveDatabase__sub_1959CB0 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TNameIndexStruct__CheckNameFragment proc near ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+6B_p ; TFileNameDatabase__CheckNextPathFragment+191_p ... pThis = dword ptr -4 pUnknownStruct1C= dword ptr 8 dwDistance = dword ptr 0Ch push ebp mov ebp, esp push ecx push ebx push esi push edi mov edi, ecx cmp [edi+TNameIndexStruct.Struct68.TotalItemCount], 0 mov ecx, [ebp+pUnknownStruct1C] mov edx, [ecx+TMndxFindResult.pStruct40] mov [ebp+pThis], edi jnz short loc_195A1C8 mov edi, [edi+TNameIndexStruct.NameFragments.ItemArray] ; Pointer to name table sub edi, [edx+TStruct40.CharIndex] add edi, [ebp+dwDistance] ; EDI = szPathFragment loc_195A1A1: ; CODE XREF: TNameIndexStruct__CheckNameFragment+3Bj mov eax, [edx+TStruct40.CharIndex] mov esi, [ecx+TMndxFindResult.szSearchMask] mov bl, [eax+edi] cmp bl, [eax+esi] jnz short loc_195A1BD inc eax mov [edx+TStruct40.CharIndex], eax cmp byte ptr [eax+edi], 0 jz short loc_195A215 cmp eax, [ecx+TMndxFindResult.cchSearchMask] jb short loc_195A1A1 loc_195A1BD: ; CODE XREF: TNameIndexStruct__CheckNameFragment+2C_j ; TNameIndexStruct__CheckNameFragment+5Ej ... pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 8 ; --------------------------------------------------------------------------- loc_195A1C8: ; CODE XREF: TNameIndexStruct__CheckNameFragment+16_j mov eax, [ebp+dwDistance] jmp short loc_195A1D0 ; --------------------------------------------------------------------------- align 10h loc_195A1D0: ; CODE XREF: TNameIndexStruct__CheckNameFragment+4B_j ; TNameIndexStruct__CheckNameFragment+93j mov ebx, [edi+TNameIndexStruct.NameFragments.ItemArray] mov esi, [edx+TStruct40.CharIndex] mov ecx, [ecx+TMndxFindResult.szSearchMask] mov bl, [eax+ebx] ; pNameList[dwNameOffset] == szPathName[nCharIndex] cmp bl, [esi+ecx] jnz short loc_195A1BD lea ecx, [esi+1] mov [edx+TStruct40.CharIndex], ecx mov edi, [edi+TNameIndexStruct.Struct68.ItemIsPresent.ItemArray] mov [ebp+dwDistance], ecx mov ecx, eax and ecx, 1Fh ; ecx = (dwNameOffset & 0x1F) mov esi, eax mov ebx, 1 shl ebx, cl ; ebx = 1 << (dwNameOffset & 0x1F); shr esi, 5 ; esi = (dwNameOffset >> 0x05) mov ecx, [edi+esi*4] inc eax and ecx, ebx jnz short loc_195A215 mov esi, [ebp+dwDistance] mov ecx, [ebp+pUnknownStruct1C] cmp esi, [ecx+4] jnb short loc_195A1BD mov edi, [ebp+pThis] jmp short loc_195A1D0 ; --------------------------------------------------------------------------- loc_195A215: ; CODE XREF: TNameIndexStruct__CheckNameFragment+36_j ; TNameIndexStruct__CheckNameFragment+83_j pop edi pop esi mov al, 1 pop ebx mov esp, ebp pop ebp retn 8 TNameIndexStruct__CheckNameFragment endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_1957350 proc near ; CODE XREF: sub_1957B80+D8p ; sub_1957B80:loc_1957C73p ... arg_0 = dword ptr 8 push ebp mov ebp, esp mov eax, [ebp+arg_0] push ebx push esi mov esi, ecx mov ebx, [esi+140h] push edi push eax lea ecx, [esi+0D0h] add ebx, eax call TSparseArray__GetItemValue mov edi, [esi+168h] mov ecx, edi imul ecx, eax mov eax, ecx and ecx, 1Fh mov edx, ecx mov ecx, [esi+158h] add edi, edx shr eax, 5 cmp edi, 20h ja short loc_195739A mov eax, [ecx+eax*4] mov ecx, edx shr eax, cl jmp short loc_19573B1 ; --------------------------------------------------------------------------- loc_195739A: ; CODE XREF: sub_1957350+3F_j lea edi, [ecx+eax*4] mov eax, [edi+4] mov edi, [edi] mov ecx, 20h sub ecx, edx shl eax, cl mov ecx, edx shr edi, cl or eax, edi loc_19573B1: ; CODE XREF: sub_1957350+48_j and eax, [esi+16Ch] movzx edx, byte ptr [ebx] pop edi shl eax, 8 pop esi or eax, edx pop ebx pop ebp retn 4 sub_1957350 endp ; --------------------------------------------------------------------------- ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_1959F50 proc near ; CODE XREF: sub_1957B80+14C_p ; sub_1958980+62_p ... var_4 = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp push ecx mov edx, [ebp+arg_0] mov eax, edx shr eax, 9 mov [ebp+var_4], ecx test edx, 1FFh jnz short loc_1959F73 mov ecx, [ecx+58h] mov eax, [ecx+eax*4] mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1959F73: ; CODE XREF: sub_1959F50+15_j push ebx push esi mov esi, [ecx+58h] lea esi, [esi+eax*4] mov eax, [esi] push edi mov edi, [esi+4] shr eax, 9 add edi, 1FFh shr edi, 9 lea esi, [eax+0Ah] cmp esi, edi jb short loc_1959FAD mov edi, [ecx+28h] lea esi, [eax+eax*2+3] cmp edx, [edi+esi*4] lea esi, [edi+esi*4] jb short loc_1959FD4 loc_1959FA3: ; CODE XREF: sub_1959F50+59j add esi, 0Ch inc eax cmp edx, [esi] jnb short loc_1959FA3 jmp short loc_1959FD4 ; --------------------------------------------------------------------------- loc_1959FAD: ; CODE XREF: sub_1959F50+42_j lea esi, [eax+1] cmp esi, edi jnb short loc_1959FD4 mov ecx, [ecx+28h] loc_1959FB7: ; CODE XREF: sub_1959F50+7Fj lea esi, [edi+eax] shr esi, 1 lea ebx, [esi+esi*2] cmp edx, [ecx+ebx*4] jnb short loc_1959FC8 mov edi, esi jmp short loc_1959FCA ; --------------------------------------------------------------------------- loc_1959FC8: ; CODE XREF: sub_1959F50+72_j mov eax, esi loc_1959FCA: ; CODE XREF: sub_1959F50+76_j lea esi, [eax+1] cmp esi, edi jb short loc_1959FB7 mov ecx, [ebp+var_4] loc_1959FD4: ; CODE XREF: sub_1959F50+51_j ; sub_1959F50+5B_j ... mov edi, [ecx+28h] lea esi, [eax+eax*2] sub edx, [edi+esi*4] shl eax, 4 lea esi, [edi+esi*4] mov edi, eax mov eax, [esi+4] mov ebx, eax shr ebx, 17h cmp edx, ebx jnb short loc_195A026 mov esi, eax shr esi, 7 and esi, 0FFh cmp edx, esi jnb short loc_195A00E and eax, 7Fh cmp edx, eax jb short loc_195A066 add edi, 2 sub edx, eax jmp short loc_195A066 ; --------------------------------------------------------------------------- loc_195A00E: ; CODE XREF: sub_1959F50+AE_j shr eax, 0Fh and eax, 0FFh cmp edx, eax jnb short loc_195A01F add edi, 4 jmp short loc_195A064 ; --------------------------------------------------------------------------- loc_195A01F: ; CODE XREF: sub_1959F50+C8_j add edi, 6 sub edx, eax jmp short loc_195A066 ; --------------------------------------------------------------------------- loc_195A026: ; CODE XREF: sub_1959F50+9F_j mov esi, [esi+8] mov eax, esi shr eax, 9 and eax, 1FFh cmp edx, eax jnb short loc_195A04D and esi, 1FFh cmp edx, esi jnb short loc_195A048 add edi, 8 sub edx, ebx jmp short loc_195A066 ; --------------------------------------------------------------------------- loc_195A048: ; CODE XREF: sub_1959F50+EF_j add edi, 0Ah jmp short loc_195A064 ; --------------------------------------------------------------------------- loc_195A04D: ; CODE XREF: sub_1959F50+E5_j shr esi, 12h and esi, 1FFh cmp edx, esi jnb short loc_195A061 add edi, 0Ch sub edx, eax jmp short loc_195A066 ; --------------------------------------------------------------------------- loc_195A061: ; CODE XREF: sub_1959F50+108_j add edi, 0Eh loc_195A064: ; CODE XREF: sub_1959F50+CD_j ; sub_1959F50+FB_j sub edx, esi loc_195A066: ; CODE XREF: sub_1959F50+B5_j ; sub_1959F50+BC_j ... mov ebx, [ecx+8] mov esi, [ebx+edi*4] mov eax, esi shr eax, 1 and eax, 55555555h mov ecx, esi and ecx, 55555555h add eax, ecx mov ecx, eax shr ecx, 2 and eax, 33333333h and ecx, 33333333h add ecx, eax mov eax, ecx shr eax, 4 and ecx, 0F0F0F0Fh and eax, 0F0F0F0Fh add eax, ecx imul eax, 1010101h mov ecx, eax shr ecx, 18h cmp edx, ecx jb short loc_195A0F6 mov esi, [ebx+edi*4+4] sub edx, ecx inc edi mov eax, esi shr eax, 1 and eax, 55555555h mov ecx, esi and ecx, 55555555h add eax, ecx mov ecx, eax shr ecx, 2 and eax, 33333333h and ecx, 33333333h add ecx, eax mov eax, ecx shr eax, 4 and eax, 0F0F0F0Fh and ecx, 0F0F0F0Fh add eax, ecx imul eax, 1010101h loc_195A0F6: ; CODE XREF: sub_1959F50+160_j mov ecx, eax shr ecx, 8 and ecx, 0FFh shl edi, 5 cmp edx, ecx jnb short loc_195A119 and eax, 0FFh cmp edx, eax jb short loc_195A137 add edi, 8 shr esi, 8 jmp short loc_195A135 ; --------------------------------------------------------------------------- loc_195A119: ; CODE XREF: sub_1959F50+1B6_j shr eax, 10h and eax, 0FFh cmp edx, eax jnb short loc_195A12F add edi, 10h shr esi, 10h sub edx, ecx jmp short loc_195A137 ; --------------------------------------------------------------------------- loc_195A12F: ; CODE XREF: sub_1959F50+1D3_j add edi, 18h shr esi, 18h loc_195A135: ; CODE XREF: sub_1959F50+1C7_j sub edx, eax loc_195A137: ; CODE XREF: sub_1959F50+1BF_j ; sub_1959F50+1DD_j and esi, 0FFh shl edx, 8 movzx eax, ds:table_1BA1818[esi+edx] add eax, edi pop edi pop esi pop ebx mov esp, ebp pop ebp retn 4 sub_1959F50 endp ; --------------------------------------------------------------------------- ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_1957B80 proc near ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+5E_p ; TFileNameDatabase__CheckNextPathFragment+180_p ... pStruct40 = dword ptr -4 arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp push ecx push ebx mov ebx, [ebp+arg_0] mov eax, [ebx+18h] push esi push edi mov edi, [ebp+arg_4] mov esi, ecx mov [ebp+pStruct40], eax loc_1957B95: ; CODE XREF: sub_1957B80+9Fj ; sub_1957B80+156j mov eax, [esi+TFileNameDatabase.NameFragIndexMask] and eax, edi lea ecx, [eax+eax*2] mov eax, [esi+TFileNameDatabase.NameFragTable.ItemArray] add ecx, ecx add ecx, ecx add eax, ecx mov [ebp+arg_4], ecx cmp edi, [eax+4] jnz short loc_1957C30 mov edx, [eax+8] mov edi, edx and edi, 0FFFFFF00h cmp edi, 0FFFFFF00h jz short loc_1957BEE mov ecx, [esi+TFileNameDatabase.NextDB.pDatabase] push edx push ebx test ecx, ecx jz short loc_1957BDA call sub_1957B80 jmp short loc_1957BE5 ; --------------------------------------------------------------------------- loc_1957BDA: ; CODE XREF: sub_1957B80+51_j lea ecx, [esi+TFileNameDatabase.IndexStruct_174] call TNameIndexStruct__CheckNameFragment loc_1957BE5: ; CODE XREF: sub_1957B80+58_j test al, al jz short loc_1957C25 mov ecx, [ebp+arg_4] jmp short loc_1957C05 ; --------------------------------------------------------------------------- loc_1957BEE: ; CODE XREF: sub_1957B80+45_j mov edx, [ebp+pStruct40] mov edi, [edx+34h] mov edx, [ebx] mov al, [eax+8] cmp al, [edi+edx] jnz short loc_1957C25 mov edx, [ebp+pStruct40] inc edi mov [edx+34h], edi loc_1957C05: ; CODE XREF: sub_1957B80+6C_j mov eax, [esi+200h] mov edi, [ecx+eax] test edi, edi jz loc_1957CDB mov ecx, [ebp+pStruct40] mov edx, [ecx+34h] cmp edx, [ebx+4] jb loc_1957B95 loc_1957C25: ; CODE XREF: sub_1957B80+67_j ; sub_1957B80+7C_j ... pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 8 ; --------------------------------------------------------------------------- loc_1957C30: ; CODE XREF: sub_1957B80+32_j mov edx, [esi+0D8h] mov ecx, edi and ecx, 1Fh mov ebx, 1 shl ebx, cl mov eax, edi shr eax, 5 test [edx+eax*4], ebx jz short loc_1957C8E cmp dword ptr [esi+1F4h], 0 push edi mov ecx, esi jz short loc_1957C73 call sub_1957350 mov ecx, [esi+1F4h] mov ebx, [ebp+arg_0] push eax push ebx test ecx, ecx jz short loc_1957C7D call sub_1957B80 jmp short loc_1957C88 ; --------------------------------------------------------------------------- loc_1957C73: ; CODE XREF: sub_1957B80+D6_j call sub_1957350 mov ebx, [ebp+arg_0] push eax push ebx loc_1957C7D: ; CODE XREF: sub_1957B80+EA_j lea ecx, [esi+174h] call TNameIndexStruct__CheckNameFragment loc_1957C88: ; CODE XREF: sub_1957B80+F1_j test al, al jz short loc_1957C25 jmp short loc_1957CB2 ; --------------------------------------------------------------------------- loc_1957C8E: ; CODE XREF: sub_1957B80+CA_j mov eax, [ebp+pStruct40] mov ecx, [esi+140h] mov ebx, [ebp+arg_0] mov eax, [eax+34h] mov edx, [ebx] mov cl, [edi+ecx] cmp cl, [eax+edx] jnz loc_1957C25 mov edx, [ebp+pStruct40] inc eax mov [edx+34h], eax loc_1957CB2: ; CODE XREF: sub_1957B80+10C_j cmp edi, [esi+214h] jbe short loc_1957CDB mov eax, [ebp+pStruct40] mov ecx, [eax+34h] cmp ecx, [ebx+4] jnb loc_1957C25 push edi mov ecx, esi call sub_1959F50 sub eax, edi lea edi, [eax-1] jmp loc_1957B95 ; --------------------------------------------------------------------------- loc_1957CDB: ; CODE XREF: sub_1957B80+90_j ; sub_1957B80+138_j pop edi pop esi mov al, 1 pop ebx mov esp, ebp pop ebp retn 8 sub_1957B80 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_19573D0 proc near ; CODE XREF: TFileNameDatabase__sub_1959460+1D9p arg_0 = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp push esi mov esi, ecx mov edx, [esi+TFileNameDatabase.FrgmDist_HiBits.BitsPerEntry] mov eax, edx imul eax, [ebp+arg_4] mov ecx, eax and eax, 1Fh add edx, eax shr ecx, 5 cmp edx, 20h mov edx, [esi+TFileNameDatabase.FrgmDist_HiBits.ItemArray] ja short loc_1957400 mov edx, [edx+ecx*4] mov ecx, eax shr edx, cl jmp short loc_1957419 ; --------------------------------------------------------------------------- loc_1957400: ; CODE XREF: sub_19573D0+25j push edi lea edi, [edx+ecx*4] mov edx, [edi+4] mov edi, [edi] mov ecx, 20h sub ecx, eax shl edx, cl mov ecx, eax shr edi, cl or edx, edi pop edi loc_1957419: ; CODE XREF: sub_19573D0+2Ej and edx, [esi+TFileNameDatabase.FrgmDist_HiBits.EntryBitMask] mov eax, [esi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] mov ecx, [ebp+arg_0] movzx eax, byte ptr [eax+ecx] shl edx, 8 or eax, edx pop esi pop ebp retn 8 sub_19573D0 endp ; --------------------------------------------------------------------------- ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TFileNameDatabase__CheckNextPathFragment proc near ; CODE XREF: TFileNameDatabase__FindFileInDatabase+25p var_C = dword ptr -0Ch CollisionIndex = dword ptr -8 var_4 = dword ptr -4 pStruct1C = dword ptr 8 push ebp mov ebp, esp mov edx, [ebp+pStruct1C] sub esp, 0Ch push ebx mov ebx, [edx+TMndxFindResult.szSearchMask] push esi push edi mov edi, [edx+TMndxFindResult.pStruct40] mov eax, [edi+TStruct40.CharIndex] movzx eax, byte ptr [eax+ebx] ; EAX = szPathName[nCharIndex] mov esi, ecx mov ecx, [edi+TStruct40.HashValue] mov ebx, ecx shl ebx, 5 xor eax, ebx xor eax, ecx and eax, [esi+TFileNameDatabase.NameFragIndexMask] ; (000000ff) - Mask value lea ebx, [eax+eax*2] mov eax, [esi+TFileNameDatabase.NameFragTable.ItemArray] ; (7f3ae128) - Array of 256 triplets add ebx, ebx add ebx, ebx ; EBX = Offset of the triplet we want to know cmp ecx, [eax+ebx+TRIPLET.BitIndex] jnz short loc_1957A0E mov eax, [eax+ebx+TRIPLET.Distance] mov ecx, eax and ecx, 0FFFFFF00h cmp ecx, 0FFFFFF00h jz short loc_19579EF mov ecx, [esi+TFileNameDatabase.NextDB.pDatabase] push eax push edx test ecx, ecx jz short loc_19579D5 call sub_1957B80 jmp short loc_19579E0 ; --------------------------------------------------------------------------- loc_19579D5: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+5C_j lea ecx, [esi+TFileNameDatabase.IndexStruct_174] call TNameIndexStruct__CheckNameFragment loc_19579E0: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+63_j test al, al jnz short loc_19579F6 loc_19579E4: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+C1j ; TFileNameDatabase__CheckNextPathFragment+1A4j pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_19579EF: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+50_j mov eax, [edi+TStruct40.CharIndex] ; nCharIndex = nCharIndex + 1 inc eax mov [edi+TStruct40.CharIndex], eax loc_19579F6: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+72_j mov edx, [esi+TFileNameDatabase.NameFragTable.ItemArray] ; EDX = pTripletArray mov eax, [edx+ebx+TRIPLET.NextKey] mov [edi+TStruct40.HashValue], eax loc_1957A03: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+198j pop edi pop esi mov al, 1 pop ebx mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1957A0E: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+3C_j push ecx ; dwKey mov ecx, esi ; pDatabase call TArchiveDatabase__sub_1959CB0 mov ebx, [esi+TFileNameDatabase.Struct68_00.ItemIsPresent.ItemArray] inc eax mov ecx, eax and ecx, 1Fh mov edx, 1 shl edx, cl mov ecx, eax shr ecx, 5 mov [ebp+CollisionIndex], eax test [ebx+ecx*4], edx jz short loc_19579E4 sub eax, [edi+TStruct40.HashValue] mov [ebp+var_4], 0FFFFFFFFh dec eax mov [edi+TStruct40.HashValue], eax loc_1957A41: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+1E1j mov eax, [edi+TStruct40.HashValue] mov ebx, [esi+TFileNameDatabase.Struct68_D0.ItemIsPresent.ItemArray] mov ecx, eax and ecx, 1Fh mov edx, 1 shl edx, cl mov ecx, eax shr ecx, 5 test [ebx+ecx*4], edx jz loc_1957B1C mov ecx, [ebp+var_4] cmp ecx, 0FFFFFFFFh jnz short loc_1957A7F push eax lea ecx, [esi+TFileNameDatabase.Struct68_D0] call TSparseArray__GetItemValue mov ecx, eax mov [ebp+var_4], eax jmp short loc_1957A83 ; --------------------------------------------------------------------------- loc_1957A7F: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+FA_j inc ecx mov [ebp+var_4], ecx loc_1957A83: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+10D_j mov edx, [edi+TStruct40.CharIndex] mov [ebp+var_C], edx mov edx, [esi+TFileNameDatabase.FrgmDist_HiBits.BitsPerEntry] mov eax, edx imul eax, ecx mov ecx, eax and eax, 1Fh add edx, eax shr ecx, 5 cmp edx, 20h mov edx, [esi+TFileNameDatabase.FrgmDist_HiBits.ItemArray] ja short loc_1957AB2 mov edx, [edx+ecx*4] mov ecx, eax shr edx, cl jmp short loc_1957AC9 ; --------------------------------------------------------------------------- loc_1957AB2: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+137_j lea ebx, [edx+ecx*4] mov edx, [ebx+4] mov ebx, [ebx] mov ecx, 20h sub ecx, eax shl edx, cl mov ecx, eax shr ebx, cl or edx, ebx loc_1957AC9: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+140_j mov ecx, [esi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] and edx, [esi+TFileNameDatabase.FrgmDist_HiBits.EntryBitMask] mov eax, [edi+TStruct40.HashValue] movzx eax, byte ptr [ecx+eax] mov ecx, [esi+TFileNameDatabase.NextDB.pDatabase] shl edx, 8 or eax, edx push eax test ecx, ecx jz short loc_1957AF7 mov edx, [ebp+pStruct1C] push edx call sub_1957B80 jmp short loc_1957B06 ; --------------------------------------------------------------------------- loc_1957AF7: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+17A_j mov eax, [ebp+pStruct1C] push eax lea ecx, [esi+TFileNameDatabase.IndexStruct_174] call TNameIndexStruct__CheckNameFragment loc_1957B06: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+185_j test al, al jnz loc_1957A03 mov ecx, [ebp+var_C] cmp [edi+TStruct40.CharIndex], ecx jnz loc_19579E4 jmp short loc_1957B32 ; --------------------------------------------------------------------------- loc_1957B1C: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+EE_j mov edx, [esi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] mov ebx, [ebp+pStruct1C] mov ecx, [edi+TStruct40.CharIndex] mov ebx, [ebx+TMndxFindResult.szSearchMask] mov dl, [eax+edx] cmp dl, [ecx+ebx] jz short loc_1957B62 loc_1957B32: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+1AA_j mov eax, [ebp+CollisionIndex] inc [edi+TStruct40.HashValue] inc eax mov ecx, eax and ecx, 1Fh mov edx, 1 shl edx, cl mov ecx, [esi+TFileNameDatabase.Struct68_00.ItemIsPresent.ItemArray] mov [ebp+CollisionIndex], eax shr eax, 5 test [ecx+eax*4], edx jnz loc_1957A41 pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1957B62: ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+1C0_j mov eax, 1 add [edi+TStruct40.CharIndex], eax pop edi pop esi pop ebx mov esp, ebp pop ebp retn 4 TFileNameDatabase__CheckNextPathFragment endp TFileNameDatabase__FindFileInDatabase proc near ; CODE XREF: MAR_FILE__FindFileInDatabase+2D_p pThis = dword ptr -4 pStruct1C = dword ptr 8 push ebp ; ecx = Pointer to ARCHIVE_DATABASE mov ebp, esp push ecx push ebx push esi mov esi, [ebp+pStruct1C] xor eax, eax push edi mov edi, [esi+TMndxFindResult.pStruct40] mov ebx, ecx mov [edi+TStruct40.HashValue], eax mov [edi+TStruct40.CharIndex], eax mov [edi+TStruct40.SearchPhase], eax mov [ebp+pThis], ebx cmp [esi+TMndxFindResult.cchSearchMask], eax jbe short loc_1957F26 label_process_all_characters: ; CODE XREF: TFileNameDatabase__FindFileInDatabase+34j push esi mov ecx, ebx call TFileNameDatabase__CheckNextPathFragment test al, al jz short label_return_false mov eax, [edi+TStruct40.CharIndex] cmp eax, [esi+TMndxFindResult.cchSearchMask] jb short label_process_all_characters loc_1957F26: ; CODE XREF: TFileNameDatabase__FindFileInDatabase+20_j mov ecx, [edi+TStruct40.HashValue] mov eax, [ebx+TFileNameDatabase.FileNameIndexes.ItemIsPresent.ItemArray] mov edx, ecx and ecx, 1Fh mov ebx, 1 shl ebx, cl shr edx, 5 test [eax+edx*4], ebx jz short label_return_false mov ecx, [esi+TMndxFindResult.szSearchMask] mov eax, [esi+TMndxFindResult.cchSearchMask] mov [esi+TMndxFindResult.szFoundPath], ecx mov ecx, [ebp+pThis] mov [esi+TMndxFindResult.cchFoundPath], eax mov edi, [edi+TStruct40.HashValue] push edi add ecx, TFileNameDatabase.FileNameIndexes call TSparseArray__GetItemValue pop edi mov [esi+TMndxFindResult.FileNameIndex], eax pop esi mov al, 1 pop ebx mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- label_return_false: ; CODE XREF: TFileNameDatabase__FindFileInDatabase+2C_j ; TFileNameDatabase__FindFileInDatabase+4E_j pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 4 TFileNameDatabase__FindFileInDatabase endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TGenericArray__SetMaxItems_BYTE proc near ; CODE XREF: sub_19582E0+2Cp ; TStruct40__InitSearchBuffers+2Cp ... ByteCount = dword ptr 8 push ebp mov ebp, esp push ebx mov ebx, [ebp+ByteCount] push esi push edi push offset unk_53ABE00 push ebx mov esi, ecx call j_operator_new_safe xor ecx, ecx add esp, 8 mov edi, eax cmp [esi+TGenericArray.ItemCount], ecx jbe short loc_19575D7 loc_19575C2: ; CODE XREF: TGenericArray__SetMaxItems_BYTE+35j lea edx, [ecx+edi] test edx, edx jz short loc_19575D1 mov eax, [esi+TGenericArray.field_4] mov al, [ecx+eax] mov [edx], al loc_19575D1: ; CODE XREF: TGenericArray__SetMaxItems_BYTE+27j inc ecx cmp ecx, [esi+TGenericArray.ItemCount] jb short loc_19575C2 loc_19575D7: ; CODE XREF: TGenericArray__SetMaxItems_BYTE+20j mov eax, [esi+TGenericArray.DataBuffer] push eax mov [esi+TGenericArray.DataBuffer], edi mov [esi+TGenericArray.field_4], edi mov [esi+TGenericArray.ItemArray], edi mov [esi+TGenericArray.MaxItemCount], ebx call operator_delete add esp, 4 pop edi pop esi pop ebx pop ebp retn 4 TGenericArray__SetMaxItems_BYTE endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TGenericArray__SetMaxItems_STRUCT14 proc near ; CODE XREF: TGenericArray__InsertItem_STRUCT14+2Cp ; TGenericArray__sub_19583A0+2Dp ... var_4 = dword ptr -4 ItemCount = dword ptr 8 push ebp mov ebp, esp push ecx push esi push edi mov edi, [ebp+ItemCount] lea eax, [edi+edi*4] ; EAX = (ItemCount * 5) add eax, eax ; EAX = (ItemCount * 10) add eax, eax ; EAX = (ItemCount * 20) push offset unk_53ABE00 push eax mov esi, ecx call j_operator_new_safe mov ecx, eax xor eax, eax add esp, 8 mov [ebp+var_4], ecx cmp [esi+0Ch], eax jbe short loc_195766A xor edi, edi mov edx, ecx push ebx loc_1957631: ; CODE XREF: TGenericArray__SetMaxItems_STRUCT14+64j test edx, edx jz short loc_195765A mov ecx, [esi+4] mov ebx, [ecx+edi] add ecx, edi mov [edx], ebx mov ebx, [ecx+4] mov [edx+4], ebx mov ebx, [ecx+8] mov [edx+8], ebx mov ebx, [ecx+0Ch] mov [edx+0Ch], ebx mov ecx, [ecx+10h] mov [edx+10h], ecx mov ecx, [ebp+var_4] loc_195765A: ; CODE XREF: TGenericArray__SetMaxItems_STRUCT14+33j inc eax add edi, 14h add edx, 14h cmp eax, [esi+0Ch] jb short loc_1957631 mov edi, [ebp+ItemCount] pop ebx loc_195766A: ; CODE XREF: TGenericArray__SetMaxItems_STRUCT14+2Aj mov eax, [esi+TGenericArray.DataBuffer] push eax mov [esi+TGenericArray.DataBuffer], ecx mov [esi+TGenericArray.field_4], ecx mov [esi+TGenericArray.ItemArray], ecx mov [esi+TGenericArray.MaxItemCount], edi call operator_delete add esp, 4 pop edi pop esi mov esp, ebp pop ebp retn 4 TGenericArray__SetMaxItems_STRUCT14 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TGenericArray__sub_19583A0 proc near ; CODE XREF: TStruct40__InitSearchBuffers+35p NewItemCount = dword ptr 8 push ebp mov ebp, esp push esi mov esi, ecx mov eax, [esi+TGenericArray.MaxItemCount] push edi mov edi, [ebp+NewItemCount] cmp edi, eax jbe short loc_19583D2 mov edx, edi shr edx, 1 mov ecx, edi cmp eax, edx jbe short loc_19583CA mov ecx, 0CCCCCCCh cmp eax, 6666666h ja short loc_19583CA lea ecx, [eax+eax] loc_19583CA: ; CODE XREF: TGenericArray__sub_19583A0+19j ; TGenericArray__sub_19583A0+25j push ecx mov ecx, esi call TGenericArray__SetMaxItems_STRUCT14 loc_19583D2: ; CODE XREF: TGenericArray__sub_19583A0+Fj mov eax, [esi+TGenericArray.ItemCount] cmp eax, edi jnb short loc_1958410 lea ecx, [eax+eax*4] add ecx, ecx mov edx, edi push ebx add ecx, ecx sub edx, eax or ebx, 0FFFFFFFFh loc_19583E8: ; CODE XREF: TGenericArray__sub_19583A0+6Dj mov eax, [esi+TGenericArray.field_4] add eax, ecx jz short loc_1958409 mov dword ptr [eax], 0 mov dword ptr [eax+4], 0 mov dword ptr [eax+8], 0 mov [eax+0Ch], ebx mov [eax+10h], ebx loc_1958409: ; CODE XREF: TGenericArray__sub_19583A0+4Dj add ecx, 14h dec edx jnz short loc_19583E8 pop ebx loc_1958410: ; CODE XREF: TGenericArray__sub_19583A0+37j mov [esi+TGenericArray.ItemCount], edi pop edi pop esi pop ebp retn 4 TGenericArray__sub_19583A0 endp ; =============== S U B R O U T I N E ======================================= TStruct40__InitSearchBuffers proc near ; CODE XREF: TFileNameDatabase__sub_1959460+2Bp push ebx push esi mov esi, ecx mov eax, [esi+TStruct40.array_00.MaxItemCount] xor ebx, ebx push edi mov [esi+TStruct40.array_00.ItemCount], ebx cmp eax, 40h jnb short loc_19586E1 lea ecx, [ebx+40h] ; ECX = 0x40 cmp eax, 20h jbe short loc_19586D9 cmp eax, 7FFFFFFFh jbe short loc_19586D6 or ecx, 0FFFFFFFFh jmp short loc_19586D9 ; --------------------------------------------------------------------------- loc_19586D6: ; CODE XREF: TStruct40__InitSearchBuffers+1Fj lea ecx, [eax+eax] loc_19586D9: ; CODE XREF: TStruct40__InitSearchBuffers+18j ; TStruct40__InitSearchBuffers+24j push ecx mov ecx, esi call TGenericArray__SetMaxItems_BYTE loc_19586E1: ; CODE XREF: TStruct40__InitSearchBuffers+10j push ebx lea ecx, [esi+TStruct40.array_18] call TGenericArray__sub_19583A0 mov eax, [esi+TStruct40.array_18.MaxItemCount] cmp eax, 4 jnb short loc_1958714 mov ecx, 4 cmp eax, 2 jbe short loc_195870B mov ecx, 0CCCCCCCh cmp eax, 6666666h ja short loc_195870B lea ecx, [eax+eax] loc_195870B: ; CODE XREF: TStruct40__InitSearchBuffers+4Aj ; TStruct40__InitSearchBuffers+56j push ecx lea ecx, [esi+TStruct40.array_18] call TGenericArray__SetMaxItems_STRUCT14 loc_1958714: ; CODE XREF: TStruct40__InitSearchBuffers+40j pop edi mov [esi+TStruct40.HashValue], ebx mov [esi+TStruct40.CharIndex], ebx mov [esi+TStruct40.ItemCount], ebx mov [esi+TStruct40.SearchPhase], 2 pop esi pop ebx retn TStruct40__InitSearchBuffers endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TGenericArray__InsertItem_STRUCT14 proc near ; CODE XREF: TFileNameDatabase__sub_1959460+73p pStruct14 = dword ptr 8 push ebp mov ebp, esp push esi mov esi, ecx mov eax, [esi+TGenericArray.ItemCount] mov ecx, [esi+TGenericArray.MaxItemCount] inc eax cmp eax, ecx jbe short loc_1958361 mov edx, eax shr eax, 1 cmp ecx, eax jbe short loc_1958359 mov edx, 0CCCCCCCh cmp ecx, 6666666h ja short loc_1958359 lea edx, [ecx+ecx] loc_1958359: ; CODE XREF: TGenericArray__InsertItem_STRUCT14+17j ; TGenericArray__InsertItem_STRUCT14+24j push edx mov ecx, esi call TGenericArray__SetMaxItems_STRUCT14 loc_1958361: ; CODE XREF: TGenericArray__InsertItem_STRUCT14+Fj mov eax, [esi+TGenericArray.ItemCount] mov ecx, [esi+TGenericArray.field_4] lea eax, [eax+eax*4] lea eax, [ecx+eax*4] test eax, eax jz short loc_1958390 mov ecx, [ebp+pStruct14] mov edx, [ecx+TStruct14.HashValue] mov [eax+TStruct14.HashValue], edx mov edx, [ecx+TStruct14.field_4] mov [eax+TStruct14.field_4], edx mov edx, [ecx+TStruct14.field_8] mov [eax+TStruct14.field_8], edx mov edx, [ecx+TStruct14.field_C] mov [eax+TStruct14.field_C], edx mov ecx, [ecx+TStruct14.field_10] mov [eax+TStruct14.field_10], ecx loc_1958390: ; CODE XREF: TGenericArray__InsertItem_STRUCT14+3Fj inc [esi+TGenericArray.ItemCount] pop esi pop ebp retn 4 TGenericArray__InsertItem_STRUCT14 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame CopyNameFragment proc near ; CODE XREF: sub_1958980+DAp ; sub_1958D70+6Dp ... pThis = dword ptr -4 pStruct1C = dword ptr 8 dwDistance = dword ptr 0Ch push ebp mov ebp, esp push ecx mov eax, [ebp+pStruct1C] push ebx mov ebx, ecx cmp [ebx+TNameIndexStruct.Struct68.TotalItemCount], 0 push esi mov esi, [eax+TMndxFindResult.pStruct40] push edi mov [ebp+pThis], ebx jnz loc_195A4B3 mov ebx, [ebx+TNameIndexStruct.NameFragments.ItemArray] add ebx, [ebp+dwDistance] cmp byte ptr [ebx], 0 mov [ebp+dwDistance], ebx jz loc_195A55E mov edi, edi loc_195A420: ; CODE XREF: CopyNameFragment+B4j mov eax, [esi+TStruct40.array_00.ItemCount] mov ecx, [esi+TStruct40.array_00.MaxItemCount] inc eax cmp eax, ecx jbe short loc_195A48E mov ebx, eax shr eax, 1 cmp ecx, eax jbe short loc_195A443 cmp ecx, 7FFFFFFFh jbe short loc_195A440 or ebx, 0FFFFFFFFh jmp short loc_195A443 ; --------------------------------------------------------------------------- loc_195A440: ; CODE XREF: CopyNameFragment+49j lea ebx, [ecx+ecx] loc_195A443: ; CODE XREF: CopyNameFragment+41j ; CopyNameFragment+4Ej push offset unk_53ABE00 push ebx call j_operator_new_safe xor ecx, ecx add esp, 8 mov edi, eax cmp [esi+TStruct40.array_00.ItemCount], ecx jbe short loc_195A475 lea ebx, [ebx+0] loc_195A460: ; CODE XREF: CopyNameFragment+83j lea edx, [ecx+edi] test edx, edx jz short loc_195A46F mov eax, [esi+TStruct40.array_00.field_4] mov al, [ecx+eax] mov [edx], al loc_195A46F: ; CODE XREF: CopyNameFragment+75j inc ecx cmp ecx, [esi+TStruct40.array_00.ItemCount] jb short loc_195A460 loc_195A475: ; CODE XREF: CopyNameFragment+68j mov eax, [esi+TStruct40.array_00.DataBuffer] push eax mov [esi+TStruct40.array_00.DataBuffer], edi mov [esi+TStruct40.array_00.field_4], edi mov [esi+TStruct40.array_00.ItemArray], edi mov [esi+TStruct40.array_00.MaxItemCount], ebx call operator_delete mov ebx, [ebp+dwDistance] add esp, 4 loc_195A48E: ; CODE XREF: CopyNameFragment+39j mov eax, [esi+TStruct40.array_00.ItemCount] add eax, [esi+TStruct40.array_00.field_4] jz short loc_195A49A mov cl, [ebx] mov [eax], cl loc_195A49A: ; CODE XREF: CopyNameFragment+A4j inc [esi+TStruct40.array_00.ItemCount] inc ebx cmp byte ptr [ebx], 0 mov [ebp+dwDistance], ebx jnz loc_195A420 pop edi pop esi pop ebx mov esp, ebp pop ebp retn 8 ; --------------------------------------------------------------------------- loc_195A4B3: ; CODE XREF: CopyNameFragment+16j ; CopyNameFragment+168j mov eax, [esi+TStruct40.array_00.ItemCount] mov edx, [ebx+TNameIndexStruct.NameFragments.ItemArray] mov edi, [ebp+dwDistance] mov ecx, [esi+TStruct40.array_00.MaxItemCount] add edx, edi inc eax mov [ebp+pStruct1C], edx cmp eax, ecx jbe short loc_195A52C mov ebx, eax shr eax, 1 cmp ecx, eax jbe short loc_195A4E1 cmp ecx, 7FFFFFFFh jbe short loc_195A4DE or ebx, 0FFFFFFFFh jmp short loc_195A4E1 ; --------------------------------------------------------------------------- loc_195A4DE: ; CODE XREF: CopyNameFragment+E7j lea ebx, [ecx+ecx] loc_195A4E1: ; CODE XREF: CopyNameFragment+DFj ; CopyNameFragment+ECj push offset unk_53ABE00 push ebx call j_operator_new_safe xor ecx, ecx add esp, 8 mov edi, eax cmp [esi+TStruct40.array_00.ItemCount], ecx jbe short loc_195A50D loc_195A4F8: ; CODE XREF: CopyNameFragment+11Bj lea edx, [ecx+edi] test edx, edx jz short loc_195A507 mov eax, [esi+TStruct40.array_00.field_4] mov al, [ecx+eax] mov [edx], al loc_195A507: ; CODE XREF: CopyNameFragment+10Dj inc ecx cmp ecx, [esi+TStruct40.array_00.ItemCount] jb short loc_195A4F8 loc_195A50D: ; CODE XREF: CopyNameFragment+106j mov eax, [esi+TStruct40.array_00.DataBuffer] push eax mov [esi+TStruct40.array_00.DataBuffer], edi mov [esi+TStruct40.array_00.field_4], edi mov [esi+TStruct40.array_00.ItemArray], edi mov [esi+TStruct40.array_00.MaxItemCount], ebx call operator_delete mov edx, [ebp+pStruct1C] mov edi, [ebp+dwDistance] mov ebx, [ebp+pThis] add esp, 4 loc_195A52C: ; CODE XREF: CopyNameFragment+D7j mov eax, [esi+TStruct40.array_00.ItemCount] add eax, [esi+TStruct40.array_00.field_4] jz short loc_195A538 mov cl, [edx] mov [eax], cl loc_195A538: ; CODE XREF: CopyNameFragment+142j inc [esi+TStruct40.array_00.ItemCount] mov ecx, edi and ecx, 1Fh mov edx, 1 shl edx, cl mov ecx, [ebx+TNameIndexStruct.Struct68.ItemIsPresent.ItemArray] mov eax, edi shr eax, 5 and edx, [ecx+eax*4] inc edi mov [ebp+dwDistance], edi test edx, edx jz loc_195A4B3 loc_195A55E: ; CODE XREF: CopyNameFragment+28j pop edi pop esi pop ebx mov esp, ebp pop ebp retn 8 CopyNameFragment endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_1958D70 proc near ; CODE XREF: sub_1958980+C9p ; sub_1958D70+59p ... var_C = dword ptr -0Ch var_8 = dword ptr -8 var_1 = byte ptr -1 pStruct1C = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp mov eax, [ebp+pStruct1C] sub esp, 0Ch push ebx push esi mov esi, [eax+TMndxFindResult.pStruct40] push edi mov edi, ecx mov ecx, [ebp+arg_4] loc_1958D84: ; CODE XREF: sub_1958D70+10Fj ; sub_1958D70+28Fj mov eax, [edi+TFileNameDatabase.NameFragIndexMask] and eax, ecx lea ebx, [eax+eax*2] mov eax, [edi+TFileNameDatabase.NameFragTable.ItemArray] add ebx, ebx add ebx, ebx mov [ebp+var_C], ebx cmp ecx, [eax+ebx+4] jnz loc_1958E8E mov edx, [eax+ebx+8] mov ecx, edx and ecx, 0FFFFFF00h cmp ecx, 0FFFFFF00h jz short loc_1958DE7 mov ecx, [edi+TFileNameDatabase.NextDB.pDatabase] push edx test ecx, ecx jz short loc_1958DD3 mov edx, [ebp+pStruct1C] push edx call sub_1958D70 jmp loc_1958E71 ; --------------------------------------------------------------------------- loc_1958DD3: ; CODE XREF: sub_1958D70+53j mov eax, [ebp+pStruct1C] push eax lea ecx, [edi+TFileNameDatabase.IndexStruct_174] call CopyNameFragment jmp loc_1958E71 ; --------------------------------------------------------------------------- loc_1958DE7: ; CODE XREF: sub_1958D70+48j mov eax, [esi+TStruct40.array_00.ItemCount] mov ecx, [esi+TStruct40.array_00.MaxItemCount] inc eax mov byte ptr [ebp+arg_4+3], dl cmp eax, ecx jbe short loc_1958E61 mov [ebp+var_8], eax shr eax, 1 cmp ecx, eax jbe short loc_1958E15 cmp ecx, 7FFFFFFFh jbe short loc_1958E0F mov [ebp+var_8], 0FFFFFFFFh jmp short loc_1958E15 ; --------------------------------------------------------------------------- loc_1958E0F: ; CODE XREF: sub_1958D70+94j lea edx, [ecx+ecx] mov [ebp+var_8], edx loc_1958E15: ; CODE XREF: sub_1958D70+8Cj ; sub_1958D70+9Dj mov eax, [ebp+var_8] push offset unk_53ABE00 push eax call j_operator_new_safe xor ecx, ecx add esp, 8 cmp [esi+TStruct40.array_00.ItemCount], ecx jbe short loc_1958E48 lea ecx, [ecx+0] loc_1958E30: ; CODE XREF: sub_1958D70+D6j lea edx, [ecx+eax] test edx, edx jz short loc_1958E42 mov ebx, [esi+4] mov bl, [ecx+ebx] mov [edx], bl mov ebx, [ebp+var_C] loc_1958E42: ; CODE XREF: sub_1958D70+C5j inc ecx cmp ecx, [esi+TStruct40.array_00.ItemCount] jb short loc_1958E30 loc_1958E48: ; CODE XREF: sub_1958D70+BBj mov ecx, [esi] mov edx, [ebp+var_8] push ecx mov [esi+TStruct40.array_00.DataBuffer], eax mov [esi+TStruct40.array_00.field_4], eax mov [esi+TStruct40.array_00.ItemArray], eax mov [esi+TStruct40.array_00.MaxItemCount], edx call operator_delete add esp, 4 loc_1958E61: ; CODE XREF: sub_1958D70+83j mov eax, [esi+TStruct40.array_00.field_4] add eax, [esi+TStruct40.array_00.ItemCount] jz short loc_1958E6E mov cl, byte ptr [ebp+arg_4+3] mov [eax], cl loc_1958E6E: ; CODE XREF: sub_1958D70+F7j inc [esi+TStruct40.array_00.ItemCount] loc_1958E71: ; CODE XREF: sub_1958D70+5Ej ; sub_1958D70+72j mov edx, [edi+TFileNameDatabase.NameFragTable.ItemArray] mov ecx, [ebx+edx] mov [ebp+arg_4], ecx test ecx, ecx jnz loc_1958D84 loc_1958E85: ; CODE XREF: sub_1958D70+277j pop edi pop esi pop ebx mov esp, ebp pop ebp retn 8 ; --------------------------------------------------------------------------- loc_1958E8E: ; CODE XREF: sub_1958D70+30j mov edx, [edi+TFileNameDatabase.Struct68_D0.ItemIsPresent.ItemArray] mov eax, ecx and ecx, 1Fh mov ebx, 1 shl ebx, cl shr eax, 5 test [edx+eax*4], ebx mov eax, [ebp+arg_4] jz loc_1958F50 mov ebx, [edi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] push eax lea ecx, [edi+TFileNameDatabase.Struct68_D0] add ebx, eax call TSparseArray__GetItemValue mov ecx, [edi+TFileNameDatabase.FrgmDist_HiBits.BitsPerEntry] imul ecx, eax mov eax, ecx and ecx, 1Fh mov edx, ecx mov ecx, [edi+TFileNameDatabase.FrgmDist_HiBits.BitsPerEntry] add ecx, edx shr eax, 5 cmp ecx, 20h mov ecx, [edi+TFileNameDatabase.FrgmDist_HiBits.ItemArray] ja short loc_1958EF2 mov eax, [ecx+eax*4] mov ecx, edx shr eax, cl jmp short loc_1958F15 ; --------------------------------------------------------------------------- loc_1958EF2: ; CODE XREF: sub_1958D70+177j lea eax, [ecx+eax*4] mov [ebp+var_C], eax mov eax, [eax+4] mov ecx, 20h sub ecx, edx shl eax, cl mov ecx, [ebp+var_C] mov ecx, [ecx] mov [ebp+var_C], ecx mov ecx, edx mov edx, [ebp+var_C] shr edx, cl or eax, edx loc_1958F15: ; CODE XREF: sub_1958D70+180j and eax, [edi+TFileNameDatabase.FrgmDist_HiBits.EntryBitMask] movzx edx, byte ptr [ebx] mov ecx, [edi+TFileNameDatabase.NextDB.pDatabase] shl eax, 8 or eax, edx push eax test ecx, ecx jz short loc_1958F3C mov eax, [ebp+pStruct1C] push eax call sub_1958D70 jmp loc_1958FDE ; --------------------------------------------------------------------------- loc_1958F3C: ; CODE XREF: sub_1958D70+1BCj mov ecx, [ebp+pStruct1C] push ecx lea ecx, [edi+TFileNameDatabase.IndexStruct_174] call CopyNameFragment jmp loc_1958FDE ; --------------------------------------------------------------------------- loc_1958F50: ; CODE XREF: sub_1958D70+139j mov edx, [edi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] mov cl, [eax+edx] mov eax, [esi+TStruct40.array_00.ItemCount] mov [ebp+var_1], cl mov ecx, [esi+TStruct40.array_00.MaxItemCount] inc eax cmp eax, ecx jbe short loc_1958FCE mov ebx, eax shr eax, 1 mov [ebp+var_8], ebx cmp ecx, eax jbe short loc_1958F85 cmp ecx, 7FFFFFFFh jbe short loc_1958F7F or ebx, 0FFFFFFFFh jmp short loc_1958F82 ; --------------------------------------------------------------------------- loc_1958F7F: ; CODE XREF: sub_1958D70+208j lea ebx, [ecx+ecx] loc_1958F82: ; CODE XREF: sub_1958D70+20Dj mov [ebp+var_8], ebx loc_1958F85: ; CODE XREF: sub_1958D70+200j push offset unk_53ABE00 push ebx call j_operator_new_safe xor ecx, ecx add esp, 8 cmp [esi+TStruct40.array_00.ItemCount], ecx jbe short loc_1958FB8 lea ebx, [ebx+0] loc_1958FA0: ; CODE XREF: sub_1958D70+243j lea edx, [ecx+eax] test edx, edx jz short loc_1958FAF mov ebx, [esi+TStruct40.array_00.field_4] mov bl, [ecx+ebx] mov [edx], bl loc_1958FAF: ; CODE XREF: sub_1958D70+235j inc ecx cmp ecx, [esi+TStruct40.array_00.ItemCount] jb short loc_1958FA0 mov ebx, [ebp+var_8] loc_1958FB8: ; CODE XREF: sub_1958D70+228j mov ecx, [esi+TStruct40.array_00.DataBuffer] push ecx mov [esi+TStruct40.array_00.DataBuffer], eax mov [esi+TStruct40.array_00.field_4], eax mov [esi+TStruct40.array_00.ItemArray], eax mov [esi+TStruct40.array_00.MaxItemCount], ebx call operator_delete add esp, 4 loc_1958FCE: ; CODE XREF: sub_1958D70+1F5j mov eax, [esi+TStruct40.array_00.field_4] add eax, [esi+TStruct40.array_00.ItemCount] jz short loc_1958FDB mov dl, [ebp+var_1] mov [eax], dl loc_1958FDB: ; CODE XREF: sub_1958D70+264j inc [esi+TStruct40.array_00.ItemCount] loc_1958FDE: ; CODE XREF: sub_1958D70+1C7j ; sub_1958D70+1DBj mov ebx, [ebp+arg_4] cmp ebx, [edi+TFileNameDatabase.field_214] jbe loc_1958E85 push ebx mov ecx, edi call sub_1959F50 or ecx, 0FFFFFFFFh sub ecx, ebx add ecx, eax mov [ebp+arg_4], ecx jmp loc_1958D84 sub_1958D70 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TFileNameDatabase__sub_1959CB0 proc near ; CODE XREF: TFileNameDatabase__CheckNextPathFragment+A1p ; TFileNameDatabase__sub_1958B00+E8p ... pThis = dword ptr -4 dwKey = dword ptr 8 push ebp mov ebp, esp push ecx mov edx, [ebp+dwKey] mov eax, edx shr eax, 9 mov [ebp+pThis], ecx test edx, 1FFh ; if(dwKey & 0x01FF) jnz short loc_1959CD3 mov ecx, [ecx+TFileNameDatabase.Struct68_00.ArrayDwords_38.ItemArray] mov eax, [ecx+eax*4] ; EAX = pDatabase->NextKeyTable[dwKey >> 0x09] mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1959CD3: ; CODE XREF: TFileNameDatabase__sub_1959CB0+15j push ebx push esi mov esi, [ecx+TFileNameDatabase.Struct68_00.ArrayDwords_38.ItemArray] lea esi, [esi+eax*4] mov eax, [esi] mov esi, [esi+4] shr eax, 9 add esi, 1FFh push edi shr esi, 9 lea edi, [eax+0Ah] mov [ebp+dwKey], esi cmp edi, esi jb short loc_1959D2E mov edi, [ecx+TFileNameDatabase.Struct68_00.ArrayTriplets_20.ItemArray] lea esi, [eax+eax*2+3] lea esi, [edi+esi*4] mov edi, eax shl edi, 9 mov ebx, edi sub ebx, [esi] add ebx, 200h cmp edx, ebx jb short loc_1959D5F loc_1959D14: ; CODE XREF: TFileNameDatabase__sub_1959CB0+7Aj add edi, 200h add esi, 0Ch mov ebx, edi sub ebx, [esi] inc eax add ebx, 200h cmp edx, ebx jnb short loc_1959D14 jmp short loc_1959D5F ; --------------------------------------------------------------------------- loc_1959D2E: ; CODE XREF: TFileNameDatabase__sub_1959CB0+45j lea edi, [eax+1] cmp edi, esi jnb short loc_1959D5F mov ecx, [ecx+TFileNameDatabase.Struct68_00.ArrayTriplets_20.ItemArray] loc_1959D38: ; CODE XREF: TFileNameDatabase__sub_1959CB0+AAj add esi, eax shr esi, 1 mov ebx, esi shl ebx, 9 lea edi, [esi+esi*2] sub ebx, [ecx+edi*4] cmp edx, ebx jnb short loc_1959D50 mov [ebp+dwKey], esi jmp short loc_1959D55 ; --------------------------------------------------------------------------- loc_1959D50: ; CODE XREF: TFileNameDatabase__sub_1959CB0+99j mov eax, esi mov esi, [ebp+dwKey] loc_1959D55: ; CODE XREF: TFileNameDatabase__sub_1959CB0+9Ej lea edi, [eax+1] cmp edi, esi jb short loc_1959D38 mov ecx, [ebp+pThis] loc_1959D5F: ; CODE XREF: TFileNameDatabase__sub_1959CB0+62j ; TFileNameDatabase__sub_1959CB0+7Cj ... mov ecx, [ecx+TFileNameDatabase.Struct68_00.ArrayTriplets_20.ItemArray] lea esi, [eax+eax*2] mov edi, [ecx+esi*4] ; EDI = Struct68_00.ArrayTriplets_20.ItemArray[eax] lea esi, [ecx+esi*4] ; ESI = Struct68_00.ArrayTriplets_20.ItemArray + eax mov ecx, eax shl ecx, 9 sub edi, ecx shl eax, 4 add edx, edi mov edi, eax mov eax, [esi+TRIPLET.NextKey] mov ecx, eax shr ecx, 17h mov ebx, 100h sub ebx, ecx cmp edx, ebx jnb short loc_1959DE8 mov ecx, eax shr ecx, 7 and ecx, 0FFh mov esi, 80h sub esi, ecx cmp edx, esi jnb short loc_1959DC0 and eax, 7Fh mov ecx, 40h sub ecx, eax cmp edx, ecx jb loc_1959E53 add edi, 2 lea edx, [edx+eax-40h] jmp loc_1959E53 ; --------------------------------------------------------------------------- loc_1959DC0: ; CODE XREF: TFileNameDatabase__sub_1959CB0+F0j shr eax, 0Fh and eax, 0FFh mov esi, 0C0h sub esi, eax cmp edx, esi jnb short loc_1959DDC add edi, 4 lea edx, [edx+ecx-80h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959DDC: ; CODE XREF: TFileNameDatabase__sub_1959CB0+121j add edi, 6 lea edx, [edx+eax-0C0h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959DE8: ; CODE XREF: TFileNameDatabase__sub_1959CB0+DAj mov esi, [esi+TRIPLET.Distance] mov eax, esi shr eax, 9 and eax, 1FFh mov ebx, 180h sub ebx, eax cmp edx, ebx jnb short loc_1959E29 and esi, 1FFh mov eax, 140h sub eax, esi cmp edx, eax jnb short loc_1959E1D add edi, 8 lea edx, [edx+ecx-100h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959E1D: ; CODE XREF: TFileNameDatabase__sub_1959CB0+15Fj add edi, 0Ah lea edx, [edx+esi-140h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959E29: ; CODE XREF: TFileNameDatabase__sub_1959CB0+14Ej shr esi, 12h and esi, 1FFh mov ecx, 1C0h sub ecx, esi cmp edx, ecx jnb short loc_1959E49 add edi, 0Ch lea edx, [edx+eax-180h] jmp short loc_1959E53 ; --------------------------------------------------------------------------- loc_1959E49: ; CODE XREF: TFileNameDatabase__sub_1959CB0+18Bj add edi, 0Eh lea edx, [edx+esi-1C0h] loc_1959E53: ; CODE XREF: TFileNameDatabase__sub_1959CB0+FEj ; TFileNameDatabase__sub_1959CB0+10Bj ... mov eax, [ebp+pThis] mov ebx, [eax+TFileNameDatabase.Struct68_00.ItemIsPresent.ItemArray] mov ecx, [ebx+edi*4] not ecx mov eax, ecx shr eax, 1 and eax, 55555555h mov esi, ecx and esi, 55555555h add eax, esi mov esi, eax shr esi, 2 and eax, 33333333h and esi, 33333333h add esi, eax mov eax, esi shr eax, 4 and esi, 0F0F0F0Fh and eax, 0F0F0F0Fh add eax, esi imul eax, 1010101h mov esi, eax shr esi, 18h cmp edx, esi jb short loc_1959EEA mov ecx, [ebx+edi*4+4] inc edi sub edx, esi not ecx mov eax, ecx shr eax, 1 and eax, 55555555h mov esi, ecx and esi, 55555555h add eax, esi mov esi, eax shr esi, 2 and eax, 33333333h and esi, 33333333h add esi, eax mov eax, esi shr eax, 4 and eax, 0F0F0F0Fh and esi, 0F0F0F0Fh add eax, esi imul eax, 1010101h loc_1959EEA: ; CODE XREF: TFileNameDatabase__sub_1959CB0+1F2j mov esi, eax shr esi, 8 and esi, 0FFh shl edi, 5 cmp edx, esi jnb short loc_1959F0D and eax, 0FFh cmp edx, eax jb short loc_1959F2B add edi, 8 shr ecx, 8 jmp short loc_1959F29 ; --------------------------------------------------------------------------- loc_1959F0D: ; CODE XREF: TFileNameDatabase__sub_1959CB0+24Aj shr eax, 10h and eax, 0FFh cmp edx, eax jnb short loc_1959F23 add edi, 10h shr ecx, 10h sub edx, esi jmp short loc_1959F2B ; --------------------------------------------------------------------------- loc_1959F23: ; CODE XREF: TFileNameDatabase__sub_1959CB0+267j add edi, 18h shr ecx, 18h loc_1959F29: ; CODE XREF: TFileNameDatabase__sub_1959CB0+25Bj sub edx, eax loc_1959F2B: ; CODE XREF: TFileNameDatabase__sub_1959CB0+253j ; TFileNameDatabase__sub_1959CB0+271j and ecx, 0FFh shl edx, 8 movzx eax, ds:table_1BA1818[ecx+edx] add eax, edi pop edi pop esi pop ebx mov esp, ebp pop ebp retn 4 TFileNameDatabase__sub_1959CB0 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TNameIndexStruct__CheckAndCopyNameFragment proc near ; CODE XREF: TArchiveDatabase__sub_1958B00+74p ; TArchiveDatabase__sub_1958B00+1E0p ... var_C = dword ptr -0Ch pThis = dword ptr -8 var_4 = dword ptr -4 pStruct1C = dword ptr 8 dwDistance = dword ptr 0Ch push ebp mov ebp, esp sub esp, 0Ch mov eax, [ebp+pStruct1C] push ebx mov edx, ecx cmp [edx+TNameIndexStruct.Struct68.TotalItemCount], 0 push esi mov esi, [eax+TMndxFindResult.pStruct40] push edi mov [ebp+pThis], edx jnz loc_195A6B7 mov edi, [edx+TNameIndexStruct.NameFragments.ItemArray] sub edi, [esi+TStruct40.CharIndex] add edi, [ebp+dwDistance] mov [ebp+pThis], edi lea ebx, [ebx+0] loc_195A5A0: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+E6j mov edx, [esi+TStruct40.CharIndex] mov ecx, [ebp+pStruct1C] mov eax, [ecx+TMndxFindResult.szSearchMask] mov cl, [edx+edi] mov [ebp+dwDistance], edx cmp cl, [edx+eax] jnz loc_195A67D mov eax, [esi+TStruct40.array_00.ItemCount] mov ecx, [esi+TStruct40.array_00.MaxItemCount] mov ebx, 1 add eax, ebx cmp eax, ecx jbe short loc_195A62D mov ebx, eax shr eax, 1 cmp ecx, eax jbe short loc_195A5E0 cmp ecx, 7FFFFFFFh jbe short loc_195A5DD or ebx, 0FFFFFFFFh jmp short loc_195A5E0 ; --------------------------------------------------------------------------- loc_195A5DD: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+66j lea ebx, [ecx+ecx] loc_195A5E0: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+5Ej ; TNameIndexStruct__CheckAndCopyNameFragment+6Bj push offset unk_53ABE00 push ebx call j_operator_new_safe xor ecx, ecx add esp, 8 mov edi, eax cmp [esi+TStruct40.array_00.ItemCount], ecx jbe short loc_195A60C loc_195A5F7: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+9Aj lea edx, [ecx+edi] test edx, edx jz short loc_195A606 mov eax, [esi+TStruct40.array_00.field_4] mov al, [ecx+eax] mov [edx], al loc_195A606: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+8Cj inc ecx cmp ecx, [esi+TStruct40.array_00.ItemCount] jb short loc_195A5F7 loc_195A60C: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+85j mov eax, [esi+TStruct40.array_00.DataBuffer] push eax mov [esi+TStruct40.array_00.DataBuffer], edi mov [esi+TStruct40.array_00.field_4], edi mov [esi+TStruct40.array_00.ItemArray], edi mov [esi+TStruct40.array_00.MaxItemCount], ebx call operator_delete mov edx, [ebp+dwDistance] mov edi, [ebp+pThis] add esp, 4 mov ebx, 1 loc_195A62D: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+56j mov eax, [esi+TStruct40.array_00.field_4] add eax, [esi+TStruct40.array_00.ItemCount] jz short loc_195A63A mov cl, [edx+edi] mov [eax], cl loc_195A63A: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+C3j add [esi+TStruct40.CharIndex], ebx add [esi+TStruct40.array_00.ItemCount], ebx mov ecx, [esi+TStruct40.CharIndex] cmp byte ptr [ecx+edi], 0 mov eax, [esi+TStruct40.array_00.ItemCount] jz loc_195A806 mov edx, [ebp+pStruct1C] cmp ecx, [edx+TMndxFindResult.cchSearchMask] jb loc_195A5A0 add edi, ecx mov edi, edi loc_195A660: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+13Aj mov ecx, [esi+TStruct40.array_00.MaxItemCount] inc eax cmp eax, ecx jbe short loc_195A693 mov edx, eax shr eax, 1 cmp ecx, eax jbe short loc_195A68B cmp ecx, 7FFFFFFFh jbe short loc_195A688 or edx, 0FFFFFFFFh jmp short loc_195A68B ; --------------------------------------------------------------------------- loc_195A67D: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+41j ; TNameIndexStruct__CheckAndCopyNameFragment+16Bj pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 8 ; --------------------------------------------------------------------------- loc_195A688: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+106j lea edx, [ecx+ecx] loc_195A68B: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+FEj ; TNameIndexStruct__CheckAndCopyNameFragment+10Bj push edx mov ecx, esi call TGenericArray__SetMaxItems_BYTE loc_195A693: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+F6j mov eax, [esi+TStruct40.array_00.field_4] add eax, [esi+TStruct40.array_00.ItemCount] jz short loc_195A69F mov cl, [edi] mov [eax], cl loc_195A69F: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+129j add [esi+TStruct40.array_00.ItemCount], ebx mov eax, [esi+TStruct40.array_00.ItemCount] add edi, ebx cmp byte ptr [edi], 0 jnz short loc_195A660 pop edi pop esi mov al, 1 pop ebx mov esp, ebp pop ebp retn 8 ; --------------------------------------------------------------------------- loc_195A6B7: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+18j mov ebx, [ebp+dwDistance] lea ebx, [ebx+0] loc_195A6C0: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+231j mov edi, [edx+TNameIndexStruct.NameFragments.ItemArray] mov eax, [ebp+pStruct1C] mov ecx, [esi+TStruct40.CharIndex] mov eax, [eax] add edi, ebx mov [ebp+var_4], edx mov dl, [edi] cmp dl, [ecx+eax] mov edx, [ebp+var_4] mov [ebp+var_C], edi jnz short loc_195A67D mov eax, [esi+TStruct40.array_00.ItemCount] mov ecx, [esi+TStruct40.array_00.MaxItemCount] inc eax cmp eax, ecx jbe short loc_195A752 mov [ebp+var_4], eax shr eax, 1 cmp ecx, eax jbe short loc_195A707 cmp ecx, 7FFFFFFFh jbe short loc_195A702 mov [ebp+var_4], 0FFFFFFFFh jmp short loc_195A707 ; --------------------------------------------------------------------------- loc_195A702: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+187j add ecx, ecx mov [ebp+var_4], ecx loc_195A707: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+17Fj ; TNameIndexStruct__CheckAndCopyNameFragment+190j mov edx, [ebp+var_4] push offset unk_53ABE00 push edx call j_operator_new_safe xor ecx, ecx add esp, 8 mov edi, eax cmp [esi+TStruct40.array_00.ItemCount], ecx jbe short loc_195A736 loc_195A721: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+1C4j lea edx, [ecx+edi] test edx, edx jz short loc_195A730 mov eax, [esi+TStruct40.array_00.field_4] mov al, [ecx+eax] mov [edx], al loc_195A730: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+1B6j inc ecx cmp ecx, [esi+TStruct40.array_00.ItemCount] jb short loc_195A721 loc_195A736: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+1AFj mov eax, [esi+TStruct40.array_00.DataBuffer] mov ecx, [ebp+var_4] push eax mov [esi+TStruct40.array_00.DataBuffer], edi mov [esi+TStruct40.array_00.field_4], edi mov [esi+TStruct40.array_00.ItemArray], edi mov [esi+TStruct40.array_00.MaxItemCount], ecx call operator_delete mov edx, [ebp+pThis] add esp, 4 loc_195A752: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+176j mov edi, [esi+TStruct40.array_00.field_4] add edi, [esi+TStruct40.array_00.ItemCount] jz short loc_195A761 mov eax, [ebp+var_C] mov cl, [eax] mov [edi], cl loc_195A761: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+1E8j mov ecx, 1 add [esi+TStruct40.array_00.ItemCount], ecx add [esi+TStruct40.CharIndex], ecx mov edx, [edx+20h] mov eax, [esi+TStruct40.array_00.ItemCount] mov ecx, ebx mov edi, ebx and ecx, 1Fh mov ebx, 1 shl ebx, cl shr edi, 5 mov ecx, [edx+edi*4] and ecx, ebx mov ebx, [ebp+dwDistance] inc ebx mov [ebp+dwDistance], ebx test ecx, ecx jnz short loc_195A806 mov ecx, [esi+TStruct40.CharIndex] mov edx, [ebp+pStruct1C] cmp ecx, [edx+4] jnb short loc_195A7A6 mov edx, [ebp+pThis] jmp loc_195A6C0 ; --------------------------------------------------------------------------- loc_195A7A6: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+22Cj ; TNameIndexStruct__CheckAndCopyNameFragment+294j mov ecx, [ebp+pThis] mov edi, [ecx+8] mov ecx, [esi+TStruct40.array_00.MaxItemCount] inc eax cmp eax, ecx jbe short loc_195A7D4 mov edx, eax shr eax, 1 cmp ecx, eax jbe short loc_195A7CC cmp ecx, 7FFFFFFFh jbe short loc_195A7C9 or edx, 0FFFFFFFFh jmp short loc_195A7CC ; --------------------------------------------------------------------------- loc_195A7C9: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+252j lea edx, [ecx+ecx] loc_195A7CC: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+24Aj ; TNameIndexStruct__CheckAndCopyNameFragment+257j push edx mov ecx, esi call TGenericArray__SetMaxItems_BYTE loc_195A7D4: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+242j mov eax, [esi+TStruct40.array_00.field_4] add eax, [esi+TStruct40.array_00.ItemCount] jz short loc_195A7E1 mov dl, [edi+ebx] mov [eax], dl loc_195A7E1: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+26Aj inc [esi+TStruct40.array_00.ItemCount] mov edi, [ebp+pThis] mov edi, [edi+20h] mov eax, [esi+TStruct40.array_00.ItemCount] mov ecx, ebx and ecx, 1Fh mov edx, 1 shl edx, cl mov ecx, ebx shr ecx, 5 inc ebx and edx, [edi+ecx*4] test edx, edx jz short loc_195A7A6 loc_195A806: ; CODE XREF: TNameIndexStruct__CheckAndCopyNameFragment+DAj ; TNameIndexStruct__CheckAndCopyNameFragment+221j pop edi pop esi mov al, 1 pop ebx mov esp, ebp pop ebp retn 8 TNameIndexStruct__CheckAndCopyNameFragment endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_1959010 proc near ; CODE XREF: TArchiveDatabase__sub_1958B00+67p ; TArchiveDatabase__sub_1958B00+1CFp ... pFragmentInfo = dword ptr -0Ch var_8 = dword ptr -8 var_1 = byte ptr -1 pStruct1C = dword ptr 8 arg_4 = dword ptr 0Ch push ebp mov ebp, esp mov eax, [ebp+pStruct1C] sub esp, 0Ch push ebx push esi mov esi, [eax+TMndxFindResult.pStruct40] push edi mov edi, ecx mov ecx, [ebp+arg_4] loc_1959024: ; CODE XREF: sub_1959010+2CEj mov eax, [edi+TFileNameDatabase.NameFragIndexMask] and eax, ecx lea ebx, [eax+eax*2] mov eax, [edi+TFileNameDatabase.NameFragTable.ItemArray] add ebx, ebx add ebx, ebx add eax, ebx mov [ebp+pFragmentInfo], ebx cmp ecx, [eax+NAME_ENTRY.NextHashModifier] jnz loc_1959147 mov edx, [eax+NAME_ENTRY.FragmentOffset] mov ecx, edx and ecx, 0FFFFFF00h cmp ecx, 0FFFFFF00h jz short loc_1959092 mov ecx, [edi+TFileNameDatabase.NextDB.pDatabase] push edx test ecx, ecx jz short loc_1959070 mov edx, [ebp+pStruct1C] push edx call sub_1959010 jmp short loc_195907F ; --------------------------------------------------------------------------- loc_1959070: ; CODE XREF: sub_1959010+53j mov eax, [ebp+pStruct1C] push eax lea ecx, [edi+TFileNameDatabase.IndexStruct_174] call TNameIndexStruct__CheckAndCopyNameFragment loc_195907F: ; CODE XREF: sub_1959010+5Ej test al, al jnz loc_195912E loc_1959087: ; CODE XREF: sub_1959010+90j ; sub_1959010+1F3j ... pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 8 ; --------------------------------------------------------------------------- loc_1959092: ; CODE XREF: sub_1959010+48j mov ecx, [ebp+pStruct1C] mov eax, [ecx+TMndxFindResult.szSearchMask] mov ecx, [esi+TStruct40.CharIndex] mov byte ptr [ebp+arg_4+3], dl cmp dl, [eax+ecx] jnz short loc_1959087 mov eax, [esi+TStruct40.array_00.ItemCount] mov ecx, [esi+TStruct40.array_00.MaxItemCount] inc eax cmp eax, ecx jbe short loc_1959119 mov [ebp+var_8], eax shr eax, 1 cmp ecx, eax jbe short loc_19590CD cmp ecx, 7FFFFFFFh jbe short loc_19590C7 mov [ebp+var_8], 0FFFFFFFFh jmp short loc_19590CD ; --------------------------------------------------------------------------- loc_19590C7: ; CODE XREF: sub_1959010+ACj lea edx, [ecx+ecx] mov [ebp+var_8], edx loc_19590CD: ; CODE XREF: sub_1959010+A4j ; sub_1959010+B5j mov eax, [ebp+var_8] push offset unk_53ABE00 push eax call j_operator_new_safe xor ecx, ecx add esp, 8 cmp [esi+TStruct40.array_00.ItemCount], ecx jbe short loc_19590FD loc_19590E5: ; CODE XREF: sub_1959010+EBj lea edx, [ecx+eax] test edx, edx jz short loc_19590F7 mov ebx, [esi+TStruct40.array_00.field_4] mov bl, [ecx+ebx] mov [edx], bl mov ebx, [ebp+pFragmentInfo] loc_19590F7: ; CODE XREF: sub_1959010+DAj inc ecx cmp ecx, [esi+TStruct40.array_00.ItemCount] jb short loc_19590E5 loc_19590FD: ; CODE XREF: sub_1959010+D3j mov ecx, [esi+TStruct40.array_00.DataBuffer] mov edx, [ebp+var_8] push ecx mov [esi+TStruct40.array_00.DataBuffer], eax mov [esi+TStruct40.array_00.field_4], eax mov [esi+TStruct40.array_00.ItemArray], eax mov [esi+TStruct40.array_00.MaxItemCount], edx call operator_delete mov dl, byte ptr [ebp+arg_4+3] add esp, 4 loc_1959119: ; CODE XREF: sub_1959010+9Bj mov eax, [esi+TStruct40.array_00.field_4] add eax, [esi+TStruct40.array_00.ItemCount] jz short loc_1959123 mov [eax], dl loc_1959123: ; CODE XREF: sub_1959010+10Fj mov eax, 1 add [esi+TStruct40.array_00.ItemCount], eax add [esi+TStruct40.CharIndex], eax loc_195912E: ; CODE XREF: sub_1959010+71j mov eax, [edi+TFileNameDatabase.NameFragTable.ItemArray] mov ecx, [ebx+eax] mov [ebp+arg_4], ecx test ecx, ecx jz loc_19592ED jmp loc_19592D5 ; --------------------------------------------------------------------------- loc_1959147: ; CODE XREF: sub_1959010+31j mov eax, [edi+TFileNameDatabase.Struct68_D0.ItemIsPresent.ItemArray] mov edx, ecx and ecx, 1Fh mov ebx, 1 shl ebx, cl shr edx, 5 test [eax+edx*4], ebx mov eax, [ebp+arg_4] jz loc_195920E mov ebx, [edi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] push eax lea ecx, [edi+TFileNameDatabase.Struct68_D0] add ebx, eax call TSparseArray__GetItemValue mov ecx, [edi+TFileNameDatabase.FrgmDist_HiBits.BitsPerEntry] imul ecx, eax mov eax, ecx and ecx, 1Fh mov edx, ecx mov ecx, [edi+TFileNameDatabase.FrgmDist_HiBits.BitsPerEntry] add ecx, edx shr eax, 5 cmp ecx, 20h mov ecx, [edi+TFileNameDatabase.FrgmDist_HiBits.ItemArray] ja short loc_19591AB mov eax, [ecx+eax*4] mov ecx, edx shr eax, cl jmp short loc_19591CE ; --------------------------------------------------------------------------- loc_19591AB: ; CODE XREF: sub_1959010+190j lea eax, [ecx+eax*4] mov [ebp+pFragmentInfo], eax mov eax, [eax+4] mov ecx, 20h sub ecx, edx shl eax, cl mov ecx, [ebp+pFragmentInfo] mov ecx, [ecx] mov [ebp+pFragmentInfo], ecx mov ecx, edx mov edx, [ebp+pFragmentInfo] shr edx, cl or eax, edx loc_19591CE: ; CODE XREF: sub_1959010+199j and eax, [edi+TFileNameDatabase.FrgmDist_HiBits.EntryBitMask] movzx edx, byte ptr [ebx] mov ecx, [edi+TFileNameDatabase.NextDB.pDatabase] shl eax, 8 or eax, edx push eax test ecx, ecx jz short loc_19591F2 mov eax, [ebp+pStruct1C] push eax call sub_1959010 jmp short loc_1959201 ; --------------------------------------------------------------------------- loc_19591F2: ; CODE XREF: sub_1959010+1D5j mov ecx, [ebp+pStruct1C] push ecx lea ecx, [edi+TFileNameDatabase.IndexStruct_174] call TNameIndexStruct__CheckAndCopyNameFragment loc_1959201: ; CODE XREF: sub_1959010+1E0j test al, al jz loc_1959087 jmp loc_19592B6 ; --------------------------------------------------------------------------- loc_195920E: ; CODE XREF: sub_1959010+152j mov edx, [edi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] mov dl, [eax+edx] mov ecx, [ebp+pStruct1C] mov eax, [ecx+TMndxFindResult.szSearchMask] mov ecx, [esi+TStruct40.CharIndex] mov [ebp+var_1], dl cmp dl, [eax+ecx] jnz loc_1959087 mov eax, [esi+TStruct40.array_00.ItemCount] mov ecx, [esi+TStruct40.array_00.MaxItemCount] inc eax cmp eax, ecx jbe short loc_19592A1 mov ebx, eax shr eax, 1 mov [ebp+var_8], ebx cmp ecx, eax jbe short loc_1959254 cmp ecx, 7FFFFFFFh jbe short loc_195924E or ebx, 0FFFFFFFFh jmp short loc_1959251 ; --------------------------------------------------------------------------- loc_195924E: ; CODE XREF: sub_1959010+237j lea ebx, [ecx+ecx] loc_1959251: ; CODE XREF: sub_1959010+23Cj mov [ebp+var_8], ebx loc_1959254: ; CODE XREF: sub_1959010+22Fj push offset unk_53ABE00 push ebx call j_operator_new_safe xor ecx, ecx add esp, 8 cmp [esi+TStruct40.array_00.ItemCount], ecx jbe short loc_1959288 lea esp, [esp+0] loc_1959270: ; CODE XREF: sub_1959010+273j lea edx, [ecx+eax] test edx, edx jz short loc_195927F mov ebx, [esi+TStruct40.array_00.field_4] mov bl, [ecx+ebx] mov [edx], bl loc_195927F: ; CODE XREF: sub_1959010+265j inc ecx cmp ecx, [esi+TStruct40.array_00.ItemCount] jb short loc_1959270 mov ebx, [ebp+var_8] loc_1959288: ; CODE XREF: sub_1959010+257j mov ecx, [esi+TStruct40.array_00.DataBuffer] push ecx mov [esi+TStruct40.array_00.DataBuffer], eax mov [esi+TStruct40.array_00.field_4], eax mov [esi+TStruct40.array_00.ItemArray], eax mov [esi+TStruct40.array_00.MaxItemCount], ebx call operator_delete mov dl, [ebp+var_1] add esp, 4 loc_19592A1: ; CODE XREF: sub_1959010+224j mov eax, [esi+TStruct40.array_00.field_4] add eax, [esi+TStruct40.array_00.ItemCount] jz short loc_19592AB mov [eax], dl loc_19592AB: ; CODE XREF: sub_1959010+297j mov eax, 1 add [esi+TStruct40.array_00.ItemCount], eax add [esi+TStruct40.CharIndex], eax loc_19592B6: ; CODE XREF: sub_1959010+1F9j mov ebx, [ebp+arg_4] cmp ebx, [edi+TFileNameDatabase.field_214] jbe short loc_19592ED push ebx mov ecx, edi call sub_1959F50 or edx, 0FFFFFFFFh sub edx, ebx add eax, edx mov ecx, eax mov [ebp+arg_4], eax loc_19592D5: ; CODE XREF: sub_1959010+132j mov edx, [esi+TStruct40.CharIndex] mov eax, [ebp+pStruct1C] cmp edx, [eax+TMndxFindResult.cchSearchMask] jb loc_1959024 push ecx push eax mov ecx, edi call sub_1958D70 loc_19592ED: ; CODE XREF: sub_1959010+12Cj ; sub_1959010+2AFj pop edi pop esi mov al, 1 pop ebx mov esp, ebp pop ebp retn 8 sub_1959010 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame sub_19582E0 proc near ; CODE XREF: TFileNameDatabase__sub_1958B00+253p arg_0 = dword ptr 8 push ebp mov ebp, esp push esi mov esi, ecx mov eax, [esi+0Ch] mov ecx, [esi+10h] inc eax cmp eax, ecx jbe short loc_1958311 mov edx, eax shr eax, 1 cmp ecx, eax jbe short loc_1958309 cmp ecx, 7FFFFFFFh jbe short loc_1958306 or edx, 0FFFFFFFFh jmp short loc_1958309 ; --------------------------------------------------------------------------- loc_1958306: ; CODE XREF: sub_19582E0+1Fj lea edx, [ecx+ecx] loc_1958309: ; CODE XREF: sub_19582E0+17j ; sub_19582E0+24j push edx mov ecx, esi call TGenericArray__SetMaxItems_BYTE loc_1958311: ; CODE XREF: sub_19582E0+Fj mov eax, [esi+4] add eax, [esi+0Ch] jz short loc_1958320 mov ecx, [ebp+arg_0] mov dl, [ecx] mov [eax], dl loc_1958320: ; CODE XREF: sub_19582E0+37j inc dword ptr [esi+0Ch] pop esi pop ebp retn 4 sub_19582E0 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TFileNameDatabase__sub_1958B00 proc near ; CODE XREF: TFileNameDatabase__sub_1959460+3Bp var_C = dword ptr -0Ch ItemArrayOffset = dword ptr -8 var_4 = dword ptr -4 arg_0 = dword ptr 8 push ebp mov ebp, esp sub esp, 0Ch mov edx, [ebp+pStruct1C] push ebx mov ebx, [edx+TMndxFindResult.szSearchMask] push esi push edi mov edi, [edx+TMndxFindResult.pStruct40] mov eax, [edi+TStruct40.CharIndex] movzx eax, byte ptr [eax+ebx] mov esi, ecx mov ecx, [edi+TStruct40.HashValue] mov ebx, ecx shl ebx, 5 xor eax, ebx mov ebx, [esi+TFileNameDatabase.NameFragTable.ItemArray] xor eax, ecx and eax, [esi+TFileNameDatabase.NameFragIndexMask] lea eax, [eax+eax*2] add eax, eax add eax, eax mov [ebp+ItemArrayOffset], eax cmp ecx, [eax+ebx] jnz loc_1958BE5 mov ecx, [eax+ebx+NAME_ENTRY.FragmentOffset] mov ebx, ecx and ebx, 0FFFFFF00h cmp ebx, 0FFFFFF00h jz short loc_1958B88 mov eax, [esi+TFileNameDatabase.NextDB.pDatabase] push ecx push edx test eax, eax jz short loc_1958B6E mov ecx, eax call sub_1959010 jmp short loc_1958B79 ; --------------------------------------------------------------------------- loc_1958B6E: ; CODE XREF: TArchiveDatabase__sub_1958B00+63j lea ecx, [esi+TFileNameDatabase.IndexStruct_174] call TNameIndexStruct__CheckAndCopyNameFragment loc_1958B79: ; CODE XREF: TArchiveDatabase__sub_1958B00+6Cj test al, al jnz short loc_1958BCA loc_1958B7D: ; CODE XREF: TArchiveDatabase__sub_1958B00+108j ; TArchiveDatabase__sub_1958B00+1F3j pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1958B88: ; CODE XREF: TArchiveDatabase__sub_1958B00+57j mov eax, [edi+TStruct40.array_00.ItemCount] mov bl, cl mov ecx, [edi+TStruct40.array_00.MaxItemCount] inc eax cmp eax, ecx jbe short loc_1958BB5 mov edx, eax shr eax, 1 cmp ecx, eax jbe short loc_1958BAD cmp ecx, 7FFFFFFFh jbe short loc_1958BAA or edx, 0FFFFFFFFh jmp short loc_1958BAD ; --------------------------------------------------------------------------- loc_1958BAA: ; CODE XREF: TArchiveDatabase__sub_1958B00+A3j lea edx, [ecx+ecx] loc_1958BAD: ; CODE XREF: TArchiveDatabase__sub_1958B00+9Bj ; TArchiveDatabase__sub_1958B00+A8j push edx mov ecx, edi call TGenericArray__SetMaxItems_BYTE loc_1958BB5: ; CODE XREF: TArchiveDatabase__sub_1958B00+93j mov eax, [edi+TStruct40.array_00.field_4] add eax, [edi+TStruct40.array_00.ItemCount] jz short loc_1958BBF mov [eax], bl loc_1958BBF: ; CODE XREF: TArchiveDatabase__sub_1958B00+BBj mov eax, 1 add [edi+TStruct40.array_00.ItemCount], eax add [edi+TStruct40.CharIndex], eax loc_1958BCA: ; CODE XREF: TArchiveDatabase__sub_1958B00+7Bj mov ecx, [esi+TFileNameDatabase.NameFragTable.ItemArray] mov edx, [ebp+ItemArrayOffset] mov eax, [ecx+edx+NAME_ENTRY.NextHashModifier] mov [edi+TStruct40.HashValue], eax loc_1958BDA: ; CODE XREF: TArchiveDatabase__sub_1958B00+1E7j pop edi pop esi mov al, 1 pop ebx mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1958BE5: ; CODE XREF: TArchiveDatabase__sub_1958B00+3Fj push ecx mov ecx, esi call TArchiveDatabase__sub_1959CB0 mov ebx, [esi+TFileNameDatabase.Struct68_00.ItemIsPresent.ItemArray] inc eax mov ecx, eax and ecx, 1Fh mov edx, 1 shl edx, cl mov ecx, eax shr ecx, 5 mov [ebp+ItemArrayOffset], eax test [ebx+ecx*4], edx jz loc_1958B7D sub eax, [edi+TStruct40.HashValue] mov [ebp+var_4], 0FFFFFFFFh dec eax mov [edi+TStruct40.HashValue], eax lea esp, [esp+0] loc_1958C20: ; CODE XREF: TArchiveDatabase__sub_1958B00+230j mov eax, [edi+TStruct40.HashValue] mov ebx, [esi+TFileNameDatabase.Struct68_D0.ItemIsPresent.ItemArray] mov ecx, eax and ecx, 1Fh mov edx, 1 shl edx, cl mov ecx, eax shr ecx, 5 test [ebx+ecx*4], edx jz loc_1958CFB mov ecx, [ebp+var_4] cmp ecx, 0FFFFFFFFh jnz short loc_1958C5E push eax lea ecx, [esi+TFileNameDatabase.Struct68_D0] call TSparseArray__GetItemValue mov ecx, eax mov [ebp+var_4], eax jmp short loc_1958C62 ; --------------------------------------------------------------------------- loc_1958C5E: ; CODE XREF: TArchiveDatabase__sub_1958B00+149j inc ecx mov [ebp+var_4], ecx loc_1958C62: ; CODE XREF: TArchiveDatabase__sub_1958B00+15Cj mov edx, [edi+TStruct40.CharIndex] mov [ebp+var_C], edx mov edx, [esi+TFileNameDatabase.FrgmDist_HiBits.BitsPerEntry] mov eax, edx imul eax, ecx mov ecx, eax and eax, 1Fh add edx, eax shr ecx, 5 cmp edx, 20h mov edx, [esi+TFileNameDatabase.FrgmDist_HiBits.ItemArray] ja short loc_1958C91 mov edx, [edx+ecx*4] mov ecx, eax shr edx, cl jmp short loc_1958CA8 ; --------------------------------------------------------------------------- loc_1958C91: ; CODE XREF: TArchiveDatabase__sub_1958B00+186j lea ebx, [edx+ecx*4] mov edx, [ebx+4] mov ebx, [ebx] mov ecx, 20h sub ecx, eax shl edx, cl mov ecx, eax shr ebx, cl or edx, ebx loc_1958CA8: ; CODE XREF: TArchiveDatabase__sub_1958B00+18Fj mov ecx, [esi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] and edx, [esi+TFileNameDatabase.FrgmDist_HiBits.EntryBitMask] mov eax, [edi+TStruct40.HashValue] movzx eax, byte ptr [ecx+eax] mov ecx, [esi+TFileNameDatabase.NextDB.pDatabase] shl edx, 8 or eax, edx push eax test ecx, ecx jz short loc_1958CD6 mov edx, [ebp+pStruct1C] push edx call sub_1959010 jmp short loc_1958CE5 ; --------------------------------------------------------------------------- loc_1958CD6: ; CODE XREF: TArchiveDatabase__sub_1958B00+1C9j mov eax, [ebp+pStruct1C] push eax lea ecx, [esi+TFileNameDatabase.IndexStruct_174] call TNameIndexStruct__CheckAndCopyNameFragment loc_1958CE5: ; CODE XREF: TArchiveDatabase__sub_1958B00+1D4j test al, al jnz loc_1958BDA mov ecx, [ebp+var_C] cmp [edi+TStruct40.CharIndex], ecx jnz loc_1958B7D jmp short loc_1958D11 ; --------------------------------------------------------------------------- loc_1958CFB: ; CODE XREF: TArchiveDatabase__sub_1958B00+13Dj mov edx, [esi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] mov ebx, [ebp+pStruct1C] mov ecx, [edi+TStruct40.CharIndex] mov ebx, [ebx+TMndxFindResult.szSearchMask] mov dl, [eax+edx] cmp dl, [ecx+ebx] jz short loc_1958D41 loc_1958D11: ; CODE XREF: TArchiveDatabase__sub_1958B00+1F9j mov eax, [ebp+ItemArrayOffset] inc [edi+TStruct40.HashValue] inc eax mov ecx, eax and ecx, 1Fh mov edx, 1 shl edx, cl mov ecx, [esi+TFileNameDatabase.Struct68_00.ItemIsPresent.ItemArray] mov [ebp+ItemArrayOffset], eax shr eax, 5 test [ecx+eax*4], edx jnz loc_1958C20 pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1958D41: ; CODE XREF: TArchiveDatabase__sub_1958B00+20Fj mov edx, [esi+TFileNameDatabase.FrgmDist_LoBits.ItemArray] mov cl, [edx+eax] lea edx, [ebp+pStruct1C+3] mov byte ptr [ebp+pStruct1C+3], cl push edx mov ecx, edi call sub_19582E0 mov eax, 1 add [edi+TStruct40.CharIndex], eax pop edi pop esi pop ebx mov esp, ebp pop ebp retn 4 TFileNameDatabase__sub_1958B00 endp ; =============== S U B R O U T I N E ======================================= ; Attributes: bp-based frame TFileNameDatabase__sub_1959460 proc near ; CODE XREF: TFileNameDatabasePtr__sub_1956CE0+2Dp Struct14 = dword ptr -20h var_1C = dword ptr -1Ch var_18 = dword ptr -18h var_14 = dword ptr -14h var_10 = dword ptr -10h pStruct14 = dword ptr -0Ch pThis = dword ptr -8 OneChar = byte ptr -1 pStruct1C = dword ptr 8 push ebp mov ebp, esp sub esp, 20h push ebx push esi push edi mov edi, [ebp+pStruct1C] mov esi, [edi+TMndxFindResult.pStruct40] mov eax, [esi+TStruct40.SearchPhase] mov ebx, ecx mov [ebp+pThis], ebx cmp eax, 4 jz return_false cmp eax, 2 jz loc_1959530 mov ecx, esi call TStruct40__InitSearchBuffers mov eax, [esi+TStruct40.CharIndex] cmp eax, [edi+TMndxFindResult.cchSearchMask] jnb short loc_19594B0 loc_1959498: ; CODE XREF: TFileNameDatabase__sub_1959460+4Ej push edi mov ecx, ebx call TFileNameDatabase__sub_1958B00 test al, al jz loc_1959778 mov ecx, [esi+TStruct40.CharIndex] cmp ecx, [edi+TMndxFindResult.cchSearchMask] jb short loc_1959498 loc_19594B0: ; CODE XREF: TFileNameDatabase__sub_1959460+36j mov edx, [esi+TStruct40.HashValue] or eax, 0FFFFFFFFh mov [ebp+Struct14], edx mov [ebp+var_14], eax mov [ebp+var_10], eax mov eax, [esi+TStruct40.array_00.ItemCount] lea edx, [ebp+Struct14] lea ecx, [esi+TStruct40.array_18] push edx mov [ebp+var_1C], 0 mov [ebp+var_18], eax call TGenericArray__InsertItem_STRUCT14 mov ecx, [esi+TStruct40.HashValue] mov eax, ecx and ecx, 1Fh mov edi, 1 shl edi, cl mov [esi+TStruct40.ItemCount], 1 mov edx, [ebx+TFileNameDatabase.FileNameIndexes.ItemIsPresent.ItemArray] shr eax, 5 test [edx+eax*4], edi jz short loc_1959530 mov ecx, [esi+TStruct40.array_00.field_4] mov eax, [esi+TStruct40.array_00.ItemCount] mov edi, [ebp+pStruct1C] mov [edi+TMndxFindResult.szFoundPath], ecx mov [edi+TMndxFindResult.cchFoundPath], eax mov esi, [esi+TStruct40.HashValue] push esi lea ecx, [ebx+TFileNameDatabase.FileNameIndexes] call TSparseArray__GetItemValue mov [edi+TMndxFindResult.FileNameIndex], eax pop edi pop esi mov al, 1 pop ebx mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1959522: ; CODE XREF: TFileNameDatabase__sub_1959460+26Bj ; TFileNameDatabase__sub_1959460+2D9j ... mov ebx, [ebp+pThis] jmp short loc_1959530 ; --------------------------------------------------------------------------- align 10h loc_1959530: ; CODE XREF: TFileNameDatabase__sub_1959460+23j ; TFileNameDatabase__sub_1959460+97j ... mov edx, [esi+TStruct40.ItemCount] cmp edx, [esi+TStruct40.array_18.ItemCount] jnz loc_19595BD mov eax, [esi+TStruct40.array_18.ItemCount] mov ecx, [esi+TStruct40.array_18.field_4] lea eax, [eax+eax*4] lea eax, [ecx+eax*4-14h] mov [ebp+pStruct14], eax mov eax, [eax+TStruct14.HashValue] push eax mov ecx, ebx call TFileNameDatabase__sub_1959CB0 mov edx, [ebp+pStruct14] mov ecx, [esi+TStruct40.array_18.ItemCount] inc eax mov ebx, eax sub ebx, [edx+TStruct14.HashValue] mov edx, [esi+TStruct40.array_18.MaxItemCount] inc ecx dec ebx mov [ebp+var_1C], eax cmp ecx, edx jbe short loc_1959591 mov eax, ecx shr ecx, 1 cmp edx, ecx jbe short loc_1959585 mov eax, 0CCCCCCCh cmp edx, 6666666h ja short loc_1959585 lea eax, [edx+edx] loc_1959585: ; CODE XREF: TFileNameDatabase__sub_1959460+113j ; TFileNameDatabase__sub_1959460+120j push eax lea ecx, [esi+TStruct40.array_18] call TGenericArray__SetMaxItems_STRUCT14 mov eax, [ebp+var_1C] loc_1959591: ; CODE XREF: TFileNameDatabase__sub_1959460+10Bj mov ecx, [esi+TStruct40.array_18.ItemCount] mov edx, [esi+TStruct40.array_18.field_4] lea ecx, [ecx+ecx*4] lea ecx, [edx+ecx*4] test ecx, ecx jz short loc_19595B7 mov [ecx+TStruct14.HashValue], ebx mov [ecx+TStruct14.field_4], eax xor eax, eax mov [ecx+TStruct14.field_8], eax or eax, 0FFFFFFFFh mov [ecx+TStruct14.field_C], eax or eax, 0FFFFFFFFh mov [ecx+TStruct14.field_10], eax loc_19595B7: ; CODE XREF: TFileNameDatabase__sub_1959460+13Fj inc [esi+TStruct40.array_18.ItemCount] mov ebx, [ebp+pThis] loc_19595BD: ; CODE XREF: TFileNameDatabase__sub_1959460+D6j mov eax, [esi+TStruct40.ItemCount] mov ecx, [esi+TStruct40.array_18.field_4] mov ebx, [ebx+TFileNameDatabase.Struct68_00.ItemIsPresent.ItemArray] lea eax, [eax+eax*4] lea edi, [ecx+eax*4] mov eax, [edi+TStruct14.field_4] mov ecx, eax and ecx, 1Fh mov edx, 1 shl edx, cl mov ecx, eax shr ecx, 5 test [ebx+ecx*4], edx setnz cl inc eax mov [edi+TStruct14.field_4], eax test cl, cl jz loc_19596E9 inc [esi+TStruct40.ItemCount] mov ecx, [edi+TStruct14.HashValue] mov eax, [ebp+pThis] mov eax, [eax+TFileNameDatabase.Struct68_D0.ItemIsPresent.ItemArray] mov edx, ecx and ecx, 1Fh mov ebx, 1 shl ebx, cl shr edx, 5 test [eax+edx*4], ebx mov ebx, [ebp+pThis] jz short loc_1959665 mov eax, [edi+TStruct14.field_C] cmp eax, 0FFFFFFFFh jnz short loc_195962F mov eax, [edi+TStruct14.HashValue] push eax lea ecx, [ebx+TFileNameDatabase.Struct68_D0] call TSparseArray__GetItemValue jmp short loc_1959630 ; --------------------------------------------------------------------------- loc_195962F: ; CODE XREF: TFileNameDatabase__sub_1959460+1BDj inc eax loc_1959630: ; CODE XREF: TFileNameDatabase__sub_1959460+1CDj mov ecx, [edi+TStruct14.HashValue] push eax push ecx mov ecx, ebx mov [edi+TStruct14.field_C], eax call sub_19573D0 mov ecx, [ebx+TFileNameDatabase.NextDB.pDatabase] push eax test ecx, ecx jz short loc_1959654 mov edx, [ebp+pStruct1C] push edx call sub_1958D70 jmp short loc_19596AE ; --------------------------------------------------------------------------- loc_1959654: ; CODE XREF: TFileNameDatabase__sub_1959460+1E7j mov eax, [ebp+pStruct1C] push eax lea ecx, [ebx+TFileNameDatabase.IndexStruct_174] call CopyNameFragment jmp short loc_19596AE ; --------------------------------------------------------------------------- loc_1959665: ; CODE XREF: TFileNameDatabase__sub_1959460+1B5j mov ecx, [ebx+TFileNameDatabase.FrgmDist_LoBits.ItemArray] mov eax, [edi+TStruct14.HashValue] mov dl, [eax+ecx] mov eax, [esi+TStruct40.array_00.ItemCount] mov ecx, [esi+TStruct40.array_00.MaxItemCount] inc eax mov [ebp+OneChar], dl cmp eax, ecx jbe short loc_195969E mov edx, eax shr eax, 1 cmp ecx, eax jbe short loc_1959696 cmp ecx, 7FFFFFFFh jbe short loc_1959693 or edx, 0FFFFFFFFh jmp short loc_1959696 ; --------------------------------------------------------------------------- loc_1959693: ; CODE XREF: TFileNameDatabase__sub_1959460+22Cj lea edx, [ecx+ecx] loc_1959696: ; CODE XREF: TFileNameDatabase__sub_1959460+224j ; TFileNameDatabase__sub_1959460+231j push edx mov ecx, esi call TGenericArray__SetMaxItems_BYTE loc_195969E: ; CODE XREF: TFileNameDatabase__sub_1959460+21Cj mov eax, [esi+TStruct40.array_00.field_4] add eax, [esi+TStruct40.array_00.ItemCount] jz short loc_19596AB mov cl, [ebp+OneChar] mov [eax], cl loc_19596AB: ; CODE XREF: TFileNameDatabase__sub_1959460+244j inc [esi+TStruct40.array_00.ItemCount] loc_19596AE: ; CODE XREF: TFileNameDatabase__sub_1959460+1F2j ; TFileNameDatabase__sub_1959460+203j mov edx, [esi+TStruct40.array_00.ItemCount] mov ecx, [edi+TStruct14.HashValue] mov [edi+TStruct14.field_8], edx mov edx, [ebx+TFileNameDatabase.FileNameIndexes.ItemIsPresent.ItemArray] mov eax, ecx and ecx, 1Fh mov ebx, 1 shl ebx, cl shr eax, 5 test [edx+eax*4], ebx jz loc_1959522 mov eax, [edi+TStruct14.field_10] cmp eax, 0FFFFFFFFh jnz short loc_1959754 mov eax, [edi+TStruct14.HashValue] mov ecx, [ebp+pThis] push eax add ecx, TFileNameDatabase.FileNameIndexes call TSparseArray__GetItemValue jmp short loc_1959755 ; --------------------------------------------------------------------------- loc_19596E9: ; CODE XREF: TFileNameDatabase__sub_1959460+18Cj mov eax, [esi+TStruct40.ItemCount] cmp eax, 1 jz loc_1959778 mov ecx, [esi+TStruct40.array_18.field_4] lea eax, [eax+eax*4] inc dword ptr [ecx+eax*4-14h] lea eax, [ecx+eax*4-14h] mov eax, [esi+TStruct40.ItemCount] lea edx, [eax+eax*4] mov eax, [esi+TStruct40.array_18.field_4] mov edi, [eax+edx*4-20h] mov eax, [esi+TStruct40.array_00.MaxItemCount] cmp edi, eax jbe short loc_1959749 mov edx, edi shr edx, 1 mov ecx, edi cmp eax, edx jbe short loc_1959741 cmp eax, 7FFFFFFFh jbe short loc_195973E or ecx, 0FFFFFFFFh push ecx mov ecx, esi call TGenericArray__SetMaxItems_BYTE dec [esi+TStruct40.ItemCount] mov [esi+TStruct40.array_00.ItemCount], edi jmp loc_1959522 ; --------------------------------------------------------------------------- loc_195973E: ; CODE XREF: TFileNameDatabase__sub_1959460+2C6j lea ecx, [eax+eax] loc_1959741: ; CODE XREF: TFileNameDatabase__sub_1959460+2BFj push ecx mov ecx, esi call TGenericArray__SetMaxItems_BYTE loc_1959749: ; CODE XREF: TFileNameDatabase__sub_1959460+2B5j dec [esi+TStruct40.ItemCount] mov [esi+TStruct40.array_00.ItemCount], edi jmp loc_1959522 ; --------------------------------------------------------------------------- loc_1959754: ; CODE XREF: TFileNameDatabase__sub_1959460+277j inc eax loc_1959755: ; CODE XREF: TFileNameDatabase__sub_1959460+287j mov [edi+TStruct14.field_10], eax mov ecx, [esi+TStruct40.array_00.ItemCount] mov edx, [esi+TStruct40.array_00.field_4] mov eax, [ebp+pStruct1C] mov [eax+TMndxFindResult.szFoundPath], edx mov [eax+TMndxFindResult.cchFoundPath], ecx mov ecx, [edi+TStruct14.field_10] pop edi pop esi mov [eax+TMndxFindResult.FileNameIndex], ecx mov al, 1 pop ebx mov esp, ebp pop ebp retn 4 ; --------------------------------------------------------------------------- loc_1959778: ; CODE XREF: TFileNameDatabase__sub_1959460+42j ; TFileNameDatabase__sub_1959460+28Fj mov [esi+TStruct40.SearchPhase], 4 return_false: ; CODE XREF: TFileNameDatabase__sub_1959460+1Aj pop edi pop esi xor al, al pop ebx mov esp, ebp pop ebp retn 4 TFileNameDatabase__sub_1959460 endp ; --------------------------------------------------------------------------- ;------------------------------------------------------------------------------ ; Public functions callable from C++ ; ; DWORD _cdecl sub_19573D0_x86(TFileNameDatabase * pDB, DWORD arg_0, DWORD arg_4); ; _sub_19573D0_x86 PROC push ebp mov ebp, esp mov ecx, [ebp+8] ; pDB push [ebp+10h] ; arg_4 push [ebp+0Ch] ; arg_0 call sub_19573D0 mov esp, ebp pop ebp ret _sub_19573D0_x86 ENDP ; ; DWORD _cdecl sub_1957EF0_x86(TFileNameDatabase * pDB, TMndxFindResult * pStruct1C); ; _sub_1957EF0_x86 PROC push ebp mov ebp, esp mov ecx, [ebp+8] ; pDB push [ebp+0Ch] ; pStruct1C call TFileNameDatabase__FindFileInDatabase mov esp, ebp pop ebp ret _sub_1957EF0_x86 ENDP ; ; bool _cdecl _sub_1959460_x86(TFileNameDatabase * pDB, TMndxFindResult * pStruct1C); ; _sub_1959460_x86 PROC push ebp mov ebp, esp mov ecx, [ebp+8] ; pDB push [ebp+0Ch] ; pStruct1C call TFileNameDatabase__sub_1959460 mov esp, ebp pop ebp ret _sub_1959460_x86 ENDP ; ; bool _cdecl sub_1958B00_x86(TFileNameDatabase * pDB, TMndxFindResult * pStruct1C); ; _sub_1958B00_x86 PROC push ebp mov ebp, esp mov ecx, [ebp+8] ; pDB push [ebp+0Ch] ; pStruct1C call TFileNameDatabase__sub_1959460 mov esp, ebp pop ebp ret _sub_1958B00_x86 ENDP ; ; DWORD _cdecl GetItemValue_x86(TSparseArray * pStruct, DWORD dwKey); ; _GetItemValue_x86 PROC push ebp mov ebp, esp mov ecx, [ebp+8] ; pStruct68 push [ebp+0Ch] ; dwKey call TSparseArray__GetItemValue mov esp, ebp pop ebp ret _GetItemValue_x86 ENDP ; ; DWORD _cdecl sub_1959CB0_x86(TFileNameDatabase * pDB, DWORD dwKey); ; _sub_1959CB0_x86 PROC push ebp mov ebp, esp mov ecx, [ebp+8] ; pDB push [ebp+0Ch] ; dwKey call TArchiveDatabase__sub_1959CB0 mov esp, ebp pop ebp ret _sub_1959CB0_x86 ENDP ; ; DWORD _cdecl sub_1959F50_x86(TFileNameDatabase * pDB, DWORD arg_0); ; _sub_1959F50_x86 PROC push ebp mov ebp, esp mov ecx, [ebp+8] ; pDB push [ebp+0Ch] ; dwKey call sub_1959F50 mov esp, ebp pop ebp ret _sub_1959F50_x86 ENDP END