Complete decompilation of the retail Asheron's Call client using Ghidra 12.0.4 + pyghidra headless. 22,225 of 22,226 functions successfully decompiled in 75 seconds. Output: docs/research/decompiled/ (54 files, 688,567 lines of C) Key findings already identified: - CLandBlockStruct::ConstructPolygons at chunk_00530000.c:2270 (split direction formula with 0x0CCAC033 constants) - Motion command handlers at chunk_00510000.c (0x45000005 etc) - Motion interpreter at chunk_00520000.c - Portal space UI at chunk_004D0000.c and chunk_00560000.c Next: identify CPhysicsObj, CMotionInterp, collision, and movement functions by cross-referencing against ACE's C# port. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
10720 lines
275 KiB
C
10720 lines
275 KiB
C
// Decompiled from acclient.exe — chunk 0x006B0000
|
|
// Ghidra 12.0.4 + pyghidra headless
|
|
|
|
// --- FUN_006b0000 at 0x006B0000 (size: 69) ---
|
|
|
|
|
|
undefined4 FUN_006b0000(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((param_1 != 0) && (*(int *)(param_1 + 0x30) != 0)) {
|
|
|
|
if (*param_2 == 0x2ce) {
|
|
|
|
uVar1 = FUN_005599a0((char)param_2[1],*(undefined4 *)((int)param_2 + 5),
|
|
|
|
*(undefined4 *)((int)param_2 + 9),*(undefined4 *)((int)param_2 + 0xd));
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0050 at 0x006B0050 (size: 75) ---
|
|
|
|
|
|
undefined4 FUN_006b0050(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((param_1 != 0) && (*(int *)(param_1 + 0x30) != 0)) {
|
|
|
|
if (*param_2 == 0x2d0) {
|
|
|
|
uVar1 = FUN_005599c0((char)param_2[1],*(undefined4 *)((int)param_2 + 5),
|
|
|
|
*(undefined4 *)((int)param_2 + 9),*(undefined4 *)((int)param_2 + 0xd),
|
|
|
|
*(undefined4 *)((int)param_2 + 0x11));
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b00a0 at 0x006B00A0 (size: 175) ---
|
|
|
|
|
|
undefined4 FUN_006b00a0(int param_1,int *param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined **local_20;
|
|
|
|
undefined4 local_1c;
|
|
|
|
undefined4 local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
if ((param_1 != 0) && (*(int *)(param_1 + 0x30) != 0)) {
|
|
|
|
if (*param_2 == 0x2de) {
|
|
|
|
iVar2 = param_2[1];
|
|
|
|
uVar3 = *(undefined4 *)((int)param_2 + 5);
|
|
|
|
uVar1 = *(undefined4 *)((int)param_2 + 9);
|
|
|
|
local_1c = 0;
|
|
|
|
local_18 = 0;
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_c = 0;
|
|
|
|
iVar4 = (int)param_2 + (param_3 - ((int)param_2 + 0xd));
|
|
|
|
local_20 = &PTR_FUN_007a8458;
|
|
|
|
local_8 = 0;
|
|
|
|
local_4 = 0;
|
|
|
|
param_2 = (int *)((int)param_2 + 0xd);
|
|
|
|
FUN_005cba30(¶m_2,iVar4);
|
|
|
|
uVar3 = FUN_00559940((char)iVar2,uVar3,uVar1,&local_20);
|
|
|
|
return uVar3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0150 at 0x006B0150 (size: 69) ---
|
|
|
|
|
|
undefined4 FUN_006b0150(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((param_1 != 0) && (*(int *)(param_1 + 0x30) != 0)) {
|
|
|
|
if (*param_2 == 0x2e2) {
|
|
|
|
uVar1 = FUN_00559980((char)param_2[1],*(undefined4 *)((int)param_2 + 5),
|
|
|
|
*(undefined4 *)((int)param_2 + 9),*(undefined4 *)((int)param_2 + 0xd));
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b01a0 at 0x006B01A0 (size: 69) ---
|
|
|
|
|
|
undefined4 FUN_006b01a0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((param_1 != 0) && (*(int *)(param_1 + 0x30) != 0)) {
|
|
|
|
if (*param_2 == 0x2e0) {
|
|
|
|
uVar1 = FUN_00559960((char)param_2[1],*(undefined4 *)((int)param_2 + 5),
|
|
|
|
*(undefined4 *)((int)param_2 + 9),*(undefined4 *)((int)param_2 + 0xd));
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b01f0 at 0x006B01F0 (size: 60) ---
|
|
|
|
|
|
undefined4 FUN_006b01f0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((param_1 != 0) && (*(int *)(param_1 + 0x30) != 0)) {
|
|
|
|
if (*param_2 == 0x2d7) {
|
|
|
|
uVar1 = FUN_00559d00((char)param_2[1],*(undefined4 *)((int)param_2 + 5),
|
|
|
|
*(undefined4 *)((int)param_2 + 9));
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0230 at 0x006B0230 (size: 141) ---
|
|
|
|
|
|
undefined4 FUN_006b0230(int param_1,int *param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
undefined1 local_48 [72];
|
|
|
|
|
|
|
|
piVar2 = param_2;
|
|
|
|
if ((param_1 != 0) && (*(int *)(param_1 + 0x30) != 0)) {
|
|
|
|
if (*param_2 != 0x2db) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = param_2[1];
|
|
|
|
uVar3 = *(undefined4 *)((int)param_2 + 5);
|
|
|
|
param_2 = (int *)((int)param_2 + 9);
|
|
|
|
FUN_00424d10();
|
|
|
|
FUN_005aa740(¶m_2,(int)piVar2 + (param_3 - (int)param_2));
|
|
|
|
uVar3 = FUN_00559d60((char)iVar1,uVar3,local_48);
|
|
|
|
return uVar3;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b02c0 at 0x006B02C0 (size: 69) ---
|
|
|
|
|
|
undefined4 FUN_006b02c0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((param_1 != 0) && (*(int *)(param_1 + 0x30) != 0)) {
|
|
|
|
if (*param_2 == 0x2d8) {
|
|
|
|
uVar1 = FUN_00559a60((char)param_2[1],*(undefined4 *)((int)param_2 + 5),
|
|
|
|
*(undefined4 *)((int)param_2 + 9),*(undefined4 *)((int)param_2 + 0xd));
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0310 at 0x006B0310 (size: 153) ---
|
|
|
|
|
|
undefined4 FUN_006b0310(int param_1,int *param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
undefined1 local_48 [72];
|
|
|
|
|
|
|
|
piVar3 = param_2;
|
|
|
|
if ((param_1 != 0) && (*(int *)(param_1 + 0x30) != 0)) {
|
|
|
|
if (*param_2 != 0x2dc) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar2 = param_2[1];
|
|
|
|
uVar4 = *(undefined4 *)((int)param_2 + 5);
|
|
|
|
uVar1 = *(undefined4 *)((int)param_2 + 9);
|
|
|
|
param_2 = (int *)((int)param_2 + 0xd);
|
|
|
|
FUN_00424d10();
|
|
|
|
FUN_005aa740(¶m_2,(int)piVar3 + (param_3 - (int)param_2));
|
|
|
|
uVar4 = FUN_00559aa0((char)iVar2,uVar4,uVar1,local_48);
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b03b0 at 0x006B03B0 (size: 35) ---
|
|
|
|
|
|
undefined4 FUN_006b03b0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (((param_1 != 0) && (*(int *)(param_1 + 0x34) != 0)) && (*param_2 == 0x2cb)) {
|
|
|
|
uVar1 = FUN_00565f10();
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b03e0 at 0x006B03E0 (size: 46) ---
|
|
|
|
|
|
undefined4 FUN_006b03e0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (((param_1 != 0) && (*(int *)(param_1 + 0x34) != 0)) && (*param_2 == 0x2c9)) {
|
|
|
|
uVar1 = FUN_00565d70(param_2[1]);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0410 at 0x006B0410 (size: 46) ---
|
|
|
|
|
|
undefined4 FUN_006b0410(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (((param_1 != 0) && (*(int *)(param_1 + 0x34) != 0)) && (*param_2 == 0x2ca)) {
|
|
|
|
uVar1 = FUN_00565e40(param_2[1]);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0440 at 0x006B0440 (size: 35) ---
|
|
|
|
|
|
undefined4 FUN_006b0440(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if (((param_1 != 0) && (*(int *)(param_1 + 0x34) != 0)) && (*param_2 == 0x2cc)) {
|
|
|
|
uVar1 = FUN_00565cd0();
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0470 at 0x006B0470 (size: 70) ---
|
|
|
|
|
|
undefined4 FUN_006b0470(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
piVar3 = (int *)thunk_FUN_0043c680();
|
|
|
|
iVar4 = (**(code **)(*piVar3 + 0x10))(0x4dd21c);
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
piVar3 = *(int **)(iVar4 + 4);
|
|
|
|
while (piVar3 != (int *)0x0) {
|
|
|
|
piVar1 = (int *)*piVar3;
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
if ((piVar1 != (int *)0x0) && (cVar2 = (**(code **)*piVar1)(), cVar2 == '\0')) {
|
|
|
|
(**(code **)(*piVar1 + 0x1b0))();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b04c0 at 0x006B04C0 (size: 75) ---
|
|
|
|
|
|
undefined4 FUN_006b04c0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 unaff_retaddr;
|
|
|
|
|
|
|
|
piVar3 = (int *)thunk_FUN_0043c680();
|
|
|
|
iVar4 = (**(code **)(*piVar3 + 0x10))(0x4dd21b);
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
piVar3 = *(int **)(iVar4 + 4);
|
|
|
|
while (piVar3 != (int *)0x0) {
|
|
|
|
piVar1 = (int *)*piVar3;
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
if ((piVar1 != (int *)0x0) && (cVar2 = (**(code **)*piVar1)(), cVar2 == '\0')) {
|
|
|
|
(**(code **)(*piVar1 + 0x1b4))(unaff_retaddr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0510 at 0x006B0510 (size: 75) ---
|
|
|
|
|
|
undefined4 FUN_006b0510(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 unaff_retaddr;
|
|
|
|
|
|
|
|
piVar3 = (int *)thunk_FUN_0043c680();
|
|
|
|
iVar4 = (**(code **)(*piVar3 + 0x10))(0x4dd1ed);
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
piVar3 = *(int **)(iVar4 + 4);
|
|
|
|
while (piVar3 != (int *)0x0) {
|
|
|
|
piVar1 = (int *)*piVar3;
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
if ((piVar1 != (int *)0x0) && (cVar2 = (**(code **)*piVar1)(), cVar2 == '\0')) {
|
|
|
|
(**(code **)(*piVar1 + 0xd4))(unaff_retaddr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0560 at 0x006B0560 (size: 75) ---
|
|
|
|
|
|
undefined4 FUN_006b0560(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 unaff_retaddr;
|
|
|
|
|
|
|
|
piVar3 = (int *)thunk_FUN_0043c680();
|
|
|
|
iVar4 = (**(code **)(*piVar3 + 0x10))(0x4dd1ee);
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
piVar3 = *(int **)(iVar4 + 4);
|
|
|
|
while (piVar3 != (int *)0x0) {
|
|
|
|
piVar1 = (int *)*piVar3;
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
if ((piVar1 != (int *)0x0) && (cVar2 = (**(code **)*piVar1)(), cVar2 == '\0')) {
|
|
|
|
(**(code **)(*piVar1 + 0xd8))(unaff_retaddr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b05b0 at 0x006B05B0 (size: 82) ---
|
|
|
|
|
|
undefined4 FUN_006b05b0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 unaff_retaddr;
|
|
|
|
|
|
|
|
piVar3 = (int *)thunk_FUN_0043c680();
|
|
|
|
iVar4 = (**(code **)(*piVar3 + 0x10))(0x4dd1e7);
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
piVar3 = *(int **)(iVar4 + 4);
|
|
|
|
while (piVar3 != (int *)0x0) {
|
|
|
|
piVar1 = (int *)*piVar3;
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
if ((piVar1 != (int *)0x0) && (cVar2 = (**(code **)*piVar1)(), cVar2 == '\0')) {
|
|
|
|
(**(code **)(*piVar1 + 0xdc))(unaff_retaddr,param_1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0610 at 0x006B0610 (size: 72) ---
|
|
|
|
|
|
undefined4 FUN_006b0610(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 unaff_retaddr;
|
|
|
|
|
|
|
|
piVar3 = (int *)thunk_FUN_0043c680();
|
|
|
|
iVar4 = (**(code **)(*piVar3 + 0x10))(0x4dd22c);
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
piVar3 = *(int **)(iVar4 + 4);
|
|
|
|
while (piVar3 != (int *)0x0) {
|
|
|
|
piVar1 = (int *)*piVar3;
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
if ((piVar1 != (int *)0x0) && (cVar2 = (**(code **)*piVar1)(), cVar2 == '\0')) {
|
|
|
|
(**(code **)(*piVar1 + 0x74))(unaff_retaddr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0660 at 0x006B0660 (size: 179) ---
|
|
|
|
|
|
char FUN_006b0660(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined **local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = FUN_005473a0();
|
|
|
|
local_8 = &PTR_FUN_00802c2c;
|
|
|
|
local_c = 0;
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0xc))(&local_c,0);
|
|
|
|
iVar3 = FUN_006b4010(&stack0xffffffec,0);
|
|
|
|
iVar3 = iVar2 + 4 + iVar3;
|
|
|
|
puVar4 = (undefined4 *)thunk_FUN_005df0f5(iVar3);
|
|
|
|
FUN_006b4010(&stack0xffffffec,iVar3);
|
|
|
|
*puVar4 = 0xf753;
|
|
|
|
(**(code **)(*param_1 + 0xc))(&stack0xffffffec,(int)puVar4 + (iVar3 - (int)(puVar4 + 1)));
|
|
|
|
cVar1 = FUN_005473d0(puVar4,iVar3);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_005473b0(puVar4 + 1);
|
|
|
|
}
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0720 at 0x006B0720 (size: 201) ---
|
|
|
|
|
|
char FUN_006b0720(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *local_c;
|
|
|
|
undefined **local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = FUN_005473a0();
|
|
|
|
local_8 = &PTR_FUN_00802c2c;
|
|
|
|
local_c = (undefined4 *)0x0;
|
|
|
|
iVar2 = FUN_006b4010(&local_c,0);
|
|
|
|
iVar2 = iVar2 + 8;
|
|
|
|
puVar3 = (undefined4 *)thunk_FUN_005df0f5(iVar2);
|
|
|
|
local_c = puVar3;
|
|
|
|
FUN_006b4010(&local_c,iVar2);
|
|
|
|
*local_c = 0xf752;
|
|
|
|
local_c[1] = param_1;
|
|
|
|
local_c = local_c + 2;
|
|
|
|
uVar4 = (uint)local_c & 0x80000003;
|
|
|
|
if ((int)uVar4 < 0) {
|
|
|
|
uVar4 = (uVar4 - 1 | 0xfffffffc) + 1;
|
|
|
|
}
|
|
|
|
if (uVar4 != 0) {
|
|
|
|
for (iVar5 = 4 - uVar4; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)local_c = 0;
|
|
|
|
local_c = (undefined4 *)((int)local_c + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar1 = FUN_005473d0(puVar3,iVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_005473b0(local_4);
|
|
|
|
}
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b07f0 at 0x006B07F0 (size: 322) ---
|
|
|
|
|
|
char FUN_006b07f0(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *local_c;
|
|
|
|
undefined **local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = FUN_005473a0();
|
|
|
|
local_8 = &PTR_FUN_00802c2c;
|
|
|
|
local_c = (undefined4 *)0x0;
|
|
|
|
iVar2 = FUN_006b4010(&local_c,0);
|
|
|
|
iVar2 = iVar2 + 0x10;
|
|
|
|
puVar3 = (undefined4 *)thunk_FUN_005df0f5(iVar2);
|
|
|
|
local_c = puVar3;
|
|
|
|
FUN_006b4010(&local_c,iVar2);
|
|
|
|
*local_c = 0xf61e;
|
|
|
|
local_c[1] = param_1;
|
|
|
|
local_c = local_c + 2;
|
|
|
|
uVar4 = (uint)local_c & 0x80000003;
|
|
|
|
if ((int)uVar4 < 0) {
|
|
|
|
uVar4 = (uVar4 - 1 | 0xfffffffc) + 1;
|
|
|
|
}
|
|
|
|
if (uVar4 != 0) {
|
|
|
|
for (iVar5 = 4 - uVar4; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)local_c = 0;
|
|
|
|
local_c = (undefined4 *)((int)local_c + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*local_c = param_2;
|
|
|
|
local_c = local_c + 1;
|
|
|
|
uVar4 = (uint)local_c & 0x80000003;
|
|
|
|
if ((int)uVar4 < 0) {
|
|
|
|
uVar4 = (uVar4 - 1 | 0xfffffffc) + 1;
|
|
|
|
}
|
|
|
|
if (uVar4 != 0) {
|
|
|
|
for (iVar5 = 4 - uVar4; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)local_c = 0;
|
|
|
|
local_c = (undefined4 *)((int)local_c + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*local_c = param_3;
|
|
|
|
local_c = local_c + 1;
|
|
|
|
uVar4 = (uint)local_c & 0x80000003;
|
|
|
|
if ((int)uVar4 < 0) {
|
|
|
|
uVar4 = (uVar4 - 1 | 0xfffffffc) + 1;
|
|
|
|
}
|
|
|
|
if (uVar4 != 0) {
|
|
|
|
for (iVar5 = 4 - uVar4; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)local_c = 0;
|
|
|
|
local_c = (undefined4 *)((int)local_c + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar1 = FUN_005473d0(puVar3,iVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_005473b0(local_4);
|
|
|
|
}
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0940 at 0x006B0940 (size: 179) ---
|
|
|
|
|
|
char FUN_006b0940(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined **local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = FUN_005473a0();
|
|
|
|
local_8 = &PTR_FUN_00802c2c;
|
|
|
|
local_c = 0;
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0xc))(&local_c,0);
|
|
|
|
iVar3 = FUN_006b4010(&stack0xffffffec,0);
|
|
|
|
iVar3 = iVar2 + 4 + iVar3;
|
|
|
|
puVar4 = (undefined4 *)thunk_FUN_005df0f5(iVar3);
|
|
|
|
FUN_006b4010(&stack0xffffffec,iVar3);
|
|
|
|
*puVar4 = 0xf61b;
|
|
|
|
(**(code **)(*param_1 + 0xc))(&stack0xffffffec,(int)puVar4 + (iVar3 - (int)(puVar4 + 1)));
|
|
|
|
cVar1 = FUN_005473d0(puVar4,iVar3);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_005473b0(puVar4 + 1);
|
|
|
|
}
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0a00 at 0x006B0A00 (size: 201) ---
|
|
|
|
|
|
char FUN_006b0a00(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *local_c;
|
|
|
|
undefined **local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = FUN_005473a0();
|
|
|
|
local_8 = &PTR_FUN_00802c2c;
|
|
|
|
local_c = (undefined4 *)0x0;
|
|
|
|
iVar2 = FUN_006b4010(&local_c,0);
|
|
|
|
iVar2 = iVar2 + 8;
|
|
|
|
puVar3 = (undefined4 *)thunk_FUN_005df0f5(iVar2);
|
|
|
|
local_c = puVar3;
|
|
|
|
FUN_006b4010(&local_c,iVar2);
|
|
|
|
*local_c = 0xf7c9;
|
|
|
|
local_c[1] = param_1;
|
|
|
|
local_c = local_c + 2;
|
|
|
|
uVar4 = (uint)local_c & 0x80000003;
|
|
|
|
if ((int)uVar4 < 0) {
|
|
|
|
uVar4 = (uVar4 - 1 | 0xfffffffc) + 1;
|
|
|
|
}
|
|
|
|
if (uVar4 != 0) {
|
|
|
|
for (iVar5 = 4 - uVar4; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)local_c = 0;
|
|
|
|
local_c = (undefined4 *)((int)local_c + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar1 = FUN_005473d0(puVar3,iVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_005473b0(local_4);
|
|
|
|
}
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0ad0 at 0x006B0AD0 (size: 179) ---
|
|
|
|
|
|
char FUN_006b0ad0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined **local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = FUN_005473a0();
|
|
|
|
local_8 = &PTR_FUN_00802c2c;
|
|
|
|
local_c = 0;
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0xc))(&local_c,0);
|
|
|
|
iVar3 = FUN_006b4010(&stack0xffffffec,0);
|
|
|
|
iVar3 = iVar2 + 4 + iVar3;
|
|
|
|
puVar4 = (undefined4 *)thunk_FUN_005df0f5(iVar3);
|
|
|
|
FUN_006b4010(&stack0xffffffec,iVar3);
|
|
|
|
*puVar4 = 0xf61c;
|
|
|
|
(**(code **)(*param_1 + 0xc))(&stack0xffffffec,(int)puVar4 + (iVar3 - (int)(puVar4 + 1)));
|
|
|
|
cVar1 = FUN_005473d0(puVar4,iVar3);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_005473b0(puVar4 + 1);
|
|
|
|
}
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0b90 at 0x006B0B90 (size: 265) ---
|
|
|
|
|
|
char FUN_006b0b90(undefined4 param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *local_c;
|
|
|
|
undefined **local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = FUN_005473a0();
|
|
|
|
local_8 = &PTR_FUN_00802c2c;
|
|
|
|
local_c = (undefined4 *)0x0;
|
|
|
|
iVar2 = FUN_006b4010(&local_c,0);
|
|
|
|
iVar2 = iVar2 + 0xc;
|
|
|
|
puVar3 = (undefined4 *)thunk_FUN_005df0f5(iVar2);
|
|
|
|
local_c = puVar3;
|
|
|
|
FUN_006b4010(&local_c,iVar2);
|
|
|
|
*local_c = 0xf661;
|
|
|
|
local_c[1] = param_1;
|
|
|
|
local_c = local_c + 2;
|
|
|
|
uVar4 = (uint)local_c & 0x80000003;
|
|
|
|
if ((int)uVar4 < 0) {
|
|
|
|
uVar4 = (uVar4 - 1 | 0xfffffffc) + 1;
|
|
|
|
}
|
|
|
|
if (uVar4 != 0) {
|
|
|
|
for (iVar5 = 4 - uVar4; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)local_c = 0;
|
|
|
|
local_c = (undefined4 *)((int)local_c + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*local_c = param_2;
|
|
|
|
local_c = local_c + 1;
|
|
|
|
uVar4 = (uint)local_c & 0x80000003;
|
|
|
|
if ((int)uVar4 < 0) {
|
|
|
|
uVar4 = (uVar4 - 1 | 0xfffffffc) + 1;
|
|
|
|
}
|
|
|
|
if (uVar4 != 0) {
|
|
|
|
for (iVar5 = 4 - uVar4; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)local_c = 0;
|
|
|
|
local_c = (undefined4 *)((int)local_c + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar1 = FUN_005473d0(puVar3,iVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_005473b0(local_4);
|
|
|
|
}
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0ca0 at 0x006B0CA0 (size: 179) ---
|
|
|
|
|
|
char FUN_006b0ca0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined **local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = FUN_005473a0();
|
|
|
|
local_8 = &PTR_FUN_00802c2c;
|
|
|
|
local_c = 0;
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0xc))(&local_c,0);
|
|
|
|
iVar3 = FUN_006b4010(&stack0xffffffec,0);
|
|
|
|
iVar3 = iVar2 + 4 + iVar3;
|
|
|
|
puVar4 = (undefined4 *)thunk_FUN_005df0f5(iVar3);
|
|
|
|
FUN_006b4010(&stack0xffffffec,iVar3);
|
|
|
|
*puVar4 = 0xf649;
|
|
|
|
(**(code **)(*param_1 + 0xc))(&stack0xffffffec,(int)puVar4 + (iVar3 - (int)(puVar4 + 1)));
|
|
|
|
cVar1 = FUN_005473d0(puVar4,iVar3);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_005473b0(puVar4 + 1);
|
|
|
|
}
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0d60 at 0x006B0D60 (size: 32) ---
|
|
|
|
|
|
void FUN_006b0d60(undefined4 param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_0040e280(&DAT_008fb748,param_1,param_2,0x80000002);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0d80 at 0x006B0D80 (size: 18) ---
|
|
|
|
|
|
bool __thiscall FUN_006b0d80(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
return *(int *)(param_1 + 4) == *(int *)(param_2 + 4);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0da0 at 0x006B0DA0 (size: 25) ---
|
|
|
|
|
|
void __thiscall FUN_006b0da0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007cd42c;
|
|
|
|
param_1[1] = param_2;
|
|
|
|
param_1[2] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0dc0 at 0x006B0DC0 (size: 17) ---
|
|
|
|
|
|
void __fastcall FUN_006b0dc0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007cd42c;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0e10 at 0x006B0E10 (size: 35) ---
|
|
|
|
|
|
undefined4 FUN_006b0e10(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
switch(param_1) {
|
|
|
|
case 2:
|
|
|
|
case 3:
|
|
|
|
case 6:
|
|
|
|
case 7:
|
|
|
|
case 0xc:
|
|
|
|
case 0x10:
|
|
|
|
case 0x11:
|
|
|
|
case 0x12:
|
|
|
|
case 0x13:
|
|
|
|
case 0x15:
|
|
|
|
case 0x16:
|
|
|
|
case 0x17:
|
|
|
|
case 0x18:
|
|
|
|
case 0x19:
|
|
|
|
return 1;
|
|
|
|
default:
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b0e60 at 0x006B0E60 (size: 1402) ---
|
|
|
|
|
|
undefined4 FUN_006b0e60(undefined4 param_1,char *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
switch(param_1) {
|
|
|
|
case 0:
|
|
|
|
uVar1 = 8;
|
|
|
|
if (7 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Default_00798924._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Default_00798924._4_4_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
uVar1 = 4;
|
|
|
|
if (3 < param_3) {
|
|
|
|
*(undefined **)param_2 = &DAT_006c6c41;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
uVar1 = 7;
|
|
|
|
if (6 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Speech_00804c6c._0_4_;
|
|
|
|
*(undefined2 *)(param_2 + 4) = s_Speech_00804c6c._4_2_;
|
|
|
|
param_2[6] = s_Speech_00804c6c[6];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
uVar1 = 5;
|
|
|
|
if (4 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = DAT_00804c64;
|
|
|
|
param_2[4] = DAT_00804c68;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
uVar1 = 0x13;
|
|
|
|
if (0x12 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Speech_Direct_Send_00804c50._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Speech_Direct_Send_00804c50._4_4_;
|
|
|
|
*(undefined4 *)(param_2 + 8) = s_Speech_Direct_Send_00804c50._8_4_;
|
|
|
|
*(undefined4 *)(param_2 + 0xc) = s_Speech_Direct_Send_00804c50._12_4_;
|
|
|
|
*(undefined2 *)(param_2 + 0x10) = s_Speech_Direct_Send_00804c50._16_2_;
|
|
|
|
param_2[0x12] = s_Speech_Direct_Send_00804c50[0x12];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
uVar1 = 7;
|
|
|
|
if (6 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_System_00804c38._0_4_;
|
|
|
|
*(undefined2 *)(param_2 + 4) = s_System_00804c38._4_2_;
|
|
|
|
param_2[6] = s_System_00804c38[6];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
uVar1 = 7;
|
|
|
|
if (6 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Combat_00804c30._0_4_;
|
|
|
|
*(undefined2 *)(param_2 + 4) = s_Combat_00804c30._4_2_;
|
|
|
|
param_2[6] = s_Combat_00804c30[6];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
uVar1 = 6;
|
|
|
|
if (5 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Magic_00804c0c._0_4_;
|
|
|
|
*(undefined2 *)(param_2 + 4) = s_Magic_00804c0c._4_2_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
uVar1 = 8;
|
|
|
|
if (7 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Channel_00804c04._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Channel_00804c04._4_4_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
uVar1 = 0xd;
|
|
|
|
if (0xc < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Channel_Send_00804bf4._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Channel_Send_00804bf4._4_4_;
|
|
|
|
*(undefined4 *)(param_2 + 8) = s_Channel_Send_00804bf4._8_4_;
|
|
|
|
param_2[0xc] = s_Channel_Send_00804bf4[0xc];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
uVar1 = 7;
|
|
|
|
if (6 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Social_00804bec._0_4_;
|
|
|
|
*(undefined2 *)(param_2 + 4) = s_Social_00804bec._4_2_;
|
|
|
|
param_2[6] = s_Social_00804bec[6];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0xb:
|
|
|
|
uVar1 = 0xc;
|
|
|
|
if (0xb < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Social_Send_00804be0._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Social_Send_00804be0._4_4_;
|
|
|
|
*(undefined4 *)(param_2 + 8) = s_Social_Send_00804be0._8_4_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0xc:
|
|
|
|
uVar1 = 6;
|
|
|
|
if (5 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Emote_00804bd8._0_4_;
|
|
|
|
*(undefined2 *)(param_2 + 4) = s_Emote_00804bd8._4_2_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0xd:
|
|
|
|
uVar1 = 0xc;
|
|
|
|
if (0xb < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Advancement_00804bcc._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Advancement_00804bcc._4_4_;
|
|
|
|
*(undefined4 *)(param_2 + 8) = s_Advancement_00804bcc._8_4_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0xe:
|
|
|
|
uVar1 = 6;
|
|
|
|
if (5 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Abuse_007e967c._0_4_;
|
|
|
|
*(undefined2 *)(param_2 + 4) = s_Abuse_007e967c._4_2_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0xf:
|
|
|
|
uVar1 = 5;
|
|
|
|
if (4 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = DAT_00799518;
|
|
|
|
param_2[4] = DAT_0079951c;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x10:
|
|
|
|
uVar1 = 10;
|
|
|
|
if (9 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Appraisal_00804bb0._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Appraisal_00804bb0._4_4_;
|
|
|
|
*(undefined2 *)(param_2 + 8) = s_Appraisal_00804bb0._8_2_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x11:
|
|
|
|
uVar1 = 0xd;
|
|
|
|
if (0xc < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Spellcasting_00804bbc._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Spellcasting_00804bbc._4_4_;
|
|
|
|
*(undefined4 *)(param_2 + 8) = s_Spellcasting_00804bbc._8_4_;
|
|
|
|
param_2[0xc] = s_Spellcasting_00804bbc[0xc];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x12:
|
|
|
|
uVar1 = 0xb;
|
|
|
|
if (10 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Allegiance_007d1498._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Allegiance_007d1498._4_4_;
|
|
|
|
*(undefined2 *)(param_2 + 8) = s_Allegiance_007d1498._8_2_;
|
|
|
|
param_2[10] = s_Allegiance_007d1498[10];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x13:
|
|
|
|
uVar1 = 0xb;
|
|
|
|
if (10 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Fellowship_007e9630._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Fellowship_007e9630._4_4_;
|
|
|
|
*(undefined2 *)(param_2 + 8) = s_Fellowship_007e9630._8_2_;
|
|
|
|
param_2[10] = s_Fellowship_007e9630[10];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x14:
|
|
|
|
uVar1 = 0x10;
|
|
|
|
if (0xf < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_World_Broadcast_00804c40._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_World_Broadcast_00804c40._4_4_;
|
|
|
|
*(undefined4 *)(param_2 + 8) = s_World_Broadcast_00804c40._8_4_;
|
|
|
|
*(undefined4 *)(param_2 + 0xc) = s_World_Broadcast_00804c40._12_4_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x15:
|
|
|
|
uVar1 = 0xd;
|
|
|
|
if (0xc < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Combat_Enemy_00804c20._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Combat_Enemy_00804c20._4_4_;
|
|
|
|
*(undefined4 *)(param_2 + 8) = s_Combat_Enemy_00804c20._8_4_;
|
|
|
|
param_2[0xc] = s_Combat_Enemy_00804c20[0xc];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x16:
|
|
|
|
uVar1 = 0xc;
|
|
|
|
if (0xb < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Combat_Self_00804c14._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Combat_Self_00804c14._4_4_;
|
|
|
|
*(undefined4 *)(param_2 + 8) = s_Combat_Self_00804c14._8_4_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x17:
|
|
|
|
uVar1 = 7;
|
|
|
|
if (6 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Recall_00804ba8._0_4_;
|
|
|
|
*(undefined2 *)(param_2 + 4) = s_Recall_00804ba8._4_2_;
|
|
|
|
param_2[6] = s_Recall_00804ba8[6];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x18:
|
|
|
|
uVar1 = 6;
|
|
|
|
if (5 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Craft_00804ba0._0_4_;
|
|
|
|
*(undefined2 *)(param_2 + 4) = s_Craft_00804ba0._4_2_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x19:
|
|
|
|
uVar1 = 10;
|
|
|
|
if (9 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Salvaging_007e797c._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Salvaging_007e797c._4_4_;
|
|
|
|
*(undefined2 *)(param_2 + 8) = s_Salvaging_007e797c._8_2_;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
uVar1 = 8;
|
|
|
|
if (7 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Unknown_0079aa78._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Unknown_0079aa78._4_4_;
|
|
|
|
uVar1 = 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x1f:
|
|
|
|
uVar1 = 0xb;
|
|
|
|
if (10 < param_3) {
|
|
|
|
*(undefined4 *)param_2 = s_Admin_Tell_00804b94._0_4_;
|
|
|
|
*(undefined4 *)(param_2 + 4) = s_Admin_Tell_00804b94._4_4_;
|
|
|
|
*(undefined2 *)(param_2 + 8) = s_Admin_Tell_00804b94._8_2_;
|
|
|
|
param_2[10] = s_Admin_Tell_00804b94[10];
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1460 at 0x006B1460 (size: 949) ---
|
|
|
|
|
|
undefined4 FUN_006b1460(char *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (param_1 == (char *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Default");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Speech");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 2;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Tell");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 3;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Speech_Direct_Send");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"World_Broadcast");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x14;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"System");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 5;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Combat");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 6;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Combat_Enemy");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x15;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Combat_Self");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x16;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Magic");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 7;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Channel");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 8;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Channel_Send");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 9;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Social");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 10;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Social_Send");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0xb;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Emote");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0xc;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Advancement");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0xd;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Abuse");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0xe;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Help");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0xf;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"All");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Spellcasting");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x11;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Appraisal");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x10;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Assessment");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x10;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Allegiance");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x12;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Fellowship");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x13;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Recall");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x17;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Craft");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x18;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Salvaging");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x19;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = _stricmp(param_1,"Admin_Tell");
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
*param_2 = 0x1f;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1820 at 0x006B1820 (size: 86) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
float10 FUN_006b1820(undefined4 param_1,int param_2,float param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
float10 fVar1;
|
|
|
|
float10 fVar2;
|
|
|
|
|
|
|
|
fVar1 = (float10)FUN_004fd810(param_1);
|
|
|
|
fVar2 = (float10)param_2;
|
|
|
|
if (fVar2 == (float10)_DAT_00804cec) {
|
|
|
|
return (float10)_DAT_00804ce8 / (float10)_DAT_00804cd8;
|
|
|
|
}
|
|
|
|
return (((fVar2 / ((float10)_DAT_00804ce4 + fVar2)) * (float10)_DAT_00804ce0 * fVar1 +
|
|
|
|
(float10)_DAT_007c6f14) / (float10)param_3) / (float10)_DAT_00804cd8;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1880 at 0x006B1880 (size: 141) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
float10 FUN_006b1880(undefined4 param_1,int param_2,float param_3,float param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
float10 fVar1;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = param_3;
|
|
|
|
if (param_3 <= _DAT_007938b0) {
|
|
|
|
if (param_3 < DAT_00796344) {
|
|
|
|
local_4 = 0.0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_4 = 1.0;
|
|
|
|
}
|
|
|
|
fVar1 = (float10)FUN_004fd810(param_1);
|
|
|
|
fVar1 = ((((float10)param_2 / ((float10)param_2 + (float10)_DAT_00804cf4)) *
|
|
|
|
(float10)_DAT_00804cf0 + (float10)_DAT_007c56dc) * fVar1 * (float10)local_4) /
|
|
|
|
(float10)param_4;
|
|
|
|
if (fVar1 < (float10)_DAT_00804c84) {
|
|
|
|
fVar1 = (float10)_DAT_00804c84;
|
|
|
|
}
|
|
|
|
return fVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1910 at 0x006B1910 (size: 75) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
void FUN_006b1910(float param_1,float param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_3 == 0) {
|
|
|
|
ceil((double)((param_2 + _DAT_007938b8) * param_1 * _DAT_007938b4 + _DAT_007c6bc4));
|
|
|
|
FUN_005df4c4();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_005df4c4();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1960 at 0x006B1960 (size: 6) ---
|
|
|
|
|
|
undefined4 FUN_006b1960(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
return 0xc;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b19b0 at 0x006B19B0 (size: 73) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b19b0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
piVar1 = (int *)*param_2;
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
*param_2 = (int)(piVar1 + 1);
|
|
|
|
if (iVar2 != 0xf7b0) {
|
|
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
|
|
*param_2 = (int)piVar1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 8) = piVar1[1];
|
|
|
|
iVar2 = *param_2;
|
|
|
|
*param_2 = iVar2 + 4;
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = *(undefined4 *)(iVar2 + 4);
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1a00 at 0x006B1A00 (size: 33) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006b1a00(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_0080468c;
|
|
|
|
FUN_0048c3e0(&DAT_007938af);
|
|
|
|
param_1[2] = 0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1a30 at 0x006B1A30 (size: 33) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006b1a30(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_008046a0;
|
|
|
|
FUN_0048c3e0(&DAT_007938af);
|
|
|
|
param_1[2] = 0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1a60 at 0x006B1A60 (size: 64) ---
|
|
|
|
|
|
uint __thiscall FUN_006b1a60(int *param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
iVar1 = *param_2;
|
|
|
|
uVar2 = (**(code **)(*param_1 + 8))();
|
|
|
|
if (uVar2 <= param_3) {
|
|
|
|
FUN_004fd290(param_2,(iVar1 + param_3) - *param_2);
|
|
|
|
*(int *)*param_2 = param_1[2];
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1af0 at 0x006B1AF0 (size: 41) ---
|
|
|
|
|
|
undefined4 FUN_006b1af0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
uVar2 = 0;
|
|
|
|
do {
|
|
|
|
iVar1 = FUN_005b17b0(uVar2);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < 0x80);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1b20 at 0x006B1B20 (size: 72) ---
|
|
|
|
|
|
bool FUN_006b1b20(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
if (param_1 != 1) {
|
|
|
|
iVar1 = FUN_005b17b0(param_1);
|
|
|
|
return iVar1 != 0;
|
|
|
|
}
|
|
|
|
uVar2 = 0;
|
|
|
|
do {
|
|
|
|
iVar1 = FUN_005b17b0(uVar2);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < 0x80);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1c00 at 0x006B1C00 (size: 80) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b1c00(int param_1,uint param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
|
|
|
|
if ((*(uint *)(param_1 + 0x24) != 0) && (*(int *)(param_1 + 0x20) != 0)) {
|
|
|
|
puVar2 = *(uint **)(*(int *)(param_1 + 0x20) + (param_2 % *(uint *)(param_1 + 0x24)) * 4);
|
|
|
|
if (puVar2 != (uint *)0x0) {
|
|
|
|
while (param_2 != *puVar2) {
|
|
|
|
puVar2 = (uint *)puVar2[7];
|
|
|
|
if (puVar2 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (puVar2 != (uint *)0xfffffffc) {
|
|
|
|
uVar1 = FUN_006b1b20(param_3);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1ce0 at 0x006B1CE0 (size: 91) ---
|
|
|
|
|
|
int __fastcall FUN_006b1ce0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
uVar3 = 0;
|
|
|
|
iVar4 = 4;
|
|
|
|
local_4 = 0;
|
|
|
|
if (*(int *)(param_1 + 0xc) != 0) {
|
|
|
|
do {
|
|
|
|
for (iVar1 = *(int *)(*(int *)(param_1 + 8) + uVar3 * 4); iVar1 != 0;
|
|
|
|
iVar1 = *(int *)(iVar1 + 0x1c)) {
|
|
|
|
iVar2 = (**(code **)(*(int *)(iVar1 + 4) + 0xc))(&local_4,0);
|
|
|
|
iVar4 = iVar4 + 4 + iVar2;
|
|
|
|
}
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < *(uint *)(param_1 + 0xc));
|
|
|
|
}
|
|
|
|
return iVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1d40 at 0x006B1D40 (size: 89) ---
|
|
|
|
|
|
int __thiscall FUN_006b1d40(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
|
|
|
|
if (param_2 != param_1) {
|
|
|
|
FUN_005b1970(param_2 + 4);
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = *(undefined4 *)(param_2 + 0x10);
|
|
|
|
puVar1 = *(undefined4 **)(param_1 + 0x14);
|
|
|
|
if (puVar1 != *(undefined4 **)(param_2 + 0x14)) {
|
|
|
|
LVar3 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_2 + 0x14);
|
|
|
|
*(int *)(param_1 + 0x14) = iVar2;
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + 4));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1da0 at 0x006B1DA0 (size: 110) ---
|
|
|
|
|
|
void __fastcall FUN_006b1da0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
LONG *lpAddend;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
FUN_005b1900(0);
|
|
|
|
FUN_005b1970(local_c);
|
|
|
|
FUN_005b19d0();
|
|
|
|
puVar1 = *(undefined4 **)(param_1 + 0x14);
|
|
|
|
if (puVar1 != DAT_008ef11c) {
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
lpAddend = DAT_008ef11c + 1;
|
|
|
|
*(undefined4 **)(param_1 + 0x14) = DAT_008ef11c;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1e10 at 0x006B1E10 (size: 146) ---
|
|
|
|
|
|
int * __thiscall FUN_006b1e10(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
byte bVar1;
|
|
|
|
uint uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
byte *pbVar4;
|
|
|
|
int iVar5;
|
|
|
|
byte *pbVar6;
|
|
|
|
int *piVar7;
|
|
|
|
bool bVar8;
|
|
|
|
|
|
|
|
uVar2 = *(uint *)(param_1 + 0xc);
|
|
|
|
if ((uVar2 != 0) && (*(int *)(param_1 + 8) != 0)) {
|
|
|
|
iVar5 = *param_2;
|
|
|
|
uVar3 = *(uint *)(iVar5 + 0x10);
|
|
|
|
if (uVar3 == 0xffffffff) {
|
|
|
|
uVar3 = FUN_004fe440();
|
|
|
|
*(uint *)(iVar5 + 0x10) = uVar3;
|
|
|
|
}
|
|
|
|
piVar7 = *(int **)(*(int *)(param_1 + 8) + (uVar3 % uVar2) * 4);
|
|
|
|
if (piVar7 != (int *)0x0) {
|
|
|
|
do {
|
|
|
|
pbVar4 = (byte *)(*piVar7 + 0x14);
|
|
|
|
pbVar6 = (byte *)(*param_2 + 0x14);
|
|
|
|
do {
|
|
|
|
bVar1 = *pbVar6;
|
|
|
|
bVar8 = bVar1 < *pbVar4;
|
|
|
|
if (bVar1 != *pbVar4) {
|
|
|
|
LAB_006b1e7f:
|
|
|
|
iVar5 = (1 - (uint)bVar8) - (uint)(bVar8 != 0);
|
|
|
|
goto LAB_006b1e84;
|
|
|
|
}
|
|
|
|
if (bVar1 == 0) break;
|
|
|
|
bVar1 = pbVar6[1];
|
|
|
|
bVar8 = bVar1 < pbVar4[1];
|
|
|
|
if (bVar1 != pbVar4[1]) goto LAB_006b1e7f;
|
|
|
|
pbVar6 = pbVar6 + 2;
|
|
|
|
pbVar4 = pbVar4 + 2;
|
|
|
|
} while (bVar1 != 0);
|
|
|
|
iVar5 = 0;
|
|
|
|
LAB_006b1e84:
|
|
|
|
if (iVar5 == 0) {
|
|
|
|
return piVar7 + 1;
|
|
|
|
}
|
|
|
|
piVar7 = (int *)piVar7[2];
|
|
|
|
} while (piVar7 != (int *)0x0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return (int *)0x0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1eb0 at 0x006B1EB0 (size: 76) ---
|
|
|
|
|
|
int * __thiscall FUN_006b1eb0(int *param_1,int *param_2,int *param_3,uint param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_1 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + 4));
|
|
|
|
param_1[1] = *param_3;
|
|
|
|
param_1[2] = 0;
|
|
|
|
iVar1 = *param_2;
|
|
|
|
uVar2 = *(uint *)(iVar1 + 0x10);
|
|
|
|
if (uVar2 == 0xffffffff) {
|
|
|
|
uVar2 = FUN_004fe440();
|
|
|
|
*(uint *)(iVar1 + 0x10) = uVar2;
|
|
|
|
}
|
|
|
|
param_1[3] = uVar2 % param_4;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1f00 at 0x006B1F00 (size: 50) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006b1f00(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *lpAddend;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_007e3f00;
|
|
|
|
FUN_005b1900(0);
|
|
|
|
lpAddend = (LONG *)(DAT_008ef11c + 4);
|
|
|
|
param_1[5] = DAT_008ef11c;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
FUN_006b1da0();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1f40 at 0x006B1F40 (size: 159) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b1f40(undefined4 *param_1,int *param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
LONG *lpAddend;
|
|
|
|
uint uVar4;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_007e3f00;
|
|
|
|
FUN_005b1900(0);
|
|
|
|
lpAddend = (LONG *)(DAT_008ef11c + 4);
|
|
|
|
param_1[5] = DAT_008ef11c;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
FUN_006b1da0();
|
|
|
|
puVar1 = (undefined4 *)param_1[5];
|
|
|
|
if (puVar1 != (undefined4 *)*param_2) {
|
|
|
|
LVar3 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
iVar2 = *param_2;
|
|
|
|
param_1[5] = iVar2;
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + 4));
|
|
|
|
}
|
|
|
|
if (param_3 != 1) {
|
|
|
|
FUN_005b17f0(param_3);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
uVar4 = 0;
|
|
|
|
do {
|
|
|
|
FUN_005b17f0(uVar4);
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
} while (uVar4 < 0x80);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b1fe0 at 0x006B1FE0 (size: 61) ---
|
|
|
|
|
|
void __fastcall FUN_006b1fe0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_007e3f00;
|
|
|
|
FUN_006b1da0();
|
|
|
|
puVar1 = (undefined4 *)param_1[5];
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
FUN_005b19d0();
|
|
|
|
*param_1 = &PTR_FUN_0079385c;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2120 at 0x006B2120 (size: 130) ---
|
|
|
|
|
|
void __fastcall FUN_006b2120(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
if ((*(int *)(param_1 + 8) != 0) && (local_4 = 0, *(int *)(param_1 + 0xc) != 0)) {
|
|
|
|
do {
|
|
|
|
piVar3 = *(int **)(*(int *)(param_1 + 8) + local_4 * 4);
|
|
|
|
while (piVar3 != (int *)0x0) {
|
|
|
|
puVar1 = (undefined4 *)*piVar3;
|
|
|
|
piVar2 = (int *)piVar3[2];
|
|
|
|
LVar4 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar4 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
operator_delete(piVar3);
|
|
|
|
piVar3 = piVar2;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 8) + local_4 * 4) = 0;
|
|
|
|
local_4 = local_4 + 1;
|
|
|
|
} while (local_4 < *(uint *)(param_1 + 0xc));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b21b0 at 0x006B21B0 (size: 91) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b21b0(int param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_006b1e10(param_2);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = FUN_005df0f5(0x10);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
iVar1 = FUN_006b1eb0(param_2,param_3,*(undefined4 *)(param_1 + 0xc));
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
*(undefined4 *)(iVar1 + 8) =
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 8) + *(int *)(iVar1 + 0xc) * 4);
|
|
|
|
*(int *)(*(int *)(param_1 + 8) + *(int *)(iVar1 + 0xc) * 4) = iVar1;
|
|
|
|
*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b22a0 at 0x006B22A0 (size: 89) ---
|
|
|
|
|
|
int __fastcall FUN_006b22a0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
uVar3 = 0;
|
|
|
|
iVar4 = 4;
|
|
|
|
local_4 = 0;
|
|
|
|
if (*(int *)(param_1 + 0xc) != 0) {
|
|
|
|
do {
|
|
|
|
for (iVar1 = *(int *)(*(int *)(param_1 + 8) + uVar3 * 4); iVar1 != 0;
|
|
|
|
iVar1 = *(int *)(iVar1 + 8)) {
|
|
|
|
iVar2 = FUN_004fd290(&local_4,0);
|
|
|
|
iVar4 = iVar4 + 4 + iVar2;
|
|
|
|
}
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < *(uint *)(param_1 + 0xc));
|
|
|
|
}
|
|
|
|
return iVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2300 at 0x006B2300 (size: 84) ---
|
|
|
|
|
|
uint * __thiscall FUN_006b2300(uint *param_1,uint *param_2,int param_3,uint param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
*param_1 = *param_2;
|
|
|
|
param_1[1] = (uint)&PTR_FUN_007e3f00;
|
|
|
|
FUN_005b1950(param_3 + 4);
|
|
|
|
param_1[5] = *(uint *)(param_3 + 0x10);
|
|
|
|
uVar1 = *(uint *)(param_3 + 0x14);
|
|
|
|
param_1[6] = uVar1;
|
|
|
|
InterlockedIncrement((LONG *)(uVar1 + 4));
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = *param_2 % param_4;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2360 at 0x006B2360 (size: 84) ---
|
|
|
|
|
|
bool FUN_006b2360(undefined4 param_1,undefined4 param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_006b1b20(param_3);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
if (param_3 == 0x11) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_006b1e10(param_2);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = FUN_006b1c00(param_1,param_3);
|
|
|
|
return iVar1 != 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2510 at 0x006B2510 (size: 141) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b2510(int param_1,uint *param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
if ((*(uint *)(param_1 + 0xc) != 0) && (*(int *)(param_1 + 8) != 0)) {
|
|
|
|
for (puVar1 = *(uint **)(*(int *)(param_1 + 8) + (*param_2 % *(uint *)(param_1 + 0xc)) * 4);
|
|
|
|
puVar1 != (uint *)0x0; puVar1 = (uint *)puVar1[7]) {
|
|
|
|
if (*param_2 == *puVar1) {
|
|
|
|
if (puVar1 != (uint *)0xfffffffc) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar2 = FUN_005df0f5(0x24);
|
|
|
|
if ((iVar2 != 0) &&
|
|
|
|
(iVar2 = FUN_006b2300(param_2,param_3,*(undefined4 *)(param_1 + 0xc)), iVar2 != 0)) {
|
|
|
|
*(undefined4 *)(iVar2 + 0x1c) =
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 8) + *(int *)(iVar2 + 0x20) * 4);
|
|
|
|
*(int *)(*(int *)(param_1 + 8) + *(int *)(iVar2 + 0x20) * 4) = iVar2;
|
|
|
|
*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b25a0 at 0x006B25A0 (size: 260) ---
|
|
|
|
|
|
int __thiscall FUN_006b25a0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
int *piVar5;
|
|
|
|
uint uVar6;
|
|
|
|
uint local_c;
|
|
|
|
|
|
|
|
if (param_1 != param_2) {
|
|
|
|
FUN_006b2120();
|
|
|
|
if (*(void **)(param_1 + 8) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 8));
|
|
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = *(undefined4 *)(param_2 + 0xc);
|
|
|
|
FUN_005a8440();
|
|
|
|
local_c = 0;
|
|
|
|
if (*(int *)(param_2 + 0xc) != 0) {
|
|
|
|
do {
|
|
|
|
piVar1 = *(int **)(*(int *)(param_2 + 8) + local_c * 4);
|
|
|
|
while (piVar3 = piVar1, piVar3 != (int *)0x0) {
|
|
|
|
piVar1 = (int *)piVar3[2];
|
|
|
|
iVar4 = FUN_006b1e10(piVar3);
|
|
|
|
if ((iVar4 == 0) && (piVar5 = (int *)FUN_005df0f5(0x10), piVar5 != (int *)0x0)) {
|
|
|
|
iVar4 = *piVar3;
|
|
|
|
uVar2 = *(uint *)(param_1 + 0xc);
|
|
|
|
*piVar5 = iVar4;
|
|
|
|
InterlockedIncrement((LONG *)(iVar4 + 4));
|
|
|
|
piVar5[1] = piVar3[1];
|
|
|
|
piVar5[2] = 0;
|
|
|
|
iVar4 = *piVar3;
|
|
|
|
uVar6 = *(uint *)(iVar4 + 0x10);
|
|
|
|
if (uVar6 == 0xffffffff) {
|
|
|
|
uVar6 = FUN_004fe440();
|
|
|
|
*(uint *)(iVar4 + 0x10) = uVar6;
|
|
|
|
}
|
|
|
|
uVar6 = uVar6 % uVar2;
|
|
|
|
piVar5[3] = uVar6;
|
|
|
|
piVar5[2] = *(int *)(*(int *)(param_1 + 8) + uVar6 * 4);
|
|
|
|
*(int **)(*(int *)(param_1 + 8) + uVar6 * 4) = piVar5;
|
|
|
|
*(int *)(param_1 + 0x10) = *(int *)(param_1 + 0x10) + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
local_c = local_c + 1;
|
|
|
|
} while (local_c < *(uint *)(param_2 + 0xc));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b26b0 at 0x006B26B0 (size: 171) ---
|
|
|
|
|
|
void __fastcall FUN_006b26b0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
void *pvVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
uint local_8;
|
|
|
|
|
|
|
|
if ((*(int *)(param_1 + 8) != 0) && (local_8 = 0, *(int *)(param_1 + 0xc) != 0)) {
|
|
|
|
do {
|
|
|
|
pvVar3 = *(void **)(*(int *)(param_1 + 8) + local_8 * 4);
|
|
|
|
while (pvVar3 != (void *)0x0) {
|
|
|
|
pvVar1 = *(void **)((int)pvVar3 + 0x1c);
|
|
|
|
*(undefined4 *)((int)pvVar3 + 4) = &PTR_FUN_007e3f00;
|
|
|
|
FUN_006b1da0();
|
|
|
|
puVar2 = *(undefined4 **)((int)pvVar3 + 0x18);
|
|
|
|
LVar4 = InterlockedDecrement(puVar2 + 1);
|
|
|
|
if ((LVar4 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_005b19d0();
|
|
|
|
*(undefined4 *)((int)pvVar3 + 4) = &PTR_FUN_0079385c;
|
|
|
|
operator_delete(pvVar3);
|
|
|
|
pvVar3 = pvVar1;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 8) + local_8 * 4) = 0;
|
|
|
|
local_8 = local_8 + 1;
|
|
|
|
} while (local_8 < *(uint *)(param_1 + 0xc));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2760 at 0x006B2760 (size: 72) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b2760(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00804cf8;
|
|
|
|
FUN_006b2120();
|
|
|
|
if ((void *)param_1[2] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)param_1[2]);
|
|
|
|
param_1[2] = 0;
|
|
|
|
}
|
|
|
|
param_1[3] = 0;
|
|
|
|
*param_1 = &PTR_FUN_0079385c;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b27b0 at 0x006B27B0 (size: 28) ---
|
|
|
|
|
|
void FUN_006b27b0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b2120();
|
|
|
|
FUN_006b26b0();
|
|
|
|
FUN_006b1da0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b27d0 at 0x006B27D0 (size: 148) ---
|
|
|
|
|
|
bool __thiscall FUN_006b27d0(int param_1,undefined4 param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 unaff_EBX;
|
|
|
|
undefined4 unaff_retaddr;
|
|
|
|
|
|
|
|
if (param_3 < 0x10) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
FUN_006b2120();
|
|
|
|
FUN_006b26b0();
|
|
|
|
FUN_006b1da0();
|
|
|
|
uVar1 = *(undefined4 *)(param_1 + 8);
|
|
|
|
*(undefined4 *)(param_1 + 8) = 1;
|
|
|
|
iVar2 = (**(code **)(*(int *)(param_1 + 4) + 0x10))(param_2,param_3);
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 8) = unaff_EBX;
|
|
|
|
iVar2 = (**(code **)(*(int *)(param_1 + 0x18) + 0x10))(uVar1,unaff_retaddr);
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
iVar2 = (**(code **)(*(int *)(param_1 + 0x2c) + 0x10))(uVar1,unaff_retaddr);
|
|
|
|
return iVar2 != 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2870 at 0x006B2870 (size: 118) ---
|
|
|
|
|
|
int __thiscall FUN_006b2870(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
if (param_1 != param_2) {
|
|
|
|
FUN_006b26b0();
|
|
|
|
uVar3 = 0;
|
|
|
|
if (*(void **)(param_1 + 8) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 8));
|
|
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = *(undefined4 *)(param_2 + 0xc);
|
|
|
|
FUN_005a8440();
|
|
|
|
if (*(int *)(param_2 + 0xc) != 0) {
|
|
|
|
do {
|
|
|
|
iVar2 = *(int *)(*(int *)(param_2 + 8) + uVar3 * 4);
|
|
|
|
while (iVar2 != 0) {
|
|
|
|
iVar1 = *(int *)(iVar2 + 0x1c);
|
|
|
|
FUN_006b2510(iVar2,iVar2 + 4);
|
|
|
|
iVar2 = iVar1;
|
|
|
|
}
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < *(uint *)(param_2 + 0xc));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2a40 at 0x006B2A40 (size: 72) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b2a40(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00804d0c;
|
|
|
|
FUN_006b26b0();
|
|
|
|
if ((void *)param_1[2] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)param_1[2]);
|
|
|
|
param_1[2] = 0;
|
|
|
|
}
|
|
|
|
param_1[3] = 0;
|
|
|
|
*param_1 = &PTR_FUN_0079385c;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2a90 at 0x006B2A90 (size: 128) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006b2a90(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *lpAddend;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_00804d20;
|
|
|
|
param_1[1] = &PTR_FUN_00804cf8;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0x80;
|
|
|
|
param_1[5] = 0;
|
|
|
|
FUN_005a8440();
|
|
|
|
param_1[6] = &PTR_FUN_00804d0c;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[9] = 0x80;
|
|
|
|
param_1[10] = 0;
|
|
|
|
FUN_005a8440();
|
|
|
|
param_1[0xb] = &PTR_FUN_007e3f00;
|
|
|
|
FUN_005b1900(0);
|
|
|
|
lpAddend = (LONG *)(DAT_008ef11c + 4);
|
|
|
|
param_1[0x10] = DAT_008ef11c;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
FUN_006b1da0();
|
|
|
|
FUN_006b1da0();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2b10 at 0x006B2B10 (size: 203) ---
|
|
|
|
|
|
void __fastcall FUN_006b2b10(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_00804d20;
|
|
|
|
FUN_006b2120();
|
|
|
|
FUN_006b26b0();
|
|
|
|
FUN_006b1da0();
|
|
|
|
param_1[0xb] = &PTR_FUN_007e3f00;
|
|
|
|
FUN_006b1da0();
|
|
|
|
puVar1 = (undefined4 *)param_1[0x10];
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
FUN_005b19d0();
|
|
|
|
param_1[0xb] = &PTR_FUN_0079385c;
|
|
|
|
param_1[6] = &PTR_FUN_00804d0c;
|
|
|
|
FUN_006b26b0();
|
|
|
|
if ((void *)param_1[8] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)param_1[8]);
|
|
|
|
param_1[8] = 0;
|
|
|
|
}
|
|
|
|
param_1[9] = 0;
|
|
|
|
param_1[6] = &PTR_FUN_0079385c;
|
|
|
|
param_1[1] = &PTR_FUN_00804cf8;
|
|
|
|
FUN_006b2120();
|
|
|
|
if ((void *)param_1[3] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)param_1[3]);
|
|
|
|
param_1[3] = 0;
|
|
|
|
}
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[1] = &PTR_FUN_0079385c;
|
|
|
|
*param_1 = &PTR_FUN_0079385c;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2be0 at 0x006B2BE0 (size: 55) ---
|
|
|
|
|
|
int __thiscall FUN_006b2be0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_2 != param_1) {
|
|
|
|
FUN_006b25a0(param_2 + 4);
|
|
|
|
FUN_006b2870(param_2 + 0x18);
|
|
|
|
FUN_006b1d40(param_2 + 0x2c);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2c20 at 0x006B2C20 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006b2c20(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b2b10();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2c40 at 0x006B2C40 (size: 17) ---
|
|
|
|
|
|
void __fastcall FUN_006b2c40(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00804d34;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2cb0 at 0x006B2CB0 (size: 144) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b2cb0(int param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 4) * 4 + 4U <= param_3) {
|
|
|
|
iVar1 = *(int *)*param_2;
|
|
|
|
*param_2 = (int)((int *)*param_2 + 1);
|
|
|
|
if (iVar1 != *(int *)(param_1 + 4)) {
|
|
|
|
if (*(void **)(param_1 + 8) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 8));
|
|
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
|
|
}
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
uVar2 = thunk_FUN_005df0f5(iVar1 * 4);
|
|
|
|
*(undefined4 *)(param_1 + 8) = uVar2;
|
|
|
|
*(int *)(param_1 + 4) = iVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar3 = 0;
|
|
|
|
if (*(int *)(param_1 + 4) != 0) {
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 8) + uVar3 * 4) = *(undefined4 *)*param_2;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < *(uint *)(param_1 + 4));
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2d40 at 0x006B2D40 (size: 67) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b2d40(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00804d34;
|
|
|
|
if ((void *)param_1[2] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)param_1[2]);
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_FUN_0079385c;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2d90 at 0x006B2D90 (size: 161) ---
|
|
|
|
|
|
void __fastcall FUN_006b2d90(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(void **)(param_1 + 0x38) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x38));
|
|
|
|
*(undefined4 *)(param_1 + 0x38) = 0;
|
|
|
|
}
|
|
|
|
if (*(void **)(param_1 + 0x3c) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x3c));
|
|
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
|
|
}
|
|
|
|
if (*(void **)(param_1 + 0x40) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x40));
|
|
|
|
*(undefined4 *)(param_1 + 0x40) = 0;
|
|
|
|
}
|
|
|
|
if (*(void **)(param_1 + 0x44) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x44));
|
|
|
|
*(undefined4 *)(param_1 + 0x44) = 0;
|
|
|
|
}
|
|
|
|
if (*(void **)(param_1 + 0x48) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x48));
|
|
|
|
*(undefined4 *)(param_1 + 0x48) = 0;
|
|
|
|
}
|
|
|
|
if (*(void **)(param_1 + 0x4c) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x4c));
|
|
|
|
*(undefined4 *)(param_1 + 0x4c) = 0;
|
|
|
|
}
|
|
|
|
if (*(void **)(param_1 + 0x50) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x50));
|
|
|
|
*(undefined4 *)(param_1 + 0x50) = 0;
|
|
|
|
}
|
|
|
|
if (*(void **)(param_1 + 0x54) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x54));
|
|
|
|
*(undefined4 *)(param_1 + 0x54) = 0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2e40 at 0x006B2E40 (size: 36) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b2e40(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x5c))();
|
|
|
|
if ((param_2 < uVar1) && (param_1[0xe] != 0)) {
|
|
|
|
return *(undefined4 *)(param_1[0xe] + param_2 * 4);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2e70 at 0x006B2E70 (size: 110) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b2e70(int *param_1,uint param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x5c))();
|
|
|
|
if (uVar1 <= param_2) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (param_1[0xe] == 0) {
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0x5c))();
|
|
|
|
iVar2 = thunk_FUN_005df0f5(iVar2 << 2);
|
|
|
|
param_1[0xe] = iVar2;
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x5c))();
|
|
|
|
puVar3 = (undefined4 *)param_1[0xe];
|
|
|
|
for (uVar1 = uVar1 & 0x3fffffff; uVar1 != 0; uVar1 = uVar1 - 1) {
|
|
|
|
*puVar3 = 0;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
for (iVar2 = 0; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
|
|
*(undefined1 *)puVar3 = 0;
|
|
|
|
puVar3 = (undefined4 *)((int)puVar3 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1[0xe] + param_2 * 4) = param_3;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2ee0 at 0x006B2EE0 (size: 36) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b2ee0(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x68))();
|
|
|
|
if ((param_2 < uVar1) && (param_1[0x11] != 0)) {
|
|
|
|
return *(undefined4 *)(param_1[0x11] + param_2 * 4);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2f10 at 0x006B2F10 (size: 6) ---
|
|
|
|
|
|
undefined4 FUN_006b2f10(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
return 0x1c;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b2f20 at 0x006B2F20 (size: 605) ---
|
|
|
|
|
|
int __thiscall
|
|
|
|
FUN_006b2f20(int *param_1,int *param_2,int *param_3,int *param_4,int *param_5,int *param_6,
|
|
|
|
int *param_7,int *param_8,int *param_9)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
|
|
|
|
*param_2 = 0;
|
|
|
|
*param_3 = 0;
|
|
|
|
*param_4 = 0;
|
|
|
|
*param_5 = 0;
|
|
|
|
*param_6 = 0;
|
|
|
|
*param_7 = 0;
|
|
|
|
*param_8 = 0;
|
|
|
|
*param_9 = 0;
|
|
|
|
iVar3 = 4;
|
|
|
|
uVar4 = 0;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x5c))();
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x5c))();
|
|
|
|
if (((uVar4 < uVar2) && (param_1[0xe] != 0)) && (*(int *)(param_1[0xe] + uVar4 * 4) != 0)) {
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
*param_2 = *param_2 + 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x5c))();
|
|
|
|
} while ((int)uVar4 < iVar1);
|
|
|
|
}
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
uVar4 = 0;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x60))();
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x60))();
|
|
|
|
if (((uVar4 < uVar2) && (param_1[0xf] != 0)) && (*(int *)(param_1[0xf] + uVar4 * 4) != 0)) {
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
*param_3 = *param_3 + 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x60))();
|
|
|
|
} while ((int)uVar4 < iVar1);
|
|
|
|
}
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
uVar4 = 0;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 100))();
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 100))();
|
|
|
|
if (((uVar4 < uVar2) && (param_1[0x10] != 0)) && (*(int *)(param_1[0x10] + uVar4 * 4) != 0)) {
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
*param_4 = *param_4 + 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 100))();
|
|
|
|
} while ((int)uVar4 < iVar1);
|
|
|
|
}
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
uVar4 = 0;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x68))();
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x68))();
|
|
|
|
if (((uVar4 < uVar2) && (param_1[0x11] != 0)) && (*(int *)(param_1[0x11] + uVar4 * 4) != 0)) {
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
*param_5 = *param_5 + 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x68))();
|
|
|
|
} while ((int)uVar4 < iVar1);
|
|
|
|
}
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
uVar4 = 0;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x6c))();
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x6c))();
|
|
|
|
if (((uVar4 < uVar2) && (param_1[0x13] != 0)) && (*(int *)(param_1[0x13] + uVar4 * 4) != 0)) {
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
*param_6 = *param_6 + 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x6c))();
|
|
|
|
} while ((int)uVar4 < iVar1);
|
|
|
|
}
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
uVar4 = 0;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x70))();
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x70))();
|
|
|
|
if (((uVar4 < uVar2) && (param_1[0x14] != 0)) && (*(int *)(param_1[0x14] + uVar4 * 4) != 0)) {
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
*param_7 = *param_7 + 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x70))();
|
|
|
|
} while ((int)uVar4 < iVar1);
|
|
|
|
}
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
uVar4 = 0;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x74))();
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x74))();
|
|
|
|
if (((uVar4 < uVar2) && (param_1[0x12] != 0)) && (*(int *)(param_1[0x12] + uVar4 * 4) != 0)) {
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
*param_8 = *param_8 + 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x74))();
|
|
|
|
} while ((int)uVar4 < iVar1);
|
|
|
|
}
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
uVar4 = 0;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x78))();
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x78))();
|
|
|
|
if (((uVar4 < uVar2) && (param_1[0x15] != 0)) && (*(int *)(param_1[0x15] + uVar4 * 4) != 0)) {
|
|
|
|
iVar3 = iVar3 + 4;
|
|
|
|
*param_9 = *param_9 + 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x78))();
|
|
|
|
} while ((int)uVar4 < iVar1);
|
|
|
|
}
|
|
|
|
return iVar3;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3180 at 0x006B3180 (size: 65) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b3180(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00415460(param_2);
|
|
|
|
param_1[0xc] = &PTR_FUN_0079385c;
|
|
|
|
param_1[0xe] = 0;
|
|
|
|
param_1[0xf] = 0;
|
|
|
|
param_1[0x10] = 0;
|
|
|
|
param_1[0x11] = 0;
|
|
|
|
param_1[0x12] = 0;
|
|
|
|
param_1[0x13] = 0;
|
|
|
|
param_1[0x14] = 0;
|
|
|
|
param_1[0x15] = 0;
|
|
|
|
*param_1 = &PTR_LAB_007e93d0;
|
|
|
|
param_1[0xc] = &PTR_LAB_007e93b8;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b31d0 at 0x006B31D0 (size: 36) ---
|
|
|
|
|
|
void __fastcall FUN_006b31d0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_007e93d0;
|
|
|
|
param_1[0xc] = &PTR_LAB_007e93b8;
|
|
|
|
FUN_006b2d90();
|
|
|
|
param_1[0xc] = &PTR_FUN_0079385c;
|
|
|
|
FUN_004154b0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3200 at 0x006B3200 (size: 647) ---
|
|
|
|
|
|
uint __thiscall FUN_006b3200(int param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
uint uVar5;
|
|
|
|
undefined4 local_20;
|
|
|
|
undefined4 local_1c;
|
|
|
|
undefined4 local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
piVar1 = (int *)(param_1 + -0x30);
|
|
|
|
uVar2 = FUN_006b2f20(&local_20,&local_1c,&local_18,&local_14,&local_10,&local_c,&local_8,&local_4)
|
|
|
|
;
|
|
|
|
if (uVar2 <= param_3) {
|
|
|
|
*(undefined4 *)*param_2 = local_20;
|
|
|
|
iVar3 = *param_2;
|
|
|
|
*param_2 = iVar3 + 4;
|
|
|
|
*(undefined4 *)(iVar3 + 4) = local_1c;
|
|
|
|
iVar3 = *param_2;
|
|
|
|
*param_2 = iVar3 + 4;
|
|
|
|
*(undefined4 *)(iVar3 + 4) = local_18;
|
|
|
|
iVar3 = *param_2;
|
|
|
|
*param_2 = iVar3 + 4;
|
|
|
|
*(undefined4 *)(iVar3 + 4) = local_14;
|
|
|
|
iVar3 = *param_2;
|
|
|
|
*param_2 = iVar3 + 4;
|
|
|
|
*(undefined4 *)(iVar3 + 4) = local_10;
|
|
|
|
iVar3 = *param_2;
|
|
|
|
*param_2 = iVar3 + 4;
|
|
|
|
*(undefined4 *)(iVar3 + 4) = local_c;
|
|
|
|
iVar3 = *param_2;
|
|
|
|
*param_2 = iVar3 + 4;
|
|
|
|
*(undefined4 *)(iVar3 + 4) = local_8;
|
|
|
|
iVar3 = *param_2;
|
|
|
|
*param_2 = iVar3 + 4;
|
|
|
|
*(undefined4 *)(iVar3 + 4) = local_4;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
uVar5 = 0;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x5c))();
|
|
|
|
if (0 < iVar3) {
|
|
|
|
do {
|
|
|
|
uVar4 = (**(code **)(*piVar1 + 0x5c))();
|
|
|
|
if (((uVar5 < uVar4) && (*(int *)(param_1 + 8) != 0)) &&
|
|
|
|
(*(int *)(*(int *)(param_1 + 8) + uVar5 * 4) != 0)) {
|
|
|
|
*(uint *)*param_2 = uVar5;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x5c))();
|
|
|
|
} while ((int)uVar5 < iVar3);
|
|
|
|
}
|
|
|
|
uVar5 = 0;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x60))();
|
|
|
|
if (0 < iVar3) {
|
|
|
|
do {
|
|
|
|
uVar4 = (**(code **)(*piVar1 + 0x60))();
|
|
|
|
if (((uVar5 < uVar4) && (*(int *)(param_1 + 0xc) != 0)) &&
|
|
|
|
(*(int *)(*(int *)(param_1 + 0xc) + uVar5 * 4) != 0)) {
|
|
|
|
*(uint *)*param_2 = uVar5;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x60))();
|
|
|
|
} while ((int)uVar5 < iVar3);
|
|
|
|
}
|
|
|
|
uVar5 = 0;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 100))();
|
|
|
|
if (0 < iVar3) {
|
|
|
|
do {
|
|
|
|
uVar4 = (**(code **)(*piVar1 + 100))();
|
|
|
|
if (((uVar5 < uVar4) && (*(int *)(param_1 + 0x10) != 0)) &&
|
|
|
|
(*(int *)(*(int *)(param_1 + 0x10) + uVar5 * 4) != 0)) {
|
|
|
|
*(uint *)*param_2 = uVar5;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 100))();
|
|
|
|
} while ((int)uVar5 < iVar3);
|
|
|
|
}
|
|
|
|
uVar5 = 0;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x68))();
|
|
|
|
if (0 < iVar3) {
|
|
|
|
do {
|
|
|
|
uVar4 = (**(code **)(*piVar1 + 0x68))();
|
|
|
|
if (((uVar5 < uVar4) && (*(int *)(param_1 + 0x14) != 0)) &&
|
|
|
|
(*(int *)(*(int *)(param_1 + 0x14) + uVar5 * 4) != 0)) {
|
|
|
|
*(uint *)*param_2 = uVar5;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x68))();
|
|
|
|
} while ((int)uVar5 < iVar3);
|
|
|
|
}
|
|
|
|
uVar5 = 0;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x6c))();
|
|
|
|
if (0 < iVar3) {
|
|
|
|
do {
|
|
|
|
uVar4 = (**(code **)(*piVar1 + 0x6c))();
|
|
|
|
if (((uVar5 < uVar4) && (*(int *)(param_1 + 0x1c) != 0)) &&
|
|
|
|
(*(int *)(*(int *)(param_1 + 0x1c) + uVar5 * 4) != 0)) {
|
|
|
|
*(uint *)*param_2 = uVar5;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x6c))();
|
|
|
|
} while ((int)uVar5 < iVar3);
|
|
|
|
}
|
|
|
|
uVar5 = 0;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x70))();
|
|
|
|
if (0 < iVar3) {
|
|
|
|
do {
|
|
|
|
uVar4 = (**(code **)(*piVar1 + 0x70))();
|
|
|
|
if (((uVar5 < uVar4) && (*(int *)(param_1 + 0x20) != 0)) &&
|
|
|
|
(*(int *)(*(int *)(param_1 + 0x20) + uVar5 * 4) != 0)) {
|
|
|
|
*(uint *)*param_2 = uVar5;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x70))();
|
|
|
|
} while ((int)uVar5 < iVar3);
|
|
|
|
}
|
|
|
|
uVar5 = 0;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x74))();
|
|
|
|
if (0 < iVar3) {
|
|
|
|
do {
|
|
|
|
uVar4 = (**(code **)(*piVar1 + 0x74))();
|
|
|
|
if (((uVar5 < uVar4) && (*(int *)(param_1 + 0x18) != 0)) &&
|
|
|
|
(*(int *)(*(int *)(param_1 + 0x18) + uVar5 * 4) != 0)) {
|
|
|
|
*(uint *)*param_2 = uVar5;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x74))();
|
|
|
|
} while ((int)uVar5 < iVar3);
|
|
|
|
}
|
|
|
|
uVar5 = 0;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x78))();
|
|
|
|
if (0 < iVar3) {
|
|
|
|
do {
|
|
|
|
uVar4 = (**(code **)(*piVar1 + 0x78))();
|
|
|
|
if (((uVar5 < uVar4) && (*(int *)(param_1 + 0x24) != 0)) &&
|
|
|
|
(*(int *)(*(int *)(param_1 + 0x24) + uVar5 * 4) != 0)) {
|
|
|
|
*(uint *)*param_2 = uVar5;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x78))();
|
|
|
|
} while ((int)uVar5 < iVar3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3490 at 0x006B3490 (size: 967) ---
|
|
|
|
|
|
bool __thiscall FUN_006b3490(int param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
int iVar6;
|
|
|
|
int iVar7;
|
|
|
|
int iVar8;
|
|
|
|
int iVar9;
|
|
|
|
int iVar10;
|
|
|
|
undefined4 uVar11;
|
|
|
|
uint uVar12;
|
|
|
|
int *piVar13;
|
|
|
|
uint uVar14;
|
|
|
|
int iVar15;
|
|
|
|
undefined4 *puVar16;
|
|
|
|
|
|
|
|
piVar13 = param_2;
|
|
|
|
if (param_3 < 0x1c) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
iVar2 = *param_2;
|
|
|
|
piVar1 = (int *)(param_1 + -0x30);
|
|
|
|
(**(code **)(*(int *)(param_1 + -0x30) + 0x58))();
|
|
|
|
piVar3 = (int *)*param_2;
|
|
|
|
iVar15 = *piVar3;
|
|
|
|
*param_2 = (int)(piVar3 + 1);
|
|
|
|
iVar4 = piVar3[1];
|
|
|
|
*param_2 = (int)(piVar3 + 2);
|
|
|
|
iVar5 = piVar3[2];
|
|
|
|
*param_2 = (int)(piVar3 + 3);
|
|
|
|
iVar6 = piVar3[3];
|
|
|
|
*param_2 = (int)(piVar3 + 4);
|
|
|
|
iVar7 = piVar3[4];
|
|
|
|
*param_2 = (int)(piVar3 + 5);
|
|
|
|
iVar8 = piVar3[5];
|
|
|
|
*param_2 = (int)(piVar3 + 6);
|
|
|
|
iVar9 = piVar3[6];
|
|
|
|
*param_2 = (int)(piVar3 + 7);
|
|
|
|
iVar10 = piVar3[7];
|
|
|
|
*param_2 = (int)(piVar3 + 8);
|
|
|
|
param_2 = (int *)iVar15;
|
|
|
|
if (0 < iVar15) {
|
|
|
|
do {
|
|
|
|
uVar11 = *(undefined4 *)*piVar13;
|
|
|
|
*piVar13 = (int)((undefined4 *)*piVar13 + 1);
|
|
|
|
FUN_006b2e70(uVar11,1);
|
|
|
|
param_2 = (int *)((int)param_2 + -1);
|
|
|
|
} while (param_2 != (int *)0x0);
|
|
|
|
}
|
|
|
|
param_2 = (int *)iVar4;
|
|
|
|
if (0 < iVar4) {
|
|
|
|
do {
|
|
|
|
uVar12 = *(uint *)*piVar13;
|
|
|
|
*piVar13 = (int)((uint *)*piVar13 + 1);
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x60))();
|
|
|
|
if (uVar12 < uVar14) {
|
|
|
|
if (*(int *)(param_1 + 0xc) == 0) {
|
|
|
|
iVar15 = (**(code **)(*piVar1 + 0x60))();
|
|
|
|
iVar15 = thunk_FUN_005df0f5(iVar15 << 2);
|
|
|
|
*(int *)(param_1 + 0xc) = iVar15;
|
|
|
|
if (iVar15 == 0) goto LAB_006b3596;
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x60))();
|
|
|
|
puVar16 = *(undefined4 **)(param_1 + 0xc);
|
|
|
|
for (uVar14 = uVar14 & 0x3fffffff; uVar14 != 0; uVar14 = uVar14 - 1) {
|
|
|
|
*puVar16 = 0;
|
|
|
|
puVar16 = puVar16 + 1;
|
|
|
|
}
|
|
|
|
for (iVar15 = 0; iVar15 != 0; iVar15 = iVar15 + -1) {
|
|
|
|
*(undefined1 *)puVar16 = 0;
|
|
|
|
puVar16 = (undefined4 *)((int)puVar16 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xc) + uVar12 * 4) = 1;
|
|
|
|
}
|
|
|
|
LAB_006b3596:
|
|
|
|
param_2 = (int *)((int)param_2 + -1);
|
|
|
|
} while (param_2 != (int *)0x0);
|
|
|
|
}
|
|
|
|
param_2 = (int *)iVar5;
|
|
|
|
if (0 < iVar5) {
|
|
|
|
do {
|
|
|
|
uVar12 = *(uint *)*piVar13;
|
|
|
|
*piVar13 = (int)((uint *)*piVar13 + 1);
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 100))();
|
|
|
|
if (uVar12 < uVar14) {
|
|
|
|
if (*(int *)(param_1 + 0x10) == 0) {
|
|
|
|
iVar15 = (**(code **)(*piVar1 + 100))();
|
|
|
|
iVar15 = thunk_FUN_005df0f5(iVar15 << 2);
|
|
|
|
*(int *)(param_1 + 0x10) = iVar15;
|
|
|
|
if (iVar15 == 0) goto LAB_006b3606;
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 100))();
|
|
|
|
puVar16 = *(undefined4 **)(param_1 + 0x10);
|
|
|
|
for (uVar14 = uVar14 & 0x3fffffff; uVar14 != 0; uVar14 = uVar14 - 1) {
|
|
|
|
*puVar16 = 0;
|
|
|
|
puVar16 = puVar16 + 1;
|
|
|
|
}
|
|
|
|
for (iVar15 = 0; iVar15 != 0; iVar15 = iVar15 + -1) {
|
|
|
|
*(undefined1 *)puVar16 = 0;
|
|
|
|
puVar16 = (undefined4 *)((int)puVar16 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x10) + uVar12 * 4) = 1;
|
|
|
|
}
|
|
|
|
LAB_006b3606:
|
|
|
|
param_2 = (int *)((int)param_2 + -1);
|
|
|
|
} while (param_2 != (int *)0x0);
|
|
|
|
}
|
|
|
|
param_2 = (int *)iVar6;
|
|
|
|
if (0 < iVar6) {
|
|
|
|
do {
|
|
|
|
uVar12 = *(uint *)*piVar13;
|
|
|
|
*piVar13 = (int)((uint *)*piVar13 + 1);
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x68))();
|
|
|
|
if (uVar12 < uVar14) {
|
|
|
|
if (*(int *)(param_1 + 0x14) == 0) {
|
|
|
|
iVar15 = (**(code **)(*piVar1 + 0x68))();
|
|
|
|
iVar15 = thunk_FUN_005df0f5(iVar15 << 2);
|
|
|
|
*(int *)(param_1 + 0x14) = iVar15;
|
|
|
|
if (iVar15 == 0) goto LAB_006b3676;
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x68))();
|
|
|
|
puVar16 = *(undefined4 **)(param_1 + 0x14);
|
|
|
|
for (uVar14 = uVar14 & 0x3fffffff; uVar14 != 0; uVar14 = uVar14 - 1) {
|
|
|
|
*puVar16 = 0;
|
|
|
|
puVar16 = puVar16 + 1;
|
|
|
|
}
|
|
|
|
for (iVar15 = 0; iVar15 != 0; iVar15 = iVar15 + -1) {
|
|
|
|
*(undefined1 *)puVar16 = 0;
|
|
|
|
puVar16 = (undefined4 *)((int)puVar16 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x14) + uVar12 * 4) = 1;
|
|
|
|
}
|
|
|
|
LAB_006b3676:
|
|
|
|
param_2 = (int *)((int)param_2 + -1);
|
|
|
|
} while (param_2 != (int *)0x0);
|
|
|
|
}
|
|
|
|
param_2 = (int *)iVar7;
|
|
|
|
if (0 < iVar7) {
|
|
|
|
do {
|
|
|
|
uVar12 = *(uint *)*piVar13;
|
|
|
|
*piVar13 = (int)((uint *)*piVar13 + 1);
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x6c))();
|
|
|
|
if (uVar12 < uVar14) {
|
|
|
|
if (*(int *)(param_1 + 0x1c) == 0) {
|
|
|
|
iVar15 = (**(code **)(*piVar1 + 0x6c))();
|
|
|
|
iVar15 = thunk_FUN_005df0f5(iVar15 << 2);
|
|
|
|
*(int *)(param_1 + 0x1c) = iVar15;
|
|
|
|
if (iVar15 == 0) goto LAB_006b36e6;
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x6c))();
|
|
|
|
puVar16 = *(undefined4 **)(param_1 + 0x1c);
|
|
|
|
for (uVar14 = uVar14 & 0x3fffffff; uVar14 != 0; uVar14 = uVar14 - 1) {
|
|
|
|
*puVar16 = 0;
|
|
|
|
puVar16 = puVar16 + 1;
|
|
|
|
}
|
|
|
|
for (iVar15 = 0; iVar15 != 0; iVar15 = iVar15 + -1) {
|
|
|
|
*(undefined1 *)puVar16 = 0;
|
|
|
|
puVar16 = (undefined4 *)((int)puVar16 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x1c) + uVar12 * 4) = 1;
|
|
|
|
}
|
|
|
|
LAB_006b36e6:
|
|
|
|
param_2 = (int *)((int)param_2 + -1);
|
|
|
|
} while (param_2 != (int *)0x0);
|
|
|
|
}
|
|
|
|
param_2 = (int *)iVar8;
|
|
|
|
if (0 < iVar8) {
|
|
|
|
do {
|
|
|
|
uVar12 = *(uint *)*piVar13;
|
|
|
|
*piVar13 = (int)((uint *)*piVar13 + 1);
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x70))();
|
|
|
|
if (uVar12 < uVar14) {
|
|
|
|
if (*(int *)(param_1 + 0x20) == 0) {
|
|
|
|
iVar15 = (**(code **)(*piVar1 + 0x70))();
|
|
|
|
iVar15 = thunk_FUN_005df0f5(iVar15 << 2);
|
|
|
|
*(int *)(param_1 + 0x20) = iVar15;
|
|
|
|
if (iVar15 == 0) goto LAB_006b3756;
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x70))();
|
|
|
|
puVar16 = *(undefined4 **)(param_1 + 0x20);
|
|
|
|
for (uVar14 = uVar14 & 0x3fffffff; uVar14 != 0; uVar14 = uVar14 - 1) {
|
|
|
|
*puVar16 = 0;
|
|
|
|
puVar16 = puVar16 + 1;
|
|
|
|
}
|
|
|
|
for (iVar15 = 0; iVar15 != 0; iVar15 = iVar15 + -1) {
|
|
|
|
*(undefined1 *)puVar16 = 0;
|
|
|
|
puVar16 = (undefined4 *)((int)puVar16 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x20) + uVar12 * 4) = 1;
|
|
|
|
}
|
|
|
|
LAB_006b3756:
|
|
|
|
param_2 = (int *)((int)param_2 + -1);
|
|
|
|
} while (param_2 != (int *)0x0);
|
|
|
|
}
|
|
|
|
param_2 = (int *)iVar9;
|
|
|
|
if (0 < iVar9) {
|
|
|
|
do {
|
|
|
|
uVar12 = *(uint *)*piVar13;
|
|
|
|
*piVar13 = (int)((uint *)*piVar13 + 1);
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x74))();
|
|
|
|
if (uVar12 < uVar14) {
|
|
|
|
if (*(int *)(param_1 + 0x18) == 0) {
|
|
|
|
iVar15 = (**(code **)(*piVar1 + 0x74))();
|
|
|
|
iVar15 = thunk_FUN_005df0f5(iVar15 << 2);
|
|
|
|
*(int *)(param_1 + 0x18) = iVar15;
|
|
|
|
if (iVar15 == 0) goto LAB_006b37c6;
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x74))();
|
|
|
|
puVar16 = *(undefined4 **)(param_1 + 0x18);
|
|
|
|
for (uVar14 = uVar14 & 0x3fffffff; uVar14 != 0; uVar14 = uVar14 - 1) {
|
|
|
|
*puVar16 = 0;
|
|
|
|
puVar16 = puVar16 + 1;
|
|
|
|
}
|
|
|
|
for (iVar15 = 0; iVar15 != 0; iVar15 = iVar15 + -1) {
|
|
|
|
*(undefined1 *)puVar16 = 0;
|
|
|
|
puVar16 = (undefined4 *)((int)puVar16 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x18) + uVar12 * 4) = 1;
|
|
|
|
}
|
|
|
|
LAB_006b37c6:
|
|
|
|
param_2 = (int *)((int)param_2 + -1);
|
|
|
|
} while (param_2 != (int *)0x0);
|
|
|
|
}
|
|
|
|
param_2 = (int *)iVar10;
|
|
|
|
if (0 < iVar10) {
|
|
|
|
do {
|
|
|
|
uVar12 = *(uint *)*piVar13;
|
|
|
|
*piVar13 = (int)((uint *)*piVar13 + 1);
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x78))();
|
|
|
|
if (uVar12 < uVar14) {
|
|
|
|
if (*(int *)(param_1 + 0x24) == 0) {
|
|
|
|
iVar15 = (**(code **)(*piVar1 + 0x78))();
|
|
|
|
iVar15 = thunk_FUN_005df0f5(iVar15 << 2);
|
|
|
|
*(int *)(param_1 + 0x24) = iVar15;
|
|
|
|
if (iVar15 == 0) goto LAB_006b3836;
|
|
|
|
uVar14 = (**(code **)(*piVar1 + 0x78))();
|
|
|
|
puVar16 = *(undefined4 **)(param_1 + 0x24);
|
|
|
|
for (uVar14 = uVar14 & 0x3fffffff; uVar14 != 0; uVar14 = uVar14 - 1) {
|
|
|
|
*puVar16 = 0;
|
|
|
|
puVar16 = puVar16 + 1;
|
|
|
|
}
|
|
|
|
for (iVar15 = 0; iVar15 != 0; iVar15 = iVar15 + -1) {
|
|
|
|
*(undefined1 *)puVar16 = 0;
|
|
|
|
puVar16 = (undefined4 *)((int)puVar16 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x24) + uVar12 * 4) = 1;
|
|
|
|
}
|
|
|
|
LAB_006b3836:
|
|
|
|
param_2 = (int *)((int)param_2 + -1);
|
|
|
|
} while (param_2 != (int *)0x0);
|
|
|
|
}
|
|
|
|
return (uint)(*piVar13 - iVar2) <= param_3;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3860 at 0x006B3860 (size: 63) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b3860(int param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
byte bVar1;
|
|
|
|
uint uVar2;
|
|
|
|
bool bVar3;
|
|
|
|
|
|
|
|
bVar1 = *(byte *)(param_1 + 0x7c);
|
|
|
|
uVar2 = (int)((uint)param_2 - (uint)bVar1) >> 0x1f;
|
|
|
|
if ((int)(((uint)param_2 - (uint)bVar1 ^ uVar2) - uVar2) < 0x80) {
|
|
|
|
bVar3 = param_2 < bVar1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
bVar3 = bVar1 < param_2;
|
|
|
|
}
|
|
|
|
if (bVar3) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*(byte *)(param_1 + 0x7c) = param_2;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3920 at 0x006B3920 (size: 93) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b3920(int param_1,uint *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
puVar1 = (undefined1 *)*param_2;
|
|
|
|
*(undefined1 *)(param_1 + 0x7c) = *puVar1;
|
|
|
|
uVar2 = *param_2;
|
|
|
|
*param_2 = uVar2 + 1;
|
|
|
|
uVar2 = (uVar2 + 1) - (int)puVar1;
|
|
|
|
if (uVar2 < param_3) {
|
|
|
|
iVar3 = param_3 - uVar2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar3 = 0;
|
|
|
|
}
|
|
|
|
(**(code **)(*(int *)(param_1 + 0x78) + 0x10))(param_2,iVar3);
|
|
|
|
uVar2 = *param_2 & 0x80000003;
|
|
|
|
if ((int)uVar2 < 0) {
|
|
|
|
uVar2 = (uVar2 - 1 | 0xfffffffc) + 1;
|
|
|
|
}
|
|
|
|
if (uVar2 != 0) {
|
|
|
|
for (iVar3 = 4 - uVar2; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*(undefined1 *)*param_2 = 0;
|
|
|
|
*param_2 = *param_2 + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3980 at 0x006B3980 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b3980(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00804d48;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b39c0 at 0x006B39C0 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b39c0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00804d4c;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[1] = &PTR_FUN_00804d48;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3a20 at 0x006B3A20 (size: 46) ---
|
|
|
|
|
|
undefined * __fastcall FUN_006b3a20(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined *puVar2;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (undefined *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&stack0x00000004,param_1,0);
|
|
|
|
if (puVar2 == puVar1) {
|
|
|
|
puVar2 = puVar2 + -4;
|
|
|
|
}
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3a50 at 0x006B3A50 (size: 53) ---
|
|
|
|
|
|
undefined4 FUN_006b3a50(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_1,param_1,0);
|
|
|
|
if (puVar2 == (undefined4 *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
return *puVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3aa0 at 0x006B3AA0 (size: 96) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b3aa0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[0x1d] = &PTR_LAB_00804d50;
|
|
|
|
param_1[0x1d] = &PTR_FUN_0079385c;
|
|
|
|
*param_1 = &PTR_FUN_00804d4c;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[1] = &PTR_FUN_00804d48;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3b00 at 0x006B3B00 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b3b00(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00804d48;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3b90 at 0x006B3B90 (size: 89) ---
|
|
|
|
|
|
void __fastcall FUN_006b3b90(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00804d68;
|
|
|
|
param_1[0x1e] = &PTR_LAB_00804d50;
|
|
|
|
param_1[0x1e] = &PTR_FUN_0079385c;
|
|
|
|
param_1[1] = &PTR_FUN_00804d4c;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[2] = &PTR_FUN_00804d48;
|
|
|
|
if ((undefined4 *)param_1[0x1a] != param_1 + 3) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x1a]);
|
|
|
|
}
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
*param_1 = &PTR_FUN_0079385c;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3bf0 at 0x006B3BF0 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006b3bf0(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b3b90();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3c10 at 0x006B3C10 (size: 55) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006b3c10(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00804d68;
|
|
|
|
param_1[1] = &PTR_FUN_00804d4c;
|
|
|
|
FUN_006b3b00(0x17);
|
|
|
|
param_1[0x1e] = &PTR_FUN_007cab80;
|
|
|
|
param_1[1] = &PTR_FUN_00804d7c;
|
|
|
|
param_1[0x1e] = &PTR_LAB_00804d50;
|
|
|
|
*(undefined1 *)(param_1 + 0x1f) = 0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3c50 at 0x006B3C50 (size: 88) ---
|
|
|
|
|
|
undefined4 FUN_006b3c50(undefined4 *param_1,undefined1 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *param_1;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
*(undefined1 *)(puVar2 + 2) = *param_2;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_0042bd40(puVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3cb0 at 0x006B3CB0 (size: 148) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_006b3cb0(int param_1,uint param_2,byte param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
byte bVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined1 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
bool bVar5;
|
|
|
|
|
|
|
|
puVar2 = *(uint **)(*(int *)(param_1 + 0x68) + (param_2 % *(uint *)(param_1 + 0x70)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar2 == (uint *)0x0) {
|
|
|
|
LAB_006b3cdb:
|
|
|
|
uVar3 = FUN_006b3c50(¶m_2,¶m_3);
|
|
|
|
return uVar3;
|
|
|
|
}
|
|
|
|
if (*puVar2 == param_2) {
|
|
|
|
if ((puVar2 != (uint *)0x0) && (puVar2 = puVar2 + 2, puVar2 != (uint *)0x0)) {
|
|
|
|
bVar1 = (byte)*puVar2;
|
|
|
|
uVar4 = (int)((uint)param_3 - (uint)bVar1) >> 0x1f;
|
|
|
|
if ((int)(((uint)param_3 - (uint)bVar1 ^ uVar4) - uVar4) < 0x80) {
|
|
|
|
bVar5 = param_3 < bVar1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
bVar5 = bVar1 < param_3;
|
|
|
|
}
|
|
|
|
if (bVar5) {
|
|
|
|
DAT_008fb76c = DAT_008fb76c + 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*(byte *)puVar2 = param_3;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
goto LAB_006b3cdb;
|
|
|
|
}
|
|
|
|
puVar2 = (uint *)puVar2[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3f40 at 0x006B3F40 (size: 25) ---
|
|
|
|
|
|
void __thiscall FUN_006b3f40(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = *param_2;
|
|
|
|
param_1[1] = param_2[1];
|
|
|
|
param_1[2] = param_2[2];
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3f60 at 0x006B3F60 (size: 17) ---
|
|
|
|
|
|
void __thiscall FUN_006b3f60(undefined4 param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_2 = param_1;
|
|
|
|
param_2[1] = 0;
|
|
|
|
param_2[2] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b3f80 at 0x006B3F80 (size: 131) ---
|
|
|
|
|
|
undefined4 FUN_006b3f80(int param_1,undefined1 *param_2,int *param_3,int *param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 *puVar1;
|
|
|
|
|
|
|
|
if (param_1 != 0) {
|
|
|
|
if (param_1 != 1) {
|
|
|
|
if (param_1 != 2) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
puVar1 = (undefined1 *)*param_3;
|
|
|
|
if (*param_4 != 0) {
|
|
|
|
*param_2 = *puVar1;
|
|
|
|
*param_3 = *param_3 + 1;
|
|
|
|
*param_4 = (int)(puVar1 + (*param_4 - *param_3));
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
*param_4 = *param_4;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*param_4 != 0) {
|
|
|
|
*(undefined1 *)*param_3 = *param_2;
|
|
|
|
*param_3 = *param_3 + 1;
|
|
|
|
*param_4 = *param_4 + -1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_4 = *param_4 + -1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4010 at 0x006B4010 (size: 42) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b4010(int param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (7 < param_3) {
|
|
|
|
*(undefined4 *)*param_2 = 0xf7b1;
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
*(undefined4 *)(iVar1 + 4) = *(undefined4 *)(param_1 + 4);
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
return 8;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b40b0 at 0x006B40B0 (size: 39) ---
|
|
|
|
|
|
void __fastcall FUN_006b40b0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_1[0xc] != 0) {
|
|
|
|
param_1[0xd] = 1;
|
|
|
|
(**(code **)(*param_1 + 0xcc))(0,0);
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b40d2. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x50))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b40e0 at 0x006B40E0 (size: 28) ---
|
|
|
|
|
|
void FUN_006b40e0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b59b0();
|
|
|
|
FUN_006b59b0();
|
|
|
|
FUN_006b59b0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4130 at 0x006B4130 (size: 81) ---
|
|
|
|
|
|
void __fastcall FUN_006b4130(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b5a10();
|
|
|
|
FUN_006b5a10();
|
|
|
|
FUN_006b5a10();
|
|
|
|
(**(code **)(*param_1 + 0x20))(0);
|
|
|
|
param_1[0xf] = 0;
|
|
|
|
(**(code **)(*param_1 + 0x50))();
|
|
|
|
if ((param_1[0xc] != 0) && (param_1[0xd] == 0)) {
|
|
|
|
(**(code **)(*param_1 + 0x1c))();
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b417c. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x4c))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4190 at 0x006B4190 (size: 57) ---
|
|
|
|
|
|
void __fastcall FUN_006b4190(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
(**(code **)(*param_1 + 0x28))();
|
|
|
|
(**(code **)(*param_1 + 0x20))(0);
|
|
|
|
param_1[0xf] = 0;
|
|
|
|
if (((param_1[0xc] != 0) && (param_1[2] != 0)) && (param_1[0xd] == 0)) {
|
|
|
|
(**(code **)(*param_1 + 0x1c))();
|
|
|
|
(**(code **)(*param_1 + 0x4c))();
|
|
|
|
}
|
|
|
|
param_1[0x11] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b41f0 at 0x006B41F0 (size: 23) ---
|
|
|
|
|
|
void __fastcall FUN_006b41f0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
(**(code **)(*param_1 + 0xcc))(0,1);
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b4204. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x4c))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4210 at 0x006B4210 (size: 85) ---
|
|
|
|
|
|
void __fastcall FUN_006b4210(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if ((param_1[0xd] != 0) && (param_1[0xc] != 0)) {
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x78))();
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
param_1[0xd] = 0;
|
|
|
|
if (param_1[2] != 0) {
|
|
|
|
*(undefined4 *)(param_1[2] + 0xcc) = 1;
|
|
|
|
FUN_00510c50(1);
|
|
|
|
FUN_0050f610();
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x20))(param_1[0xe]);
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b4260. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x1c))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b42b0 at 0x006B42B0 (size: 146) ---
|
|
|
|
|
|
void __thiscall FUN_006b42b0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
|
|
|
|
if ((param_1[1] != 0) && (param_1[2] != 0)) {
|
|
|
|
param_1[0xe] = (uint)(param_2 != 0);
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x3c))();
|
|
|
|
uVar2 = (uint)((param_1[0xe] == 0) != (iVar1 == 0));
|
|
|
|
if (param_1[0xc] != 0) {
|
|
|
|
uVar3 = 1;
|
|
|
|
FUN_00512b90(uVar2,1);
|
|
|
|
FUN_00529780(uVar2,uVar3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (uVar2 != 0) {
|
|
|
|
(**(code **)(*param_1 + 0xe8))(0x85000001,0x3f800000);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0xec))(0x85000001,0);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4350 at 0x006B4350 (size: 32) ---
|
|
|
|
|
|
void __fastcall FUN_006b4350(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int unaff_retaddr;
|
|
|
|
|
|
|
|
(**(code **)(*param_1 + 0x30))(param_1 + 6);
|
|
|
|
param_1[0xf] = unaff_retaddr;
|
|
|
|
(**(code **)(*param_1 + 0x1c))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4370 at 0x006B4370 (size: 222) ---
|
|
|
|
|
|
void __fastcall FUN_006b4370(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
|
|
|
|
if (param_1[2] == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (param_1[0x12] == 0) {
|
|
|
|
iVar1 = FUN_006b5980();
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
(**(code **)(*param_1 + 0x2c))(param_1 + 3);
|
|
|
|
goto LAB_006b43d0;
|
|
|
|
}
|
|
|
|
if (param_1[0x10] != 0) goto LAB_006b43d0;
|
|
|
|
uVar4 = 0;
|
|
|
|
uVar3 = 0;
|
|
|
|
iVar1 = 0x3f800000;
|
|
|
|
uVar2 = 0x41000003;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = param_1[0x15];
|
|
|
|
uVar4 = 1;
|
|
|
|
uVar3 = 1;
|
|
|
|
uVar2 = 0x45000005;
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0xa0))(uVar2,1,iVar1,uVar3,uVar4);
|
|
|
|
LAB_006b43d0:
|
|
|
|
iVar1 = FUN_006b5980();
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
(**(code **)(*param_1 + 0xa0))(0x6500000f,0,0x3f800000,0,0);
|
|
|
|
(**(code **)(*param_1 + 0xa0))(0x6500000d,0,0x3f800000,0,0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
(**(code **)(*param_1 + 0x2c))(param_1 + 6);
|
|
|
|
}
|
|
|
|
iVar1 = FUN_006b5980();
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
(**(code **)(*param_1 + 0xa0))(0x6500000f,0,0x3f800000,0,0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x2c))(param_1 + 9);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4890 at 0x006B4890 (size: 62) ---
|
|
|
|
|
|
int __thiscall FUN_006b4890(int param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = 0;
|
|
|
|
switch(param_2) {
|
|
|
|
case 0x6500000d:
|
|
|
|
case 0x6500000e:
|
|
|
|
return param_1 + 0x18;
|
|
|
|
case 0x6500000f:
|
|
|
|
case 0x65000010:
|
|
|
|
return param_1 + 0x24;
|
|
|
|
}
|
|
|
|
if (((param_2 & 0x40000000) != 0) && ((param_2 & 0x4000000) != 0)) {
|
|
|
|
iVar1 = param_1 + 0xc;
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4960 at 0x006B4960 (size: 164) ---
|
|
|
|
|
|
undefined4 __thiscall
|
|
|
|
FUN_006b4960(int *param_1,undefined4 *param_2,undefined4 *param_3,undefined4 *param_4,
|
|
|
|
undefined4 *param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
|
|
|
|
piVar1 = (int *)(**(code **)(*param_1 + 0xc))(*param_2);
|
|
|
|
if (piVar1 == (int *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar2 = FUN_006b58a0(*param_2,*param_3,*param_4);
|
|
|
|
if (((iVar2 != 0) && (param_1[0x10] == 0)) && ((param_1[0x12] == 0 || (piVar1 != param_1 + 3)))) {
|
|
|
|
iVar2 = FUN_006b5980();
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
*param_2 = *(undefined4 *)(iVar2 + 8);
|
|
|
|
*param_3 = *(undefined4 *)(iVar2 + 0xc);
|
|
|
|
*param_2 = 1;
|
|
|
|
uVar3 = FUN_006b5990();
|
|
|
|
*param_4 = uVar3;
|
|
|
|
*param_5 = *(undefined4 *)(iVar2 + 0x10);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4a90 at 0x006B4A90 (size: 64) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006b4a90(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if ((param_1[1] != 0) && (param_1[2] != 0)) {
|
|
|
|
(**(code **)(*param_1 + 0x28))();
|
|
|
|
(**(code **)(*param_1 + 0xcc))(0,0);
|
|
|
|
FUN_00510c50(1);
|
|
|
|
(**(code **)(*param_1 + 0x4c))();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4b20 at 0x006B4B20 (size: 4) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006b4b20(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
return *(undefined4 *)(param_1 + 0x30);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4b30 at 0x006B4B30 (size: 117) ---
|
|
|
|
|
|
void __fastcall FUN_006b4b30(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0xac))();
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
(**(code **)(*param_1 + 0x58))();
|
|
|
|
}
|
|
|
|
if ((((param_1[2] != 0) && (param_1[0x11] != 0)) && (param_1[0xd] != 0)) &&
|
|
|
|
((iVar1 = FUN_0050f580(), iVar1 == 0 && (iVar1 = FUN_0050f5e0(), iVar1 == 0)))) {
|
|
|
|
iVar1 = FUN_006b5980();
|
|
|
|
if (((iVar1 == 0) &&
|
|
|
|
((iVar1 = FUN_006b5980(), iVar1 == 0 && (iVar1 = FUN_006b5980(), iVar1 == 0)))) &&
|
|
|
|
(param_1[0x12] == 0)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b4ba0. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x68))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4bc0 at 0x006B4BC0 (size: 22) ---
|
|
|
|
|
|
void __fastcall FUN_006b4bc0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
(**(code **)(*param_1 + 0x20))(param_1[0xe]);
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b4bd3. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x4c))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4ca0 at 0x006B4CA0 (size: 13) ---
|
|
|
|
|
|
void __fastcall FUN_006b4ca0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
(**(code **)(*param_1 + 0xcc))(0,1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4cb0 at 0x006B4CB0 (size: 49) ---
|
|
|
|
|
|
bool __fastcall FUN_006b4cb0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 8) != 0) {
|
|
|
|
iVar1 = FUN_005108d0();
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
iVar1 = FUN_005108d0();
|
|
|
|
return *(int *)(iVar1 + 8) == 0x40000011;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4d00 at 0x006B4D00 (size: 5) ---
|
|
|
|
|
|
undefined4 FUN_006b4d00(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4d10 at 0x006B4D10 (size: 101) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
undefined4 __thiscall FUN_006b4d10(float *param_1,float *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if ((((ABS(*param_1 - *param_2) < _DAT_00804e10 != (ABS(*param_1 - *param_2) == _DAT_00804e10)) &&
|
|
|
|
(ABS(param_1[1] - param_2[1]) < _DAT_00804e10 !=
|
|
|
|
(ABS(param_1[1] - param_2[1]) == _DAT_00804e10))) &&
|
|
|
|
(ABS(param_1[2] - param_2[2]) < _DAT_00804e10 !=
|
|
|
|
(ABS(param_1[2] - param_2[2]) == _DAT_00804e10))) &&
|
|
|
|
(ABS(param_1[3] - param_2[3]) < _DAT_00804e10)) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4d80 at 0x006B4D80 (size: 204) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006b4d80(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_00804e18;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[9] = 0;
|
|
|
|
param_1[10] = 0;
|
|
|
|
param_1[0xb] = 0;
|
|
|
|
param_1[0xc] = 2;
|
|
|
|
param_1[0xe] = 0;
|
|
|
|
param_1[0xf] = 0;
|
|
|
|
param_1[0x10] = 0;
|
|
|
|
param_1[0x12] = 0;
|
|
|
|
param_1[0x13] = 0;
|
|
|
|
param_1[0x14] = 0;
|
|
|
|
param_1[0x15] = 0x3f800000;
|
|
|
|
param_1[0xd] = 1;
|
|
|
|
param_1[0x11] = 1;
|
|
|
|
param_1[0x16] = 1;
|
|
|
|
uVar1 = DAT_008379a8;
|
|
|
|
param_1[0x19] = DAT_008379ac;
|
|
|
|
param_1[0x18] = uVar1;
|
|
|
|
param_1[0x1a] = &PTR_LAB_00797910;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0x3f800000;
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
param_1[0x1e] = 0;
|
|
|
|
param_1[0x1f] = 0;
|
|
|
|
param_1[0x29] = 0;
|
|
|
|
param_1[0x2a] = 0;
|
|
|
|
param_1[0x2b] = 0;
|
|
|
|
FUN_00535b30();
|
|
|
|
param_1[0x2c] = 0;
|
|
|
|
param_1[0x2d] = 0;
|
|
|
|
param_1[0x2f] = 0;
|
|
|
|
param_1[0x2e] = 0;
|
|
|
|
param_1[0x30] = 0;
|
|
|
|
param_1[0x31] = 0x3ff00000;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b4e50 at 0x006B4E50 (size: 43) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b4e50(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00804e18;
|
|
|
|
param_1[0x1a] = &PTR_FUN_0079385c;
|
|
|
|
FUN_00411470();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5520 at 0x006B5520 (size: 158) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
bool __fastcall FUN_006b5520(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
bool bVar2;
|
|
|
|
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x90))();
|
|
|
|
if ((((iVar1 != 0) && (param_1[0xc] == 2)) && (param_1[1] != 0)) &&
|
|
|
|
(iVar1 = param_1[2], iVar1 != 0)) {
|
|
|
|
if (*(double *)(param_1 + 0x30) + *(double *)(param_1 + 0x18) < _DAT_008379a8) {
|
|
|
|
if (param_1[0x1b] == *(int *)(iVar1 + 0x4c)) {
|
|
|
|
iVar1 = FUN_00424e90(iVar1 + 0x50);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bVar2 = true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
bVar2 = param_1[0x1b] != *(int *)(iVar1 + 0x4c);
|
|
|
|
if (!bVar2) {
|
|
|
|
iVar1 = FUN_006b4d10(iVar1 + 0x130);
|
|
|
|
return iVar1 == 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return bVar2;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b58a0 at 0x006B58A0 (size: 210) ---
|
|
|
|
|
|
bool __thiscall FUN_006b58a0(int *param_1,int param_2,undefined4 param_3,int param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
if (param_4 != 0) {
|
|
|
|
piVar3 = (int *)param_1[1];
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
piVar1 = (int *)*param_1;
|
|
|
|
if ((int *)piVar3[1] == (int *)0x0) {
|
|
|
|
iVar2 = *piVar3;
|
|
|
|
*param_1 = iVar2;
|
|
|
|
if (iVar2 == 0) goto LAB_006b58ed;
|
|
|
|
*(undefined4 *)(iVar2 + 4) = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)piVar3[1] = *piVar3;
|
|
|
|
}
|
|
|
|
if (*piVar3 != 0) {
|
|
|
|
*(int *)(*piVar3 + 4) = piVar3[1];
|
|
|
|
}
|
|
|
|
LAB_006b58ed:
|
|
|
|
*piVar3 = 0;
|
|
|
|
piVar3[1] = 0;
|
|
|
|
if ((void *)param_1[1] != (void *)0x0) {
|
|
|
|
operator_delete((void *)param_1[1]);
|
|
|
|
}
|
|
|
|
param_1[1] = 0;
|
|
|
|
return piVar3 == piVar1;
|
|
|
|
}
|
|
|
|
piVar3 = (int *)*param_1;
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
while ((piVar3[2] != param_2 || (piVar3 == (int *)param_1[1]))) {
|
|
|
|
piVar3 = (int *)*piVar3;
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
piVar1 = (int *)*param_1;
|
|
|
|
if ((int *)piVar3[1] == (int *)0x0) {
|
|
|
|
iVar2 = *piVar3;
|
|
|
|
*param_1 = iVar2;
|
|
|
|
if (iVar2 == 0) goto LAB_006b595c;
|
|
|
|
*(undefined4 *)(iVar2 + 4) = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)piVar3[1] = *piVar3;
|
|
|
|
}
|
|
|
|
if (*piVar3 != 0) {
|
|
|
|
*(int *)(*piVar3 + 4) = piVar3[1];
|
|
|
|
}
|
|
|
|
LAB_006b595c:
|
|
|
|
*piVar3 = 0;
|
|
|
|
piVar3[1] = 0;
|
|
|
|
operator_delete(piVar3);
|
|
|
|
return piVar3 == piVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5980 at 0x006B5980 (size: 3) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006b5980(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
return *param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5990 at 0x006B5990 (size: 24) ---
|
|
|
|
|
|
bool __fastcall FUN_006b5990(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
return *param_1 == param_1[1];
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b59b0 at 0x006B59B0 (size: 82) ---
|
|
|
|
|
|
void __fastcall FUN_006b59b0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
|
|
|
|
iVar1 = *param_1;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
param_1[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
piVar2 = (int *)*param_1;
|
|
|
|
if ((int *)piVar2[1] == (int *)0x0) {
|
|
|
|
iVar1 = *piVar2;
|
|
|
|
*param_1 = iVar1;
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
*(undefined4 *)(iVar1 + 4) = 0;
|
|
|
|
goto LAB_006b59da;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)piVar2[1] = *piVar2;
|
|
|
|
LAB_006b59da:
|
|
|
|
if (*piVar2 != 0) {
|
|
|
|
*(int *)(*piVar2 + 4) = piVar2[1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*piVar2 = 0;
|
|
|
|
piVar2[1] = 0;
|
|
|
|
if (piVar2 != (int *)0x0) {
|
|
|
|
operator_delete(piVar2);
|
|
|
|
}
|
|
|
|
iVar1 = *param_1;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5a10 at 0x006B5A10 (size: 160) ---
|
|
|
|
|
|
void __fastcall FUN_006b5a10(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
do {
|
|
|
|
piVar1 = (int *)*param_1;
|
|
|
|
if (piVar1 == (int *)param_1[1]) break;
|
|
|
|
if ((int *)piVar1[1] == (int *)0x0) {
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
*param_1 = iVar2;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
*(undefined4 *)(iVar2 + 4) = 0;
|
|
|
|
goto LAB_006b5a3f;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)piVar1[1] = *piVar1;
|
|
|
|
LAB_006b5a3f:
|
|
|
|
if (*piVar1 != 0) {
|
|
|
|
*(int *)(*piVar1 + 4) = piVar1[1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*piVar1 = 0;
|
|
|
|
piVar1[1] = 0;
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
operator_delete(piVar1);
|
|
|
|
}
|
|
|
|
} while (*param_1 != 0);
|
|
|
|
if ((int *)*param_1 != (int *)0x0) {
|
|
|
|
iVar2 = *(int *)*param_1;
|
|
|
|
while (iVar2 != 0) {
|
|
|
|
piVar1 = *(int **)*param_1;
|
|
|
|
if ((int *)piVar1[1] == (int *)0x0) {
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
*param_1 = iVar2;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
*(undefined4 *)(iVar2 + 4) = 0;
|
|
|
|
goto LAB_006b5a8c;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)piVar1[1] = *piVar1;
|
|
|
|
LAB_006b5a8c:
|
|
|
|
if (*piVar1 != 0) {
|
|
|
|
*(int *)(*piVar1 + 4) = piVar1[1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*piVar1 = 0;
|
|
|
|
piVar1[1] = 0;
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
operator_delete(piVar1);
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)*param_1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5ac0 at 0x006B5AC0 (size: 160) ---
|
|
|
|
|
|
void __thiscall FUN_006b5ac0(int *param_1,int param_2,int param_3,int param_4,int param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
piVar3 = (int *)FUN_005df0f5(0x14);
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
piVar3 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*piVar3 = 0;
|
|
|
|
piVar3[1] = 0;
|
|
|
|
piVar3[2] = 0;
|
|
|
|
piVar3[3] = 0x3f800000;
|
|
|
|
}
|
|
|
|
piVar3[2] = param_2;
|
|
|
|
piVar3[3] = param_3;
|
|
|
|
piVar3[4] = param_5;
|
|
|
|
if (param_4 == 0) goto LAB_006b5b48;
|
|
|
|
piVar1 = (int *)param_1[1];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
if ((int *)piVar1[1] == (int *)0x0) {
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
*param_1 = iVar2;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
*(undefined4 *)(iVar2 + 4) = 0;
|
|
|
|
goto LAB_006b5b24;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)piVar1[1] = *piVar1;
|
|
|
|
LAB_006b5b24:
|
|
|
|
if (*piVar1 != 0) {
|
|
|
|
*(int *)(*piVar1 + 4) = piVar1[1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*piVar1 = 0;
|
|
|
|
piVar1[1] = 0;
|
|
|
|
if ((void *)param_1[1] != (void *)0x0) {
|
|
|
|
operator_delete((void *)param_1[1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_1[1] = (int)piVar3;
|
|
|
|
LAB_006b5b48:
|
|
|
|
piVar3[1] = 0;
|
|
|
|
*piVar3 = *param_1;
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
*(int **)(*param_1 + 4) = piVar3;
|
|
|
|
}
|
|
|
|
*param_1 = (int)piVar3;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5b60 at 0x006B5B60 (size: 83) ---
|
|
|
|
|
|
undefined4 FUN_006b5b60(char *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
char *pcVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
|
|
|
|
pcVar2 = param_1;
|
|
|
|
do {
|
|
|
|
cVar1 = *pcVar2;
|
|
|
|
pcVar2 = pcVar2 + 1;
|
|
|
|
} while (cVar1 != '\0');
|
|
|
|
uVar4 = 0;
|
|
|
|
do {
|
|
|
|
iVar3 = _strnicmp(param_1,(&PTR_s_Invalid_00804f48)[uVar4],
|
|
|
|
(size_t)(pcVar2 + (1 - (int)(param_1 + 1))));
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
return (&DAT_008055b8)[uVar4];
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
} while (uVar4 < 0x19c);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5bc0 at 0x006B5BC0 (size: 61) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b5bc0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = param_2;
|
|
|
|
*param_1 = &PTR_FUN_008073a8;
|
|
|
|
FUN_005aedb0();
|
|
|
|
FUN_005aedb0();
|
|
|
|
param_1[0x10] = 0;
|
|
|
|
param_1[0x11] = 0;
|
|
|
|
param_1[0x12] = 0;
|
|
|
|
param_1[0xf] = &PTR_FUN_007cd7b0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5c00 at 0x006B5C00 (size: 94) ---
|
|
|
|
|
|
void __fastcall FUN_006b5c00(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_008073a8;
|
|
|
|
FUN_005aef10();
|
|
|
|
FUN_005aef10();
|
|
|
|
FUN_0055a0c0();
|
|
|
|
param_1[0xf] = &PTR_FUN_007cd7b0;
|
|
|
|
FUN_0055a0c0();
|
|
|
|
param_1[0xf] = &PTR_FUN_0079385c;
|
|
|
|
FUN_005af120();
|
|
|
|
FUN_005af120();
|
|
|
|
*param_1 = &PTR_LAB_007c78e0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5c60 at 0x006B5C60 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006b5c60(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b5c00();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5c80 at 0x006B5C80 (size: 90) ---
|
|
|
|
|
|
void __thiscall FUN_006b5c80(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
if (param_2 <= (uint)param_1[3]) {
|
|
|
|
FUN_006b5ce0(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar1 = thunk_FUN_005df0f5(param_2 * 4);
|
|
|
|
uVar2 = 0;
|
|
|
|
if (param_1[3] != 0) {
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(iVar1 + uVar2 * 4) = *(undefined4 *)(*param_1 + uVar2 * 4);
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < (uint)param_1[3]);
|
|
|
|
}
|
|
|
|
operator_delete__((void *)*param_1);
|
|
|
|
*param_1 = iVar1;
|
|
|
|
param_1[3] = param_2;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5ce0 at 0x006B5CE0 (size: 123) ---
|
|
|
|
|
|
void __thiscall FUN_006b5ce0(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
if (param_2 <= (uint)param_1[3]) {
|
|
|
|
if (param_2 == 0) {
|
|
|
|
param_1[3] = 0;
|
|
|
|
operator_delete__((void *)*param_1);
|
|
|
|
*param_1 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = thunk_FUN_005df0f5(param_2 * 4);
|
|
|
|
uVar2 = 0;
|
|
|
|
param_1[3] = param_2;
|
|
|
|
if (param_2 != 0) {
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(iVar1 + uVar2 * 4) = *(undefined4 *)(*param_1 + uVar2 * 4);
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < (uint)param_1[3]);
|
|
|
|
}
|
|
|
|
operator_delete__((void *)*param_1);
|
|
|
|
*param_1 = iVar1;
|
|
|
|
}
|
|
|
|
if (param_2 < (uint)param_1[2]) {
|
|
|
|
param_1[2] = param_2;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_006b5c80(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5d60 at 0x006B5D60 (size: 87) ---
|
|
|
|
|
|
void __thiscall FUN_006b5d60(int param_1,int param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
uVar1 = *(uint *)(param_1 + 100);
|
|
|
|
uVar2 = 0;
|
|
|
|
if (uVar1 != 0) {
|
|
|
|
piVar3 = *(int **)(param_1 + 0x68);
|
|
|
|
do {
|
|
|
|
if (param_2 == *piVar3) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (uVar2 < *(uint *)(param_1 + 100));
|
|
|
|
}
|
|
|
|
if (*(uint *)(param_1 + 0x74) <= uVar1) {
|
|
|
|
FUN_006b5c80(uVar1 + 10);
|
|
|
|
}
|
|
|
|
*(int *)(*(int *)(param_1 + 0x68) + *(int *)(param_1 + 100) * 4) = param_2;
|
|
|
|
*(int *)(param_1 + 100) = *(int *)(param_1 + 100) + 1;
|
|
|
|
if (param_3 != 1) {
|
|
|
|
*(int *)(param_1 + 0x78) = param_2;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5dc0 at 0x006B5DC0 (size: 43) ---
|
|
|
|
|
|
void __thiscall FUN_006b5dc0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 8) != 0) {
|
|
|
|
iVar1 = *(int *)(param_1 + 8) + -1;
|
|
|
|
*(int *)(param_1 + 8) = iVar1;
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xc) + param_2 * 8) =
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xc) + iVar1 * 8);
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xc) + 4 + param_2 * 8) =
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xc) + 4 + *(int *)(param_1 + 8) * 8);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5df0 at 0x006B5DF0 (size: 133) ---
|
|
|
|
|
|
void __thiscall FUN_006b5df0(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
uint uVar3;
|
|
|
|
uint *puVar4;
|
|
|
|
|
|
|
|
if ((uint)param_1[3] < param_2) {
|
|
|
|
puVar2 = (uint *)thunk_FUN_005df0f5(param_2 * 8 + 4);
|
|
|
|
if (puVar2 == (uint *)0x0) {
|
|
|
|
puVar4 = (uint *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar4 = puVar2 + 1;
|
|
|
|
*puVar2 = param_2;
|
|
|
|
FUN_00401000(puVar4,8,param_2,FUN_0050a140);
|
|
|
|
}
|
|
|
|
uVar3 = 0;
|
|
|
|
if (param_1[3] != 0) {
|
|
|
|
do {
|
|
|
|
iVar1 = *param_1;
|
|
|
|
puVar4[uVar3 * 2] = *(uint *)(iVar1 + uVar3 * 8);
|
|
|
|
puVar4[uVar3 * 2 + 1] = *(uint *)(iVar1 + 4 + uVar3 * 8);
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < (uint)param_1[3]);
|
|
|
|
}
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
operator_delete__((void *)(*param_1 + -4));
|
|
|
|
}
|
|
|
|
*param_1 = (int)puVar4;
|
|
|
|
param_1[3] = param_2;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_006b5e80(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5e80 at 0x006B5E80 (size: 170) ---
|
|
|
|
|
|
void __thiscall FUN_006b5e80(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
uint uVar3;
|
|
|
|
uint *puVar4;
|
|
|
|
|
|
|
|
if ((uint)param_1[3] < param_2) {
|
|
|
|
FUN_006b5df0(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (param_2 == 0) {
|
|
|
|
param_1[3] = 0;
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
operator_delete__((void *)(*param_1 + -4));
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar2 = (uint *)thunk_FUN_005df0f5(param_2 * 8 + 4);
|
|
|
|
if (puVar2 == (uint *)0x0) {
|
|
|
|
puVar4 = (uint *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar4 = puVar2 + 1;
|
|
|
|
*puVar2 = param_2;
|
|
|
|
FUN_00401000(puVar4,8,param_2,FUN_0050a140);
|
|
|
|
}
|
|
|
|
uVar3 = 0;
|
|
|
|
param_1[3] = param_2;
|
|
|
|
if (param_2 != 0) {
|
|
|
|
do {
|
|
|
|
iVar1 = *param_1;
|
|
|
|
puVar4[uVar3 * 2] = *(uint *)(iVar1 + uVar3 * 8);
|
|
|
|
puVar4[uVar3 * 2 + 1] = *(uint *)(iVar1 + 4 + uVar3 * 8);
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < (uint)param_1[3]);
|
|
|
|
}
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
operator_delete__((void *)(*param_1 + -4));
|
|
|
|
}
|
|
|
|
*param_1 = (int)puVar4;
|
|
|
|
}
|
|
|
|
if (param_2 < (uint)param_1[2]) {
|
|
|
|
param_1[2] = param_2;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5f30 at 0x006B5F30 (size: 85) ---
|
|
|
|
|
|
void __thiscall FUN_006b5f30(int param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
uVar1 = *(uint *)(param_1 + 8);
|
|
|
|
uVar2 = 0;
|
|
|
|
if (uVar1 != 0) {
|
|
|
|
piVar3 = *(int **)(param_1 + 0xc);
|
|
|
|
do {
|
|
|
|
if (param_2 == *piVar3) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 2;
|
|
|
|
} while (uVar2 < *(uint *)(param_1 + 8));
|
|
|
|
}
|
|
|
|
if (*(uint *)(param_1 + 0x18) <= uVar1) {
|
|
|
|
FUN_006b5df0(uVar1 + 8);
|
|
|
|
}
|
|
|
|
*(int *)(*(int *)(param_1 + 0xc) + *(int *)(param_1 + 8) * 8) = param_2;
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xc) + 4 + *(int *)(param_1 + 8) * 8) = param_3;
|
|
|
|
*(int *)(param_1 + 8) = *(int *)(param_1 + 8) + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b5f90 at 0x006B5F90 (size: 86) ---
|
|
|
|
|
|
uint * __thiscall FUN_006b5f90(uint *param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
param_1[3] = param_4;
|
|
|
|
param_1[2] = param_3;
|
|
|
|
*param_1 = param_2;
|
|
|
|
if (param_2 == 0) {
|
|
|
|
param_1[1] = 0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
uVar1 = thunk_FUN_005df0f5(param_2 * 4);
|
|
|
|
param_1[1] = uVar1;
|
|
|
|
uVar1 = 0;
|
|
|
|
if (param_2 != 0) {
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(param_1[1] + uVar1 * 4) = 0;
|
|
|
|
uVar1 = uVar1 + 1;
|
|
|
|
} while (uVar1 < param_2);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- CRect at 0x006B5FF0 (size: 32) ---
|
|
|
|
|
|
/* Library Function - Single Match
|
|
|
|
public: __thiscall CRect::CRect(int,int,int,int)
|
|
|
|
|
|
|
|
Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */
|
|
|
|
|
|
|
|
void __thiscall CRect::CRect(CRect *this,int param_1,int param_2,int param_3,int param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
*(int *)this = param_1;
|
|
|
|
*(int *)(this + 4) = param_2;
|
|
|
|
*(int *)(this + 8) = param_3;
|
|
|
|
*(int *)(this + 0xc) = param_4;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6010 at 0x006B6010 (size: 16) ---
|
|
|
|
|
|
void FUN_006b6010(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uStack00000004;
|
|
|
|
|
|
|
|
uStack00000004 = 0;
|
|
|
|
FUN_0050e270();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6020 at 0x006B6020 (size: 69) ---
|
|
|
|
|
|
void __fastcall FUN_006b6020(uint *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
if (param_1[1] != 0) {
|
|
|
|
uVar2 = 0;
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
do {
|
|
|
|
pvVar1 = *(void **)(param_1[1] + uVar2 * 4);
|
|
|
|
if (pvVar1 != (void *)0x0) {
|
|
|
|
FUN_0053c760();
|
|
|
|
operator_delete(pvVar1);
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < *param_1);
|
|
|
|
}
|
|
|
|
operator_delete__((void *)param_1[1]);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6070 at 0x006B6070 (size: 116) ---
|
|
|
|
|
|
void FUN_006b6070(uint *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int *piVar4;
|
|
|
|
int *piVar5;
|
|
|
|
|
|
|
|
piVar2 = (int *)*param_1;
|
|
|
|
piVar5 = piVar2 + param_2 + -2;
|
|
|
|
if (piVar2 <= piVar5) {
|
|
|
|
piVar4 = piVar5 + 1;
|
|
|
|
do {
|
|
|
|
iVar1 = *piVar5;
|
|
|
|
piVar3 = piVar4;
|
|
|
|
if (piVar4 <= piVar2 + param_2 + -1) {
|
|
|
|
do {
|
|
|
|
if (**(float **)(*piVar3 + 0xc) <= **(float **)(iVar1 + 0xc)) break;
|
|
|
|
piVar3[-1] = *piVar3;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (piVar3 <= (int *)(*param_1 + param_2 * 4 + -4));
|
|
|
|
}
|
|
|
|
piVar3[-1] = iVar1;
|
|
|
|
piVar2 = (int *)*param_1;
|
|
|
|
piVar5 = piVar5 + -1;
|
|
|
|
piVar4 = piVar4 + -1;
|
|
|
|
} while (piVar2 <= piVar5);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b60f0 at 0x006B60F0 (size: 71) ---
|
|
|
|
|
|
void __thiscall FUN_006b60f0(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
uVar1 = 0;
|
|
|
|
if (*(int *)(param_1 + 0x178) != 0) {
|
|
|
|
do {
|
|
|
|
FUN_0053c8c0(param_2,param_3,param_4);
|
|
|
|
uVar1 = uVar1 + 1;
|
|
|
|
} while (uVar1 < *(uint *)(param_1 + 0x178));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6140 at 0x006B6140 (size: 36) ---
|
|
|
|
|
|
void __fastcall FUN_006b6140(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00534d90(param_1);
|
|
|
|
FUN_0050ffc0(0);
|
|
|
|
*(undefined4 *)(param_1 + 0x90) = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6170 at 0x006B6170 (size: 94) ---
|
|
|
|
|
|
void __thiscall
|
|
|
|
FUN_006b6170(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5
|
|
|
|
,undefined4 param_6)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
uVar3 = 0;
|
|
|
|
if (*(int *)(param_1 + 0x178) != 0) {
|
|
|
|
do {
|
|
|
|
iVar1 = *(int *)(*(int *)(param_1 + 0x17c) + uVar3 * 4);
|
|
|
|
iVar2 = FUN_0053c990();
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
FUN_0052d1e0(*(undefined4 *)(iVar1 + 8),param_2,param_3,param_4,param_5,param_6);
|
|
|
|
}
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < *(uint *)(param_1 + 0x178));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b61e0 at 0x006B61E0 (size: 84) ---
|
|
|
|
|
|
void __thiscall FUN_006b61e0(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
uVar3 = 0;
|
|
|
|
if (*(int *)(param_1 + 0x178) != 0) {
|
|
|
|
do {
|
|
|
|
iVar1 = *(int *)(*(int *)(param_1 + 0x17c) + uVar3 * 4);
|
|
|
|
iVar2 = FUN_0053c990();
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
FUN_0052d290(*(undefined4 *)(iVar1 + 8),param_2,param_3,param_4);
|
|
|
|
}
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < *(uint *)(param_1 + 0x178));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6240 at 0x006B6240 (size: 72) ---
|
|
|
|
|
|
void __thiscall FUN_006b6240(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x10) != 0) {
|
|
|
|
*(undefined4 *)(param_2 + 0x1d4) = 1;
|
|
|
|
iVar1 = FUN_0050e3a0(param_2);
|
|
|
|
*(undefined4 *)(param_2 + 0x1d4) = 0;
|
|
|
|
if ((iVar1 != 1) && ((*(byte *)(param_2 + 4) & 1) == 0)) {
|
|
|
|
*(undefined4 *)(param_2 + 0x2ec) = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6290 at 0x006B6290 (size: 78) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006b6290(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00512ef0();
|
|
|
|
param_1[0x5e] = 0;
|
|
|
|
param_1[0x5f] = 0;
|
|
|
|
param_1[0x60] = 0;
|
|
|
|
param_1[0x61] = 0;
|
|
|
|
param_1[0x62] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00807550;
|
|
|
|
param_1[99] = 0;
|
|
|
|
param_1[0x66] = 0;
|
|
|
|
param_1[0x65] = 0;
|
|
|
|
param_1[100] = 0x80;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b62e0 at 0x006B62E0 (size: 244) ---
|
|
|
|
|
|
undefined4 * FUN_006b62e0(undefined4 param_1,int param_2,int param_3,int param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
|
|
|
|
iVar1 = FUN_005df0f5(0x1a0);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar2 = (undefined4 *)FUN_006b6290();
|
|
|
|
}
|
|
|
|
iVar1 = FUN_00510a50(0,0);
|
|
|
|
if ((iVar1 != 0) && (iVar1 = FUN_005131b0(param_1,1), iVar1 != 0)) {
|
|
|
|
puVar2[0x60] = param_4;
|
|
|
|
uVar3 = thunk_FUN_005df0f5(param_4 * 4);
|
|
|
|
puVar2[0x61] = uVar3;
|
|
|
|
uVar4 = 0;
|
|
|
|
if (puVar2[0x60] != 0) {
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(puVar2[0x61] + uVar4 * 4) = 0;
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
} while (uVar4 < (uint)puVar2[0x60]);
|
|
|
|
}
|
|
|
|
puVar2[0x5e] = param_2;
|
|
|
|
uVar3 = thunk_FUN_005df0f5(param_2 << 2);
|
|
|
|
puVar2[0x5f] = uVar3;
|
|
|
|
uVar4 = 0;
|
|
|
|
if (puVar2[0x5e] != 0) {
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(puVar2[0x5f] + uVar4 * 4) = *(undefined4 *)(param_3 + uVar4 * 4);
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
} while (uVar4 < (uint)puVar2[0x5e]);
|
|
|
|
}
|
|
|
|
iVar1 = FUN_00510ab0();
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
return (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b63f0 at 0x006B63F0 (size: 159) ---
|
|
|
|
|
|
void __fastcall FUN_006b63f0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_00807550;
|
|
|
|
if ((void *)param_1[0x5f] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)param_1[0x5f]);
|
|
|
|
param_1[0x5f] = 0;
|
|
|
|
}
|
|
|
|
param_1[0x5e] = 0;
|
|
|
|
if (param_1[0x61] != 0) {
|
|
|
|
uVar2 = 0;
|
|
|
|
if (param_1[0x60] != 0) {
|
|
|
|
do {
|
|
|
|
piVar1 = *(int **)(param_1[0x61] + uVar2 * 4);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(1);
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < (uint)param_1[0x60]);
|
|
|
|
}
|
|
|
|
operator_delete__((void *)param_1[0x61]);
|
|
|
|
param_1[0x61] = 0;
|
|
|
|
}
|
|
|
|
param_1[0x60] = 0;
|
|
|
|
param_1[0x62] = 0;
|
|
|
|
operator_delete__((void *)param_1[99]);
|
|
|
|
param_1[99] = 0;
|
|
|
|
FUN_00514830();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6490 at 0x006B6490 (size: 38) ---
|
|
|
|
|
|
void __thiscall FUN_006b6490(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00534d70(param_1);
|
|
|
|
FUN_0050ffc0(*(undefined4 *)(param_2 + 0x28));
|
|
|
|
*(int *)(param_1 + 0x90) = param_2;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b64c0 at 0x006B64C0 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006b64c0(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b63f0();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b64e0 at 0x006B64E0 (size: 215) ---
|
|
|
|
|
|
int __thiscall FUN_006b64e0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
undefined **local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
void *local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_14 = &PTR_FUN_007e5500;
|
|
|
|
local_10 = 0;
|
|
|
|
local_c = (void *)0x0;
|
|
|
|
local_8 = 0x20;
|
|
|
|
local_4 = 0;
|
|
|
|
FUN_005a8440();
|
|
|
|
uVar2 = 0;
|
|
|
|
if (*(int *)(param_1 + 0x178) != 0) {
|
|
|
|
do {
|
|
|
|
if (*(int *)(*(int *)(param_1 + 0x17c) + uVar2 * 4) != 0) {
|
|
|
|
iVar1 = FUN_0053c990();
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
iVar1 = FUN_0052e500(param_2,&local_14);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
local_14 = &PTR_FUN_007e5500;
|
|
|
|
FUN_005d59a0();
|
|
|
|
if (local_c != (void *)0x0) {
|
|
|
|
operator_delete__(local_c);
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < *(uint *)(param_1 + 0x178));
|
|
|
|
}
|
|
|
|
local_14 = &PTR_FUN_007e5500;
|
|
|
|
FUN_005d59a0();
|
|
|
|
if (local_c != (void *)0x0) {
|
|
|
|
operator_delete__(local_c);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b65c0 at 0x006B65C0 (size: 86) ---
|
|
|
|
|
|
void __thiscall FUN_006b65c0(int param_1,wchar_t *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
size_t sVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
wcsncpy((wchar_t *)(param_1 + 0x112 + *(int *)(param_1 + 0xb1c) * 2),param_2,
|
|
|
|
0x104 - *(int *)(param_1 + 0xb1c));
|
|
|
|
sVar1 = wcslen(param_2);
|
|
|
|
uVar2 = *(int *)(param_1 + 0xb1c) + sVar1 + 1;
|
|
|
|
*(uint *)(param_1 + 0xb1c) = uVar2;
|
|
|
|
if (0x104 < uVar2) {
|
|
|
|
*(undefined4 *)(param_1 + 0xb1c) = 0x104;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6620 at 0x006B6620 (size: 189) ---
|
|
|
|
|
|
void FUN_006b6620(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
BYTE BVar1;
|
|
|
|
int iVar2;
|
|
|
|
BYTE *pBVar3;
|
|
|
|
LSTATUS LVar4;
|
|
|
|
HKEY hKey;
|
|
|
|
BYTE aBStack_230 [12];
|
|
|
|
wchar_t local_208 [244];
|
|
|
|
BYTE *pBStack_20;
|
|
|
|
|
|
|
|
aBStack_230[8] = 'S';
|
|
|
|
aBStack_230[9] = 'f';
|
|
|
|
aBStack_230[10] = 'k';
|
|
|
|
aBStack_230[0xb] = '\0';
|
|
|
|
_snwprintf(local_208,0x104,L"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\%s");
|
|
|
|
aBStack_230[8] = '\0';
|
|
|
|
aBStack_230[9] = '\0';
|
|
|
|
aBStack_230[10] = '\0';
|
|
|
|
aBStack_230[0xb] = '\0';
|
|
|
|
aBStack_230[4] = '\0';
|
|
|
|
aBStack_230[5] = '\0';
|
|
|
|
aBStack_230[6] = '\0';
|
|
|
|
aBStack_230[7] = '\0';
|
|
|
|
aBStack_230[0] = '\0';
|
|
|
|
aBStack_230[1] = '\0';
|
|
|
|
aBStack_230[2] = '\0';
|
|
|
|
aBStack_230[3] = '\0';
|
|
|
|
hKey = (HKEY)0x80000002;
|
|
|
|
iVar2 = (*(code *)PTR_FUN_00837348)(0x80000002,local_208);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
pBVar3 = pBStack_20;
|
|
|
|
do {
|
|
|
|
BVar1 = *pBVar3;
|
|
|
|
pBVar3 = pBVar3 + 1;
|
|
|
|
} while (BVar1 != '\0');
|
|
|
|
LVar4 = RegSetValueExA(hKey,"EventMessageFile",0,1,pBStack_20,
|
|
|
|
(DWORD)(pBVar3 + (1 - (int)(pBStack_20 + 1))));
|
|
|
|
if (LVar4 == 0) {
|
|
|
|
aBStack_230[0] = '\a';
|
|
|
|
aBStack_230[1] = '\0';
|
|
|
|
aBStack_230[2] = '\0';
|
|
|
|
aBStack_230[3] = '\0';
|
|
|
|
RegSetValueExA(hKey,"TypesSupported",0,4,aBStack_230,4);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b66e0 at 0x006B66E0 (size: 16) ---
|
|
|
|
|
|
void FUN_006b66e0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b65c0(param_1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b66f0 at 0x006B66F0 (size: 107) ---
|
|
|
|
|
|
void __fastcall FUN_006b66f0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
size_t sVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
int *piVar6;
|
|
|
|
|
|
|
|
piVar6 = param_1 + 199;
|
|
|
|
for (iVar3 = 0x200; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*piVar6 = 0;
|
|
|
|
piVar6 = piVar6 + 1;
|
|
|
|
}
|
|
|
|
iVar5 = 0;
|
|
|
|
iVar4 = 0x400;
|
|
|
|
for (iVar3 = param_1[2]; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
iVar1 = (**(code **)(**(int **)(*param_1 + -4 + iVar3 * 4) + 8))
|
|
|
|
((int)param_1 + iVar5 * 2 + 0x31c,iVar4 + -2);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
sVar2 = wcslen((wchar_t *)(param_1 + 199));
|
|
|
|
*(undefined2 *)((int)param_1 + sVar2 * 2 + 0x31c) = 0x7c;
|
|
|
|
iVar5 = sVar2 + 1;
|
|
|
|
iVar4 = 0x401 - iVar5;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6760 at 0x006B6760 (size: 1286) ---
|
|
|
|
|
|
undefined4 FUN_006b6760(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
bool bVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
HANDLE hTargetProcessHandle;
|
|
|
|
HANDLE hSourceHandle;
|
|
|
|
HANDLE hSourceProcessHandle;
|
|
|
|
char *pcVar4;
|
|
|
|
LCID LVar5;
|
|
|
|
int iVar6;
|
|
|
|
undefined4 *lpBaseAddress;
|
|
|
|
char *pcVar7;
|
|
|
|
undefined4 *puVar8;
|
|
|
|
_STARTUPINFOA *p_Var9;
|
|
|
|
code *pcVar10;
|
|
|
|
HANDLE *lpTargetHandle;
|
|
|
|
DWORD DVar11;
|
|
|
|
BOOL BVar12;
|
|
|
|
DWORD dwOptions;
|
|
|
|
HANDLE local_588;
|
|
|
|
HANDLE local_584;
|
|
|
|
HANDLE local_580;
|
|
|
|
HANDLE local_57c;
|
|
|
|
HANDLE local_578;
|
|
|
|
_SECURITY_ATTRIBUTES local_574;
|
|
|
|
_PROCESS_INFORMATION _Stack_568;
|
|
|
|
_STARTUPINFOA _Stack_558;
|
|
|
|
CHAR aCStack_514 [260];
|
|
|
|
CHAR aCStack_410 [260];
|
|
|
|
CHAR local_30c [260];
|
|
|
|
CHAR aCStack_208 [520];
|
|
|
|
|
|
|
|
_clearfp();
|
|
|
|
lpBaseAddress = (undefined4 *)0x0;
|
|
|
|
local_578 = (HANDLE)0x0;
|
|
|
|
if ((*(int *)*param_1 == -0x7ffffffd) || (DAT_008fba30 != 0)) {
|
|
|
|
if (DAT_008fc55c == (code *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar3 = (*DAT_008fc55c)();
|
|
|
|
return uVar3;
|
|
|
|
}
|
|
|
|
local_574.lpSecurityDescriptor = (LPVOID)0x0;
|
|
|
|
DAT_008fba30 = 1;
|
|
|
|
local_574.nLength = 0xc;
|
|
|
|
local_574.bInheritHandle = 1;
|
|
|
|
local_57c = CreateFileMappingA((HANDLE)0xffffffff,&local_574,4,0,0x1c50,(LPCSTR)0x0);
|
|
|
|
pcVar10 = CloseHandle_exref;
|
|
|
|
if ((local_57c == (HANDLE)0x0) ||
|
|
|
|
(lpBaseAddress = MapViewOfFile(local_57c,6,0,0,0), pcVar10 = CloseHandle_exref,
|
|
|
|
lpBaseAddress == (undefined4 *)0x0)) goto LAB_006b6c35;
|
|
|
|
puVar8 = lpBaseAddress;
|
|
|
|
for (iVar6 = 0x714; iVar6 != 0; iVar6 = iVar6 + -1) {
|
|
|
|
*puVar8 = 0;
|
|
|
|
puVar8 = puVar8 + 1;
|
|
|
|
}
|
|
|
|
local_580 = CreateEventA(&local_574,0,0,(LPCSTR)0x0);
|
|
|
|
local_588 = CreateEventA(&local_574,0,0,(LPCSTR)0x0);
|
|
|
|
local_584 = CreateMutexA(&local_574,0,(LPCSTR)0x0);
|
|
|
|
dwOptions = 0;
|
|
|
|
BVar12 = 1;
|
|
|
|
DVar11 = 0x1f0fff;
|
|
|
|
lpTargetHandle = &local_578;
|
|
|
|
hTargetProcessHandle = GetCurrentProcess();
|
|
|
|
hSourceHandle = GetCurrentProcess();
|
|
|
|
hSourceProcessHandle = GetCurrentProcess();
|
|
|
|
BVar12 = DuplicateHandle(hSourceProcessHandle,hSourceHandle,hTargetProcessHandle,lpTargetHandle,
|
|
|
|
DVar11,BVar12,dwOptions);
|
|
|
|
pcVar10 = CloseHandle_exref;
|
|
|
|
if (BVar12 == 0) {
|
|
|
|
LAB_006b6a27:
|
|
|
|
if (local_580 != (HANDLE)0x0) {
|
|
|
|
(*pcVar10)();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (local_580 != (HANDLE)0x0) {
|
|
|
|
if (((local_588 != (HANDLE)0x0) && (local_584 != (HANDLE)0x0)) && (local_578 != (HANDLE)0x0)) {
|
|
|
|
lpBaseAddress[9] = local_578;
|
|
|
|
DVar11 = GetCurrentProcessId();
|
|
|
|
lpBaseAddress[1] = DVar11;
|
|
|
|
DVar11 = GetCurrentThreadId();
|
|
|
|
lpBaseAddress[2] = DVar11;
|
|
|
|
lpBaseAddress[5] = local_588;
|
|
|
|
lpBaseAddress[7] = local_580;
|
|
|
|
lpBaseAddress[8] = local_584;
|
|
|
|
*lpBaseAddress = 0x1c50;
|
|
|
|
lpBaseAddress[4] = param_1;
|
|
|
|
lpBaseAddress[3] = *(undefined4 *)(*param_1 + 0xc);
|
|
|
|
lpBaseAddress[0xd] = 1;
|
|
|
|
lpBaseAddress[0xf] = 1;
|
|
|
|
pcVar4 = &DAT_008fba44;
|
|
|
|
lpBaseAddress[0xb] = 0x10;
|
|
|
|
lpBaseAddress[10] = 0x114c;
|
|
|
|
do {
|
|
|
|
cVar1 = *pcVar4;
|
|
|
|
*(char *)((int)(lpBaseAddress + -0x23eb03) + (int)pcVar4) = cVar1;
|
|
|
|
pcVar4 = pcVar4 + 1;
|
|
|
|
} while (cVar1 != '\0');
|
|
|
|
pcVar4 = "Microsoft\\PCHealth\\ErrorReporting\\DW";
|
|
|
|
pcVar7 = (char *)(lpBaseAddress + 0x452);
|
|
|
|
for (iVar6 = 9; iVar6 != 0; iVar6 = iVar6 + -1) {
|
|
|
|
*(undefined4 *)pcVar7 = *(undefined4 *)pcVar4;
|
|
|
|
pcVar4 = pcVar4 + 4;
|
|
|
|
pcVar7 = pcVar7 + 4;
|
|
|
|
}
|
|
|
|
*pcVar7 = *pcVar4;
|
|
|
|
pcVar4 = "HKLM\\Software\\Microsoft\\Internet Explorer\\Registration\\DigitalProductID";
|
|
|
|
puVar8 = lpBaseAddress + 0x410;
|
|
|
|
for (iVar6 = 0x12; iVar6 != 0; iVar6 = iVar6 + -1) {
|
|
|
|
*puVar8 = *(undefined4 *)pcVar4;
|
|
|
|
pcVar4 = pcVar4 + 4;
|
|
|
|
puVar8 = puVar8 + 1;
|
|
|
|
}
|
|
|
|
LVar5 = GetUserDefaultLCID();
|
|
|
|
lpBaseAddress[0x451] = LVar5;
|
|
|
|
wcsncpy((wchar_t *)(lpBaseAddress + 0x484),(wchar_t *)&DAT_008fbb4a,0x104);
|
|
|
|
FUN_006b66f0();
|
|
|
|
printf("%ls\n");
|
|
|
|
wcsncpy((wchar_t *)(lpBaseAddress + 0x506),(wchar_t *)&DAT_008fbd54,0x400);
|
|
|
|
GetModuleFileNameA((HMODULE)0x0,local_30c,0x104);
|
|
|
|
(*(code *)PTR_FUN_00837394)(0,0,local_30c);
|
|
|
|
GetModuleFileNameA((HMODULE)0x0,aCStack_514,0x104);
|
|
|
|
pcVar4 = aCStack_514;
|
|
|
|
do {
|
|
|
|
pcVar7 = pcVar4;
|
|
|
|
pcVar4 = pcVar7 + 1;
|
|
|
|
} while (*pcVar7 != '\0');
|
|
|
|
pcVar10 = CloseHandle_exref;
|
|
|
|
if (aCStack_514 <= pcVar7) {
|
|
|
|
LAB_006b6a10:
|
|
|
|
if (*pcVar7 != '\\') goto code_r0x006b6a15;
|
|
|
|
if (pcVar7 < aCStack_514) goto LAB_006b6a27;
|
|
|
|
_snwprintf((wchar_t *)(lpBaseAddress + 0x12),0x104,L"%hs");
|
|
|
|
*pcVar7 = '\0';
|
|
|
|
wsprintfA(aCStack_410,"%s\\watson\\dw15.exe",aCStack_514);
|
|
|
|
wsprintfA(aCStack_208," -x -s %u",local_57c);
|
|
|
|
p_Var9 = &_Stack_558;
|
|
|
|
for (iVar6 = 0x11; iVar6 != 0; iVar6 = iVar6 + -1) {
|
|
|
|
p_Var9->cb = 0;
|
|
|
|
p_Var9 = (_STARTUPINFOA *)&p_Var9->lpReserved;
|
|
|
|
}
|
|
|
|
_Stack_568.hProcess = (HANDLE)0x0;
|
|
|
|
_Stack_568.hThread = (HANDLE)0x0;
|
|
|
|
_Stack_568.dwProcessId = 0;
|
|
|
|
_Stack_558.cb = 0x44;
|
|
|
|
_Stack_568.dwThreadId = 0;
|
|
|
|
FUN_006b6620(aCStack_410,lpBaseAddress + 0x12);
|
|
|
|
FUN_0040e560();
|
|
|
|
FUN_0040e3a0();
|
|
|
|
BVar12 = CreateProcessA(aCStack_410,aCStack_208,(LPSECURITY_ATTRIBUTES)0x0,
|
|
|
|
(LPSECURITY_ATTRIBUTES)0x0,1,0x4000020,(LPVOID)0x0,(LPCSTR)0x0,
|
|
|
|
&_Stack_558,&_Stack_568);
|
|
|
|
pcVar10 = CloseHandle_exref;
|
|
|
|
if (BVar12 != 0) {
|
|
|
|
bVar2 = true;
|
|
|
|
while (DVar11 = WaitForSingleObject(local_580,20000), DVar11 == 0) {
|
|
|
|
DVar11 = WaitForSingleObject(local_588,1);
|
|
|
|
if (DVar11 == 0) goto LAB_006b6b8e;
|
|
|
|
LAB_006b6b81:
|
|
|
|
if (!bVar2) goto LAB_006b6b8e;
|
|
|
|
}
|
|
|
|
DVar11 = WaitForSingleObject(local_584,10000);
|
|
|
|
if (DVar11 != 0x102) {
|
|
|
|
if (DVar11 != 0x80) {
|
|
|
|
DVar11 = WaitForSingleObject(local_580,1);
|
|
|
|
if (DVar11 == 0) {
|
|
|
|
DVar11 = WaitForSingleObject(local_588,1);
|
|
|
|
if (DVar11 == 0) goto LAB_006b6b78;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
SetEvent(local_588);
|
|
|
|
LAB_006b6b78:
|
|
|
|
bVar2 = false;
|
|
|
|
}
|
|
|
|
ReleaseMutex(local_584);
|
|
|
|
goto LAB_006b6b81;
|
|
|
|
}
|
|
|
|
ReleaseMutex(local_584);
|
|
|
|
}
|
|
|
|
LAB_006b6b8e:
|
|
|
|
pcVar10 = CloseHandle_exref;
|
|
|
|
CloseHandle(local_580);
|
|
|
|
local_580 = (HANDLE)0x0;
|
|
|
|
CloseHandle(local_588);
|
|
|
|
local_588 = (HANDLE)0x0;
|
|
|
|
CloseHandle(local_584);
|
|
|
|
local_584 = (HANDLE)0x0;
|
|
|
|
CloseHandle(local_578);
|
|
|
|
local_578 = (HANDLE)0x0;
|
|
|
|
}
|
|
|
|
iVar6 = lpBaseAddress[0xb];
|
|
|
|
UnmapViewOfFile(lpBaseAddress);
|
|
|
|
lpBaseAddress = (undefined4 *)0x0;
|
|
|
|
(*pcVar10)();
|
|
|
|
local_57c = (HANDLE)0x0;
|
|
|
|
if (iVar6 == 0x10) {
|
|
|
|
if (DAT_008fc55c == (code *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar3 = (*DAT_008fc55c)();
|
|
|
|
return uVar3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_006b6a27;
|
|
|
|
}
|
|
|
|
if (local_588 != (HANDLE)0x0) {
|
|
|
|
(*pcVar10)();
|
|
|
|
}
|
|
|
|
if (local_584 != (HANDLE)0x0) {
|
|
|
|
(*pcVar10)();
|
|
|
|
}
|
|
|
|
LAB_006b6c35:
|
|
|
|
if (local_578 != (HANDLE)0x0) {
|
|
|
|
(*pcVar10)();
|
|
|
|
}
|
|
|
|
if (lpBaseAddress != (undefined4 *)0x0) {
|
|
|
|
UnmapViewOfFile(lpBaseAddress);
|
|
|
|
}
|
|
|
|
if (local_57c != (HANDLE)0x0) {
|
|
|
|
(*pcVar10)();
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
code_r0x006b6a15:
|
|
|
|
pcVar7 = pcVar7 + -1;
|
|
|
|
if (pcVar7 < aCStack_514) goto LAB_006b6a27;
|
|
|
|
goto LAB_006b6a10;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6c70 at 0x006B6C70 (size: 48) ---
|
|
|
|
|
|
void __fastcall FUN_006b6c70(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_008076a0;
|
|
|
|
FUN_0040e340(param_1);
|
|
|
|
*param_1 = &PTR_FUN_00795538;
|
|
|
|
if (param_1[1] != 0) {
|
|
|
|
FUN_0040e340(param_1);
|
|
|
|
param_1[1] = 0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6ca0 at 0x006B6CA0 (size: 68) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b6ca0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_008076a0;
|
|
|
|
FUN_0040e340(param_1);
|
|
|
|
*param_1 = &PTR_FUN_00795538;
|
|
|
|
if (param_1[1] != 0) {
|
|
|
|
FUN_0040e340(param_1);
|
|
|
|
param_1[1] = 0;
|
|
|
|
}
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6cf0 at 0x006B6CF0 (size: 144) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006b6cf0(undefined4 *param_1,int param_2,char *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPTOP_LEVEL_EXCEPTION_FILTER pPVar1;
|
|
|
|
int iVar2;
|
|
|
|
char *pcVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[0x2c7] = 0;
|
|
|
|
param_1[0x2c8] = 0;
|
|
|
|
param_1[0x2c9] = 0;
|
|
|
|
pcVar3 = (char *)(param_1 + 3);
|
|
|
|
for (iVar2 = 0x41; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
|
|
pcVar3[0] = '\0';
|
|
|
|
pcVar3[1] = '\0';
|
|
|
|
pcVar3[2] = '\0';
|
|
|
|
pcVar3[3] = '\0';
|
|
|
|
pcVar3 = pcVar3 + 4;
|
|
|
|
}
|
|
|
|
*pcVar3 = '\0';
|
|
|
|
puVar4 = (undefined4 *)((int)param_1 + 0x112);
|
|
|
|
for (iVar2 = 0x82; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
|
|
*puVar4 = 0;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
}
|
|
|
|
*(undefined2 *)puVar4 = 0;
|
|
|
|
if ((param_2 != 0) && (param_1[0x2c8] == 0)) {
|
|
|
|
pPVar1 = SetUnhandledExceptionFilter(FUN_006b6760);
|
|
|
|
param_1[0x2c9] = pPVar1;
|
|
|
|
param_1[0x2c8] = 1;
|
|
|
|
}
|
|
|
|
if ((param_3 != (char *)0x0) && (*param_3 != '\0')) {
|
|
|
|
strncpy((char *)(param_1 + 3),param_3,0x104);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6d80 at 0x006B6D80 (size: 31) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006b6d80(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 0;
|
|
|
|
*param_1 = &PTR_FUN_008076a0;
|
|
|
|
FUN_0040e4e0(param_1);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6da0 at 0x006B6DA0 (size: 102) ---
|
|
|
|
|
|
void __thiscall FUN_006b6da0(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
int iVar2;
|
|
|
|
BSTR pOVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
|
|
|
|
if (param_2 != 0) {
|
|
|
|
uVar1 = (*(code *)PTR_FUN_00820a9c)();
|
|
|
|
puVar4 = (undefined4 *)0x0;
|
|
|
|
iVar2 = (*(code *)PTR_FUN_00837394)(uVar1,0,param_2,0xffffffff,0,0);
|
|
|
|
pOVar3 = SysAllocStringLen((OLECHAR *)0x0,iVar2 - 1);
|
|
|
|
if (pOVar3 != (BSTR)0x0) {
|
|
|
|
(*(code *)PTR_FUN_00837394)(uVar1,0,param_2,0xffffffff,pOVar3,iVar2);
|
|
|
|
}
|
|
|
|
*puVar4 = pOVar3;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6e10 at 0x006B6E10 (size: 5) ---
|
|
|
|
|
|
undefined4 FUN_006b6e10(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6e20 at 0x006B6E20 (size: 160) ---
|
|
|
|
|
|
undefined4 FUN_006b6e20(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
undefined4 *local_8;
|
|
|
|
undefined4 *local_4;
|
|
|
|
|
|
|
|
FUN_005444d0(L"3rd party API not in use.");
|
|
|
|
iVar1 = FUN_0055b0a0();
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
piVar2 = (int *)FUN_0055a740();
|
|
|
|
(**(code **)(*piVar2 + 0xc))(piVar2,&local_4);
|
|
|
|
FUN_0055f580(local_4);
|
|
|
|
}
|
|
|
|
FUN_00546290(&local_4,0);
|
|
|
|
FUN_006ae970(param_1,&local_4);
|
|
|
|
LVar3 = InterlockedDecrement(local_4 + 1);
|
|
|
|
if ((LVar3 == 0) && (local_4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*local_4)(1);
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement(local_8 + 1);
|
|
|
|
if ((LVar3 == 0) && (local_8 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*local_8)(1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b6ec0 at 0x006B6EC0 (size: 416) ---
|
|
|
|
|
|
undefined4 FUN_006b6ec0(undefined4 param_1,BSTR param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
BSTR pOVar1;
|
|
|
|
BSTR bstrString;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
undefined4 *local_18;
|
|
|
|
undefined4 *local_14;
|
|
|
|
undefined4 *local_10;
|
|
|
|
undefined4 *local_c;
|
|
|
|
undefined4 *local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
FUN_005444d0(L"Unknown");
|
|
|
|
FUN_005444d0(L"Unknown");
|
|
|
|
FUN_005444d0(L"Unknown");
|
|
|
|
iVar2 = FUN_0055b0a0();
|
|
|
|
pOVar1 = param_2;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
FUN_006b6da0(*(int *)param_2 + 0x14);
|
|
|
|
piVar3 = (int *)FUN_0055a740();
|
|
|
|
bstrString = param_2;
|
|
|
|
(**(code **)(*piVar3 + 0x10))(piVar3,param_2,&local_8,&local_c,&local_4);
|
|
|
|
FUN_0055f580(local_8);
|
|
|
|
FUN_0055f580(local_c);
|
|
|
|
FUN_0055f580(local_4);
|
|
|
|
SysFreeString(bstrString);
|
|
|
|
}
|
|
|
|
FUN_00546290(&local_8,0);
|
|
|
|
FUN_00546290(&local_c,0);
|
|
|
|
FUN_00546290(¶m_2,0);
|
|
|
|
FUN_006aea60(param_1,iVar2 != 0,pOVar1,¶m_2,&local_c,&local_8);
|
|
|
|
pOVar1 = param_2;
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(param_2 + 2));
|
|
|
|
if ((LVar4 == 0) && (pOVar1 != (BSTR)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)pOVar1)(1);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement(local_c + 1);
|
|
|
|
if ((LVar4 == 0) && (local_c != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*local_c)(1);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement(local_8 + 1);
|
|
|
|
if ((LVar4 == 0) && (local_8 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*local_8)(1);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement(local_18 + 1);
|
|
|
|
if ((LVar4 == 0) && (local_18 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*local_18)(1);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement(local_14 + 1);
|
|
|
|
if ((LVar4 == 0) && (local_14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*local_14)(1);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement(local_10 + 1);
|
|
|
|
if ((LVar4 == 0) && (local_10 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*local_10)(1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b7060 at 0x006B7060 (size: 90) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
int FUN_006b7060(int param_1,int param_2,float param_3,int param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (param_2 == 0x40000) {
|
|
|
|
param_3 = _DAT_007938b0;
|
|
|
|
}
|
|
|
|
floor((double)(param_3 * (float)param_1 * (float)param_4 + (float)_DAT_008078c8));
|
|
|
|
iVar1 = FUN_005df4c4();
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
if (iVar1 < 0) {
|
|
|
|
iVar1 = -1;
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b70c0 at 0x006B70C0 (size: 90) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
int FUN_006b70c0(int param_1,int param_2,float param_3,int param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (param_2 == 0x40000) {
|
|
|
|
param_3 = _DAT_007ea030;
|
|
|
|
}
|
|
|
|
ceil((double)(param_3 * (float)param_1 * (float)param_4 - (float)_DAT_008078c8));
|
|
|
|
iVar1 = FUN_005df4c4();
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
if (iVar1 < 1) {
|
|
|
|
iVar1 = -1;
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b7120 at 0x006B7120 (size: 79) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b7120(float *param_1,float *param_2,float param_3,float param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
param_3 = *param_2 * *param_1 + param_2[1] * param_1[1] + param_2[2] * param_1[2] + param_1[3] +
|
|
|
|
param_3;
|
|
|
|
if (param_4 < param_3) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar1 = 1;
|
|
|
|
if (-param_4 <= param_3) {
|
|
|
|
uVar1 = 2;
|
|
|
|
}
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b7170 at 0x006B7170 (size: 73) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
ushort FUN_006b7170(float param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
ushort uVar1;
|
|
|
|
|
|
|
|
if (param_1 < _DAT_00807960) {
|
|
|
|
return CONCAT11(param_1 < _DAT_00807960 |
|
|
|
|
(byte)((ushort)((ushort)(NAN(param_1) || NAN(_DAT_00807960)) << 10) >> 8) |
|
|
|
|
(byte)((ushort)((ushort)(param_1 == _DAT_00807960) << 0xe) >> 8),0xff);
|
|
|
|
}
|
|
|
|
if (param_1 >= _DAT_00807964 && (param_1 == _DAT_00807964) == 0) {
|
|
|
|
return (ushort)(param_1 < _DAT_00807964) << 8 |
|
|
|
|
(ushort)(NAN(param_1) || NAN(_DAT_00807964)) << 10 |
|
|
|
|
(ushort)(param_1 == _DAT_00807964) << 0xe;
|
|
|
|
}
|
|
|
|
uVar1 = FUN_005df4c4();
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b71c0 at 0x006B71C0 (size: 149) ---
|
|
|
|
|
|
void FUN_006b71c0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
iVar1 = FUN_0059d4c0();
|
|
|
|
DAT_00867388 = (uint)(iVar1 != 0);
|
|
|
|
uVar2 = 0;
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
uVar2 = FUN_0053f310();
|
|
|
|
}
|
|
|
|
FUN_005a47d0(param_1,uVar2);
|
|
|
|
FUN_005a4420(param_1,1,1);
|
|
|
|
FUN_005a4460(param_1,2,2,2);
|
|
|
|
if (param_1 == 0) {
|
|
|
|
FUN_005a3ca0(DAT_0081fcb0,DAT_0081fcb4,1);
|
|
|
|
FUN_005a3ba0(1);
|
|
|
|
FUN_005a3e20(4,1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b7260 at 0x006B7260 (size: 1088) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
void FUN_006b7260(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined1 uVar2;
|
|
|
|
undefined1 uVar3;
|
|
|
|
undefined1 uVar4;
|
|
|
|
undefined1 uVar5;
|
|
|
|
int iVar6;
|
|
|
|
uint uVar7;
|
|
|
|
uint uVar8;
|
|
|
|
uint unaff_EBX;
|
|
|
|
int iVar9;
|
|
|
|
float *pfVar10;
|
|
|
|
uint uVar11;
|
|
|
|
undefined4 *puVar12;
|
|
|
|
bool bVar13;
|
|
|
|
int iStack_10;
|
|
|
|
int *piStack_4;
|
|
|
|
|
|
|
|
FUN_0054c9f0();
|
|
|
|
if (DAT_00836c08 == 0) {
|
|
|
|
uVar11 = ~(*(uint *)(DAT_00867380 + 0x58) >> 2) & 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar11 = 1;
|
|
|
|
}
|
|
|
|
if ((((DAT_00836c04 == 0) || (*(char *)(DAT_00870340 + 0x44) == '\0')) || (DAT_00867374 == 0)) ||
|
|
|
|
(uVar11 == 0)) {
|
|
|
|
iVar9 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar9 = 1;
|
|
|
|
}
|
|
|
|
FUN_0059e760(param_1,0,iVar9);
|
|
|
|
FUN_005a41f0(0);
|
|
|
|
if (iVar9 == 0) {
|
|
|
|
(**(code **)(**(int **)(DAT_00870340 + 0x468) + 0x164))(*(int **)(DAT_00870340 + 0x468),0x142);
|
|
|
|
iStack_10 = 0;
|
|
|
|
if (*(char *)((int)param_1 + 0xe) != '\0') {
|
|
|
|
puVar12 = &DAT_00902fdc;
|
|
|
|
do {
|
|
|
|
puVar1 = *(undefined4 **)(*param_1 + iStack_10 * 4);
|
|
|
|
puVar12[-1] = *puVar1;
|
|
|
|
*puVar12 = puVar1[1];
|
|
|
|
puVar12[1] = (float)puVar1[2] - DAT_00836b64;
|
|
|
|
uVar11 = FUN_005df4c4();
|
|
|
|
uVar7 = FUN_005df4c4();
|
|
|
|
uVar8 = FUN_005df4c4();
|
|
|
|
bVar13 = DAT_00867388 != 0;
|
|
|
|
puVar12[2] = ((uVar11 & 0xff | 0xffffff00) << 8 | uVar7 & 0xff) << 8 | uVar8 & 0xff;
|
|
|
|
iVar9 = DAT_0086738c;
|
|
|
|
if (bVar13) {
|
|
|
|
puVar12[3] = _DAT_0081fccc *
|
|
|
|
*(float *)(puVar1[4] + *(char *)(DAT_0086738c + iStack_10) * 8);
|
|
|
|
puVar12[4] = _DAT_0081fcd0 * *(float *)(puVar1[4] + 4 + *(char *)(iVar9 + iStack_10) * 8);
|
|
|
|
}
|
|
|
|
iStack_10 = iStack_10 + 1;
|
|
|
|
puVar12 = puVar12 + 6;
|
|
|
|
param_1 = piStack_4;
|
|
|
|
uVar11 = unaff_EBX;
|
|
|
|
} while (iStack_10 < (int)(uint)*(byte *)((int)piStack_4 + 0xe));
|
|
|
|
}
|
|
|
|
FUN_005a1520(4,1,&DAT_00902fd8,0x18);
|
|
|
|
if ((DAT_00867374 != 0) && (uVar11 != 0)) {
|
|
|
|
FUN_006b71c0(0);
|
|
|
|
iVar9 = 0;
|
|
|
|
if (*(char *)((int)param_1 + 0xe) != '\0') {
|
|
|
|
pfVar10 = (float *)&DAT_00902fe8;
|
|
|
|
do {
|
|
|
|
iVar6 = FUN_0059c9a0(*(undefined4 *)(*param_1 + iVar9 * 4),0);
|
|
|
|
if (*(float *)(iVar6 + 8) < _DAT_00807960) {
|
|
|
|
iVar6 = 0xff;
|
|
|
|
}
|
|
|
|
else if (*(float *)(iVar6 + 8) <= _DAT_00807964) {
|
|
|
|
iVar6 = FUN_005df4c4();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar6 = 0;
|
|
|
|
}
|
|
|
|
bVar13 = DAT_00867388 != 0;
|
|
|
|
pfVar10[-1] = (float)(iVar6 << 0x18 | (uint)pfVar10[-1] & 0xffffff);
|
|
|
|
if (bVar13) {
|
|
|
|
*pfVar10 = DAT_0081fcc8 * *pfVar10;
|
|
|
|
pfVar10[1] = DAT_0081fcc8 * pfVar10[1];
|
|
|
|
}
|
|
|
|
iVar9 = iVar9 + 1;
|
|
|
|
pfVar10 = pfVar10 + 6;
|
|
|
|
} while (iVar9 < (int)(uint)*(byte *)((int)param_1 + 0xe));
|
|
|
|
}
|
|
|
|
FUN_005a1520(4,1,&DAT_00902fd8,0x18);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_006b71c0(1);
|
|
|
|
(**(code **)(**(int **)(DAT_00870340 + 0x468) + 0x164))(*(int **)(DAT_00870340 + 0x468),0x242);
|
|
|
|
iVar9 = 0;
|
|
|
|
if (*(char *)((int)param_1 + 0xe) != '\0') {
|
|
|
|
puVar12 = &DAT_00903024;
|
|
|
|
do {
|
|
|
|
puVar1 = *(undefined4 **)(*param_1 + iVar9 * 4);
|
|
|
|
puVar12[-1] = *puVar1;
|
|
|
|
*puVar12 = puVar1[1];
|
|
|
|
puVar12[1] = (float)puVar1[2] - DAT_00836b64;
|
|
|
|
uVar2 = FUN_005df4c4();
|
|
|
|
uVar3 = FUN_005df4c4();
|
|
|
|
uVar4 = FUN_005df4c4();
|
|
|
|
iVar6 = FUN_0059c9a0(puVar1,0);
|
|
|
|
if (*(float *)(iVar6 + 8) < _DAT_00807960) {
|
|
|
|
uVar5 = 0xff;
|
|
|
|
}
|
|
|
|
else if (*(float *)(iVar6 + 8) <= _DAT_00807964) {
|
|
|
|
uVar5 = FUN_005df4c4();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar5 = 0;
|
|
|
|
}
|
|
|
|
if (DAT_00836c00 != 0) {
|
|
|
|
uVar5 = FUN_005df4c4();
|
|
|
|
}
|
|
|
|
bVar13 = DAT_00867388 != 0;
|
|
|
|
puVar12[2] = CONCAT31(CONCAT21(CONCAT11(uVar5,uVar2),uVar3),uVar4);
|
|
|
|
iVar6 = DAT_0086738c;
|
|
|
|
if (bVar13) {
|
|
|
|
puVar12[3] = _DAT_0081fccc * *(float *)(puVar1[4] + *(char *)(DAT_0086738c + iVar9) * 8);
|
|
|
|
puVar12[4] = _DAT_0081fcd0 * *(float *)(puVar1[4] + 4 + *(char *)(iVar6 + iVar9) * 8);
|
|
|
|
puVar12[5] = DAT_0081fcc8 * (float)puVar12[3];
|
|
|
|
puVar12[6] = DAT_0081fcc8 * (float)puVar12[4];
|
|
|
|
}
|
|
|
|
iVar9 = iVar9 + 1;
|
|
|
|
puVar12 = puVar12 + 8;
|
|
|
|
} while (iVar9 < (int)(uint)*(byte *)((int)param_1 + 0xe));
|
|
|
|
}
|
|
|
|
FUN_005a1520(4,1,&DAT_00903020,0x20);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b76a0 at 0x006B76A0 (size: 1356) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
void FUN_006b76a0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined1 uVar2;
|
|
|
|
undefined1 uVar3;
|
|
|
|
undefined1 uVar4;
|
|
|
|
undefined1 uVar5;
|
|
|
|
int *piVar6;
|
|
|
|
uint uVar7;
|
|
|
|
uint uVar8;
|
|
|
|
uint uVar9;
|
|
|
|
int iVar10;
|
|
|
|
int unaff_EBX;
|
|
|
|
int iVar11;
|
|
|
|
bool bVar12;
|
|
|
|
int *unaff_retaddr;
|
|
|
|
int iStack_18;
|
|
|
|
int iStack_14;
|
|
|
|
int *piStack_4;
|
|
|
|
|
|
|
|
FUN_0054c9f0();
|
|
|
|
if (DAT_00836c14 == 0) {
|
|
|
|
piVar6 = (int *)(~(*(uint *)(DAT_00867380 + 0x58) >> 2) & 1);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar6 = (int *)0x1;
|
|
|
|
}
|
|
|
|
if ((((DAT_00836c10 == 0) || (*(char *)(DAT_00870340 + 0x44) == '\0')) || (DAT_00867374 == 0)) ||
|
|
|
|
(piVar6 == (int *)0x0)) {
|
|
|
|
iVar11 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar11 = 1;
|
|
|
|
}
|
|
|
|
FUN_0059e760(param_1,0,iVar11);
|
|
|
|
FUN_005a41f0(0);
|
|
|
|
if (iVar11 == 0) {
|
|
|
|
(**(code **)(**(int **)(DAT_00870340 + 0x468) + 0x164))(*(int **)(DAT_00870340 + 0x468),0x142);
|
|
|
|
iStack_14 = 0;
|
|
|
|
do {
|
|
|
|
switch(iStack_14) {
|
|
|
|
case 0:
|
|
|
|
unaff_EBX = 0;
|
|
|
|
piVar6 = param_1;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
unaff_EBX = 1;
|
|
|
|
piVar6 = param_1;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
goto LAB_006b79ac;
|
|
|
|
case 3:
|
|
|
|
unaff_EBX = 0;
|
|
|
|
piVar6 = unaff_retaddr;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
unaff_EBX = 1;
|
|
|
|
piVar6 = unaff_retaddr;
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
param_1 = unaff_retaddr;
|
|
|
|
LAB_006b79ac:
|
|
|
|
unaff_EBX = 2;
|
|
|
|
piVar6 = param_1;
|
|
|
|
}
|
|
|
|
puVar1 = *(undefined4 **)(*piVar6 + unaff_EBX * 4);
|
|
|
|
(&DAT_00903080)[iStack_14 * 6] = *puVar1;
|
|
|
|
(&DAT_00903084)[iStack_14 * 6] = puVar1[1];
|
|
|
|
(&DAT_00903088)[iStack_14 * 6] = (float)puVar1[2] - DAT_00836b64;
|
|
|
|
uVar7 = FUN_005df4c4();
|
|
|
|
uVar8 = FUN_005df4c4();
|
|
|
|
uVar9 = FUN_005df4c4();
|
|
|
|
bVar12 = DAT_00867388 != 0;
|
|
|
|
(&DAT_0090308c)[iStack_14 * 6] =
|
|
|
|
((uVar7 & 0xff | 0xffffff00) << 8 | uVar8 & 0xff) << 8 | uVar9 & 0xff;
|
|
|
|
if (bVar12) {
|
|
|
|
(&DAT_00903090)[iStack_14 * 6] =
|
|
|
|
_DAT_0081fccc * *(float *)(puVar1[4] + *(char *)(piVar6[5] + unaff_EBX) * 8);
|
|
|
|
(&DAT_00903094)[iStack_14 * 6] =
|
|
|
|
_DAT_0081fcd0 * *(float *)(puVar1[4] + 4 + *(char *)(piVar6[5] + unaff_EBX) * 8);
|
|
|
|
}
|
|
|
|
iStack_14 = iStack_14 + 1;
|
|
|
|
param_1 = piStack_4;
|
|
|
|
} while (iStack_14 < 6);
|
|
|
|
FUN_005a1520(4,2,&DAT_00903080,0x18);
|
|
|
|
if ((DAT_00867374 != 0) && (iStack_18 != 0)) {
|
|
|
|
FUN_006b71c0(0);
|
|
|
|
iVar11 = 0;
|
|
|
|
do {
|
|
|
|
switch(iVar11) {
|
|
|
|
case 0:
|
|
|
|
unaff_EBX = 0;
|
|
|
|
piVar6 = piStack_4;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
unaff_EBX = 1;
|
|
|
|
piVar6 = piStack_4;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
piVar6 = piStack_4;
|
|
|
|
goto LAB_006b7b16;
|
|
|
|
case 3:
|
|
|
|
unaff_EBX = 0;
|
|
|
|
piVar6 = unaff_retaddr;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
unaff_EBX = 1;
|
|
|
|
piVar6 = unaff_retaddr;
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
piVar6 = unaff_retaddr;
|
|
|
|
LAB_006b7b16:
|
|
|
|
unaff_EBX = 2;
|
|
|
|
}
|
|
|
|
iVar10 = FUN_0059c9a0(*(undefined4 *)(*piVar6 + unaff_EBX * 4),0);
|
|
|
|
if (*(float *)(iVar10 + 8) < _DAT_00807960) {
|
|
|
|
iVar10 = 0xff;
|
|
|
|
}
|
|
|
|
else if (*(float *)(iVar10 + 8) <= _DAT_00807964) {
|
|
|
|
iVar10 = FUN_005df4c4();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar10 = 0;
|
|
|
|
}
|
|
|
|
(&DAT_0090308c)[iVar11 * 6] = iVar10 << 0x18 | (&DAT_0090308c)[iVar11 * 6] & 0xffffff;
|
|
|
|
if (DAT_00867388 != 0) {
|
|
|
|
(&DAT_00903090)[iVar11 * 6] = DAT_0081fcc8 * (float)(&DAT_00903090)[iVar11 * 6];
|
|
|
|
(&DAT_00903094)[iVar11 * 6] = DAT_0081fcc8 * (float)(&DAT_00903094)[iVar11 * 6];
|
|
|
|
}
|
|
|
|
iVar11 = iVar11 + 1;
|
|
|
|
} while (iVar11 < 6);
|
|
|
|
FUN_005a1520(4,2,&DAT_00903080,0x18);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_006b71c0(1);
|
|
|
|
(**(code **)(**(int **)(DAT_00870340 + 0x468) + 0x164))(*(int **)(DAT_00870340 + 0x468),0x242);
|
|
|
|
iStack_14 = 0;
|
|
|
|
do {
|
|
|
|
switch(iStack_14) {
|
|
|
|
case 0:
|
|
|
|
unaff_EBX = 0;
|
|
|
|
piVar6 = param_1;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
unaff_EBX = 1;
|
|
|
|
piVar6 = param_1;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
goto LAB_006b77a0;
|
|
|
|
case 3:
|
|
|
|
unaff_EBX = 0;
|
|
|
|
piVar6 = unaff_retaddr;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
unaff_EBX = 1;
|
|
|
|
piVar6 = unaff_retaddr;
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
param_1 = unaff_retaddr;
|
|
|
|
LAB_006b77a0:
|
|
|
|
unaff_EBX = 2;
|
|
|
|
piVar6 = param_1;
|
|
|
|
}
|
|
|
|
puVar1 = *(undefined4 **)(*piVar6 + unaff_EBX * 4);
|
|
|
|
(&DAT_00903110)[iStack_14 * 8] = *puVar1;
|
|
|
|
(&DAT_00903114)[iStack_14 * 8] = puVar1[1];
|
|
|
|
(&DAT_00903118)[iStack_14 * 8] = (float)puVar1[2] - DAT_00836b64;
|
|
|
|
uVar2 = FUN_005df4c4();
|
|
|
|
uVar3 = FUN_005df4c4();
|
|
|
|
uVar4 = FUN_005df4c4();
|
|
|
|
iVar11 = FUN_0059c9a0(puVar1,0);
|
|
|
|
if (*(float *)(iVar11 + 8) < _DAT_00807960) {
|
|
|
|
uVar5 = 0xff;
|
|
|
|
}
|
|
|
|
else if (*(float *)(iVar11 + 8) <= _DAT_00807964) {
|
|
|
|
uVar5 = FUN_005df4c4();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar5 = 0;
|
|
|
|
}
|
|
|
|
if (DAT_00836c0c != 0) {
|
|
|
|
uVar5 = FUN_005df4c4();
|
|
|
|
}
|
|
|
|
bVar12 = DAT_00867388 != 0;
|
|
|
|
(&DAT_0090311c)[iStack_14 * 8] = CONCAT31(CONCAT21(CONCAT11(uVar5,uVar2),uVar3),uVar4);
|
|
|
|
if (bVar12) {
|
|
|
|
(&DAT_00903120)[iStack_14 * 8] =
|
|
|
|
_DAT_0081fccc * *(float *)(puVar1[4] + *(char *)(piVar6[5] + unaff_EBX) * 8);
|
|
|
|
(&DAT_00903124)[iStack_14 * 8] =
|
|
|
|
_DAT_0081fcd0 * *(float *)(puVar1[4] + 4 + *(char *)(piVar6[5] + unaff_EBX) * 8);
|
|
|
|
(&DAT_00903128)[iStack_14 * 8] = DAT_0081fcc8 * (float)(&DAT_00903120)[iStack_14 * 8];
|
|
|
|
(&DAT_0090312c)[iStack_14 * 8] = DAT_0081fcc8 * (float)(&DAT_00903124)[iStack_14 * 8];
|
|
|
|
}
|
|
|
|
iStack_14 = iStack_14 + 1;
|
|
|
|
param_1 = piStack_4;
|
|
|
|
if (5 < iStack_14) {
|
|
|
|
FUN_005a1520(4,2,&DAT_00903110,0x20);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b7c40 at 0x006B7C40 (size: 817) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
void FUN_006b7c40(undefined4 *param_1,int param_2,undefined4 *param_3,int *param_4,int param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
float fVar1;
|
|
|
|
float fVar2;
|
|
|
|
float *pfVar3;
|
|
|
|
float fVar4;
|
|
|
|
float fVar5;
|
|
|
|
float *pfVar6;
|
|
|
|
bool bVar7;
|
|
|
|
float fVar8;
|
|
|
|
float fVar9;
|
|
|
|
float fVar10;
|
|
|
|
float *pfVar11;
|
|
|
|
bool bVar12;
|
|
|
|
float *pfVar13;
|
|
|
|
int iVar14;
|
|
|
|
int iVar15;
|
|
|
|
undefined4 *puVar16;
|
|
|
|
int iVar17;
|
|
|
|
float *pfVar18;
|
|
|
|
undefined4 *puVar19;
|
|
|
|
undefined4 *puVar20;
|
|
|
|
undefined4 *puVar21;
|
|
|
|
uint local_1c;
|
|
|
|
undefined4 *local_18;
|
|
|
|
undefined4 *local_8 [2];
|
|
|
|
|
|
|
|
iVar14 = DAT_00847060;
|
|
|
|
pfVar13 = DAT_00847050;
|
|
|
|
if ((_DAT_009064b4 & 1) == 0) {
|
|
|
|
_DAT_009064b4 = _DAT_009064b4 | 1;
|
|
|
|
}
|
|
|
|
local_8[0] = param_3;
|
|
|
|
puVar16 = (undefined4 *)(param_5 << (0x1eU - (char)DAT_00847060 & 0x1f));
|
|
|
|
iVar17 = param_2 + -1;
|
|
|
|
local_1c = 0;
|
|
|
|
local_8[1] = &DAT_009063d0;
|
|
|
|
pfVar18 = (float *)&DAT_009031d0;
|
|
|
|
iVar15 = iVar17;
|
|
|
|
while( true ) {
|
|
|
|
puVar21 = puVar16;
|
|
|
|
if (iVar15 < 0) goto LAB_006b7cc2;
|
|
|
|
if (*(float *)(param_1[iVar15] + 0xc) < _DAT_008fc788) break;
|
|
|
|
iVar15 = iVar15 + -1;
|
|
|
|
}
|
|
|
|
local_1c = 1;
|
|
|
|
fVar1 = ((float *)*param_1)[3] - _DAT_008fc788;
|
|
|
|
local_18 = &DAT_009063d0;
|
|
|
|
puVar21 = &DAT_009063d0;
|
|
|
|
pfVar6 = (float *)*param_1;
|
|
|
|
bVar12 = DAT_00796344 <= fVar1;
|
|
|
|
for (; -1 < iVar17; iVar17 = iVar17 + -1) {
|
|
|
|
pfVar3 = (float *)param_1[iVar17];
|
|
|
|
fVar2 = pfVar3[3] - _DAT_008fc788;
|
|
|
|
bVar7 = DAT_00796344 <= fVar2;
|
|
|
|
puVar19 = puVar21;
|
|
|
|
if (bVar12 != bVar7) {
|
|
|
|
puVar19 = puVar21 + 1;
|
|
|
|
fVar1 = fVar1 / (fVar1 - fVar2);
|
|
|
|
*pfVar18 = (*pfVar3 - *pfVar6) * fVar1 + *pfVar6;
|
|
|
|
pfVar18[1] = (pfVar3[1] - pfVar6[1]) * fVar1 + pfVar6[1];
|
|
|
|
pfVar18[2] = (pfVar3[2] - pfVar6[2]) * fVar1 + pfVar6[2];
|
|
|
|
pfVar18[3] = (pfVar3[3] - pfVar6[3]) * fVar1 + pfVar6[3];
|
|
|
|
*puVar21 = pfVar18;
|
|
|
|
pfVar18 = pfVar18 + 4;
|
|
|
|
}
|
|
|
|
if (bVar7) {
|
|
|
|
*puVar19 = pfVar3;
|
|
|
|
puVar19 = puVar19 + 1;
|
|
|
|
}
|
|
|
|
puVar21 = puVar19;
|
|
|
|
pfVar6 = pfVar3;
|
|
|
|
fVar1 = fVar2;
|
|
|
|
bVar12 = bVar7;
|
|
|
|
}
|
|
|
|
param_2 = (int)(puVar21 + -0x2418f4) >> 2;
|
|
|
|
if (param_2 < 3) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
param_1 = &DAT_009063d0;
|
|
|
|
LAB_006b7cc2:
|
|
|
|
pfVar3 = pfVar13 + iVar14 * 6 + -6;
|
|
|
|
puVar19 = param_1;
|
|
|
|
pfVar6 = pfVar13;
|
|
|
|
do {
|
|
|
|
pfVar11 = pfVar3;
|
|
|
|
if (pfVar11 < pfVar13) {
|
|
|
|
*param_4 = param_2;
|
|
|
|
if (local_1c != 0) {
|
|
|
|
for (; local_18 < puVar21; puVar21 = puVar21 + -1) {
|
|
|
|
*param_3 = puVar21[-1];
|
|
|
|
param_3 = param_3 + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
puVar16 = (undefined4 *)((int)puVar16 << 1);
|
|
|
|
param_1 = puVar19;
|
|
|
|
if (-1 < (int)puVar16) {
|
|
|
|
fVar1 = *pfVar11;
|
|
|
|
pfVar3 = (float *)*puVar19;
|
|
|
|
local_1c = local_1c ^ 1;
|
|
|
|
param_1 = local_8[local_1c];
|
|
|
|
fVar4 = *pfVar6;
|
|
|
|
fVar5 = pfVar6[1];
|
|
|
|
fVar2 = pfVar11[1];
|
|
|
|
fVar8 = (*pfVar3 - fVar4 * pfVar3[3]) * (fVar2 - fVar5) -
|
|
|
|
(pfVar3[1] - fVar5 * pfVar3[3]) * (fVar1 - fVar4);
|
|
|
|
puVar21 = param_1;
|
|
|
|
bVar12 = fVar8 < DAT_00796344 != (fVar8 == DAT_00796344);
|
|
|
|
fVar10 = fVar8;
|
|
|
|
while (param_2 = param_2 + -1, -1 < param_2) {
|
|
|
|
pfVar6 = (float *)puVar19[param_2];
|
|
|
|
fVar9 = fVar8;
|
|
|
|
if (param_2 != 0) {
|
|
|
|
fVar9 = (*pfVar6 - fVar4 * pfVar6[3]) * (fVar2 - fVar5) -
|
|
|
|
(pfVar6[1] - fVar5 * pfVar6[3]) * (fVar1 - fVar4);
|
|
|
|
}
|
|
|
|
bVar7 = fVar9 < DAT_00796344 != (fVar9 == DAT_00796344);
|
|
|
|
puVar20 = puVar21;
|
|
|
|
if (bVar12 != bVar7) {
|
|
|
|
puVar20 = puVar21 + 1;
|
|
|
|
fVar10 = fVar10 / (fVar10 - fVar9);
|
|
|
|
*pfVar18 = (*pfVar6 - *pfVar3) * fVar10 + *pfVar3;
|
|
|
|
pfVar18[1] = (pfVar6[1] - pfVar3[1]) * fVar10 + pfVar3[1];
|
|
|
|
pfVar18[2] = (pfVar6[2] - pfVar3[2]) * fVar10 + pfVar3[2];
|
|
|
|
pfVar18[3] = (pfVar6[3] - pfVar3[3]) * fVar10 + pfVar3[3];
|
|
|
|
*puVar21 = pfVar18;
|
|
|
|
pfVar18 = pfVar18 + 4;
|
|
|
|
}
|
|
|
|
pfVar3 = pfVar6;
|
|
|
|
puVar21 = puVar20;
|
|
|
|
bVar12 = bVar7;
|
|
|
|
fVar10 = fVar9;
|
|
|
|
if (bVar7) {
|
|
|
|
*puVar20 = pfVar6;
|
|
|
|
puVar21 = puVar20 + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_2 = (int)puVar21 - (int)param_1 >> 2;
|
|
|
|
local_18 = param_1;
|
|
|
|
if (param_2 < 3) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pfVar3 = pfVar11 + -6;
|
|
|
|
puVar19 = param_1;
|
|
|
|
pfVar6 = pfVar11;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b7f80 at 0x006B7F80 (size: 128) ---
|
|
|
|
|
|
void FUN_006b7f80(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
int iVar5;
|
|
|
|
int iVar6;
|
|
|
|
|
|
|
|
uVar4 = DAT_00836b64;
|
|
|
|
uVar3 = DAT_00807968;
|
|
|
|
if (param_2 == 2) {
|
|
|
|
uVar1 = *param_1;
|
|
|
|
iVar5 = FUN_006b7120(DAT_00867334,DAT_00836b64,DAT_00807968);
|
|
|
|
uVar2 = param_1[1];
|
|
|
|
iVar6 = FUN_006b7120(DAT_00867334,uVar4,uVar3);
|
|
|
|
if (iVar5 == 0) {
|
|
|
|
if (iVar6 != 0) {
|
|
|
|
FUN_006b7260(uVar1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_006b76a0(uVar1,uVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (iVar6 == 0) {
|
|
|
|
FUN_006b7260(uVar2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8000 at 0x006B8000 (size: 103) ---
|
|
|
|
|
|
void __fastcall FUN_006b8000(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_0080797c;
|
|
|
|
if ((undefined4 *)param_1[0x20] != (undefined4 *)0x0) {
|
|
|
|
(*(code *)**(undefined4 **)param_1[0x20])(1);
|
|
|
|
param_1[0x20] = 0;
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)param_1[2];
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)param_1[1];
|
|
|
|
LVar2 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
FUN_005aebf0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8070 at 0x006B8070 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006b8070(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b8000();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8090 at 0x006B8090 (size: 364) ---
|
|
|
|
|
|
void __fastcall FUN_006b8090(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
|
|
|
|
FUN_0048c3e0(&DAT_007938af);
|
|
|
|
puVar1 = (undefined4 *)param_1[1];
|
|
|
|
if (puVar1 != param_1) {
|
|
|
|
LVar3 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
param_1[1] = param_1;
|
|
|
|
InterlockedIncrement(param_1 + 1);
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement(param_1 + 1);
|
|
|
|
if ((LVar3 == 0) && (param_1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*param_1)(1);
|
|
|
|
}
|
|
|
|
FUN_0048c3e0(&DAT_007938af);
|
|
|
|
puVar1 = (undefined4 *)param_1[2];
|
|
|
|
if (puVar1 != param_1) {
|
|
|
|
LVar3 = InterlockedDecrement(puVar1 + 1);
|
|
|
|
if ((LVar3 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
param_1[2] = param_1;
|
|
|
|
InterlockedIncrement(param_1 + 1);
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement(param_1 + 1);
|
|
|
|
if ((LVar3 == 0) && (param_1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*param_1)(1);
|
|
|
|
}
|
|
|
|
param_1[3] = DAT_009064bc;
|
|
|
|
uVar2 = DAT_00807978;
|
|
|
|
param_1[4] = DAT_009064bc;
|
|
|
|
param_1[5] = DAT_009064bc;
|
|
|
|
param_1[0xb] = 0;
|
|
|
|
param_1[0xc] = 0;
|
|
|
|
param_1[0xd] = 0;
|
|
|
|
param_1[0xe] = 0;
|
|
|
|
param_1[0xf] = 0;
|
|
|
|
param_1[0x10] = 0;
|
|
|
|
param_1[0x11] = 0;
|
|
|
|
param_1[0x12] = 0;
|
|
|
|
param_1[0x13] = 0;
|
|
|
|
param_1[0x14] = 0;
|
|
|
|
param_1[0x15] = 0;
|
|
|
|
param_1[0x16] = 0;
|
|
|
|
param_1[0x17] = 0;
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[10] = 0;
|
|
|
|
param_1[9] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = uVar2;
|
|
|
|
param_1[0x1d] = DAT_009064bc;
|
|
|
|
param_1[0x1e] = 0;
|
|
|
|
param_1[0x1f] = 0;
|
|
|
|
param_1[0x21] = 0;
|
|
|
|
if ((undefined4 *)param_1[0x20] != (undefined4 *)0x0) {
|
|
|
|
(*(code *)**(undefined4 **)param_1[0x20])(1);
|
|
|
|
param_1[0x20] = 0;
|
|
|
|
}
|
|
|
|
param_1[0x22] = 0;
|
|
|
|
param_1[0x23] = 0;
|
|
|
|
param_1[0x24] = 0;
|
|
|
|
param_1[0x25] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8200 at 0x006B8200 (size: 76) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006b8200(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *pLVar1;
|
|
|
|
|
|
|
|
FUN_005aebe0();
|
|
|
|
*param_1 = &PTR_FUN_0080797c;
|
|
|
|
pLVar1 = (LONG *)(DAT_008ef11c + 4);
|
|
|
|
param_1[1] = DAT_008ef11c;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
pLVar1 = (LONG *)(DAT_008ef11c + 4);
|
|
|
|
param_1[2] = DAT_008ef11c;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
param_1[0x20] = 0;
|
|
|
|
FUN_006b8090();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8250 at 0x006B8250 (size: 842) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b8250(int param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
byte bVar2;
|
|
|
|
ushort uVar3;
|
|
|
|
int iVar4;
|
|
|
|
uint uVar5;
|
|
|
|
int *piVar6;
|
|
|
|
uint uVar7;
|
|
|
|
int iVar8;
|
|
|
|
int *piVar9;
|
|
|
|
|
|
|
|
piVar6 = param_2;
|
|
|
|
iVar4 = *param_2;
|
|
|
|
FUN_006b8090();
|
|
|
|
param_2 = (int *)0x0;
|
|
|
|
iVar8 = FUN_004fd290(¶m_2,0);
|
|
|
|
if (iVar8 + 0x10U <= param_3) {
|
|
|
|
uVar5 = *(uint *)*piVar6;
|
|
|
|
*piVar6 = (int)((uint *)*piVar6 + 1);
|
|
|
|
FUN_004fd460(piVar6,param_3);
|
|
|
|
uVar7 = param_3;
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0xc) = (uint)uVar3;
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x10) = uVar3 | 0x6000000;
|
|
|
|
*(undefined4 *)(param_1 + 0x34) = *(undefined4 *)*piVar6;
|
|
|
|
iVar8 = *piVar6;
|
|
|
|
*piVar6 = iVar8 + 4;
|
|
|
|
*(undefined4 *)(param_1 + 100) = *(undefined4 *)(iVar8 + 4);
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
if ((uVar5 & 1) != 0) {
|
|
|
|
FUN_004fd460(piVar6,param_3);
|
|
|
|
}
|
|
|
|
if ((uVar5 & 2) != 0) {
|
|
|
|
cVar1 = *(char *)*piVar6;
|
|
|
|
*piVar6 = (int)((char *)*piVar6 + 1);
|
|
|
|
*(int *)(param_1 + 0x2c) = (int)cVar1;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 4) != 0) {
|
|
|
|
cVar1 = *(char *)*piVar6;
|
|
|
|
*piVar6 = (int)((char *)*piVar6 + 1);
|
|
|
|
*(int *)(param_1 + 0x30) = (int)cVar1;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 8) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x38) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x10) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x20) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x40) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x80000) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x44) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((char)uVar5 < '\0') {
|
|
|
|
*(undefined4 *)(param_1 + 0x48) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x100) != 0) {
|
|
|
|
bVar2 = *(byte *)*piVar6;
|
|
|
|
*piVar6 = (int)((byte *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x4c) = (uint)bVar2;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x200) != 0) {
|
|
|
|
bVar2 = *(byte *)*piVar6;
|
|
|
|
*piVar6 = (int)((byte *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x50) = (uint)bVar2;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x400) != 0) {
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x54) = (uint)uVar3;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x800) != 0) {
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x58) = (uint)uVar3;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x1000) != 0) {
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x5c) = (uint)uVar3;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x2000) != 0) {
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x60) = (uint)uVar3;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x4000) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x18) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((char)(uVar5 >> 8) < '\0') {
|
|
|
|
*(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x10000) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x24) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x20000) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x28) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x40000) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x20) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x100000) != 0) {
|
|
|
|
bVar2 = *(byte *)*piVar6;
|
|
|
|
*piVar6 = (int)((byte *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x68) = (uint)bVar2;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x800000) != 0) {
|
|
|
|
bVar2 = *(byte *)*piVar6;
|
|
|
|
*piVar6 = (int)((byte *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x6c) = (uint)bVar2;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x1000000) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x70) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x200000) != 0) {
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x74) = (uint)uVar3;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x400000) != 0) {
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x78) = (uint)uVar3;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x2000000) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x7c) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x8000000) != 0) {
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x84) = (uint)uVar3;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x4000000) != 0) {
|
|
|
|
iVar8 = FUN_005df0f5(0x84);
|
|
|
|
if (iVar8 == 0) {
|
|
|
|
piVar9 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar9 = (int *)FUN_005aff60();
|
|
|
|
}
|
|
|
|
*(int **)(param_1 + 0x80) = piVar9;
|
|
|
|
(**(code **)(*piVar9 + 0x10))(piVar6,uVar7);
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x10000000) != 0) {
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x88) = (uint)uVar3;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x20000000) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x8c) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x40) != 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x90) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
if ((uVar5 & 0x40000000) != 0) {
|
|
|
|
uVar3 = *(ushort *)*piVar6;
|
|
|
|
*piVar6 = (int)((ushort *)*piVar6 + 1);
|
|
|
|
*(uint *)(param_1 + 0x14) = uVar3 | 0x6000000;
|
|
|
|
}
|
|
|
|
if ((int)uVar5 < 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x94) = *(undefined4 *)*piVar6;
|
|
|
|
*piVar6 = *piVar6 + 4;
|
|
|
|
}
|
|
|
|
FUN_004fd1b0(piVar6);
|
|
|
|
if ((uint)(*piVar6 - iVar4) <= uVar7) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
*piVar6 = iVar4;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b85d0 at 0x006B85D0 (size: 166) ---
|
|
|
|
|
|
void __thiscall FUN_006b85d0(int *param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
uVar2 = (**(code **)(*param_1 + 8))();
|
|
|
|
if (uVar2 <= param_3) {
|
|
|
|
*(int *)*param_2 = param_1[1];
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
*(int *)(iVar1 + 4) = param_1[2];
|
|
|
|
piVar3 = (int *)(*param_2 + 4);
|
|
|
|
*param_2 = (int)piVar3;
|
|
|
|
iVar1 = param_1[1];
|
|
|
|
if (iVar1 == 4) {
|
|
|
|
*piVar3 = param_1[3];
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
*(int *)(iVar1 + 4) = param_1[4];
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar1 == 5) {
|
|
|
|
*piVar3 = param_1[3];
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
*(int *)(iVar1 + 4) = param_1[4];
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
*(int *)(iVar1 + 4) = param_1[5];
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
*(int *)(iVar1 + 4) = param_1[6];
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (iVar1 == 6) {
|
|
|
|
*piVar3 = param_1[3];
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8680 at 0x006B8680 (size: 178) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b8680(int *param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
param_1[1] = *(int *)*param_2;
|
|
|
|
uVar2 = (**(code **)(*param_1 + 8))();
|
|
|
|
if (param_3 < uVar2) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
param_1[2] = *(int *)(iVar1 + 4);
|
|
|
|
piVar3 = (int *)(*param_2 + 4);
|
|
|
|
*param_2 = (int)piVar3;
|
|
|
|
iVar1 = param_1[1];
|
|
|
|
if (iVar1 == 4) {
|
|
|
|
param_1[3] = *piVar3;
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
param_1[4] = *(int *)(iVar1 + 4);
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar1 == 5) {
|
|
|
|
param_1[3] = *piVar3;
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
param_1[4] = *(int *)(iVar1 + 4);
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
param_1[5] = *(int *)(iVar1 + 4);
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*param_2 = iVar1 + 4;
|
|
|
|
param_1[6] = *(int *)(iVar1 + 4);
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (iVar1 == 6) {
|
|
|
|
param_1[3] = *piVar3;
|
|
|
|
*param_2 = *param_2 + 4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8740 at 0x006B8740 (size: 23) ---
|
|
|
|
|
|
void __fastcall FUN_006b8740(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_008079e0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8760 at 0x006B8760 (size: 85) ---
|
|
|
|
|
|
void __fastcall FUN_006b8760(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_008079e0;
|
|
|
|
if ((undefined4 *)param_1[1] != (undefined4 *)0x0) {
|
|
|
|
(*(code *)**(undefined4 **)param_1[1])(1);
|
|
|
|
}
|
|
|
|
param_1[1] = 0;
|
|
|
|
if ((undefined4 *)param_1[2] != (undefined4 *)0x0) {
|
|
|
|
(*(code *)**(undefined4 **)param_1[2])(1);
|
|
|
|
}
|
|
|
|
param_1[2] = 0;
|
|
|
|
if ((undefined4 *)param_1[3] != (undefined4 *)0x0) {
|
|
|
|
(*(code *)**(undefined4 **)param_1[3])(1);
|
|
|
|
}
|
|
|
|
param_1[3] = 0;
|
|
|
|
if ((undefined4 *)param_1[4] != (undefined4 *)0x0) {
|
|
|
|
(*(code *)**(undefined4 **)param_1[4])(1);
|
|
|
|
}
|
|
|
|
param_1[4] = 0;
|
|
|
|
*param_1 = &PTR_FUN_0079385c;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8860 at 0x006B8860 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006b8860(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006b8760();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8a30 at 0x006B8A30 (size: 44) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006b8a30(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x10) != 0) {
|
|
|
|
iVar1 = FUN_005d5760(&stack0x00000004);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
FUN_0048a0a0(iVar1);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8a60 at 0x006B8A60 (size: 211) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006b8a60(int param_1,uint param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
uint *puVar5;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x10) == 0) {
|
|
|
|
puVar3 = (undefined4 *)FUN_005df0f5(0x14);
|
|
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
|
|
puVar3 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar3 = &PTR_FUN_007e553c;
|
|
|
|
puVar3[1] = 0;
|
|
|
|
puVar3[2] = 0;
|
|
|
|
puVar3[3] = 8;
|
|
|
|
puVar3[4] = 0;
|
|
|
|
FUN_005a8440();
|
|
|
|
}
|
|
|
|
*(undefined4 **)(param_1 + 0x10) = puVar3;
|
|
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar1 = *(uint *)(*(int *)(param_1 + 0x10) + 0xc);
|
|
|
|
if (((uVar1 != 0) && (iVar2 = *(int *)(*(int *)(param_1 + 0x10) + 8), iVar2 != 0)) &&
|
|
|
|
(puVar5 = *(uint **)(iVar2 + (param_2 % uVar1) * 4), puVar5 != (uint *)0x0)) {
|
|
|
|
while (param_2 != *puVar5) {
|
|
|
|
puVar5 = (uint *)puVar5[2];
|
|
|
|
if (puVar5 == (uint *)0x0) {
|
|
|
|
uVar4 = FUN_00591ae0(¶m_2,param_3);
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (puVar5 != (uint *)0xfffffffc) {
|
|
|
|
FUN_0048a0a0(param_3);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar4 = FUN_00591ae0(¶m_2,param_3);
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- _CxxThrowException at 0x006B8B8C (size: 6) ---
|
|
|
|
|
|
void _CxxThrowException(void *pExceptionObject,ThrowInfo *pThrowInfo)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b8b8c. Too many branches */
|
|
|
|
/* WARNING: Subroutine does not return */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
_CxxThrowException(pExceptionObject,pThrowInfo);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- report_failure at 0x006B8B92 (size: 41) ---
|
|
|
|
|
|
/* WARNING: Function: __SEH_prolog replaced with injection: SEH_prolog */
|
|
|
|
/* Library Function - Single Match
|
|
|
|
_report_failure
|
|
|
|
|
|
|
|
Library: Visual Studio 2003 Release */
|
|
|
|
|
|
|
|
void __cdecl report_failure(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
__security_error_handler(1,0);
|
|
|
|
/* WARNING: Subroutine does not return */
|
|
|
|
ExitProcess(3);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- __security_check_cookie at 0x006B8BC3 (size: 14) ---
|
|
|
|
|
|
/* WARNING: This is an inlined function */
|
|
|
|
|
|
|
|
void __fastcall __security_check_cookie(uintptr_t _StackCookie)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (_StackCookie == DAT_00836f40) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
report_failure();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8bd4 at 0x006B8BD4 (size: 31) ---
|
|
|
|
|
|
void FUN_006b8bd4(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 auStack_c [12];
|
|
|
|
|
|
|
|
ExceptionList = auStack_c;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- __aulldvrm at 0x006B8C00 (size: 149) ---
|
|
|
|
|
|
/* Library Function - Single Match
|
|
|
|
__aulldvrm
|
|
|
|
|
|
|
|
Library: Visual Studio */
|
|
|
|
|
|
|
|
undefined8 __aulldvrm(uint param_1,uint param_2,uint param_3,uint param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
ulonglong uVar1;
|
|
|
|
longlong lVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int iVar4;
|
|
|
|
uint uVar5;
|
|
|
|
uint uVar6;
|
|
|
|
uint uVar7;
|
|
|
|
uint uVar8;
|
|
|
|
uint uVar9;
|
|
|
|
|
|
|
|
uVar3 = param_1;
|
|
|
|
uVar8 = param_4;
|
|
|
|
uVar6 = param_2;
|
|
|
|
uVar9 = param_3;
|
|
|
|
if (param_4 == 0) {
|
|
|
|
uVar3 = param_2 / param_3;
|
|
|
|
iVar4 = (int)(((ulonglong)param_2 % (ulonglong)param_3 << 0x20 | (ulonglong)param_1) /
|
|
|
|
(ulonglong)param_3);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
uVar5 = uVar8 >> 1;
|
|
|
|
uVar9 = uVar9 >> 1 | (uint)((uVar8 & 1) != 0) << 0x1f;
|
|
|
|
uVar7 = uVar6 >> 1;
|
|
|
|
uVar3 = uVar3 >> 1 | (uint)((uVar6 & 1) != 0) << 0x1f;
|
|
|
|
uVar8 = uVar5;
|
|
|
|
uVar6 = uVar7;
|
|
|
|
} while (uVar5 != 0);
|
|
|
|
uVar1 = CONCAT44(uVar7,uVar3) / (ulonglong)uVar9;
|
|
|
|
iVar4 = (int)uVar1;
|
|
|
|
lVar2 = (ulonglong)param_3 * (uVar1 & 0xffffffff);
|
|
|
|
uVar3 = (uint)((ulonglong)lVar2 >> 0x20);
|
|
|
|
uVar8 = uVar3 + iVar4 * param_4;
|
|
|
|
if (((CARRY4(uVar3,iVar4 * param_4)) || (param_2 < uVar8)) ||
|
|
|
|
((param_2 <= uVar8 && (param_1 < (uint)lVar2)))) {
|
|
|
|
iVar4 = iVar4 + -1;
|
|
|
|
}
|
|
|
|
uVar3 = 0;
|
|
|
|
}
|
|
|
|
return CONCAT44(uVar3,iVar4);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- ~type_info at 0x006B8C96 (size: 6) ---
|
|
|
|
|
|
void __thiscall type_info::~type_info(type_info *this)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b8c96. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
~type_info(this);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- __security_error_handler at 0x006B8CF2 (size: 6) ---
|
|
|
|
|
|
void __security_error_handler(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b8cf2. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
__security_error_handler();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8d00 at 0x006B8D00 (size: 37) ---
|
|
|
|
|
|
void FUN_006b8d00(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00405a60("kernel32.dll","CreateFileW",&PTR_FUN_00837374,DAT_00906788,&LAB_00405bb3);
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b8d1f. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(*(code *)PTR_FUN_00837374)();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006b8ebc at 0x006B8EBC (size: 37) ---
|
|
|
|
|
|
void FUN_006b8ebc(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00405a60("advapi32.dll","RegCreateKeyExW",&PTR_FUN_00837348,DAT_00906758,&DAT_00405dbc);
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006b8edb. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(*(code *)PTR_FUN_00837348)();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- compress2 at 0x006BA9E0 (size: 6) ---
|
|
|
|
|
|
void compress2(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006ba9e0. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
compress2();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- uncompress at 0x006BA9E6 (size: 6) ---
|
|
|
|
|
|
void uncompress(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006ba9e6. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
uncompress();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006ba9f0 at 0x006BA9F0 (size: 85) ---
|
|
|
|
|
|
void __fastcall FUN_006ba9f0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(int *)(param_1 + 0x10) != 0) {
|
|
|
|
RpcEpUnregister(*(RPC_IF_HANDLE *)(param_1 + 4),*(RPC_BINDING_VECTOR **)(param_1 + 0x18),
|
|
|
|
(UUID_VECTOR *)0x0);
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x18) != 0) {
|
|
|
|
RpcBindingVectorFree((RPC_BINDING_VECTOR **)(param_1 + 0x18));
|
|
|
|
*(RPC_BINDING_VECTOR **)(param_1 + 0x18) = (RPC_BINDING_VECTOR *)0x0;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0xc) != 0) {
|
|
|
|
RpcServerUnregisterIf(*(RPC_IF_HANDLE *)(param_1 + 4),(UUID *)0x0,1);
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006baa50 at 0x006BAA50 (size: 111) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
void __fastcall FUN_006baa50(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
RPC_STATUS RVar1;
|
|
|
|
|
|
|
|
if (param_1[5] != 0) {
|
|
|
|
_DAT_009065d4 = _DAT_009065d4 + -1;
|
|
|
|
if (_DAT_009065d4 == 0) {
|
|
|
|
RVar1 = RpcMgmtStopServerListening((RPC_BINDING_HANDLE)0x0);
|
|
|
|
if (RVar1 == 0) {
|
|
|
|
RpcMgmtWaitServerListen();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_1[5] = 0;
|
|
|
|
}
|
|
|
|
FUN_006ba9f0();
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
_DAT_009065c0 = 0;
|
|
|
|
_DAT_009065c4 = 0;
|
|
|
|
_DAT_009065c8 = 0;
|
|
|
|
_DAT_009065cc = 0;
|
|
|
|
_DAT_009065d0 = 0;
|
|
|
|
operator_delete__((void *)param_1[2]);
|
|
|
|
param_1[2] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bab00 at 0x006BAB00 (size: 111) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006bab00(int param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (param_2 != 0) {
|
|
|
|
*(undefined1 *)(param_1 + 0x1d) = 1;
|
|
|
|
FUN_0065cf90(param_2);
|
|
|
|
iVar1 = FUN_0065c810();
|
|
|
|
while (iVar1 != 0) {
|
|
|
|
if (*(int *)(param_1 + 0x18) == 0) {
|
|
|
|
*(undefined1 *)(param_1 + 0x1e) = 1;
|
|
|
|
}
|
|
|
|
FUN_006bb5c0(iVar1,param_3);
|
|
|
|
if (*(char *)(param_1 + 0x1d) != '\0') {
|
|
|
|
*(undefined1 *)(param_1 + 0x1d) = 0;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_0065cb10();
|
|
|
|
}
|
|
|
|
FUN_0065cae0();
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bab90 at 0x006BAB90 (size: 94) ---
|
|
|
|
|
|
undefined1 FUN_006bab90(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FILE *_File;
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined1 uVar3;
|
|
|
|
|
|
|
|
if (*(int *)((char *)*param_1 + -4) != 1) {
|
|
|
|
uVar3 = 0;
|
|
|
|
_File = fopen((char *)*param_1,"rb");
|
|
|
|
if (_File != (FILE *)0x0) {
|
|
|
|
iVar1 = _getw(_File);
|
|
|
|
iVar2 = ferror(_File);
|
|
|
|
uVar3 = 0;
|
|
|
|
if ((iVar2 == 0) && (iVar1 == -0x55555556)) {
|
|
|
|
uVar3 = 1;
|
|
|
|
}
|
|
|
|
fclose(_File);
|
|
|
|
}
|
|
|
|
return uVar3;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006babf0 at 0x006BABF0 (size: 273) ---
|
|
|
|
|
|
uint FUN_006babf0(undefined4 param_1,uint param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
uint uVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
undefined *local_10 [4];
|
|
|
|
|
|
|
|
if (param_3 == 0) {
|
|
|
|
return param_2 + 1;
|
|
|
|
}
|
|
|
|
local_10[0] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00426020(local_10);
|
|
|
|
iVar2 = *(int *)(local_10[0] + -4);
|
|
|
|
uVar4 = iVar2 - 1;
|
|
|
|
iVar1 = FUN_0065ca40();
|
|
|
|
if ((iVar1 != 0) && (uVar4 = iVar2 + 5, uVar4 <= param_2)) {
|
|
|
|
FUN_0065cf90(param_1);
|
|
|
|
iVar2 = FUN_0065c810();
|
|
|
|
while (iVar2 != 0) {
|
|
|
|
if (*(int *)(*(int *)(iVar2 + 0x10) + -4) != 1) {
|
|
|
|
FUN_0065cae0();
|
|
|
|
puVar5 = (undefined4 *)(local_10[0] + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_10[0] + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar5 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar5)(1);
|
|
|
|
}
|
|
|
|
return param_2 + 1;
|
|
|
|
}
|
|
|
|
iVar2 = FUN_006babf0(iVar2,param_2 - uVar4,param_3 + -1);
|
|
|
|
uVar4 = uVar4 + iVar2;
|
|
|
|
if (param_2 < uVar4) break;
|
|
|
|
iVar2 = FUN_0065cb10();
|
|
|
|
}
|
|
|
|
FUN_0065cae0();
|
|
|
|
}
|
|
|
|
puVar5 = (undefined4 *)(local_10[0] + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_10[0] + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar5 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar5)(1);
|
|
|
|
}
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bad10 at 0x006BAD10 (size: 203) ---
|
|
|
|
|
|
uint FUN_006bad10(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
int iVar4;
|
|
|
|
uint local_4c [13];
|
|
|
|
undefined4 local_18;
|
|
|
|
|
|
|
|
FUN_006bd070();
|
|
|
|
uVar2 = FUN_006bd140(*param_2,1,1,0,0,0,0);
|
|
|
|
FUN_004f7a90(0,uVar2,local_18);
|
|
|
|
FUN_00685780(0xaaaaaaaa,local_4c);
|
|
|
|
(**(code **)(*param_1 + 0x14))(local_4c);
|
|
|
|
FUN_0065d3f0(param_2);
|
|
|
|
iVar1 = *param_2;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
iVar4 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
FUN_00427050(iVar4);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
FUN_0040b060();
|
|
|
|
uVar2 = FUN_006bd0a0();
|
|
|
|
return CONCAT31((int3)((uint)uVar2 >> 8),~(byte)(local_4c[0] >> 2)) & 0xffffff01;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bade0 at 0x006BADE0 (size: 97) ---
|
|
|
|
|
|
void __thiscall FUN_006bade0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char *_Str;
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
if ((*(char *)(param_1 + 0x1c) != '\0') &&
|
|
|
|
(uVar1 = 0, _Str = (char *)DAT_00906660, *(int *)(param_1 + 0x18) != 0)) {
|
|
|
|
do {
|
|
|
|
if (*(char *)(param_2 + 4) == '\0') {
|
|
|
|
fputs(_Str,*(FILE **)(param_2 + 8));
|
|
|
|
_Str = (char *)DAT_00906660;
|
|
|
|
}
|
|
|
|
else if (*(int *)(_Str + -4) != 1) {
|
|
|
|
FUN_00404ef0(_Str,*(int *)(_Str + -4) + -1);
|
|
|
|
_Str = (char *)DAT_00906660;
|
|
|
|
}
|
|
|
|
uVar1 = uVar1 + 1;
|
|
|
|
} while (uVar1 < *(uint *)(param_1 + 0x18));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bae50 at 0x006BAE50 (size: 1009) ---
|
|
|
|
|
|
undefined4 FUN_006bae50(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char *pcVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
char cVar5;
|
|
|
|
undefined1 uVar6;
|
|
|
|
undefined **ppuVar7;
|
|
|
|
uint uVar8;
|
|
|
|
LONG LVar9;
|
|
|
|
char *pcVar10;
|
|
|
|
char *pcVar11;
|
|
|
|
undefined4 *unaff_EBX;
|
|
|
|
int unaff_EBP;
|
|
|
|
uint unaff_ESI;
|
|
|
|
undefined4 *unaff_EDI;
|
|
|
|
char unaff_retaddr;
|
|
|
|
undefined **local_10;
|
|
|
|
undefined4 local_8;
|
|
|
|
int *local_4;
|
|
|
|
|
|
|
|
local_4 = param_1;
|
|
|
|
param_1 = (int *)CONCAT31(param_1._1_3_,*(int *)(*param_1 + -4) == 1);
|
|
|
|
local_10 = &PTR_FUN_0079548c;
|
|
|
|
local_8 = 0;
|
|
|
|
cVar5 = (*(code *)PTR_FUN_00795494)(0);
|
|
|
|
iVar4 = (int)param_1;
|
|
|
|
while (cVar5 != '\0') {
|
|
|
|
uVar6 = (*(code *)unaff_EBX[2])(local_10);
|
|
|
|
switch(uVar6) {
|
|
|
|
case 9:
|
|
|
|
case 0x20:
|
|
|
|
case 0x23:
|
|
|
|
case 0x28:
|
|
|
|
case 0x29:
|
|
|
|
case 0x2c:
|
|
|
|
case 0x5b:
|
|
|
|
case 0x5d:
|
|
|
|
case 0x7b:
|
|
|
|
case 0x7d:
|
|
|
|
goto LAB_006baeff;
|
|
|
|
default:
|
|
|
|
local_10 = (undefined **)((int)local_10 + 1);
|
|
|
|
ppuVar7 = (undefined **)(*(code *)*unaff_EBX)();
|
|
|
|
if (ppuVar7 < local_10) {
|
|
|
|
local_10 = (undefined **)(*(code *)*unaff_EBX)();
|
|
|
|
}
|
|
|
|
cVar5 = (*(code *)unaff_EBX[2])(local_10);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (unaff_retaddr != '\0') {
|
|
|
|
LAB_006baeff:
|
|
|
|
if (*(char *)(iVar4 + 4) == '\0') {
|
|
|
|
putc(0x22,*(FILE **)(iVar4 + 8));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar1 = *(int **)(iVar4 + 0xc);
|
|
|
|
pcVar2 = (char *)*piVar1;
|
|
|
|
param_1 = (int *)CONCAT31(param_1._1_3_,0x22);
|
|
|
|
iVar3 = *(int *)(pcVar2 + -4);
|
|
|
|
if ((*(int *)(pcVar2 + -0x10) == 1) && (iVar3 + 1U <= *(uint *)(pcVar2 + -0xc))) {
|
|
|
|
*(uint *)(pcVar2 + -4) = iVar3 + 1U;
|
|
|
|
*(undefined4 *)(*piVar1 + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00401280(iVar3);
|
|
|
|
pcVar11 = (char *)*piVar1;
|
|
|
|
pcVar10 = pcVar2;
|
|
|
|
do {
|
|
|
|
cVar5 = *pcVar10;
|
|
|
|
pcVar10 = pcVar10 + 1;
|
|
|
|
*pcVar11 = cVar5;
|
|
|
|
pcVar11 = pcVar11 + 1;
|
|
|
|
} while (cVar5 != '\0');
|
|
|
|
LVar9 = InterlockedDecrement((LONG *)(pcVar2 + -0x10));
|
|
|
|
if ((LVar9 == 0) && (pcVar2 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pcVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
strncpy((char *)(*piVar1 + -1 + iVar3),(char *)¶m_1,1);
|
|
|
|
*(undefined1 *)(*(int *)(*piVar1 + -4) + -1 + *piVar1) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar5 = (*(code *)unaff_EBX[2])(0);
|
|
|
|
while (cVar5 != '\0') {
|
|
|
|
uVar6 = (**(code **)(unaff_EBP + 8))(unaff_EBX);
|
|
|
|
switch(uVar6) {
|
|
|
|
case 10:
|
|
|
|
case 0xd:
|
|
|
|
case 0x22:
|
|
|
|
case 0x5c:
|
|
|
|
if (*(char *)(iVar4 + 4) == '\0') {
|
|
|
|
putc(0x5c,*(FILE **)(iVar4 + 8));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar1 = *(int **)(iVar4 + 0xc);
|
|
|
|
pcVar2 = (char *)*piVar1;
|
|
|
|
local_4 = (int *)CONCAT31(local_4._1_3_,0x5c);
|
|
|
|
iVar3 = *(int *)(pcVar2 + -4);
|
|
|
|
if ((*(int *)(pcVar2 + -0x10) == 1) && (iVar3 + 1U <= *(uint *)(pcVar2 + -0xc))) {
|
|
|
|
*(uint *)(pcVar2 + -4) = iVar3 + 1U;
|
|
|
|
*(undefined4 *)(*piVar1 + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00401280(iVar3);
|
|
|
|
pcVar11 = (char *)*piVar1;
|
|
|
|
pcVar10 = pcVar2;
|
|
|
|
do {
|
|
|
|
cVar5 = *pcVar10;
|
|
|
|
pcVar10 = pcVar10 + 1;
|
|
|
|
*pcVar11 = cVar5;
|
|
|
|
pcVar11 = pcVar11 + 1;
|
|
|
|
} while (cVar5 != '\0');
|
|
|
|
LVar9 = InterlockedDecrement((LONG *)(pcVar2 + -0x10));
|
|
|
|
if ((LVar9 == 0) && (pcVar2 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pcVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
strncpy((char *)(*piVar1 + -1 + iVar3),(char *)&local_4,1);
|
|
|
|
*(undefined1 *)(*(int *)(*piVar1 + -4) + -1 + *piVar1) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar5 = (**(code **)(unaff_ESI + 8))(unaff_EBP);
|
|
|
|
if (*(char *)(iVar4 + 4) == '\0') {
|
|
|
|
putc((int)cVar5,*(FILE **)(iVar4 + 8));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar1 = *(int **)(iVar4 + 0xc);
|
|
|
|
local_8 = CONCAT31(local_8._1_3_,cVar5);
|
|
|
|
if (cVar5 != '\0') {
|
|
|
|
pcVar2 = (char *)*piVar1;
|
|
|
|
iVar3 = *(int *)(pcVar2 + -4);
|
|
|
|
if ((*(int *)(pcVar2 + -0x10) == 1) && (iVar3 + 1U <= *(uint *)(pcVar2 + -0xc))) {
|
|
|
|
*(uint *)(pcVar2 + -4) = iVar3 + 1U;
|
|
|
|
*(undefined4 *)(*piVar1 + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00401280(iVar3);
|
|
|
|
pcVar11 = (char *)*piVar1;
|
|
|
|
pcVar10 = pcVar2;
|
|
|
|
do {
|
|
|
|
cVar5 = *pcVar10;
|
|
|
|
pcVar10 = pcVar10 + 1;
|
|
|
|
*pcVar11 = cVar5;
|
|
|
|
pcVar11 = pcVar11 + 1;
|
|
|
|
} while (cVar5 != '\0');
|
|
|
|
LVar9 = InterlockedDecrement((LONG *)(pcVar2 + -0x10));
|
|
|
|
if ((LVar9 == 0) && (pcVar2 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pcVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
strncpy((char *)(*piVar1 + -1 + iVar3),(char *)&local_8,1);
|
|
|
|
*(undefined1 *)(*(int *)(*piVar1 + -4) + -1 + *piVar1) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
unaff_ESI = unaff_ESI + 1;
|
|
|
|
uVar8 = (*(code *)*unaff_EDI)();
|
|
|
|
if (uVar8 < unaff_ESI) {
|
|
|
|
unaff_ESI = (*(code *)*unaff_EDI)();
|
|
|
|
}
|
|
|
|
cVar5 = (*(code *)unaff_EDI[2])(unaff_ESI);
|
|
|
|
}
|
|
|
|
if ((char)local_4 != '\0') {
|
|
|
|
if (*(char *)(iVar4 + 4) != '\0') {
|
|
|
|
piVar1 = *(int **)(iVar4 + 0xc);
|
|
|
|
pcVar2 = (char *)*piVar1;
|
|
|
|
local_4._1_3_ = (undefined3)((uint)local_4 >> 8);
|
|
|
|
local_4 = (int *)CONCAT31(local_4._1_3_,0x22);
|
|
|
|
iVar4 = *(int *)(pcVar2 + -4);
|
|
|
|
if ((*(int *)(pcVar2 + -0x10) == 1) && (iVar4 + 1U <= *(uint *)(pcVar2 + -0xc))) {
|
|
|
|
*(uint *)(pcVar2 + -4) = iVar4 + 1U;
|
|
|
|
*(undefined4 *)(*piVar1 + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00401280(iVar4);
|
|
|
|
pcVar11 = (char *)*piVar1;
|
|
|
|
pcVar10 = pcVar2;
|
|
|
|
do {
|
|
|
|
cVar5 = *pcVar10;
|
|
|
|
pcVar10 = pcVar10 + 1;
|
|
|
|
*pcVar11 = cVar5;
|
|
|
|
pcVar11 = pcVar11 + 1;
|
|
|
|
} while (cVar5 != '\0');
|
|
|
|
LVar9 = InterlockedDecrement((LONG *)(pcVar2 + -0x10));
|
|
|
|
if ((LVar9 == 0) && (pcVar2 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pcVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
strncpy((char *)(*piVar1 + -1 + iVar4),(char *)&local_4,1);
|
|
|
|
*(undefined1 *)(*(int *)(*piVar1 + -4) + -1 + *piVar1) = 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
putc(0x22,*(FILE **)(iVar4 + 8));
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bb320 at 0x006BB320 (size: 52) ---
|
|
|
|
|
|
void FUN_006bb320(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(char *)(param_1 + 4) != '\0') {
|
|
|
|
param_1 = CONCAT31(param_1._1_3_,10);
|
|
|
|
FUN_00404ef0(¶m_1,1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
putc(10,*(FILE **)(param_1 + 8));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bb360 at 0x006BB360 (size: 104) ---
|
|
|
|
|
|
void __thiscall FUN_006bb360(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(char *)(param_1 + 0x1c) == '\0') {
|
|
|
|
if (*(char *)(param_2 + 4) != '\0') {
|
|
|
|
param_2 = CONCAT31(param_2._1_3_,0x20);
|
|
|
|
FUN_00404ef0(¶m_2,1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
putc(0x20,*(FILE **)(param_2 + 8));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (*(char *)(param_2 + 4) != '\0') {
|
|
|
|
param_2 = CONCAT31(param_2._1_3_,10);
|
|
|
|
FUN_00404ef0(¶m_2,1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
putc(10,*(FILE **)(param_2 + 8));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bb3d0 at 0x006BB3D0 (size: 80) ---
|
|
|
|
|
|
void __thiscall FUN_006bb3d0(int param_1,undefined4 param_2,undefined4 param_3,char param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
cVar1 = FUN_006bab90(param_3);
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
FUN_006bad10(param_2,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar2 = 0;
|
|
|
|
if (param_4 != '\0') {
|
|
|
|
iVar2 = param_1 + 4;
|
|
|
|
}
|
|
|
|
FUN_006bca90(param_2,param_3,iVar2,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0x10),
|
|
|
|
*(undefined4 *)(param_1 + 0x14));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bb420 at 0x006BB420 (size: 415) ---
|
|
|
|
|
|
void __thiscall FUN_006bb420(uint param_1,uint param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
char cVar2;
|
|
|
|
uint uVar3;
|
|
|
|
undefined4 *unaff_EBX;
|
|
|
|
char unaff_retaddr;
|
|
|
|
uint local_14;
|
|
|
|
|
|
|
|
iVar1 = param_3;
|
|
|
|
if ((param_2 != 0) && (*(int *)(*(int *)(param_2 + 0x10) + -4) != 1)) {
|
|
|
|
if (*(char *)(param_1 + 0x1d) == '\0') {
|
|
|
|
FUN_006bb320(param_3);
|
|
|
|
}
|
|
|
|
FUN_006bade0(iVar1);
|
|
|
|
if (*(char *)(iVar1 + 4) == '\0') {
|
|
|
|
putc(0x23,*(FILE **)(iVar1 + 8));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
param_2 = CONCAT31(param_2._1_3_,0x23);
|
|
|
|
FUN_00404ef0(¶m_2,1);
|
|
|
|
}
|
|
|
|
param_2 = param_2 & 0xffffff00;
|
|
|
|
cVar2 = (*(code *)PTR_FUN_00795494)(0);
|
|
|
|
local_14 = param_1;
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
do {
|
|
|
|
if (unaff_retaddr != '\0') {
|
|
|
|
FUN_006bade0(iVar1);
|
|
|
|
if (*(char *)(iVar1 + 4) == '\0') {
|
|
|
|
putc(0x23,*(FILE **)(iVar1 + 8));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00404ef0(&stack0x00000000,1);
|
|
|
|
}
|
|
|
|
unaff_retaddr = '\0';
|
|
|
|
}
|
|
|
|
cVar2 = (**(code **)(local_14 + 8))(&PTR_FUN_0079548c);
|
|
|
|
if (*(char *)(iVar1 + 4) == '\0') {
|
|
|
|
putc((int)cVar2,*(FILE **)(iVar1 + 8));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00404ef0(&stack0x00000000,1);
|
|
|
|
unaff_retaddr = cVar2;
|
|
|
|
}
|
|
|
|
local_14 = local_14 + 1;
|
|
|
|
uVar3 = (*(code *)*unaff_EBX)();
|
|
|
|
if (uVar3 < local_14) {
|
|
|
|
local_14 = (*(code *)*unaff_EBX)();
|
|
|
|
}
|
|
|
|
cVar2 = (*(code *)unaff_EBX[2])(local_14);
|
|
|
|
} while (cVar2 != '\0');
|
|
|
|
if (unaff_retaddr != '\0') {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (*(char *)(iVar1 + 4) != '\0') {
|
|
|
|
FUN_00404ef0(&stack0x00000000,1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
putc(10,*(FILE **)(iVar1 + 8));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bb5c0 at 0x006BB5C0 (size: 381) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006bb5c0(undefined *param_1,int param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int iVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
char cVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
undefined *local_4;
|
|
|
|
|
|
|
|
iVar1 = param_2;
|
|
|
|
if (param_2 != 0) {
|
|
|
|
local_4 = param_1;
|
|
|
|
if ((param_1[0x1c] == '\0') || (uVar3 = FUN_006babf0(param_2,0x50,3), uVar3 < 0x51)) {
|
|
|
|
cVar6 = '\0';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar6 = '\x01';
|
|
|
|
}
|
|
|
|
iVar2 = param_3;
|
|
|
|
if (((param_1[0x1e] != '\0') || ((param_1[0x1d] == '\0' && (cVar6 != '\0')))) &&
|
|
|
|
(param_1[0x1e] = 0, *(int *)(*(int *)(iVar1 + 0x10) + -4) == 1)) {
|
|
|
|
FUN_006bb320(param_3);
|
|
|
|
}
|
|
|
|
FUN_006bb420(iVar1,iVar2);
|
|
|
|
FUN_006bade0(iVar2);
|
|
|
|
local_4 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00426020(&local_4);
|
|
|
|
FUN_006bae50(&local_4,iVar2);
|
|
|
|
iVar4 = FUN_0065ca40();
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
param_3 = CONCAT31(param_3._1_3_,param_1[0x1c]);
|
|
|
|
param_1[0x1c] = cVar6;
|
|
|
|
FUN_006bb360(iVar2);
|
|
|
|
FUN_006bade0(iVar2);
|
|
|
|
if (*(char *)(iVar2 + 4) == '\0') {
|
|
|
|
putc(0x5b,*(FILE **)(iVar2 + 8));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
param_2 = CONCAT31(param_2._1_3_,0x5b);
|
|
|
|
FUN_00404ef0(¶m_2,1);
|
|
|
|
}
|
|
|
|
FUN_006bb360(iVar2);
|
|
|
|
*(int *)(param_1 + 0x18) = *(int *)(param_1 + 0x18) + 1;
|
|
|
|
FUN_006bab00(iVar1,iVar2);
|
|
|
|
*(int *)(param_1 + 0x18) = *(int *)(param_1 + 0x18) + -1;
|
|
|
|
FUN_006bade0(iVar2);
|
|
|
|
if (*(char *)(iVar2 + 4) == '\0') {
|
|
|
|
putc(0x5d,*(FILE **)(iVar2 + 8));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
param_2 = CONCAT31(param_2._1_3_,0x5d);
|
|
|
|
FUN_00404ef0(¶m_2,1);
|
|
|
|
}
|
|
|
|
param_1[0x1e] = param_1[0x1c];
|
|
|
|
param_1[0x1c] = (undefined1)param_3;
|
|
|
|
}
|
|
|
|
FUN_006bb360(iVar2);
|
|
|
|
puVar7 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar5 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bb740 at 0x006BB740 (size: 378) ---
|
|
|
|
|
|
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
|
|
|
|
|
|
|
|
undefined1 __thiscall FUN_006bb740(int param_1,int param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined1 uVar2;
|
|
|
|
FILE *_File;
|
|
|
|
LONG LVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined *local_28;
|
|
|
|
uint local_24;
|
|
|
|
double local_20;
|
|
|
|
undefined **local_18;
|
|
|
|
undefined1 local_14;
|
|
|
|
FILE *local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
|
|
|
|
if (param_2 != 0) {
|
|
|
|
local_28 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
thunk_FUN_0040c780(&local_28,param_3);
|
|
|
|
thunk_FUN_0040df20(&local_28);
|
|
|
|
local_24 = 0;
|
|
|
|
if (*(int *)(param_1 + 8) != 0) {
|
|
|
|
do {
|
|
|
|
_File = _fsopen((char *)*param_3,"w",0x10);
|
|
|
|
if (_File != (FILE *)0x0) {
|
|
|
|
local_c = 0;
|
|
|
|
local_14 = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x18) = 0;
|
|
|
|
local_18 = &PTR_LAB_00807b3c;
|
|
|
|
*(undefined1 *)(param_1 + 0x1c) = 1;
|
|
|
|
local_10 = _File;
|
|
|
|
FUN_006bb420(param_2,&local_18);
|
|
|
|
uVar2 = FUN_006bab00(param_2,&local_18);
|
|
|
|
fclose(_File);
|
|
|
|
puVar4 = (undefined4 *)(local_28 + -0x14);
|
|
|
|
local_18 = &PTR_LAB_00807b3c;
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_28 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_0040b320(param_3,0);
|
|
|
|
if (cVar1 == '\0') break;
|
|
|
|
FUN_0040fbd0();
|
|
|
|
local_20 = _DAT_008379a8 + *(double *)(param_1 + 0x10);
|
|
|
|
if (_DAT_008379a8 < local_20) {
|
|
|
|
do {
|
|
|
|
FUN_0040fbd0();
|
|
|
|
} while (_DAT_008379a8 < local_20);
|
|
|
|
}
|
|
|
|
local_24 = local_24 + 1;
|
|
|
|
} while (local_24 < *(uint *)(param_1 + 8));
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(local_28 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_28 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bb8c0 at 0x006BB8C0 (size: 116) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006bb8c0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *pLVar1;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_00795074;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
FUN_006bbc60();
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0xe] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0xf] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
param_1[0x10] = param_2;
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0x11] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
FUN_006bbce0(&PTR_DAT_008183b4,&PTR_DAT_008183b4);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bb940 at 0x006BB940 (size: 124) ---
|
|
|
|
|
|
void __fastcall FUN_006bb940(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
FUN_006bbda0();
|
|
|
|
puVar2 = (undefined4 *)(param_1[0x11] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_1[0x11] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(param_1[0xf] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_1[0xf] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(param_1[0xe] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_1[0xe] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_006bbc90();
|
|
|
|
*param_1 = &PTR_FUN_00795074;
|
|
|
|
FUN_00405210();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bb9c0 at 0x006BB9C0 (size: 70) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006bb9c0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 1;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 7) = 1;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x1f) = 1;
|
|
|
|
iVar1 = FUN_005df0f5(0x48);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
uVar2 = FUN_006bb8c0(param_1);
|
|
|
|
*param_1 = uVar2;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bba10 at 0x006BBA10 (size: 52) ---
|
|
|
|
|
|
void __fastcall FUN_006bba10(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
|
|
|
|
if ((FILE *)param_1[1] != (FILE *)0x0) {
|
|
|
|
fclose((FILE *)param_1[1]);
|
|
|
|
}
|
|
|
|
pvVar1 = (void *)*param_1;
|
|
|
|
if (pvVar1 != (void *)0x0) {
|
|
|
|
FUN_006bb940();
|
|
|
|
operator_delete(pvVar1);
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bba50 at 0x006BBA50 (size: 143) ---
|
|
|
|
|
|
char __fastcall FUN_006bba50(char *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
char cVar2;
|
|
|
|
uint uVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
int iVar5;
|
|
|
|
|
|
|
|
cVar1 = param_1[0x20];
|
|
|
|
if (cVar1 == '\n') {
|
|
|
|
*(short *)(param_1 + 0x18) = *(short *)(param_1 + 0x18) + 1;
|
|
|
|
param_1[0x1a] = '\x01';
|
|
|
|
param_1[0x1b] = '\0';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(short *)(param_1 + 0x1a) = *(short *)(param_1 + 0x1a) + 1;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x1c) = *(int *)(param_1 + 0x1c) + 1;
|
|
|
|
if (*param_1 == '\0') {
|
|
|
|
iVar5 = getc(*(FILE **)(param_1 + 0x14));
|
|
|
|
cVar2 = (char)iVar5;
|
|
|
|
param_1[0x20] = cVar2;
|
|
|
|
if ((cVar2 != -1) && (cVar2 != 0xffff)) {
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar2 = (**(code **)(*(int *)(param_1 + 4) + 8))(*(undefined4 *)(param_1 + 8));
|
|
|
|
param_1[0x20] = cVar2;
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
iVar5 = *(int *)(param_1 + 8);
|
|
|
|
uVar3 = (*(code *)**(undefined4 **)(param_1 + 4))();
|
|
|
|
if (iVar5 + 1U <= uVar3) {
|
|
|
|
*(uint *)(param_1 + 8) = iVar5 + 1U;
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
uVar4 = (*(code *)**(undefined4 **)(param_1 + 4))();
|
|
|
|
*(undefined4 *)(param_1 + 8) = uVar4;
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_1[0x21] = '\x01';
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bbae0 at 0x006BBAE0 (size: 299) ---
|
|
|
|
|
|
undefined4 __thiscall
|
|
|
|
FUN_006bbae0(undefined1 *param_1,int *param_2,undefined4 *param_3,uint param_4,double param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
FILE *pFVar1;
|
|
|
|
int iVar2;
|
|
|
|
float10 fVar3;
|
|
|
|
float10 fVar4;
|
|
|
|
uint local_14;
|
|
|
|
|
|
|
|
if (*(FILE **)(param_1 + 0x14) != (FILE *)0x0) {
|
|
|
|
if (param_1[1] == '\0') {
|
|
|
|
fclose(*(FILE **)(param_1 + 0x14));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
|
|
}
|
|
|
|
param_1[1] = 0;
|
|
|
|
*(undefined2 *)(param_1 + 0x18) = 1;
|
|
|
|
*(undefined2 *)(param_1 + 0x1a) = 1;
|
|
|
|
*(undefined4 *)(param_1 + 0x1c) = 0;
|
|
|
|
param_1[0x21] = 1;
|
|
|
|
if (*(int *)(*param_2 + -4) != 1) {
|
|
|
|
local_14 = 0;
|
|
|
|
if (param_4 != 0) {
|
|
|
|
do {
|
|
|
|
if (param_3 == (undefined4 *)0x0) {
|
|
|
|
pFVar1 = _fsopen((char *)*param_2,"r",0x20);
|
|
|
|
*(FILE **)(param_1 + 0x14) = pFVar1;
|
|
|
|
_errno();
|
|
|
|
param_1[1] = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pFVar1 = _fsopen((char *)*param_2,"r+",0x10);
|
|
|
|
*(FILE **)(param_1 + 0x14) = pFVar1;
|
|
|
|
_errno();
|
|
|
|
*param_3 = *(undefined4 *)(param_1 + 0x14);
|
|
|
|
param_1[1] = 1;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x14) != 0) break;
|
|
|
|
if (local_14 < param_4 - 1) {
|
|
|
|
fVar3 = (float10)FUN_0040faa0();
|
|
|
|
do {
|
|
|
|
fVar4 = (float10)FUN_0040faa0();
|
|
|
|
} while (fVar4 < (float10)(double)(fVar3 + (float10)param_5));
|
|
|
|
}
|
|
|
|
local_14 = local_14 + 1;
|
|
|
|
} while (local_14 < param_4);
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
if (*(FILE **)(param_1 + 0x14) != (FILE *)0x0) {
|
|
|
|
iVar2 = getc(*(FILE **)(param_1 + 0x14));
|
|
|
|
param_1[0x20] = (char)iVar2;
|
|
|
|
param_1[0x21] = 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
param_1[0x21] = 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bbc10 at 0x006BBC10 (size: 80) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006bbc10(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*puVar2 = *param_2;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = 0;
|
|
|
|
if (*(int *)(param_1 + 4) == 0) {
|
|
|
|
*(undefined4 **)(param_1 + 4) = puVar2;
|
|
|
|
*(undefined4 **)(param_1 + 8) = puVar2;
|
|
|
|
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 8);
|
|
|
|
*(undefined4 **)(iVar1 + 4) = puVar2;
|
|
|
|
puVar2[2] = iVar1;
|
|
|
|
*(undefined4 **)(param_1 + 8) = puVar2;
|
|
|
|
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bbc60 at 0x006BBC60 (size: 45) ---
|
|
|
|
|
|
void __fastcall FUN_006bbc60(undefined1 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
*(undefined ***)(param_1 + 4) = &PTR_FUN_0079548c;
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
|
|
*(undefined2 *)(param_1 + 0x18) = 1;
|
|
|
|
*(undefined2 *)(param_1 + 0x1a) = 1;
|
|
|
|
*(undefined4 *)(param_1 + 0x1c) = 0;
|
|
|
|
param_1[0x20] = 0;
|
|
|
|
param_1[0x21] = 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bbc90 at 0x006BBC90 (size: 70) ---
|
|
|
|
|
|
void __fastcall FUN_006bbc90(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(FILE **)(param_1 + 0x14) != (FILE *)0x0) {
|
|
|
|
if (*(char *)(param_1 + 1) == '\0') {
|
|
|
|
fclose(*(FILE **)(param_1 + 0x14));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
|
|
}
|
|
|
|
*(undefined1 *)(param_1 + 1) = 0;
|
|
|
|
*(undefined2 *)(param_1 + 0x18) = 1;
|
|
|
|
*(undefined2 *)(param_1 + 0x1a) = 1;
|
|
|
|
*(undefined4 *)(param_1 + 0x1c) = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0x21) = 1;
|
|
|
|
*(undefined ***)(param_1 + 4) = &PTR_LAB_00795478;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bbce0 at 0x006BBCE0 (size: 181) ---
|
|
|
|
|
|
void __thiscall FUN_006bbce0(int param_1,int *param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined *puVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
LONG *lpAddend;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0x3c);
|
|
|
|
if (iVar1 != *param_2) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*(int *)(param_1 + 0x3c) = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
}
|
|
|
|
puVar2 = *(undefined **)(param_1 + 0x38);
|
|
|
|
if (puVar2 != PTR_DAT_00818344) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(puVar2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(puVar2 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
*(undefined **)(param_1 + 0x38) = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
*(undefined1 *)(param_1 + 0x10) = 0;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x44);
|
|
|
|
if (iVar1 != *param_3) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *param_3;
|
|
|
|
*(int *)(param_1 + 0x44) = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bbda0 at 0x006BBDA0 (size: 232) ---
|
|
|
|
|
|
void __fastcall FUN_006bbda0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
LONG *pLVar3;
|
|
|
|
|
|
|
|
if (*(FILE **)(param_1 + 0x28) != (FILE *)0x0) {
|
|
|
|
if (*(char *)(param_1 + 0x15) == '\0') {
|
|
|
|
fclose(*(FILE **)(param_1 + 0x28));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x28) = 0;
|
|
|
|
}
|
|
|
|
*(undefined1 *)(param_1 + 0x15) = 0;
|
|
|
|
*(undefined2 *)(param_1 + 0x2c) = 1;
|
|
|
|
*(undefined2 *)(param_1 + 0x2e) = 1;
|
|
|
|
*(undefined4 *)(param_1 + 0x30) = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0x35) = 1;
|
|
|
|
puVar1 = *(undefined **)(param_1 + 0x3c);
|
|
|
|
if (puVar1 != PTR_DAT_00818344) {
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(puVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(puVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
pLVar3 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
*(undefined **)(param_1 + 0x3c) = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar3);
|
|
|
|
}
|
|
|
|
puVar1 = *(undefined **)(param_1 + 0x38);
|
|
|
|
if (puVar1 != PTR_DAT_00818344) {
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(puVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(puVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
pLVar3 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
*(undefined **)(param_1 + 0x38) = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar3);
|
|
|
|
}
|
|
|
|
puVar1 = *(undefined **)(param_1 + 0x44);
|
|
|
|
if (puVar1 != PTR_DAT_00818344) {
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(puVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(puVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
pLVar3 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
*(undefined **)(param_1 + 0x44) = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar3);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bbe90 at 0x006BBE90 (size: 71) ---
|
|
|
|
|
|
void __thiscall FUN_006bbe90(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0x14);
|
|
|
|
if (iVar1 != *param_2) {
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*(int *)(param_1 + 0x14) = iVar1;
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006bbecc. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bbee0 at 0x006BBEE0 (size: 558) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006bbee0(int param_1,char param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
undefined *puVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
char *pcVar6;
|
|
|
|
LONG LVar7;
|
|
|
|
LONG *lpAddend;
|
|
|
|
char *pcVar8;
|
|
|
|
char *pcVar9;
|
|
|
|
char acStack_8 [4];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
puVar3 = *(undefined **)(param_1 + 0x38);
|
|
|
|
piVar1 = (int *)(param_1 + 0x38);
|
|
|
|
local_4 = param_1;
|
|
|
|
if (puVar3 != PTR_DAT_00818344) {
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(puVar3 + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(puVar3 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar3 + -0x14))(1);
|
|
|
|
}
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
*piVar1 = (int)PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
while ((((cVar2 = *(char *)(param_1 + 0x34), cVar2 == ',' || (cVar2 == ' ')) || (cVar2 == '\t'))
|
|
|
|
|| ((cVar2 == '\r' || (cVar2 == '\n'))))) {
|
|
|
|
FUN_006bba50();
|
|
|
|
}
|
|
|
|
if (*(char *)(param_1 + 0x34) != '#') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
while( true ) {
|
|
|
|
FUN_006bba50();
|
|
|
|
if (*(char *)(local_4 + 0x35) != '\0') {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
acStack_8[0] = FUN_006bba50();
|
|
|
|
while (((acStack_8[0] != '\n' && (acStack_8[0] != -1)) &&
|
|
|
|
((acStack_8[0] != 0xffff && (acStack_8[0] != '\0'))))) {
|
|
|
|
iVar4 = *piVar1;
|
|
|
|
iVar5 = *(int *)(iVar4 + -4);
|
|
|
|
if ((*(int *)(iVar4 + -0x10) == 1) && (iVar5 + 1U <= *(uint *)(iVar4 + -0xc))) {
|
|
|
|
*(uint *)(iVar4 + -4) = iVar5 + 1U;
|
|
|
|
*(undefined4 *)(*piVar1 + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00401280(iVar5);
|
|
|
|
FUN_00401070(*piVar1,iVar4);
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(iVar4 + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(iVar4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
strncpy((char *)(*piVar1 + -1 + iVar5),acStack_8,1);
|
|
|
|
*(undefined1 *)(*(int *)(*piVar1 + -4) + -1 + *piVar1) = 0;
|
|
|
|
acStack_8[0] = FUN_006bba50();
|
|
|
|
}
|
|
|
|
if (*(char *)(local_4 + 0x35) != '\0') break;
|
|
|
|
pcVar6 = (char *)*piVar1;
|
|
|
|
acStack_8[0] = '\n';
|
|
|
|
iVar4 = *(int *)(pcVar6 + -4);
|
|
|
|
if ((*(int *)(pcVar6 + -0x10) == 1) && (iVar4 + 1U <= *(uint *)(pcVar6 + -0xc))) {
|
|
|
|
*(uint *)(pcVar6 + -4) = iVar4 + 1U;
|
|
|
|
*(undefined4 *)(*piVar1 + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00401280(iVar4);
|
|
|
|
pcVar9 = (char *)*piVar1;
|
|
|
|
pcVar8 = pcVar6;
|
|
|
|
do {
|
|
|
|
cVar2 = *pcVar8;
|
|
|
|
pcVar8 = pcVar8 + 1;
|
|
|
|
*pcVar9 = cVar2;
|
|
|
|
pcVar9 = pcVar9 + 1;
|
|
|
|
} while (cVar2 != '\0');
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(pcVar6 + -0x10));
|
|
|
|
if ((LVar7 == 0) && (pcVar6 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pcVar6 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
strncpy((char *)(*piVar1 + -1 + iVar4),acStack_8,1);
|
|
|
|
*(undefined1 *)(*(int *)(*piVar1 + -4) + -1 + *piVar1) = 0;
|
|
|
|
while (((((cVar2 = *(char *)(param_1 + 0x34), cVar2 == ',' || (cVar2 == ' ')) || (cVar2 == '\t')
|
|
|
|
) || (cVar2 == '\r')) || ((cVar2 == '\n' && (param_2 != '\0'))))) {
|
|
|
|
FUN_006bba50();
|
|
|
|
}
|
|
|
|
if (*(char *)(local_4 + 0x34) != '#') {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bc110 at 0x006BC110 (size: 638) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006bc110(int param_1,char param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
char cVar2;
|
|
|
|
int iVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
bool bVar5;
|
|
|
|
undefined *puVar6;
|
|
|
|
int local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
while ((((cVar2 = *(char *)(param_1 + 0x34), cVar2 == ',' || (cVar2 == ' ')) || (cVar2 == '\t'))
|
|
|
|
|| ((cVar2 == '\r' || (cVar2 == '\n'))))) {
|
|
|
|
FUN_006bba50();
|
|
|
|
}
|
|
|
|
if (*(char *)(param_1 + 0x35) != '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
FUN_006bbe90(param_1 + 0x3c);
|
|
|
|
FUN_0065c7f0(*(undefined2 *)(param_1 + 0x2c));
|
|
|
|
FUN_0065c800(*(undefined2 *)(param_1 + 0x2e));
|
|
|
|
puVar1 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
if (*(char *)(param_1 + 0x34) != '\"') {
|
|
|
|
do {
|
|
|
|
while( true ) {
|
|
|
|
iVar3 = (int)*(char *)(param_1 + 0x34);
|
|
|
|
if (0x2c < iVar3) break;
|
|
|
|
if (iVar3 == 0x2c) goto switchD_006bc2b2_caseD_ffffffff;
|
|
|
|
switch(iVar3) {
|
|
|
|
default:
|
|
|
|
switchD_006bc2b2_caseD_1:
|
|
|
|
param_2 = *(char *)(param_1 + 0x34);
|
|
|
|
FUN_00404ef0(¶m_2,1);
|
|
|
|
FUN_006bba50();
|
|
|
|
break;
|
|
|
|
case -1:
|
|
|
|
case 0:
|
|
|
|
case 9:
|
|
|
|
case 10:
|
|
|
|
case 0xd:
|
|
|
|
case 0x20:
|
|
|
|
case 0x22:
|
|
|
|
case 0x23:
|
|
|
|
case 0x28:
|
|
|
|
case 0x29:
|
|
|
|
goto switchD_006bc2b2_caseD_ffffffff;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (0x7b < iVar3) {
|
|
|
|
if (iVar3 != 0x7d) {
|
|
|
|
bVar5 = iVar3 == 0xffff;
|
|
|
|
LAB_006bc314:
|
|
|
|
if (!bVar5) goto switchD_006bc2b2_caseD_1;
|
|
|
|
}
|
|
|
|
goto switchD_006bc2b2_caseD_ffffffff;
|
|
|
|
}
|
|
|
|
if ((iVar3 == 0x7b) || (iVar3 == 0x5b)) goto switchD_006bc2b2_caseD_ffffffff;
|
|
|
|
if (iVar3 != 0x5c) {
|
|
|
|
bVar5 = iVar3 == 0x5d;
|
|
|
|
goto LAB_006bc314;
|
|
|
|
}
|
|
|
|
FUN_006bba50();
|
|
|
|
cVar2 = FUN_006bba50();
|
|
|
|
if (((cVar2 == '\0') || (cVar2 == -1)) || (cVar2 == 0xffff)) goto LAB_006bc336;
|
|
|
|
param_2 = cVar2;
|
|
|
|
FUN_00404ef0(¶m_2,1);
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
do {
|
|
|
|
FUN_006bba50();
|
|
|
|
while( true ) {
|
|
|
|
iVar3 = (int)*(char *)(param_1 + 0x34);
|
|
|
|
if (iVar3 < 0x23) break;
|
|
|
|
if (iVar3 != 0x5c) {
|
|
|
|
bVar5 = iVar3 == 0xffff;
|
|
|
|
goto LAB_006bc1d5;
|
|
|
|
}
|
|
|
|
FUN_006bba50();
|
|
|
|
if (*(char *)(param_1 + 0x35) != '\0') {
|
|
|
|
FUN_00401340("unexpected EOF after \'\\\'");
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar4 == 0) && ((undefined4 *)(local_4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
goto switchD_006bc2b2_caseD_ffffffff;
|
|
|
|
}
|
|
|
|
param_2 = FUN_006bba50();
|
|
|
|
FUN_00404ef0(¶m_2,1);
|
|
|
|
}
|
|
|
|
if (iVar3 == 0x22) {
|
|
|
|
FUN_006bba50();
|
|
|
|
goto switchD_006bc2b2_caseD_ffffffff;
|
|
|
|
}
|
|
|
|
if (-2 < iVar3) {
|
|
|
|
if (iVar3 < 1) goto LAB_006bc224;
|
|
|
|
bVar5 = iVar3 == 10;
|
|
|
|
LAB_006bc1d5:
|
|
|
|
if (bVar5) goto LAB_006bc224;
|
|
|
|
}
|
|
|
|
param_2 = *(char *)(param_1 + 0x34);
|
|
|
|
FUN_00404ef0(¶m_2,1);
|
|
|
|
} while( true );
|
|
|
|
LAB_006bc336:
|
|
|
|
FUN_00401340("unexpected EOF after \'\\\'");
|
|
|
|
FUN_004011b0();
|
|
|
|
goto switchD_006bc2b2_caseD_ffffffff;
|
|
|
|
LAB_006bc224:
|
|
|
|
FUN_00401340("unterminated string");
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_8 + -0x10));
|
|
|
|
if ((LVar4 == 0) && ((undefined4 *)(local_8 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_8 + -0x14))(1);
|
|
|
|
}
|
|
|
|
switchD_006bc2b2_caseD_ffffffff:
|
|
|
|
puVar6 = puVar1;
|
|
|
|
InterlockedIncrement((LONG *)(puVar1 + -0x10));
|
|
|
|
FUN_00427050(puVar6);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(puVar1 + -0x10));
|
|
|
|
if ((LVar4 == 0) && ((undefined4 *)(puVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bc3d0 at 0x006BC3D0 (size: 471) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006bc3d0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
char cVar2;
|
|
|
|
char extraout_AL;
|
|
|
|
char extraout_AL_00;
|
|
|
|
int iVar3;
|
|
|
|
char cVar4;
|
|
|
|
|
|
|
|
while ((((cVar4 = *(char *)(param_1 + 0x34), cVar4 == ',' || (cVar4 == ' ')) || (cVar4 == '\t'))
|
|
|
|
|| ((cVar4 == '\r' || (cVar4 == '\n'))))) {
|
|
|
|
FUN_006bba50();
|
|
|
|
}
|
|
|
|
cVar4 = *(char *)(param_1 + 0x34);
|
|
|
|
if (((cVar4 != '\0') && (cVar4 != -1)) &&
|
|
|
|
((cVar4 != 0xffff && (((cVar4 != ']' && (cVar4 != '}')) && (cVar4 != ')')))))) {
|
|
|
|
iVar1 = param_1 + 0x38;
|
|
|
|
FUN_0065d5c0(iVar1);
|
|
|
|
FUN_006bc110(param_2);
|
|
|
|
if (extraout_AL != '\0') {
|
|
|
|
if (*(char *)(param_1 + 0x35) != '\0') {
|
|
|
|
switchD_006bc4ac_caseD_1:
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
FUN_006bbee0(1);
|
|
|
|
while (((cVar4 = *(char *)(param_1 + 0x34), cVar4 == ',' || (cVar4 == ' ')) ||
|
|
|
|
((cVar4 == '\t' || ((cVar4 == '\r' || (cVar4 == '\n'))))))) {
|
|
|
|
FUN_006bba50();
|
|
|
|
}
|
|
|
|
iVar3 = (int)*(char *)(param_1 + 0x34);
|
|
|
|
if (iVar3 < 0x5e) {
|
|
|
|
if (iVar3 == 0x5d) {
|
|
|
|
switchD_006bc4ac_caseD_ffffffff:
|
|
|
|
FUN_0065d5c0(iVar1);
|
|
|
|
FUN_00404cd0();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
switch(iVar3) {
|
|
|
|
default:
|
|
|
|
goto switchD_006bc4ac_caseD_1;
|
|
|
|
case 0x28:
|
|
|
|
cVar4 = ')';
|
|
|
|
break;
|
|
|
|
case 0x5b:
|
|
|
|
cVar4 = ']';
|
|
|
|
break;
|
|
|
|
case -1:
|
|
|
|
case 0:
|
|
|
|
case 0x29:
|
|
|
|
goto switchD_006bc4ac_caseD_ffffffff;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar3 != 0x7b) {
|
|
|
|
if ((iVar3 != 0x7d) && (iVar3 != 0xffff)) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
goto switchD_006bc4ac_caseD_ffffffff;
|
|
|
|
}
|
|
|
|
cVar4 = '}';
|
|
|
|
}
|
|
|
|
FUN_0065d5c0(iVar1);
|
|
|
|
FUN_00404cd0();
|
|
|
|
FUN_006bba50();
|
|
|
|
FUN_006bc650(param_2);
|
|
|
|
if (extraout_AL_00 != '\0') {
|
|
|
|
while ((((cVar2 = *(char *)(param_1 + 0x34), cVar2 == ',' || (cVar2 == ' ')) ||
|
|
|
|
(cVar2 == '\t')) || ((cVar2 == '\r' || (cVar2 == '\n'))))) {
|
|
|
|
FUN_006bba50();
|
|
|
|
}
|
|
|
|
if (*(char *)(param_1 + 0x34) == cVar4) {
|
|
|
|
FUN_006bba50();
|
|
|
|
FUN_006bbee0(1);
|
|
|
|
cVar4 = *(char *)(param_1 + 0x34);
|
|
|
|
if (((cVar4 != '\0') && (cVar4 != -1)) &&
|
|
|
|
((cVar4 != 0xffff && (((cVar4 != ')' && (cVar4 != ']')) && (cVar4 != '}')))))) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
FUN_0065d5c0(iVar1);
|
|
|
|
FUN_00404cd0();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
FUN_00401340("mismatched paren");
|
|
|
|
*(undefined1 *)(param_1 + 0x10) = 1;
|
|
|
|
FUN_004011b0();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bc620 at 0x006BC620 (size: 36) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006bc620(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_00807b40;
|
|
|
|
FUN_0049f850();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bc650 at 0x006BC650 (size: 389) ---
|
|
|
|
|
|
bool __fastcall FUN_006bc650(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
char *pcVar2;
|
|
|
|
char cVar3;
|
|
|
|
char *pcVar4;
|
|
|
|
char *pcVar5;
|
|
|
|
LONG LVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
bool bVar8;
|
|
|
|
char *local_14;
|
|
|
|
undefined **local_10;
|
|
|
|
undefined4 *local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_006bbee0(1);
|
|
|
|
while( true ) {
|
|
|
|
if (DAT_008f8638 == (undefined4 *)0x0) {
|
|
|
|
FUN_00661110();
|
|
|
|
}
|
|
|
|
DAT_008f8638 = (undefined4 *)*DAT_008f8638;
|
|
|
|
pcVar4 = (char *)FUN_0065d1a0();
|
|
|
|
cVar3 = FUN_006bc3d0(pcVar4);
|
|
|
|
if (cVar3 == '\0') break;
|
|
|
|
local_14 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00426020(&local_14);
|
|
|
|
pcVar2 = local_14;
|
|
|
|
if (*(char *)(param_1 + 0x10) == '\0') {
|
|
|
|
pcVar5 = local_14 + *(int *)(local_14 + -4) + -1;
|
|
|
|
if (*(int *)(local_14 + -4) != 0) {
|
|
|
|
pcVar5 = local_14;
|
|
|
|
}
|
|
|
|
if (*pcVar5 != '!') goto LAB_006bc757;
|
|
|
|
local_10 = &PTR_FUN_00807b40;
|
|
|
|
local_c = (undefined4 *)0x0;
|
|
|
|
local_8 = 0;
|
|
|
|
local_4 = 0;
|
|
|
|
FUN_006bcaf0(pcVar4,&local_10);
|
|
|
|
for (puVar7 = local_c; puVar7 != (undefined4 *)0x0; puVar7 = (undefined4 *)puVar7[1]) {
|
|
|
|
FUN_0065d7b0(*puVar7);
|
|
|
|
}
|
|
|
|
local_10 = &PTR_FUN_00807b40;
|
|
|
|
while (puVar7 = local_c, local_c != (undefined4 *)0x0) {
|
|
|
|
puVar1 = (undefined4 *)local_c[1];
|
|
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
|
|
local_8 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar1[2] = 0;
|
|
|
|
}
|
|
|
|
bVar8 = local_c != (undefined4 *)0x0;
|
|
|
|
local_c = puVar1;
|
|
|
|
if (bVar8) {
|
|
|
|
operator_delete(puVar7);
|
|
|
|
}
|
|
|
|
local_4 = local_4 + -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
LAB_006bc757:
|
|
|
|
FUN_0065d7b0(pcVar4);
|
|
|
|
if (*(char *)(param_1 + 0x10) != '\0') {
|
|
|
|
pcVar4 = pcVar2 + -0x14;
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(pcVar2 + -0x10));
|
|
|
|
if ((LVar6 == 0) && (pcVar4 != (char *)0x0)) {
|
|
|
|
LAB_006bc7b9:
|
|
|
|
(*(code *)**(undefined4 **)pcVar4)(1);
|
|
|
|
}
|
|
|
|
LAB_006bc7c1:
|
|
|
|
return *(char *)(param_1 + 0x10) == '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(pcVar2 + -0x10));
|
|
|
|
if ((LVar6 == 0) && (pcVar2 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pcVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((pcVar4 == (char *)0x0) || (LVar6 = InterlockedDecrement((LONG *)(pcVar4 + 4)), LVar6 != 0))
|
|
|
|
goto LAB_006bc7c1;
|
|
|
|
goto LAB_006bc7b9;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bc7e0 at 0x006BC7E0 (size: 427) ---
|
|
|
|
|
|
void __thiscall FUN_006bc7e0(int *param_1,int *param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
int iVar4;
|
|
|
|
int *piVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
code *pcVar7;
|
|
|
|
undefined *local_8;
|
|
|
|
int *local_4;
|
|
|
|
|
|
|
|
iVar4 = param_3;
|
|
|
|
local_4 = param_1;
|
|
|
|
FUN_00405210();
|
|
|
|
local_8 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
piVar2 = param_2;
|
|
|
|
while (param_1 = (int *)param_1[1], param_1 != (int *)0x0) {
|
|
|
|
if (local_8 != (undefined *)*param_1) {
|
|
|
|
puVar6 = (undefined4 *)(local_8 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_8 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
local_8 = (undefined *)*param_1;
|
|
|
|
InterlockedIncrement((LONG *)(local_8 + -0x10));
|
|
|
|
iVar4 = param_3;
|
|
|
|
}
|
|
|
|
thunk_FUN_0040deb0(&local_8,0);
|
|
|
|
iVar1 = *(int *)(*piVar2 + -4);
|
|
|
|
if (iVar1 != 1) {
|
|
|
|
FUN_00404ef0(*piVar2,iVar1 + -1);
|
|
|
|
}
|
|
|
|
FUN_0040d4a0(&local_8,iVar4,0,0);
|
|
|
|
}
|
|
|
|
pcVar7 = InterlockedDecrement_exref;
|
|
|
|
if (*(int *)(iVar4 + 0xc) == 0) {
|
|
|
|
param_2 = (int *)PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
thunk_FUN_0040c780(¶m_2,local_4 + 0xf);
|
|
|
|
thunk_FUN_0040deb0(¶m_2,0);
|
|
|
|
iVar1 = *(int *)(*piVar2 + -4);
|
|
|
|
if (iVar1 != 1) {
|
|
|
|
FUN_00404ef0(*piVar2,iVar1 + -1);
|
|
|
|
}
|
|
|
|
FUN_0040d4a0(¶m_2,iVar4,0,0);
|
|
|
|
pcVar7 = InterlockedDecrement_exref;
|
|
|
|
piVar5 = param_2 + -5;
|
|
|
|
LVar3 = InterlockedDecrement(param_2 + -4);
|
|
|
|
iVar4 = param_3;
|
|
|
|
if ((LVar3 == 0) && (piVar5 != (int *)0x0)) {
|
|
|
|
(**(code **)*piVar5)(1);
|
|
|
|
iVar4 = param_3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (*(int *)(iVar4 + 0xc) == 0) {
|
|
|
|
FUN_00679290(¶m_3,piVar2);
|
|
|
|
if (*(int *)(param_3 + -4) != 1) {
|
|
|
|
FUN_0040b720(¶m_3);
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)(param_3 + -0x14);
|
|
|
|
iVar4 = (*pcVar7)(param_3 + -0x10);
|
|
|
|
if ((iVar4 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)(local_8 + -0x14);
|
|
|
|
iVar4 = (*pcVar7)(local_8 + -0x10);
|
|
|
|
if ((iVar4 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bc990 at 0x006BC990 (size: 249) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006bc990(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
piVar1 = (int *)(param_1 + 0x3c);
|
|
|
|
FUN_0065d3f0(piVar1);
|
|
|
|
iVar2 = *(int *)(param_2 + 0x14);
|
|
|
|
if (iVar2 != *piVar1) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar2 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
*(int *)(param_2 + 0x14) = iVar2;
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + -0x10));
|
|
|
|
}
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + -0x10));
|
|
|
|
iVar4 = iVar2;
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + -0x10));
|
|
|
|
FUN_00427050(iVar4);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar2 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
FUN_006bbee0(0);
|
|
|
|
FUN_0065d5c0(param_1 + 0x38);
|
|
|
|
FUN_006bc650(param_2);
|
|
|
|
FUN_0065d5c0(param_1 + 0x38);
|
|
|
|
if (*(char *)(param_1 + 0x10) == '\0') {
|
|
|
|
if (*(char *)(param_1 + 0x35) != '\0') {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
FUN_00401340("unexpected close brace");
|
|
|
|
*(undefined1 *)(param_1 + 0x10) = 1;
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(param_2 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(param_2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bca90 at 0x006BCA90 (size: 87) ---
|
|
|
|
|
|
undefined1
|
|
|
|
FUN_006bca90(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
|
|
undefined4 param_5,undefined4 param_6)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined1 uVar2;
|
|
|
|
|
|
|
|
FUN_006bbce0(param_2,&PTR_DAT_008183b4);
|
|
|
|
cVar1 = FUN_006bbae0(param_2,param_3,param_4,param_5,param_6);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar2 = FUN_006bc990(param_1);
|
|
|
|
FUN_006bbda0();
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bcaf0 at 0x006BCAF0 (size: 1405) ---
|
|
|
|
|
|
void __thiscall FUN_006bcaf0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
uint uVar4;
|
|
|
|
code *pcVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
undefined *puVar8;
|
|
|
|
int *piVar9;
|
|
|
|
undefined *local_78;
|
|
|
|
undefined *local_74;
|
|
|
|
int local_70;
|
|
|
|
undefined *local_6c;
|
|
|
|
undefined *local_68 [4];
|
|
|
|
undefined **local_58;
|
|
|
|
undefined4 local_54;
|
|
|
|
undefined4 local_50;
|
|
|
|
uint local_4c;
|
|
|
|
|
|
|
|
piVar9 = param_2;
|
|
|
|
local_70 = param_1;
|
|
|
|
cVar1 = FUN_0065cc50(&DAT_00906668);
|
|
|
|
if ((cVar1 == '\0') || (*(char *)(*(int *)(param_1 + 0x40) + 0x1f) == '\0')) {
|
|
|
|
cVar1 = FUN_0065cc50(&DAT_0090666c);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
cVar1 = FUN_0065cc50(&DAT_00906670);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_006bbc10(¶m_2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_68[0] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
iVar2 = FUN_0065ca40();
|
|
|
|
puVar8 = PTR_DAT_00818344;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
local_6c = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
iVar2 = (**(code **)(*piVar9 + 0xc))(0);
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
FUN_00426020(&local_6c);
|
|
|
|
puVar8 = local_6c;
|
|
|
|
}
|
|
|
|
FUN_00402070(&local_6c);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(puVar8 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(puVar8 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar8 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (piVar9 != (int *)0x0) {
|
|
|
|
FUN_00405f70();
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)(local_68[0] + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_68[0] + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_6c = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
iVar2 = FUN_0065ca40();
|
|
|
|
puVar8 = PTR_DAT_00818344;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
local_68[0] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
iVar2 = (**(code **)(*piVar9 + 0xc))(0);
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
FUN_00426020(local_68);
|
|
|
|
puVar8 = local_68[0];
|
|
|
|
}
|
|
|
|
if (*(int *)(puVar8 + -4) != 1) {
|
|
|
|
FUN_00404ef0(puVar8,*(int *)(puVar8 + -4) + -1);
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(puVar8 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(puVar8 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar8 + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined1 *)(local_70 + 0x10) = 1;
|
|
|
|
if ((piVar9 != (int *)0x0) && (LVar3 = InterlockedDecrement(piVar9 + 1), LVar3 == 0)) {
|
|
|
|
(**(code **)*piVar9)(1);
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)(local_6c + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_6c + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
local_58 = &PTR_FUN_00795074;
|
|
|
|
local_54 = 0;
|
|
|
|
local_50 = 0;
|
|
|
|
local_4c = 0;
|
|
|
|
FUN_0065cf90(piVar9);
|
|
|
|
iVar2 = FUN_0065c810();
|
|
|
|
do {
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
if ((piVar9 != (int *)0x0) && (LVar3 = InterlockedDecrement(piVar9 + 1), LVar3 == 0)) {
|
|
|
|
(**(code **)*piVar9)(1);
|
|
|
|
}
|
|
|
|
FUN_0065cae0();
|
|
|
|
local_58 = &PTR_FUN_00795074;
|
|
|
|
FUN_00405210();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
local_74 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00426020(&local_74);
|
|
|
|
FUN_006bc7e0(&local_74,&local_58);
|
|
|
|
pcVar5 = InterlockedDecrement_exref;
|
|
|
|
if (1 < local_4c) {
|
|
|
|
local_6c = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00402710(&local_6c,"Multiple files named \'%s\' found",local_74);
|
|
|
|
pcVar5 = InterlockedDecrement_exref;
|
|
|
|
puVar6 = (undefined4 *)(local_6c + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_6c + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
local_78 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
cVar1 = FUN_00405120(&local_78);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
local_6c = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00402710(&local_6c,"Couldn\'t find !include file \'%s\'",local_74);
|
|
|
|
puVar6 = (undefined4 *)(local_6c + -0x14);
|
|
|
|
*(undefined1 *)(local_70 + 0x10) = 1;
|
|
|
|
iVar2 = (*pcVar5)(local_6c + -0x10);
|
|
|
|
if ((iVar2 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_006bb8c0(*(undefined4 *)(local_70 + 0x40));
|
|
|
|
if (DAT_008f8638 == (undefined4 *)0x0) {
|
|
|
|
FUN_00661110();
|
|
|
|
}
|
|
|
|
DAT_008f8638 = (undefined4 *)*DAT_008f8638;
|
|
|
|
puVar6 = (undefined4 *)FUN_0065d1a0();
|
|
|
|
FUN_006bbce0(&local_78,&PTR_DAT_008183b4);
|
|
|
|
cVar1 = FUN_006bbae0(&local_78,0,1,0,0);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
LAB_006bcd89:
|
|
|
|
local_6c = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00402710(&local_6c,"Failed to parse include: %s",local_78);
|
|
|
|
puVar7 = (undefined4 *)(local_6c + -0x14);
|
|
|
|
*(undefined1 *)(local_70 + 0x10) = 1;
|
|
|
|
iVar2 = (*pcVar5)(local_6c + -0x10);
|
|
|
|
if ((iVar2 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar1 = FUN_006bc990(puVar6);
|
|
|
|
FUN_006bbda0();
|
|
|
|
pcVar5 = InterlockedDecrement_exref;
|
|
|
|
if (cVar1 == '\0') goto LAB_006bcd89;
|
|
|
|
uVar4 = FUN_0065ca40();
|
|
|
|
pcVar5 = InterlockedDecrement_exref;
|
|
|
|
if (uVar4 != 0) {
|
|
|
|
local_6c = (undefined *)FUN_0065cab0(0);
|
|
|
|
local_68[0] = *(undefined **)(local_6c + 0x10);
|
|
|
|
InterlockedIncrement((LONG *)(local_68[0] + -0x10));
|
|
|
|
FUN_0065ce40(0);
|
|
|
|
FUN_0065d5c0(param_2 + 4);
|
|
|
|
FUN_0065d5c0(puVar6 + 4);
|
|
|
|
FUN_0065d5c0(local_68);
|
|
|
|
FUN_006bbc10(&local_6c);
|
|
|
|
if (1 < uVar4) {
|
|
|
|
iVar2 = uVar4 - 1;
|
|
|
|
do {
|
|
|
|
local_6c = (undefined *)FUN_0065cab0(0);
|
|
|
|
FUN_006bbc10(&local_6c);
|
|
|
|
iVar2 = iVar2 + -1;
|
|
|
|
} while (iVar2 != 0);
|
|
|
|
}
|
|
|
|
puVar7 = (undefined4 *)(local_68[0] + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(local_68[0] + -0x10));
|
|
|
|
pcVar5 = InterlockedDecrement_exref;
|
|
|
|
if ((LVar3 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
pcVar5 = InterlockedDecrement_exref;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((puVar6 != (undefined4 *)0x0) && (iVar2 = (*pcVar5)(puVar6 + 1), iVar2 == 0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
FUN_006bb940();
|
|
|
|
piVar9 = param_2;
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)(local_78 + -0x14);
|
|
|
|
iVar2 = (*pcVar5)(local_78 + -0x10);
|
|
|
|
if ((iVar2 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)(local_78 + -0x14);
|
|
|
|
iVar2 = (*pcVar5)(local_78 + -0x10);
|
|
|
|
if ((iVar2 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
iVar2 = FUN_0065cb10();
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd070 at 0x006BD070 (size: 35) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006bd070(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00670e60();
|
|
|
|
*(undefined1 *)(param_1 + 6) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 0x19) = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[9] = 0;
|
|
|
|
*param_1 = &PTR_FUN_00807c30;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd0a0 at 0x006BD0A0 (size: 82) ---
|
|
|
|
|
|
void __fastcall FUN_006bd0a0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
BOOL BVar1;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_00807c30;
|
|
|
|
if (*(char *)(param_1 + 6) != '\0') {
|
|
|
|
CloseHandle((HANDLE)param_1[8]);
|
|
|
|
if ((LPCVOID)param_1[7] != (LPCVOID)0x0) {
|
|
|
|
BVar1 = UnmapViewOfFile((LPCVOID)param_1[7]);
|
|
|
|
if (BVar1 == 0) {
|
|
|
|
GetLastError();
|
|
|
|
}
|
|
|
|
BVar1 = CloseHandle((HANDLE)param_1[9]);
|
|
|
|
if (BVar1 == 0) {
|
|
|
|
GetLastError();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined1 *)(param_1 + 6) = 0;
|
|
|
|
}
|
|
|
|
FUN_00670eb0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd100 at 0x006BD100 (size: 4) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006bd100(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
return *(undefined4 *)(param_1 + 0x1c);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd120 at 0x006BD120 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006bd120(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006bd0a0();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd140 at 0x006BD140 (size: 454) ---
|
|
|
|
|
|
undefined4 __thiscall
|
|
|
|
FUN_006bd140(int param_1,LPCSTR param_2,undefined4 param_3,DWORD param_4,char param_5,int param_6,
|
|
|
|
DWORD param_7,DWORD param_8)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCSTR lpFileName;
|
|
|
|
char cVar1;
|
|
|
|
undefined1 uVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
HANDLE pvVar4;
|
|
|
|
LPVOID pvVar5;
|
|
|
|
LPCSTR pCVar6;
|
|
|
|
DWORD DVar7;
|
|
|
|
|
|
|
|
lpFileName = param_2;
|
|
|
|
FUN_00401340(param_2);
|
|
|
|
uVar2 = FUN_0040b320(¶m_2,0);
|
|
|
|
pCVar6 = param_2 + -0x14;
|
|
|
|
*(undefined1 *)(param_1 + 0x19) = uVar2;
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (pCVar6 != (LPCSTR)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)pCVar6)(1);
|
|
|
|
}
|
|
|
|
if (((char)param_4 != '\0') && (*(char *)(param_1 + 0x19) == '\0')) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
cVar1 = (char)param_3;
|
|
|
|
if ((*(char *)(param_1 + 0x19) == '\0') || (param_5 != '\0')) {
|
|
|
|
DVar7 = 2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
DVar7 = 3;
|
|
|
|
}
|
|
|
|
pvVar4 = CreateFileA(lpFileName,(-(uint)((char)param_3 != '\0') & 0xc0000000) + 0xc0000000,1,
|
|
|
|
(LPSECURITY_ATTRIBUTES)0x0,DVar7,0x8000000,(HANDLE)0x0);
|
|
|
|
*(HANDLE *)(param_1 + 0x20) = pvVar4;
|
|
|
|
if (pvVar4 != (HANDLE)0xffffffff) {
|
|
|
|
*(undefined1 *)(param_1 + 0x18) = 1;
|
|
|
|
if ((cVar1 == '\0') && (param_6 != 0)) {
|
|
|
|
SetFilePointer(pvVar4,param_6,(PLONG)0x0,0);
|
|
|
|
param_3 = 0;
|
|
|
|
WriteFile(*(HANDLE *)(param_1 + 0x20),¶m_3,4,¶m_4,(LPOVERLAPPED)0x0);
|
|
|
|
if (param_4 != 4) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pvVar4 = CreateFileMappingA(*(HANDLE *)(param_1 + 0x20),(LPSECURITY_ATTRIBUTES)0x0,
|
|
|
|
(uint)(cVar1 == '\0') * 2 + 2,0,0,(LPCSTR)0x0);
|
|
|
|
*(HANDLE *)(param_1 + 0x24) = pvVar4;
|
|
|
|
if (pvVar4 != (HANDLE)0x0) {
|
|
|
|
pvVar5 = MapViewOfFileEx(pvVar4,(-(uint)(cVar1 != '\0') & 0xfff0ffe5) + 0xf001f,param_7,
|
|
|
|
param_8,0,(LPVOID)0x0);
|
|
|
|
*(LPVOID *)(param_1 + 0x1c) = pvVar5;
|
|
|
|
if (pvVar5 != (LPVOID)0x0) {
|
|
|
|
DVar7 = GetFileSize(*(HANDLE *)(param_1 + 0x20),(LPDWORD)0x0);
|
|
|
|
FUN_00670e80(*(undefined4 *)(param_1 + 0x1c),DVar7);
|
|
|
|
return *(undefined4 *)(param_1 + 0x1c);
|
|
|
|
}
|
|
|
|
GetLastError();
|
|
|
|
CloseHandle(*(HANDLE *)(param_1 + 0x20));
|
|
|
|
CloseHandle(*(HANDLE *)(param_1 + 0x24));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
GetLastError();
|
|
|
|
CloseHandle(*(HANDLE *)(param_1 + 0x20));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
GetLastError();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd310 at 0x006BD310 (size: 52) ---
|
|
|
|
|
|
undefined2 *
|
|
|
|
FUN_006bd310(undefined2 *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_1 == (undefined2 *)0x0) {
|
|
|
|
return (undefined2 *)0x0;
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
(*(code *)PTR_FUN_00837394)(param_4,0,param_2,0xffffffff,param_1,param_3);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd350 at 0x006BD350 (size: 20) ---
|
|
|
|
|
|
void __thiscall FUN_006bd350(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
(*(code *)**(undefined4 **)*param_1)((undefined4 *)*param_1,&DAT_00807cac,param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd370 at 0x006BD370 (size: 20) ---
|
|
|
|
|
|
void __thiscall FUN_006bd370(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
(*(code *)**(undefined4 **)*param_1)((undefined4 *)*param_1,&DAT_00807cbc,param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd390 at 0x006BD390 (size: 20) ---
|
|
|
|
|
|
void __thiscall FUN_006bd390(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
(*(code *)**(undefined4 **)*param_1)((undefined4 *)*param_1,&DAT_00807ccc,param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd3b0 at 0x006BD3B0 (size: 199) ---
|
|
|
|
|
|
void __fastcall FUN_006bd3b0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
piVar1 = (int *)param_1[6];
|
|
|
|
*param_1 = &PTR_FUN_00807cdc;
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 0x24))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[6];
|
|
|
|
if ((piVar1 != (int *)0x0) && (piVar1 != (int *)0x0)) {
|
|
|
|
param_1[6] = 0;
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[8];
|
|
|
|
if ((piVar1 != (int *)0x0) && (piVar1 != (int *)0x0)) {
|
|
|
|
param_1[8] = 0;
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[7];
|
|
|
|
if ((piVar1 != (int *)0x0) && (piVar1 != (int *)0x0)) {
|
|
|
|
param_1[7] = 0;
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[5];
|
|
|
|
if ((piVar1 != (int *)0x0) && (piVar1 != (int *)0x0)) {
|
|
|
|
param_1[5] = 0;
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[9];
|
|
|
|
if ((piVar1 != (int *)0x0) && (piVar1 != (int *)0x0)) {
|
|
|
|
param_1[9] = 0;
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[9];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[8];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[7];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[6];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[5];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_LAB_00796c4c;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd480 at 0x006BD480 (size: 137) ---
|
|
|
|
|
|
undefined1 __fastcall FUN_006bd480(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined1 uVar3;
|
|
|
|
undefined1 *puVar4;
|
|
|
|
undefined1 *puVar5;
|
|
|
|
undefined4 uVar6;
|
|
|
|
undefined1 local_c [4];
|
|
|
|
undefined1 local_8 [4];
|
|
|
|
undefined1 local_4 [4];
|
|
|
|
|
|
|
|
piVar1 = *(int **)(param_1 + 0x20);
|
|
|
|
uVar3 = 0;
|
|
|
|
if ((piVar1 != (int *)0x0) && (*(char *)(param_1 + 0x10) == '\0')) {
|
|
|
|
uVar6 = 0;
|
|
|
|
puVar5 = local_8;
|
|
|
|
puVar4 = local_4;
|
|
|
|
iVar2 = (**(code **)(*piVar1 + 0x20))(piVar1,local_c,puVar4,puVar5,0);
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
uVar3 = 0;
|
|
|
|
if (puVar4 == (undefined1 *)0x1) {
|
|
|
|
if ((*(byte *)(param_1 + 0xc) & 1) == 0) {
|
|
|
|
piVar1 = *(int **)(param_1 + 0x18);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 0x24))(piVar1);
|
|
|
|
}
|
|
|
|
*(undefined1 *)(param_1 + 0x10) = 1;
|
|
|
|
uVar3 = 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x1c) + 0x20))(*(int **)(param_1 + 0x1c),0,0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x20) + 0x30))
|
|
|
|
(*(int **)(param_1 + 0x20),puVar4,uVar6,puVar5);
|
|
|
|
}
|
|
|
|
return uVar3;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd510 at 0x006BD510 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006bd510(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006bd3b0();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd530 at 0x006BD530 (size: 582) ---
|
|
|
|
|
|
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x006bd75f) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x006bd585) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x006bd734) */
|
|
|
|
|
|
|
|
undefined4 __thiscall FUN_006bd530(int param_1,undefined4 *param_2,undefined4 param_3,int *param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPVOID *ppv;
|
|
|
|
int *piVar1;
|
|
|
|
int *piVar2;
|
|
|
|
HRESULT HVar3;
|
|
|
|
int iVar4;
|
|
|
|
wchar_t *_Source;
|
|
|
|
undefined1 auStack_310 [516];
|
|
|
|
CHAR local_10c [260];
|
|
|
|
int local_8;
|
|
|
|
|
|
|
|
ppv = (LPVOID *)(param_1 + 0x14);
|
|
|
|
*(int **)(param_1 + 0xc) = param_4;
|
|
|
|
*(undefined4 *)(param_1 + 8) = param_3;
|
|
|
|
param_4 = (int *)0x0;
|
|
|
|
HVar3 = CoCreateInstance((IID *)&DAT_00808430,(LPUNKNOWN)0x0,3,(IID *)&DAT_00807c9c,ppv);
|
|
|
|
if (HVar3 < 0) {
|
|
|
|
if (param_4 != (int *)0x0) {
|
|
|
|
(**(code **)(*param_4 + 8))(param_4);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_8 = 0;
|
|
|
|
iVar4 = FUN_005df0f5(0x178);
|
|
|
|
if (iVar4 == 0) {
|
|
|
|
iVar4 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar4 = FUN_006bdb80(0,&local_8,*(undefined4 *)(param_1 + 8));
|
|
|
|
}
|
|
|
|
if ((local_8 < 0) || (iVar4 == 0)) {
|
|
|
|
if (param_4 != (int *)0x0) {
|
|
|
|
(**(code **)(*param_4 + 8))(param_4);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar1 = (int *)(iVar4 + 0xc);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 4))(piVar1);
|
|
|
|
}
|
|
|
|
piVar2 = *(int **)(param_1 + 0x24);
|
|
|
|
if (piVar2 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar2 + 8))(piVar2);
|
|
|
|
}
|
|
|
|
*(int **)(param_1 + 0x24) = piVar1;
|
|
|
|
local_8 = (**(code **)(*(int *)*ppv + 0xc))(*ppv,piVar1,L"TEXTURERENDERER");
|
|
|
|
if (-1 < local_8) {
|
|
|
|
lstrcpyA(local_10c,(LPCSTR)*param_2);
|
|
|
|
(*(code *)PTR_FUN_00820a9c)();
|
|
|
|
iVar4 = lstrlenA(local_10c);
|
|
|
|
_Source = (wchar_t *)FUN_006bd310(auStack_310,local_10c,iVar4 + 1);
|
|
|
|
wcsncpy((wchar_t *)&stack0xfffffcec,_Source,0x104);
|
|
|
|
local_8 = (**(code **)(*(int *)*ppv + 0x38))(*ppv,&stack0xfffffcec,L"SOURCE");
|
|
|
|
if ((((local_8 != -0x7ffbfdea) && (-1 < local_8)) &&
|
|
|
|
(local_8 = (**(code **)(iRam00000000 + 0x2c))(0,L"Output",¶m_4), -1 < local_8)) &&
|
|
|
|
(local_8 = (**(code **)(*(int *)*ppv + 0x30))(*ppv,param_4), -1 < local_8)) {
|
|
|
|
FUN_006bd350((undefined4 *)(param_1 + 0x18));
|
|
|
|
FUN_006bd370(param_1 + 0x1c);
|
|
|
|
FUN_006bd390(param_1 + 0x20);
|
|
|
|
piVar1 = *(int **)(param_1 + 0x18);
|
|
|
|
local_8 = (**(code **)(*piVar1 + 0x1c))(piVar1);
|
|
|
|
if (-1 < local_8) {
|
|
|
|
*(undefined1 *)(param_1 + 0x10) = 0;
|
|
|
|
if (param_4 != (int *)0x0) {
|
|
|
|
(**(code **)(*param_4 + 8))(param_4);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (param_4 != (int *)0x0) {
|
|
|
|
(**(code **)(*param_4 + 8))(param_4);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd780 at 0x006BD780 (size: 133) ---
|
|
|
|
|
|
void FUN_006bd780(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
|
|
int *param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
|
|
|
|
puVar3 = (undefined4 *)FUN_005df0f5(0x28);
|
|
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
|
|
puVar3 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar3[1] = 1;
|
|
|
|
*puVar3 = &PTR_FUN_00807cdc;
|
|
|
|
puVar3[2] = 0;
|
|
|
|
puVar3[3] = 0;
|
|
|
|
puVar3[5] = 0;
|
|
|
|
puVar3[6] = 0;
|
|
|
|
puVar3[7] = 0;
|
|
|
|
puVar3[8] = 0;
|
|
|
|
puVar3[9] = 0;
|
|
|
|
}
|
|
|
|
*param_5 = (int)puVar3;
|
|
|
|
if (puVar3 != (undefined4 *)0x0) {
|
|
|
|
cVar2 = FUN_006bd530(param_2,param_4,param_3);
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
*param_1 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
puVar3 = (undefined4 *)*param_5;
|
|
|
|
if (puVar3 != (undefined4 *)0x0) {
|
|
|
|
piVar1 = puVar3 + 1;
|
|
|
|
*piVar1 = *piVar1 + -1;
|
|
|
|
if (*piVar1 == 0) {
|
|
|
|
(**(code **)*puVar3)(1);
|
|
|
|
}
|
|
|
|
*param_5 = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_1 = 0x80004005;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bd825 at 0x006BD825 (size: 78) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006bd825(undefined4 param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 in_EAX;
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
bool bVar4;
|
|
|
|
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_2 + 0xb;
|
|
|
|
piVar3 = &DAT_00808410;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
return 0x80070057;
|
|
|
|
}
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_2;
|
|
|
|
piVar3 = &DAT_00808460;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (bVar4) {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_2 + 4;
|
|
|
|
piVar3 = &DAT_00808450;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (bVar4) {
|
|
|
|
in_EAX = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return in_EAX;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdb80 at 0x006BDB80 (size: 185) ---
|
|
|
|
|
|
undefined4 * __thiscall
|
|
|
|
FUN_006bdb80(undefined4 *param_1,undefined4 param_2,undefined4 *param_3,int param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
FUN_006bffa0(&DAT_00807e74,"Texture Renderer",param_2,param_3);
|
|
|
|
*param_1 = &PTR_LAB_00807db0;
|
|
|
|
param_1[3] = &PTR_FUN_00807d70;
|
|
|
|
param_1[4] = &PTR_LAB_00807d5c;
|
|
|
|
param_1[0x38] = &PTR_LAB_00807d38;
|
|
|
|
param_1[0x39] = &PTR_LAB_00807d24;
|
|
|
|
param_1[0x5b] = 0;
|
|
|
|
if (param_3 != (undefined4 *)0x0) {
|
|
|
|
*param_3 = 0;
|
|
|
|
}
|
|
|
|
if ((*(uint *)(param_4 + 0x554) >> 0x11 & 1) == 0) {
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
if ((*(uint *)(param_4 + 0xa4) >> 1 & 1) == 0) {
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
piVar1 = *(int **)(param_4 + 0xb0);
|
|
|
|
if (piVar1 == (int *)0x0) {
|
|
|
|
if (*(int *)(param_4 + 0xac) == 0) {
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
piVar1 = (int *)FUN_004592b0();
|
|
|
|
if (piVar1 == (int *)0x0) {
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)(*piVar1 + 0x1c))();
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
iVar2 = *(int *)(iVar2 + 0x110);
|
|
|
|
param_1[0x5b] = iVar2;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
*(int *)(iVar2 + 4) = *(int *)(iVar2 + 4) + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdc40 at 0x006BDC40 (size: 15) ---
|
|
|
|
|
|
void FUN_006bdc40(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006bdc4d. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)**(undefined4 **)(param_1 + -8))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdc50 at 0x006BDC50 (size: 16) ---
|
|
|
|
|
|
void FUN_006bdc50(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006bdc5d. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(**(int **)(param_1 + -8) + 4))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdc60 at 0x006BDC60 (size: 16) ---
|
|
|
|
|
|
void FUN_006bdc60(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006bdc6d. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(**(int **)(param_1 + -8) + 8))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdcd0 at 0x006BDCD0 (size: 82) ---
|
|
|
|
|
|
void __fastcall FUN_006bdcd0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)param_1[0x5b];
|
|
|
|
*param_1 = &PTR_LAB_00807db0;
|
|
|
|
param_1[3] = &PTR_FUN_00807d70;
|
|
|
|
param_1[4] = &PTR_LAB_00807d5c;
|
|
|
|
param_1[0x38] = &PTR_LAB_00807d38;
|
|
|
|
param_1[0x39] = &PTR_LAB_00807d24;
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
piVar1 = puVar2 + 1;
|
|
|
|
*piVar1 = *piVar1 + -1;
|
|
|
|
if (*piVar1 == 0) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
param_1[0x5b] = 0;
|
|
|
|
}
|
|
|
|
FUN_006bff50();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdd30 at 0x006BDD30 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006bdd30(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006bdcd0();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdd50 at 0x006BDD50 (size: 22) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006bdd50(undefined4 *param_1,LPCRITICAL_SECTION param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = param_2;
|
|
|
|
EnterCriticalSection(param_2);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdd70 at 0x006BDD70 (size: 195) ---
|
|
|
|
|
|
undefined4 * __thiscall
|
|
|
|
FUN_006bdd70(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006c1dd0(param_3,param_4,(LPCRITICAL_SECTION)(param_1 + 0x1f),param_2);
|
|
|
|
*param_1 = &PTR_FUN_00807ed8;
|
|
|
|
param_1[3] = &PTR_FUN_00807e98;
|
|
|
|
param_1[4] = &PTR_LAB_00807d5c;
|
|
|
|
param_1[0x14] = 0;
|
|
|
|
FUN_006c1f90(0);
|
|
|
|
FUN_006c1f90(1);
|
|
|
|
FUN_006c1f90(1);
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
param_1[0x1e] = 0;
|
|
|
|
InitializeCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x1f));
|
|
|
|
InitializeCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
param_1[0x2b] = 0;
|
|
|
|
param_1[0x2c] = 1;
|
|
|
|
param_1[0x2d] = 0;
|
|
|
|
param_1[0x2e] = 0;
|
|
|
|
param_1[0x2f] = 0;
|
|
|
|
param_1[0x30] = 0;
|
|
|
|
InitializeCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x31));
|
|
|
|
SetEvent((HANDLE)param_1[0x17]);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdf30 at 0x006BDF30 (size: 73) ---
|
|
|
|
|
|
void FUN_006bdf30(int *param_1,int *param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
bool bVar4;
|
|
|
|
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_2;
|
|
|
|
piVar3 = &DAT_00807cbc;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_2;
|
|
|
|
piVar3 = &DAT_00808340;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
FUN_006c0060();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x24))(param_2,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bdfb0 at 0x006BDFB0 (size: 102) ---
|
|
|
|
|
|
void __fastcall FUN_006bdfb0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
DWORD DVar2;
|
|
|
|
UINT Msg;
|
|
|
|
WPARAM wParam;
|
|
|
|
LPARAM lParam;
|
|
|
|
tagMSG local_1c;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0xb4);
|
|
|
|
while (iVar1 != 0) {
|
|
|
|
PeekMessageA(&local_1c,(HWND)0x0,0,0,0);
|
|
|
|
Sleep(1);
|
|
|
|
iVar1 = *(int *)(param_1 + 0xb4);
|
|
|
|
}
|
|
|
|
DVar2 = GetQueueStatus(8);
|
|
|
|
if ((DVar2 >> 0x10 & 8) != 0) {
|
|
|
|
lParam = 0;
|
|
|
|
wParam = 0;
|
|
|
|
Msg = 0;
|
|
|
|
DVar2 = GetCurrentThreadId();
|
|
|
|
PostThreadMessageA(DVar2,Msg,wParam,lParam);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be020 at 0x006BE020 (size: 77) ---
|
|
|
|
|
|
undefined4 FUN_006be020(int param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (param_3 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_006c23a0(*(undefined4 *)(param_1 + 0x50),param_2,0,0,0);
|
|
|
|
if (iVar1 == 0x102) {
|
|
|
|
*param_3 = *(undefined4 *)(param_1 + 8);
|
|
|
|
return 0x40237;
|
|
|
|
}
|
|
|
|
*param_3 = *(undefined4 *)(param_1 + 8);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be070 at 0x006BE070 (size: 93) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006be070(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (*(int *)(param_1[0x1e] + 0x18) != 0) {
|
|
|
|
if (param_1[0x1c] == 1) {
|
|
|
|
SetEvent((HANDLE)param_1[0x17]);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0xa0))();
|
|
|
|
if ((iVar1 != 1) || (param_2 == 0)) {
|
|
|
|
ResetEvent((HANDLE)param_1[0x17]);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SetEvent((HANDLE)param_1[0x17]);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be0d0 at 0x006BE0D0 (size: 103) ---
|
|
|
|
|
|
undefined4 FUN_006be0d0(int param_1,undefined4 param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
|
|
|
|
if (param_3 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_006c2030(param_2,&DAT_00807fa4);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = (**(code **)(*(int *)(param_1 + -0xc) + 0x1c))(0);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
piVar2 = (int *)(iVar1 + 0xc);
|
|
|
|
*param_3 = piVar2;
|
|
|
|
(**(code **)(*piVar2 + 4))(piVar2);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*param_3 = 0;
|
|
|
|
(**(code **)(iRam00000000 + 4))(0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*param_3 = 0;
|
|
|
|
return 0x80040216;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be140 at 0x006BE140 (size: 52) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006be140(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if ((param_1[5] != 0) && (param_1[0x1c] = 1, param_1[0x1b] == 0)) {
|
|
|
|
SetEvent((HANDLE)param_1[0x17]);
|
|
|
|
if (param_1[0x19] != 0) {
|
|
|
|
(**(code **)(*param_1 + 0x60))();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be180 at 0x006BE180 (size: 53) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006be180(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_1[5] == 1) {
|
|
|
|
ResetEvent((HANDLE)param_1[0x17]);
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x28))(0);
|
|
|
|
(**(code **)(*param_1 + 0x6c))();
|
|
|
|
(**(code **)(*param_1 + 0x70))();
|
|
|
|
FUN_006bdfb0();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be1c0 at 0x006BE1C0 (size: 28) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006be1c0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_1[0x14] != 0) {
|
|
|
|
FUN_006c31d0();
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x28))(1);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be1e0 at 0x006BE1E0 (size: 26) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006be1e0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_1[0x14] != 0) {
|
|
|
|
FUN_006c31d0();
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x70))();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be270 at 0x006BE270 (size: 48) ---
|
|
|
|
|
|
bool __fastcall FUN_006be270(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0x68);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x18) + 0x18))(*(int **)(param_1 + 0x18),iVar1);
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
}
|
|
|
|
ResetEvent(*(HANDLE *)(param_1 + 0x54));
|
|
|
|
return iVar1 == 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be2a0 at 0x006BE2A0 (size: 124) ---
|
|
|
|
|
|
bool __thiscall FUN_006be2a0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined1 *puVar2;
|
|
|
|
undefined1 *puVar3;
|
|
|
|
undefined1 local_10 [8];
|
|
|
|
undefined1 local_8 [8];
|
|
|
|
|
|
|
|
if (param_2 != 0) {
|
|
|
|
puVar3 = local_8;
|
|
|
|
puVar2 = local_10;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x58))(param_2,puVar2,puVar3);
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
SetEvent((HANDLE)param_1[0x15]);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
iVar1 = (**(code **)(*(int *)param_1[6] + 0x10))
|
|
|
|
((int *)param_1[6],param_1[8],param_1[9],puVar2,puVar3,param_1[0x15],
|
|
|
|
param_1 + 0x1a);
|
|
|
|
return -1 < iVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be360 at 0x006BE360 (size: 41) ---
|
|
|
|
|
|
bool __fastcall FUN_006be360(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
return iVar1 != 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be390 at 0x006BE390 (size: 45) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006be390(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
piVar1 = *(int **)(param_1 + 0x6c);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 4))(piVar1);
|
|
|
|
}
|
|
|
|
uVar2 = *(undefined4 *)(param_1 + 0x6c);
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be3c0 at 0x006BE3C0 (size: 284) ---
|
|
|
|
|
|
uint __thiscall FUN_006be3c0(int *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
LPCRITICAL_SECTION unaff_EBX;
|
|
|
|
undefined4 unaff_retaddr;
|
|
|
|
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x98))(param_2);
|
|
|
|
if ((int)uVar1 < 0) {
|
|
|
|
return uVar1 & (uVar1 == 0x8004022b) - 1;
|
|
|
|
}
|
|
|
|
if (param_1[5] == 1) {
|
|
|
|
(**(code **)(*param_1 + 0x50))();
|
|
|
|
param_1[0x2d] = 0;
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x1f));
|
|
|
|
if (param_1[5] == 0) {
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x1f));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
param_1[0x2d] = 1;
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
(**(code **)(*param_1 + 0x34))(unaff_retaddr);
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x1f));
|
|
|
|
SetEvent((HANDLE)param_1[0x17]);
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0x2c))();
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
param_1[0x2d] = 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x50))();
|
|
|
|
param_1[0x2d] = 0;
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x1f));
|
|
|
|
if (param_1[5] == 0) {
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x1f));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
(**(code **)(*param_1 + 0xa8))(param_1[0x1b]);
|
|
|
|
(**(code **)(*param_1 + 0x70))();
|
|
|
|
(**(code **)(*param_1 + 0x60))();
|
|
|
|
(**(code **)(*param_1 + 0x6c))();
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
LeaveCriticalSection(unaff_EBX);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be4e0 at 0x006BE4E0 (size: 49) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006be4e0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
piVar1 = *(int **)(param_1 + 0x6c);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
}
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be520 at 0x006BE520 (size: 94) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006be520(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + 0x94);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (*(int *)(param_1 + 100) == 0) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0xc0) = 0;
|
|
|
|
if (*(int *)(param_1 + 0x50) != 0) {
|
|
|
|
FUN_006c3200();
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x74) = 1;
|
|
|
|
uVar1 = FUN_006c0530(1,0,param_1 + 0xc);
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be580 at 0x006BE580 (size: 104) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006be580(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
undefined4 uVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + 0x25);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (param_1[0x19] != 1) {
|
|
|
|
param_1[0x19] = 1;
|
|
|
|
timeBeginPeriod(1);
|
|
|
|
(**(code **)(*param_1 + 0x40))();
|
|
|
|
if (param_1[0x1b] == 0) {
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x60))();
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0x54))(param_1[0x1b]);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
SetEvent((HANDLE)param_1[0x15]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be5f0 at 0x006BE5F0 (size: 60) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006be5f0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
if (param_1[0x19] == 1) {
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
(**(code **)(*param_1 + 0x44))();
|
|
|
|
timeEndPeriod(1);
|
|
|
|
}
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be630 at 0x006BE630 (size: 39) ---
|
|
|
|
|
|
void __thiscall FUN_006be630(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
*(undefined4 *)(param_1 + 0xb0) = param_2;
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be660 at 0x006BE660 (size: 78) ---
|
|
|
|
|
|
undefined4 * __thiscall
|
|
|
|
FUN_006be660(undefined4 *param_1,int param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006c1d20("Renderer pin",param_2,param_2 + 0x7c,param_3,param_4);
|
|
|
|
param_1[0x36] = param_2;
|
|
|
|
*param_1 = &PTR_LAB_00808030;
|
|
|
|
param_1[3] = &PTR_FUN_00807fe8;
|
|
|
|
param_1[4] = &PTR_LAB_00807fd0;
|
|
|
|
param_1[0x26] = &PTR_LAB_00807fac;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be6b0 at 0x006BE6B0 (size: 102) ---
|
|
|
|
|
|
int FUN_006be6b0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection_00;
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(*(int *)(param_1 + 0xcc) + 0x7c);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
lpCriticalSection_00 = (LPCRITICAL_SECTION)(*(int *)(param_1 + 0xcc) + 0x94);
|
|
|
|
EnterCriticalSection(lpCriticalSection_00);
|
|
|
|
iVar1 = (**(code **)(*(int *)(param_1 + -0xc) + 0x38))();
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = (**(code **)(**(int **)(param_1 + 0xcc) + 0x68))();
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
iVar1 = FUN_004f1b30(param_1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection_00);
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be780 at 0x006BE780 (size: 90) ---
|
|
|
|
|
|
int FUN_006be780(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection_00;
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(*(int *)(param_1 + 0xcc) + 0x7c);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
lpCriticalSection_00 = (LPCRITICAL_SECTION)(*(int *)(param_1 + 0xcc) + 0x94);
|
|
|
|
EnterCriticalSection(lpCriticalSection_00);
|
|
|
|
iVar1 = (**(code **)(**(int **)(param_1 + 0xcc) + 0x88))();
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
iVar1 = FUN_006c13f0(param_1);
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection_00);
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be880 at 0x006BE880 (size: 31) ---
|
|
|
|
|
|
void __fastcall FUN_006be880(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = (**(code **)(**(int **)(param_1 + 0xd8) + 0x8c))();
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
FUN_006c1100();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be8d0 at 0x006BE8D0 (size: 58) ---
|
|
|
|
|
|
undefined4 FUN_006be8d0(undefined4 param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPVOID pvVar1;
|
|
|
|
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
pvVar1 = CoTaskMemAlloc(8);
|
|
|
|
*param_2 = pvVar1;
|
|
|
|
if (pvVar1 == (LPVOID)0x0) {
|
|
|
|
return 0x8007000e;
|
|
|
|
}
|
|
|
|
FUN_006c1fc0(pvVar1,&DAT_00807fa4);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006be970 at 0x006BE970 (size: 191) ---
|
|
|
|
|
|
void __fastcall FUN_006be970(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
DWORD DVar1;
|
|
|
|
|
|
|
|
*(undefined4 *)(param_1 + 0x138) = 0xfffffc18;
|
|
|
|
*(undefined4 *)(param_1 + 0x13c) = 0xffffffff;
|
|
|
|
DVar1 = timeGetTime();
|
|
|
|
*(DWORD *)(param_1 + 0x158) = DVar1;
|
|
|
|
*(undefined4 *)(param_1 + 0xf4) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x10c) = 0xffffffff;
|
|
|
|
*(undefined4 *)(param_1 + 0x110) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xf8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x108) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xfc) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x124) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x120) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x128) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 300) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x130) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x134) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x140) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x144) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x154) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x150) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x148) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x14c) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xe8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x104) = 0xfffb6c20;
|
|
|
|
*(undefined4 *)(param_1 + 0xf0) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x118) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x11c) = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bea40 at 0x006BEA40 (size: 25) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006bea40(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
DWORD DVar1;
|
|
|
|
|
|
|
|
DVar1 = timeGetTime();
|
|
|
|
*(DWORD *)(param_1 + 0x158) = DVar1 - *(int *)(param_1 + 0x158);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006beb70 at 0x006BEB70 (size: 100) ---
|
|
|
|
|
|
void __fastcall FUN_006beb70(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[0x3d] = 0;
|
|
|
|
param_1[0x3e] = 5000000;
|
|
|
|
(**(code **)(*param_1 + 0xb4))(param_1[0x54],param_1[0x55]);
|
|
|
|
if (0 < param_1[0x3c]) {
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006bebbf. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
Sleep(param_1[0x3c] / 10000);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006bebce. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
Sleep(0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bebe0 at 0x006BEBE0 (size: 43) ---
|
|
|
|
|
|
void __fastcall FUN_006bebe0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
DWORD DVar1;
|
|
|
|
|
|
|
|
(**(code **)(*param_1 + 0xb4))(param_1[0x54],param_1[0x55]);
|
|
|
|
DVar1 = timeGetTime();
|
|
|
|
param_1[0x3f] = DVar1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bec10 at 0x006BEC10 (size: 127) ---
|
|
|
|
|
|
void __fastcall FUN_006bec10(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
DWORD DVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
DVar2 = timeGetTime();
|
|
|
|
iVar3 = (DVar2 - *(int *)(param_1 + 0xfc)) * 10000;
|
|
|
|
if ((iVar3 < *(int *)(param_1 + 0xf4) * 2) || (iVar3 < *(int *)(param_1 + 0xf8) * 2)) {
|
|
|
|
iVar1 = iVar3 + *(int *)(param_1 + 0xf4) * 3;
|
|
|
|
*(int *)(param_1 + 0xf4) = (int)(iVar1 + (iVar1 >> 0x1f & 3U)) >> 2;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0xf8) = iVar3;
|
|
|
|
if (0 < *(int *)(param_1 + 0xf0)) {
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006bec7a. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
Sleep(*(int *)(param_1 + 0xf0) / 10000);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006bec89. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
Sleep(0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bf2e0 at 0x006BF2E0 (size: 54) ---
|
|
|
|
|
|
undefined4 FUN_006bf2e0(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + -100));
|
|
|
|
*param_2 = *(undefined4 *)(param_1 + 0x40);
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + -100));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bf320 at 0x006BF320 (size: 54) ---
|
|
|
|
|
|
undefined4 FUN_006bf320(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + -100));
|
|
|
|
*param_2 = *(undefined4 *)(param_1 + 0x44);
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + -100));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bf360 at 0x006BF360 (size: 113) ---
|
|
|
|
|
|
undefined4 FUN_006bf360(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
DWORD DVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
if (param_2 == (int *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + -100);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (*(int *)(param_1 + -0x7c) == 0) {
|
|
|
|
iVar2 = *(int *)(param_1 + 0x78);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
DVar1 = timeGetTime();
|
|
|
|
iVar2 = DVar1 - *(int *)(param_1 + 0x78);
|
|
|
|
}
|
|
|
|
if (iVar2 < 1) {
|
|
|
|
*param_2 = 0;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar2 = MulDiv(100000,*(int *)(param_1 + 0x44),iVar2);
|
|
|
|
*param_2 = iVar2;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bf3e0 at 0x006BF3E0 (size: 107) ---
|
|
|
|
|
|
undefined4 FUN_006bf3e0(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + -100);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if ((*(int *)(param_1 + -200) != 0) && (1 < *(int *)(param_1 + 0x44))) {
|
|
|
|
iVar1 = *(int *)(param_1 + 0x44) + -1;
|
|
|
|
uVar2 = __alldiv(*(undefined4 *)(param_1 + 0x48),*(undefined4 *)(param_1 + 0x4c),iVar1,
|
|
|
|
iVar1 >> 0x1f);
|
|
|
|
*param_2 = uVar2;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*param_2 = 0;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bf450 at 0x006BF450 (size: 97) ---
|
|
|
|
|
|
int FUN_006bf450(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = 1;
|
|
|
|
if (0x40000000 < param_1) {
|
|
|
|
return 0x8000;
|
|
|
|
}
|
|
|
|
if (1 < param_1) {
|
|
|
|
do {
|
|
|
|
iVar1 = iVar1 * 2;
|
|
|
|
} while (iVar1 * iVar1 < param_1);
|
|
|
|
}
|
|
|
|
if (param_1 != 0) {
|
|
|
|
iVar1 = (iVar1 * iVar1 + param_1) / (iVar1 * 2);
|
|
|
|
if ((-1 < iVar1) && (iVar1 = (iVar1 * iVar1 + param_1) / (iVar1 * 2), -1 < iVar1)) {
|
|
|
|
iVar1 = (iVar1 * iVar1 + param_1) / (iVar1 * 2);
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bf4c0 at 0x006BF4C0 (size: 149) ---
|
|
|
|
|
|
undefined4 __thiscall
|
|
|
|
FUN_006bf4c0(int param_1,int param_2,undefined4 *param_3,uint param_4,int param_5,undefined4 param_6
|
|
|
|
,undefined4 param_7)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
undefined4 uVar1;
|
|
|
|
undefined8 uVar2;
|
|
|
|
|
|
|
|
if (param_3 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + 0x7c);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if ((*(int *)(param_1 + 0x18) != 0) && (1 < param_2)) {
|
|
|
|
uVar2 = FUN_006c2090(param_6,param_7,param_6,param_7,param_2,param_2 >> 0x1f,0,0);
|
|
|
|
uVar1 = __alldiv(param_4 - (uint)uVar2,
|
|
|
|
(param_5 - (int)((ulonglong)uVar2 >> 0x20)) - (uint)(param_4 < (uint)uVar2),
|
|
|
|
param_2 + -1,param_2 + -1 >> 0x1f);
|
|
|
|
uVar1 = FUN_006bf450(uVar1);
|
|
|
|
*param_3 = uVar1;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*param_3 = 0;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bf650 at 0x006BF650 (size: 80) ---
|
|
|
|
|
|
void FUN_006bf650(undefined4 *param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *unaff_ESI;
|
|
|
|
|
|
|
|
iVar1 = param_2;
|
|
|
|
if ((param_2 == 0) && (param_1[0xd] != 0)) {
|
|
|
|
(**(code **)*param_1)(param_1,&DAT_00808390,¶m_2);
|
|
|
|
FUN_006c0530(0x15,unaff_ESI,0);
|
|
|
|
(**(code **)(*unaff_ESI + 8))(unaff_ESI);
|
|
|
|
}
|
|
|
|
FUN_006c0480(param_1,iVar1,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bf700 at 0x006BF700 (size: 202) ---
|
|
|
|
|
|
void __fastcall FUN_006bf700(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + 0x25);
|
|
|
|
*param_1 = (int)&PTR_FUN_00807ed8;
|
|
|
|
param_1[3] = (int)&PTR_FUN_00807e98;
|
|
|
|
param_1[4] = (int)&PTR_LAB_00807d5c;
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
if (param_1[0x19] == 1) {
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
(**(code **)(*param_1 + 0x44))();
|
|
|
|
timeEndPeriod(1);
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
piVar1 = (int *)param_1[0x1b];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
if (param_1[0x14] != 0) {
|
|
|
|
(**(code **)(*(int *)(param_1[0x14] + 8) + 0xc))(1);
|
|
|
|
param_1[0x14] = 0;
|
|
|
|
}
|
|
|
|
if ((int *)param_1[0x1e] != (int *)0x0) {
|
|
|
|
(**(code **)(*(int *)param_1[0x1e] + 0xc))(1);
|
|
|
|
param_1[0x1e] = 0;
|
|
|
|
}
|
|
|
|
DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x31));
|
|
|
|
DeleteCriticalSection(lpCriticalSection);
|
|
|
|
DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x1f));
|
|
|
|
FUN_006c1fb0();
|
|
|
|
FUN_006c1fb0();
|
|
|
|
FUN_006c1fb0();
|
|
|
|
FUN_006c0110();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bfb00 at 0x006BFB00 (size: 141) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006bfb00(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
undefined4 uVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + 0xc4);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (param_2 == 0) {
|
|
|
|
if (*(int *)(param_1 + 0x78) != 0) {
|
|
|
|
LAB_006bfb7c:
|
|
|
|
uVar1 = *(undefined4 *)(param_1 + 0x78);
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
param_2 = 0;
|
|
|
|
iVar2 = FUN_005df0f5(0xe0);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
piVar3 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar3 = (int *)FUN_006be660(param_1,¶m_2,&DAT_00807fa4);
|
|
|
|
}
|
|
|
|
*(int **)(param_1 + 0x78) = piVar3;
|
|
|
|
if (piVar3 != (int *)0x0) {
|
|
|
|
if (-1 < param_2) goto LAB_006bfb7c;
|
|
|
|
(**(code **)(*piVar3 + 0xc))(1);
|
|
|
|
*(undefined4 *)(param_1 + 0x78) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bfb90 at 0x006BFB90 (size: 100) ---
|
|
|
|
|
|
int __fastcall FUN_006bfb90(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
if (param_1[5] == 2) {
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x7c))();
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
param_1[0x2c] = 0;
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
param_1[0x2c] = 1;
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
iVar1 = 0;
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bfc00 at 0x006BFC00 (size: 140) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006bfc00(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
piVar1 = (int *)param_1[0x2b];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
param_1[0x2b] = 0;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1[0x1e] + 0x18) == 0) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if ((param_1[5] != 0) && (*(char *)(param_1[0x1e] + 0x25) == '\0')) {
|
|
|
|
return 0x80040224;
|
|
|
|
}
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
param_1[0x2c] = 0;
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x25));
|
|
|
|
(**(code **)(*param_1 + 100))();
|
|
|
|
(**(code **)(*param_1 + 0x70))();
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
if (param_1[5] == 2) {
|
|
|
|
(**(code **)(*param_1 + 0x80))();
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bfe00 at 0x006BFE00 (size: 58) ---
|
|
|
|
|
|
void FUN_006bfe00(undefined4 param_1,undefined4 param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_3 + 0x25));
|
|
|
|
if (param_3[0x30] != 0) {
|
|
|
|
param_3[0x30] = 0;
|
|
|
|
(**(code **)(*param_3 + 0x60))();
|
|
|
|
}
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_3 + 0x25));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bfee0 at 0x006BFEE0 (size: 74) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006bfee0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(UINT *)(param_1 + 0xc0) != 0) {
|
|
|
|
timeKillEvent(*(UINT *)(param_1 + 0xc0));
|
|
|
|
*(undefined4 *)(param_1 + 0xc0) = 0;
|
|
|
|
}
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
*(undefined4 *)(param_1 + 0x70) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x74) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xb8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xbc) = 0;
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x94));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bff30 at 0x006BFF30 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006bff30(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006c0fa0();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bff50 at 0x006BFF50 (size: 45) ---
|
|
|
|
|
|
void __fastcall FUN_006bff50(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_00808080;
|
|
|
|
param_1[3] = &PTR_FUN_00807d70;
|
|
|
|
param_1[4] = &PTR_LAB_00807d5c;
|
|
|
|
param_1[0x38] = &PTR_LAB_00807d38;
|
|
|
|
param_1[0x39] = &PTR_LAB_00807d24;
|
|
|
|
FUN_006bf700();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bff80 at 0x006BFF80 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006bff80(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006bf700();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006bffa0 at 0x006BFFA0 (size: 103) ---
|
|
|
|
|
|
undefined4 * __thiscall
|
|
|
|
FUN_006bffa0(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
|
|
undefined4 param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006bdd70(param_2,param_3,param_4,param_5);
|
|
|
|
*param_1 = &PTR_LAB_00808080;
|
|
|
|
param_1[3] = &PTR_FUN_00807d70;
|
|
|
|
param_1[4] = &PTR_LAB_00807d5c;
|
|
|
|
param_1[0x38] = &PTR_LAB_00807d38;
|
|
|
|
param_1[0x39] = &PTR_LAB_00807d24;
|
|
|
|
param_1[0x3b] = 0;
|
|
|
|
param_1[0x48] = 0;
|
|
|
|
param_1[0x49] = 0;
|
|
|
|
FUN_006be970();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|