server-re/decomp/MessageServer_Release_x64/full/functions/0x1400aba00.c

172 lines
6 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400aba00 FUN_1400aba00
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Removing unreachable block (ram,0x0001400abd81) */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void FUN_1400aba00(longlong param_1,longlong *param_2,undefined8 *param_3,undefined8 param_4)
{
double dVar1;
uint uVar2;
longlong lVar3;
longlong lVar4;
undefined8 uVar5;
longlong lVar6;
longlong lVar7;
double dVar8;
undefined1 auStack_d98 [32];
int local_d78 [2];
longlong local_d70;
longlong local_d68;
uint local_d60;
int local_d5c;
undefined4 local_d50 [2];
undefined8 local_d48;
undefined1 local_d40;
undefined4 local_d3c;
undefined1 local_d38;
undefined1 local_d37;
longlong local_d30;
uint uStack_d28;
undefined4 uStack_d24;
longlong *local_d20;
undefined8 local_d18;
exception local_d10 [72];
longlong local_cc8;
undefined8 uStack_cc0;
longlong *local_48;
undefined4 local_40;
int local_3c;
ulonglong local_38;
local_d18 = 0xfffffffffffffffe;
local_38 = DAT_1401ac5a0 ^ (ulonglong)auStack_d98;
(**(code **)(*(longlong *)(param_1 + 0x78) + 0x10))();
lVar7 = 0;
lVar3 = lVar7;
if (*(longlong *)(param_1 + 0x1670) != 0) {
lVar3 = *(longlong *)(param_1 + 0x1660);
}
do {
lVar6 = lVar3;
if (lVar6 == 0) {
return;
}
if ((((*(longlong **)(lVar6 + 8) != (longlong *)0x0) &&
(lVar3 = **(longlong **)(lVar6 + 8), lVar3 != 0)) && (*(char *)(lVar3 + 0x684) == '\0')) &&
(*(int *)(lVar3 + 0x56c) != 1)) {
lVar4 = lVar7;
if (*(longlong *)(param_1 + 0x5d8) != 0) {
lVar4 = *(longlong *)(*(longlong *)(param_1 + 0x5d8) + 0x38);
}
dVar8 = *(double *)(lVar3 + 0x148) - *(double *)(lVar4 + 0x100);
*(double *)(lVar3 + 0x148) = dVar8;
if (dVar8 <= 0.0) {
*(undefined8 *)(lVar3 + 0x148) = DAT_1401ac0f0;
uVar5 = (**(code **)(*(longlong *)(param_1 + 0x70) + 0x1c0))(param_1 + 0x70);
*(undefined8 *)(lVar3 + 0x80) = uVar5;
if (*(char *)(lVar3 + 0x608) == '\0') {
FUN_1400bca00(local_d78);
FUN_1400bc4d0((longlong)local_d78,param_2,(SIZE_T)param_3,param_4);
FUN_1400bcb60(local_d78,0x800,(SIZE_T)param_3,param_4);
uVar5 = 0;
FUN_1400bcb60(local_d78,0,(SIZE_T)param_3,param_4);
uVar5 = CONCAT71((int7)((ulonglong)uVar5 >> 8),0x20);
FUN_140054a10((longlong)local_d78,uVar5,(SIZE_T)param_3,param_4);
dVar8 = FUN_140076f50((char *)(param_1 + 0x1620));
FUN_140054760((longlong)local_d78,dVar8,(SIZE_T)param_3,param_4);
local_3c = 200;
local_40 = 0;
local_48 = &local_cc8;
if (local_d70 == 0) {
uVar2 = local_d60;
if (local_d68 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,uVar5,param_3,param_4);
}
}
else {
uVar2 = *(uint *)(local_d70 + 0x18);
}
lVar4 = local_d68;
if (local_d68 == 0) {
if (local_d70 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,(ulonglong)uVar2,param_3,param_4);
}
lVar4 = lVar7;
if (*(int *)(local_d70 + 0x18) != 0) {
lVar4 = *(longlong *)(local_d70 + 0x10);
}
}
local_40 = 1;
uStack_cc0 = CONCAT44(uStack_d24,uVar2);
local_d50[0] = 0;
local_d48 = 0;
local_d40 = 1;
local_d3c = 0xffffffff;
local_d38 = 1;
local_d37 = DAT_1401ac1cc;
param_3 = (undefined8 *)local_d50;
param_2 = &local_cc8;
local_d30 = lVar4;
uStack_d28 = uVar2;
local_cc8 = lVar4;
FUN_1400eff60((longlong *)(lVar3 + 0x668),(longlong)param_2,param_3);
if (local_48 == (longlong *)0x0) {
FUN_14006ba50(local_d10,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,
param_3,param_4);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_d10,(ThrowInfo *)&DAT_1401a93e8);
}
if (local_3c < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_40 = 0;
local_d20 = &local_d70;
FUN_1400d1800(&local_d70);
if (local_d68 != 0) {
if (local_d5c < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_d60 = 0;
}
}
else {
dVar8 = (double)(**(code **)(*(longlong *)(param_1 + 0x70) + 0x1c0))(param_1 + 0x70);
dVar8 = dVar8 - *(double *)(lVar3 + 0xc0);
if (0.0 < dVar8) {
*(double *)(lVar3 + 0x140) = dVar8;
}
uVar5 = (**(code **)(*(longlong *)(param_1 + 0x70) + 0x1c0))(param_1 + 0x70);
*(undefined8 *)(lVar3 + 0xc0) = uVar5;
*(int *)(lVar3 + 0x100) = *(int *)(lVar3 + 0x100) + 1;
*(undefined8 *)(lVar3 + 0x150) = 0;
dVar8 = *(double *)(param_1 + 0x4f8) + *(double *)(lVar3 + 0x60);
*(double *)(lVar3 + 0x158) = dVar8;
if (*(char *)(lVar3 + 0x618) != '\0') {
*(undefined8 *)(lVar3 + 0x50) = 0;
*(undefined1 *)(lVar3 + 0x618) = 0;
}
dVar1 = *(double *)(lVar3 + 0x50);
if (dVar1 <= 0.0) {
*(undefined8 *)(lVar3 + 0x50) = *(undefined8 *)(lVar3 + 0x158);
}
else {
*(double *)(lVar3 + 0x50) = (dVar8 - dVar1) * _DAT_1401ac108 + dVar1;
}
}
}
}
lVar3 = lVar7;
if (lVar6 != 0) {
lVar3 = *(longlong *)(lVar6 + 0x10);
}
} while( true );
}