server-re/decomp/Agent_Release_x64/full/functions/0x1400d7dcc.c
2026-10-14 16:45:19 -04:00

75 lines
2.6 KiB
C

/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
* Ghidra 12.1.2 decompiler output for 0x1400d7dcc FUN_1400d7dcc
* Pseudocode, not original source. */
void FUN_1400d7dcc(longlong *param_1)
{
uint uVar1;
ushort uVar2;
uint uVar3;
ulonglong _Size;
ushort *puVar4;
uint uVar5;
ulonglong uVar6;
uVar1 = *(uint *)((longlong)param_1 + 0x44);
_Size = (ulonglong)uVar1;
while( true ) {
uVar3 = ((int)param_1[0xb] - *(int *)((longlong)param_1 + 0x9c)) -
*(uint *)((longlong)param_1 + 0x94);
if ((uVar1 - 0x106) + *(int *)((longlong)param_1 + 0x44) <= *(uint *)((longlong)param_1 + 0x94))
{
memcpy((void *)param_1[10],(void *)(param_1[10] + _Size),_Size);
uVar6 = (ulonglong)*(uint *)((longlong)param_1 + 0x74);
*(uint *)(param_1 + 0x13) = (int)param_1[0x13] - uVar1;
*(int *)((longlong)param_1 + 0x94) = *(int *)((longlong)param_1 + 0x94) - uVar1;
*(int *)((longlong)param_1 + 0x84) = *(int *)((longlong)param_1 + 0x84) - uVar1;
puVar4 = (ushort *)(param_1[0xd] + uVar6 * 2);
do {
puVar4 = puVar4 + -1;
uVar2 = 0;
if (uVar1 <= *puVar4) {
uVar2 = *puVar4 - (short)uVar1;
}
uVar5 = (int)uVar6 - 1;
uVar6 = (ulonglong)uVar5;
*puVar4 = uVar2;
} while (uVar5 != 0);
puVar4 = (ushort *)(param_1[0xc] + _Size * 2);
uVar5 = uVar1;
do {
puVar4 = puVar4 + -1;
uVar2 = 0;
if (uVar1 <= *puVar4) {
uVar2 = *puVar4 - (short)uVar1;
}
uVar5 = uVar5 - 1;
*puVar4 = uVar2;
} while (uVar5 != 0);
uVar3 = uVar3 + uVar1;
}
if ((int)((longlong *)*param_1)[1] == 0) break;
uVar3 = FUN_1400d79ec((longlong *)*param_1,
(void *)((ulonglong)*(uint *)((longlong)param_1 + 0x9c) +
(ulonglong)*(uint *)((longlong)param_1 + 0x94) + param_1[10]),
uVar3);
*(int *)((longlong)param_1 + 0x9c) = *(int *)((longlong)param_1 + 0x9c) + uVar3;
if (2 < *(uint *)((longlong)param_1 + 0x9c)) {
uVar3 = (uint)*(byte *)((ulonglong)*(uint *)((longlong)param_1 + 0x94) + param_1[10]);
*(uint *)(param_1 + 0xe) = uVar3;
*(uint *)(param_1 + 0xe) =
(uVar3 << ((byte)(int)param_1[0x10] & 0x1f) ^
(uint)*(byte *)((ulonglong)(*(uint *)((longlong)param_1 + 0x94) + 1) + param_1[10])) &
*(uint *)((longlong)param_1 + 0x7c);
}
if (0x105 < *(uint *)((longlong)param_1 + 0x9c)) {
return;
}
if (*(int *)(*param_1 + 8) == 0) {
return;
}
}
return;
}