server-re/decomp/DBCServer_Release_x64/full/functions/0x1400a56c0.c

112 lines
3 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1400a56c0 FUN_1400a56c0
* Pseudocode, not original source. */
void FUN_1400a56c0(longlong *param_1,ulonglong param_2,undefined8 param_3,undefined8 param_4)
{
longlong lVar1;
longlong lVar2;
longlong lVar3;
undefined8 *puVar4;
undefined8 *puVar5;
undefined8 *puVar6;
longlong *plVar7;
longlong *plVar8;
longlong lVar9;
ulonglong uVar10;
undefined8 *puVar11;
longlong *plVar12;
double dVar13;
longlong *local_30;
ulonglong local_28;
lVar9 = param_1[4];
lVar1 = param_1[1];
lVar2 = *param_1;
local_30 = (longlong *)0x0;
local_28 = param_2;
FUN_1400a59f0(&local_30,param_2,lVar1,param_4,0xfffffffffffffffe);
lVar3 = param_1[1];
puVar4 = (undefined8 *)*param_1;
*param_1 = 0;
param_1[1] = lVar3;
param_1[4] = 0;
for (plVar12 = (longlong *)param_1[6]; plVar12 != (longlong *)(lVar2 + lVar1 * 8);
plVar12 = plVar12 + 1) {
plVar8 = (longlong *)*plVar12;
while (plVar8 != (longlong *)0x0) {
uVar10 = (ulonglong)(longlong)(int)plVar8[1] % local_28;
*plVar12 = *plVar8;
*plVar8 = local_30[uVar10];
local_30[uVar10] = (longlong)plVar8;
plVar8 = (longlong *)*plVar12;
}
}
param_1[4] = lVar9;
plVar12 = (longlong *)*param_1;
*param_1 = (longlong)local_30;
uVar10 = param_1[1];
param_1[1] = local_28;
if (param_1[4] == 0) {
param_1[6] = *param_1 + local_28 * 8;
}
else {
plVar8 = (longlong *)*param_1;
param_1[6] = (longlong)plVar8;
lVar9 = *plVar8;
while (lVar9 == 0) {
plVar8 = plVar8 + 1;
param_1[6] = (longlong)plVar8;
lVar9 = *plVar8;
}
}
dVar13 = (double)param_1[1];
if (param_1[1] < 0) {
dVar13 = dVar13 + 1.8446744073709552e+19;
}
local_30 = plVar12;
local_28 = uVar10;
dVar13 = ceil((double)*(float *)(param_1 + 5) * dVar13);
lVar9 = -1;
if (dVar13 < 1.8446744073709552e+19) {
lVar9 = 0;
if ((9.223372036854776e+18 < dVar13) &&
(dVar13 = dVar13 - 9.223372036854776e+18, dVar13 < 9.223372036854776e+18)) {
lVar9 = -0x8000000000000000;
}
lVar9 = (longlong)dVar13 + lVar9;
}
param_1[7] = lVar9;
if (puVar4 != (undefined8 *)0x0) {
for (puVar11 = puVar4; puVar11 != puVar4 + lVar3; puVar11 = puVar11 + 1) {
puVar5 = (undefined8 *)*puVar11;
*puVar11 = 0;
while (puVar5 != (undefined8 *)0x0) {
puVar6 = (undefined8 *)*puVar5;
operator_delete(puVar5);
puVar5 = puVar6;
}
}
operator_delete(puVar4);
uVar10 = local_28;
plVar12 = local_30;
}
if (plVar12 != (longlong *)0x0) {
plVar8 = plVar12 + uVar10;
plVar7 = plVar12;
for (; plVar12 != plVar8; plVar12 = plVar12 + 1) {
puVar4 = (undefined8 *)*plVar12;
*plVar12 = 0;
while (puVar4 != (undefined8 *)0x0) {
puVar11 = (undefined8 *)*puVar4;
operator_delete(puVar4);
puVar4 = puVar11;
}
plVar7 = local_30;
}
operator_delete(plVar7);
}
return;
}