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

350 lines
12 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401b6a80 FUN_1401b6a80
* Pseudocode, not original source. */
/* WARNING: Removing unreachable block (ram,0x0001401b6fe9) */
/* WARNING: Removing unreachable block (ram,0x0001401b6ff0) */
/* WARNING: Removing unreachable block (ram,0x0001401b6fff) */
void FUN_1401b6a80(longlong param_1,undefined8 param_2,longlong *param_3)
{
undefined4 uVar1;
longlong lVar2;
longlong lVar3;
undefined8 uVar4;
undefined8 *puVar5;
undefined8 *puVar6;
int iVar7;
uint uVar8;
longlong *plVar9;
undefined8 *puVar10;
int iVar11;
size_t _Size;
ulonglong uVar12;
int iVar13;
int iVar14;
longlong local_res20;
undefined8 local_a8;
undefined1 local_98 [96];
puVar6 = (undefined8 *)0x0;
plVar9 = (longlong *)(param_1 + 0x30);
puVar5 = puVar6;
do {
if (((longlong)puVar5 < 0) || (5 < (longlong)puVar5)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
lVar2 = *plVar9;
if (lVar2 != 0) {
FUN_1401b6440(param_3);
*(undefined4 *)(param_3 + 0xd5) = *(undefined4 *)(param_1 + 0x178);
local_a8 = (int *)CONCAT44(local_a8._4_4_,0x10);
*(undefined2 *)((longlong)param_3 + 0x6ac) = *(undefined2 *)(param_1 + 0x17c);
param_3[0xce] = *(longlong *)(param_1 + 400);
*(undefined2 *)(param_3 + 0xcc) = 0xabce;
*(undefined2 *)((longlong)param_3 + 0x662) = *(undefined2 *)(param_1 + 0x180);
uVar1 = *(undefined4 *)(lVar2 + 0x30);
param_3[0xcd] = 0;
*(undefined4 *)((longlong)param_3 + 0x664) = uVar1;
lVar3 = param_3[1];
if (lVar3 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
FUN_1401b5c60(param_3,lVar3 + 1,0xffffffffffffffff);
if (param_3[1] <= lVar3) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if ((ulonglong)param_3[2] < 0x65) {
plVar9 = param_3 + (lVar3 + 2) * 2;
}
else {
plVar9 = (longlong *)(lVar3 * 0x10 + *param_3);
}
*plVar9 = (longlong)local_a8;
plVar9[1] = (longlong)(param_3 + 0xcc);
puVar5 = puVar6;
if (*(int *)(lVar2 + 0x30) != 0) {
puVar5 = *(undefined8 **)(lVar2 + 0x28);
}
lVar3 = param_3[1];
local_a8 = (int *)CONCAT44(local_a8._4_4_,*(int *)(lVar2 + 0x30));
if (lVar3 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
FUN_1401b5c60(param_3,lVar3 + 1,0xffffffffffffffff);
if (param_3[1] <= lVar3) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if ((ulonglong)param_3[2] < 0x65) {
plVar9 = param_3 + (lVar3 + 2) * 2;
}
else {
plVar9 = (longlong *)(lVar3 * 0x10 + *param_3);
}
*plVar9 = (longlong)local_a8;
plVar9[1] = (longlong)puVar5;
*(undefined4 *)(param_3 + 0xd6) = *(undefined4 *)(lVar2 + 0x48);
iVar14 = (int)param_3[0xd2];
if (-1 < iVar14) {
lVar3 = param_3[0xd2];
FUN_1401c2dc0(param_3 + 0xcf,(int)lVar3 + 1);
iVar13 = (int)lVar3 - iVar14;
if (0 < iVar13) {
puVar5 = puVar6;
if ((int)param_3[0xd2] != 0) {
puVar5 = (undefined8 *)param_3[0xd1];
}
memmove(puVar5 + (longlong)iVar14 + 1,puVar5 + iVar14,(longlong)iVar13 << 3);
}
if ((int)param_3[0xd2] != 0) {
puVar6 = (undefined8 *)param_3[0xd1];
}
puVar6[iVar14] = lVar2;
if (*(longlong *)(lVar2 + 0x10) == 0) {
return;
}
FUN_1401b5560(*(longlong *)(lVar2 + 0x10),lVar2);
return;
}
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
puVar5 = (undefined8 *)((longlong)puVar5 + 1);
plVar9 = plVar9 + 7;
} while ((longlong)puVar5 < 6);
iVar14 = -1;
if (*(int *)(param_1 + 0x1b0) == 0) {
*(int *)(param_1 + 0x1d4) = *(int *)(param_1 + 0x1d4) + 1;
local_a8 = (int *)(param_1 + 0x28);
*(undefined8 *)(param_1 + 0x1c0) = 0;
*(undefined8 *)(param_1 + 0x1c8) = 0;
*(undefined4 *)(param_1 + 0x1d0) = 0;
local_res20 = 0;
puVar5 = puVar6;
do {
if ((local_res20 < 0) || (5 < local_res20)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
iVar13 = *local_a8;
while (0 < iVar13) {
lVar2 = *(longlong *)(local_a8 + -4);
if ((int)puVar5 == 0) {
iVar14 = *(int *)(param_1 + 0x1b0);
if (iVar14 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
iVar13 = *(int *)(param_1 + 0x1b0);
FUN_1401c2dc0(param_1 + 0x198,iVar13 + 1);
iVar13 = iVar13 - iVar14;
if (0 < iVar13) {
puVar10 = puVar6;
if (*(int *)(param_1 + 0x1b0) != 0) {
puVar10 = *(undefined8 **)(param_1 + 0x1a8);
}
memmove(puVar10 + (longlong)iVar14 + 1,puVar10 + iVar14,(longlong)iVar13 << 3);
}
puVar10 = puVar6;
if (*(int *)(param_1 + 0x1b0) != 0) {
puVar10 = *(undefined8 **)(param_1 + 0x1a8);
}
puVar10[iVar14] = lVar2;
*(int *)(param_1 + 0x1c0) = *(int *)(param_1 + 0x1c0) + *(int *)(lVar2 + 0x30);
iVar14 = *(int *)(lVar2 + 0x48);
}
else {
if ((DAT_140344d48 <= *(int *)(lVar2 + 0x30) + *(int *)(param_1 + 0x1c0)) ||
(iVar14 != *(int *)(lVar2 + 0x48))) goto LAB_1401b6ccd;
iVar13 = *(int *)(param_1 + 0x1b0);
if (iVar13 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
iVar11 = *(int *)(param_1 + 0x1b0);
FUN_1401c2dc0(param_1 + 0x198,iVar11 + 1);
iVar11 = iVar11 - iVar13;
if (0 < iVar11) {
puVar10 = puVar6;
if (*(int *)(param_1 + 0x1b0) != 0) {
puVar10 = *(undefined8 **)(param_1 + 0x1a8);
}
memmove(puVar10 + (longlong)iVar13 + 1,puVar10 + iVar13,(longlong)iVar11 << 3);
}
puVar10 = puVar6;
if (*(int *)(param_1 + 0x1b0) != 0) {
puVar10 = *(undefined8 **)(param_1 + 0x1a8);
}
puVar10[iVar13] = lVar2;
*(int *)(param_1 + 0x1c0) = *(int *)(param_1 + 0x1c0) + *(int *)(lVar2 + 0x30);
}
if (*(longlong *)(lVar2 + 0x10) != 0) {
FUN_1401b5560(*(longlong *)(lVar2 + 0x10),lVar2);
}
puVar5 = (undefined8 *)(ulonglong)((int)puVar5 + 1);
iVar13 = *local_a8;
}
local_res20 = local_res20 + 1;
local_a8 = local_a8 + 0xe;
} while (local_res20 < 6);
LAB_1401b6ccd:
}
if (*(int *)(param_1 + 0x1c0) < 1) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
FUN_1401b6440(param_3);
*(undefined4 *)(param_3 + 0xd5) = *(undefined4 *)(param_1 + 0x178);
local_a8 = (int *)CONCAT44(local_a8._4_4_,0x10);
*(undefined2 *)((longlong)param_3 + 0x6ac) = *(undefined2 *)(param_1 + 0x17c);
iVar13 = *(int *)(param_1 + 0x1c0) - *(int *)(param_1 + 0x1c8);
if (DAT_140344d48 < iVar13) {
iVar13 = DAT_140344d48;
}
param_3[0xce] = *(longlong *)(param_1 + 400);
*(undefined2 *)(param_3 + 0xcc) = 0xabcd;
*(undefined2 *)((longlong)param_3 + 0x662) = *(undefined2 *)(param_1 + 0x180);
*(undefined4 *)((longlong)param_3 + 0x664) = *(undefined4 *)(param_1 + 0x1c0);
*(undefined4 *)(param_3 + 0xcd) = *(undefined4 *)(param_1 + 0x1d4);
*(undefined4 *)((longlong)param_3 + 0x66c) = *(undefined4 *)(param_1 + 0x1c4);
lVar2 = param_3[1];
if (-1 < lVar2) {
FUN_1401b5c60(param_3,lVar2 + 1,0xffffffffffffffff);
if (param_3[1] <= lVar2) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if ((ulonglong)param_3[2] < 0x65) {
plVar9 = param_3 + (lVar2 + 2) * 2;
}
else {
plVar9 = (longlong *)(lVar2 * 0x10 + *param_3);
}
*plVar9 = (longlong)local_a8;
plVar9[1] = (longlong)(param_3 + 0xcc);
*(int *)(param_3 + 0xd6) = iVar14;
iVar14 = *(int *)(param_1 + 0x1c8);
iVar11 = iVar14;
while( true ) {
if (iVar14 + iVar13 <= iVar11) {
*(int *)(param_1 + 0x1c4) = *(int *)(param_1 + 0x1c4) + 1;
if (*(int *)(param_1 + 0x1c8) == *(int *)(param_1 + 0x1c0)) {
iVar14 = *(int *)(param_1 + 0x1b0);
puVar5 = puVar6;
if (*(int *)(param_1 + 0x1b0) != 0) {
puVar5 = *(undefined8 **)(param_1 + 0x1a8);
}
if (iVar14 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if (iVar14 != 0) {
lVar2 = param_3[0xd2];
FUN_1401c2dc0(param_3 + 0xcf,(int)lVar2 + iVar14);
puVar10 = puVar6;
if ((int)param_3[0xd2] != 0) {
puVar10 = (undefined8 *)param_3[0xd1];
}
_Size = (longlong)iVar14 << 3;
if (_Size < 0x21) {
puVar10 = puVar10 + (int)lVar2;
for (uVar12 = (longlong)iVar14 & 0x1fffffffffffffff; uVar12 != 0; uVar12 = uVar12 - 1)
{
uVar4 = *puVar5;
puVar5 = puVar5 + 1;
*puVar10 = uVar4;
puVar10 = puVar10 + 1;
}
}
else {
memcpy(puVar10 + (int)lVar2,puVar5,_Size);
}
}
FUN_1401c2dc0(param_1 + 0x198,0);
}
lVar2 = param_3[1];
puVar5 = puVar6;
puVar10 = puVar6;
if (0 < lVar2) {
do {
if (((longlong)puVar6 < 0) || (lVar2 <= (longlong)puVar6)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if ((ulonglong)param_3[2] < 0x65) {
plVar9 = param_3 + ((longlong)puVar6 + 2) * 2;
}
else {
plVar9 = (longlong *)((longlong)puVar6 * 0x10 + *param_3);
}
puVar10 = (undefined8 *)(ulonglong)(uint)((int)puVar10 + (int)*plVar9);
uVar8 = (int)puVar5 + 1;
puVar6 = (undefined8 *)(longlong)(int)uVar8;
puVar5 = (undefined8 *)(ulonglong)uVar8;
} while ((longlong)puVar6 < lVar2);
}
FUN_1401e25f0(param_1 + 0x1d8,puVar10);
*(undefined8 *)(param_1 + 0x200) = param_2;
*(double *)(param_1 + 0x1f0) = (double)(int)puVar10 + *(double *)(param_1 + 0x1f0);
return;
}
iVar11 = *(int *)(param_1 + 0x1d0);
if ((iVar11 < 0) || (*(int *)(param_1 + 0x1b0) <= iVar11)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
lVar2 = *(longlong *)(*(longlong *)(param_1 + 0x1a8) + (longlong)iVar11 * 8);
iVar11 = *(int *)(lVar2 + 0x30) - *(int *)(param_1 + 0x1cc);
iVar7 = (iVar14 - *(int *)(param_1 + 0x1c8)) + iVar13;
if (iVar7 < iVar11) {
iVar11 = iVar7;
}
if (iVar11 < 1) break;
puVar5 = puVar6;
if (*(int *)(lVar2 + 0x30) != 0) {
puVar5 = *(undefined8 **)(lVar2 + 0x28);
}
iVar7 = *(int *)(param_1 + 0x1cc);
lVar3 = param_3[1];
local_a8._4_4_ = (undefined4)((ulonglong)local_a8 >> 0x20);
local_a8 = (int *)CONCAT44(local_a8._4_4_,iVar11);
if (lVar3 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
FUN_1401b5c60(param_3,lVar3 + 1,0xffffffffffffffff);
if (param_3[1] <= lVar3) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if ((ulonglong)param_3[2] < 0x65) {
plVar9 = param_3 + (lVar3 + 2) * 2;
}
else {
plVar9 = (longlong *)(lVar3 * 0x10 + *param_3);
}
*plVar9 = (longlong)local_a8;
plVar9[1] = (longlong)iVar7 + (longlong)puVar5;
*(int *)(param_1 + 0x1cc) = *(int *)(param_1 + 0x1cc) + iVar11;
*(int *)(param_1 + 0x1c8) = *(int *)(param_1 + 0x1c8) + iVar11;
if (*(int *)(param_1 + 0x1cc) == *(int *)(lVar2 + 0x30)) {
*(int *)(param_1 + 0x1d0) = *(int *)(param_1 + 0x1d0) + 1;
*(undefined4 *)(param_1 + 0x1cc) = 0;
}
iVar11 = *(int *)(param_1 + 0x1c8);
}
FUN_1401b62c0(param_1);
FUN_14016d300(local_98,L"Unexpected at PacketQueue Pop!");
/* WARNING: Subroutine does not return */
_CxxThrowException(local_98,(ThrowInfo *)&DAT_1403417f8);
}
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}